<?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>228057</bug_id>
          
          <creation_ts>2021-07-18 06:18:48 -0700</creation_ts>
          <short_desc>Add ARM64 EON opcode and select it in AIR</short_desc>
          <delta_ts>2021-08-05 13:36:58 -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>
          
          <blocked>228776</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yijia Huang">yijia_huang</reporter>
          <assigned_to name="Yijia Huang">yijia_huang</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777750</commentid>
    <comment_count>0</comment_count>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-18 06:18:48 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777751</commentid>
    <comment_count>1</comment_count>
      <attachid>433749</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-18 06:23:10 -0700</bug_when>
    <thetext>Created attachment 433749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777789</commentid>
    <comment_count>2</comment_count>
      <attachid>433762</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-18 15:47:34 -0700</bug_when>
    <thetext>Created attachment 433762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778291</commentid>
    <comment_count>3</comment_count>
      <attachid>433762</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-20 15:11:36 -0700</bug_when>
    <thetext>Comment on attachment 433762
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:53
&gt; +        // Old optimized AIR
&gt; +        Lshift64 %x1, amount, %x1, @4
&gt; +        Not      %x1,    %x1,      @5
&gt; +        Xor      %x0,    %x1, %x0, @6
&gt; +        Ret      %x0,              @7
&gt; +
&gt; +        // New optimized AIR
&gt; +        XorNotLeftShift %x0, %x1, $63, %x0, @6

Nice

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:829
&gt; +    Air::Opcode lowerB3toAirInOpcode(B3::Opcode b3Opcode, 

I feel like we need a much more specific name here. The current one makes is not suggestive of what it&apos;s doing.

maybe &quot;opcodeBasedOnShiftKind&quot;? or something similar

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:3144
&gt; +            auto tryAppendEON = [&amp;] (Value* left, Value* right) -&gt; bool {

this looks good 👍

&gt; Source/JavaScriptCore/b3/air/AirOpcode.opcodes:884
&gt; +arm64: XorNotLeftShift64 U:G:64, U:G:64, U:G:64, D:G:64
&gt; +    Tmp, Tmp, Imm, Tmp
&gt; +
&gt; +arm64: XorNotRightShift64 U:G:64, U:G:64, U:G:64, D:G:64
&gt; +    Tmp, Tmp, Imm, Tmp
&gt; +
&gt; +arm64: XorNotUnsignedRightShift64 U:G:64, U:G:64, U:G:64, D:G:64
&gt; +    Tmp, Tmp, Imm, Tmp

Why is the use of the Imm 64 bit instead of 32? I think 32 is more correct and consistent w/ how we do it elsewhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778294</commentid>
    <comment_count>4</comment_count>
      <attachid>433904</attachid>
    <who name="Yijia Huang">yijia_huang</who>
    <bug_when>2021-07-20 15:24:25 -0700</bug_when>
    <thetext>Created attachment 433904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778300</commentid>
    <comment_count>5</comment_count>
      <attachid>433904</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-07-20 16:05:15 -0700</bug_when>
    <thetext>Comment on attachment 433904
Patch

Nice. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778303</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-20 16:20:40 -0700</bug_when>
    <thetext>Committed r280111 (239828@main): &lt;https://commits.webkit.org/239828@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 433904.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778304</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-20 16:21:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/80864899&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433749</attachid>
            <date>2021-07-18 06:23:10 -0700</date>
            <delta_ts>2021-07-18 15:47:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228057-20210718082309.patch</filename>
            <type>text/plain</type>
            <size>35185</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi4xZjMxZmI1YzY3OTU2OTMz
ODFjOWQ0MjM1ZjYxZmYxM2NhZWE2OWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAyMS0wNy0xOCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIEFSTTY0IEVPTiBvcGNvZGUgYW5kIHNlbGVjdCBpdCBpbiBBSVIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODA1Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6eG9yTm90MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JO
b3Q2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdExlZnRTaGlm
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yTm90UmlnaHRTaGlm
dDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9yTm90VW5zaWduZWRS
aWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JOb3RM
ZWZ0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdFJp
Z2h0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdFVu
c2lnbmVkUmlnaHRTaGlmdDY0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvdGVzdG1hc20uY3BwOgor
ICAgICAgICAoSlNDOjp0ZXN0WG9yTm90MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTm90NjQp
OgorICAgICAgICAoSlNDOjp0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDMyKToKKyAgICAgICAgKEpT
Qzo6dGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0MzIpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTm90
V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvck5vdFdpdGhM
ZWZ0U2hpZnQ2NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KToK
KyAgICAgICAgKEpTQzo6dGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAg
ICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXM6CisgICAgICAgICogYjMvdGVzdGIzLmg6CisgICAgICAgICogYjMvdGVzdGIzXzIuY3Bw
OgorICAgICAgICAodGVzdFhvck5vdDMyKToKKyAgICAgICAgKHRlc3RYb3JOb3Q2NCk6CisgICAg
ICAgICh0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JOb3RXaXRo
UmlnaHRTaGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0
MzIpOgorICAgICAgICAodGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0
WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICh0ZXN0WG9yTm90V2l0aFVuc2lnbmVk
UmlnaHRTaGlmdDY0KToKKyAgICAgICAgKGFkZEJpdFRlc3RzKToKKwogMjAyMS0wNy0xNiAgWWlq
aWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEV4dGVuZFR5
cGUgdG8gQWlyOjpBcmcgSW5kZXggdG8gZnVsbHkgdXRpbGl6ZSBhZGRyZXNzIGNvbXB1dGF0aW9u
IGluIG1lbW9yeSBpbnN0cnVjdGlvbiBmb3IgQVJNNjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggODhmMzQwYjQ4
M2U5NGYwZjZkYzQyNWY0NDhhNDk2YTVlZTEwZmY2Mi4uZmUzMGQ5Yzg0ZDM1MjdlZWIxNmZjZDA2
ZTExNWZjNjhkNjkwOTBmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTUwOSw2ICs1MDksNDYgQEAgcHVibGlj
OgogICAgICAgICBtX2Fzc2VtYmxlci5vcm48NjQ+KGRlc3QsIHNyYywgbWFzayk7CiAgICAgfQog
CisgICAgdm9pZCB4b3JOb3QzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBtYXNrLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb248MzI+KGRlc3QsIHNy
YywgbWFzayk7CisgICAgfQorCisgICAgdm9pZCB4b3JOb3Q2NChSZWdpc3RlcklEIHNyYywgUmVn
aXN0ZXJJRCBtYXNrLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5lb248NjQ+KGRlc3QsIHNyYywgbWFzayk7CisgICAgfQorCisgICAgdm9pZCB4b3JOb3RMZWZ0
U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwg
UmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9uPDMyPihkLCBuLCBt
LCBBc3NlbWJsZXI6OkxTTCwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgeG9y
Tm90UmlnaHRTaGlmdDMyKFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIg
YW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb248MzI+
KGQsIG4sIG0sIEFzc2VtYmxlcjo6QVNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCB4b3JOb3RVbnNpZ25lZFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQg
bSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZW9uPDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkxTUiwgYW1vdW50Lm1fdmFsdWUp
OworICAgIH0KKworICAgIHZvaWQgeG9yTm90TGVmdFNoaWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdp
c3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmVvbjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5t
X3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvck5vdFJpZ2h0U2hpZnQ2NChSZWdpc3RlcklE
IG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZEltbTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAg
IHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9uPDY0PihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwg
YW1vdW50Lm1fdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgeG9yTm90VW5zaWduZWRSaWdodFNo
aWZ0NjQoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJl
Z2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvbjw2ND4oZCwgbiwgbSwg
QXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKICAgICB2b2lkIGV4dHJh
Y3RJbnNlcnRCaXRmaWVsZEF0TG93RW5kMzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBs
c2IsIFRydXN0ZWRJbW0zMiB3aWR0aCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuYmZ4aWw8MzI+KGRlc3QsIHNyYywgbHNiLm1fdmFsdWUsIHdpZHRoLm1fdmFs
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFz
bS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAppbmRl
eCA3MWNkMjM5OThjZTdhMjQxMjAxOTZkMGYwNDU2MjQ2ZDE0ZDkxOGE3Li5mMjJiZmZjZTE1NTRi
MDJjMjI2YzIxNDkyYWIwNjdiYWIzOGM0MGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL3Rlc3RtYXNtLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL3Rlc3RtYXNtLmNwcApAQCAtMjAyMCw2ICsyMDIwLDE5OCBAQCB2b2lkIHRlc3RT
dWJXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQogICAgICAgICB9CiAgICAgfQogfQorCit2b2lk
IHRlc3RYb3JOb3QzMigpCit7CisgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbXSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAg
ICBqaXQueG9yTm90MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBlbWl0RnVuY3Rpb25FcGls
b2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBmb3IgKGF1dG8g
bWFzayA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBpbnQzMl90IHNyYyA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tlPGlu
dDMyX3Q+KHRlc3QsIHNyYywgbWFzayksIChzcmMgXiB+bWFzaykpOworICAgICAgICBDSEVDS19F
UShpbnZva2U8aW50MzJfdD4odGVzdCwgMFUsIG1hc2spLCB+bWFzayk7CisgICAgfQorfQorCit2
b2lkIHRlc3RYb3JOb3Q2NCgpCit7CisgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbXSAoQ0NhbGxI
ZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAg
ICAgICBqaXQueG9yTm90NjQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICBlbWl0RnVuY3Rpb25F
cGlsb2d1ZShqaXQpOworICAgICAgICBqaXQucmV0KCk7CisgICAgfSk7CisKKyAgICBmb3IgKGF1
dG8gbWFzayA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBpbnQ2NF90IHNyYyA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDY0X3Q+OjptYXgoKTsKKyAgICAgICAgQ0hFQ0tfRVEoaW52b2tl
PGludDY0X3Q+KHRlc3QsIHNyYywgbWFzayksIChzcmMgXiB+bWFzaykpOworICAgICAgICBDSEVD
S19FUShpbnZva2U8aW50NjRfdD4odGVzdCwgMFVMTCwgbWFzayksIH5tYXNrKTsKKyAgICB9Cit9
CisKK3ZvaWQgdGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMy
X3Q+IGFtb3VudHMgPSB7IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1
dG8gdGVzdCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAg
IGppdC54b3JOb3RMZWZ0U2hpZnQzMihHUFJJbmZvOjphcmd1bWVudEdQUjAsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAg
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5y
ZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGludDMyX3QgbGhz
ID0gaW52b2tlPGludDMyX3Q+KHRlc3QsIG4sIG0pOworICAgICAgICAgICAgICAgIGludDMyX3Qg
cmhzID0gbiBeIH4obSA8PCBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywg
cmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9y
Tm90V2l0aFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7
IDAsIDE3LCAzMSB9OworICAgIGZvciAoYXV0byBuIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAg
ICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1
dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGF1dG8gdGVzdCA9IGNvbXBp
bGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAgICAgICAgIGppdC54b3JOb3RSaWdo
dFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rp
b25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90IGxocyA9IGludm9rZTxpbnQz
Ml90Pih0ZXN0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IHJocyA9IG4gXiB+KG0g
Pj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25l
ZFJpZ2h0U2hpZnQzMigpCit7CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAwLCAx
NywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBm
b3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFt
b3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9
XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTm90VW5zaWduZWRS
aWdodFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVu
Y3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBsaHMgPSBpbnZva2U8
dWludDMyX3Q+KHRlc3QsIG4sIG0pOworICAgICAgICAgICAgICAgIHVpbnQzMl90IHJocyA9IHN0
YXRpY19jYXN0PHVpbnQzMl90PihuKSBeIH4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG0pID4+IGFt
b3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0NjQo
KQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBm
b3IgKGF1dG8gbiA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGlu
dDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMp
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJz
JiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsK
KworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTm90TGVmdFNoaWZ0NjQoR1BSSW5mbzo6YXJn
dW1lbnRHUFIwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BS
MSwgCisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihh
bW91bnQpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKKworICAgICAgICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAg
ICAgICAgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgICAgICBpbnQ2NF90IGxocyA9IGludm9rZTxpbnQ2NF90Pih0ZXN0LCBuLCBtKTsKKyAg
ICAgICAgICAgICAgICBpbnQ2NF90IHJocyA9IG4gXiB+KG0gPDwgYW1vdW50KTsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgdGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rv
cjxpbnQzMl90PiBhbW91bnRzID0geyAwLCAzNCwgNjMgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGlu
dDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDY0T3BlcmFuZHMoKSkg
eworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAg
ICAgICAgICBqaXQueG9yTm90UmlnaHRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50
NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4odGVzdCwgbiwgbSk7CisgICAgICAgICAgICAgICAg
aW50NjRfdCByaHMgPSBuIF4gfihtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tf
RVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIFZlY3Rvcjx1aW50
MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAg
YXV0byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaml0Lnhvck5vdFVuc2lnbmVkUmlnaHRTaGlmdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwg
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAg
ICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
dWludDY0X3QgbGhzID0gaW52b2tlPHVpbnQ2NF90Pih0ZXN0LCBuLCBtKTsKKyAgICAgICAgICAg
ICAgICB1aW50NjRfdCByaHMgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4obikgXiB+KHN0YXRpY19j
YXN0PHVpbnQ2NF90PihtKSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxo
cywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICNlbmRpZgogCiAj
aWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQpAQCAtNDI3NCw2ICs0NDY2
LDE1IEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikgV1RGX0lHTk9SRVNfVEhSRUFEX1NB
RkVUWV9BTkFMWVNJUwogICAgIFJVTih0ZXN0U3ViV2l0aExlZnRTaGlmdDY0KCkpOwogICAgIFJV
Tih0ZXN0U3ViV2l0aFJpZ2h0U2hpZnQ2NCgpKTsKICAgICBSVU4odGVzdFN1YldpdGhVbnNpZ25l
ZFJpZ2h0U2hpZnQ2NCgpKTsKKworICAgIFJVTih0ZXN0WG9yTm90MzIoKSk7CisgICAgUlVOKHRl
c3RYb3JOb3Q2NCgpKTsKKyAgICBSVU4odGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMigpKTsKKyAg
ICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RX
aXRoVW5zaWduZWRSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoTGVmdFNo
aWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KCkpOworICAgIFJV
Tih0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkpOwogI2VuZGlmCiAKICNpZiBD
UFUoQVJNNjRFKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAppbmRl
eCA2M2E2ZmIxMmZhNTIyY2RhZGFkYmJhOTlmZjYyOWQ3ODc4YTA4NDQ4Li5lNTIxMDU5MjQ2MDU0
ZjY4NDBjODFlODdmODI3NWJjYzljYjY5ZDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlclRvQWlyLmNwcApAQCAtODI2LDYgKzgyNiwyMyBAQCBwcml2YXRlOgogICAgICAgICBh
cHBlbmQob3Bjb2RlLCByZXN1bHQpOwogICAgIH0KIAorICAgIEFpcjo6T3Bjb2RlIGxvd2VyQjN0
b0FpckluT3Bjb2RlKEIzOjpPcGNvZGUgYjNPcGNvZGUsIAorICAgICAgICBBaXI6Ok9wY29kZSBz
aGwzMiwgQWlyOjpPcGNvZGUgc2hsNjQsIAorICAgICAgICBBaXI6Ok9wY29kZSBzc2hyMzIsIEFp
cjo6T3Bjb2RlIHNzaHI2NCwgCisgICAgICAgIEFpcjo6T3Bjb2RlIHpzaHIzMiwgQWlyOjpPcGNv
ZGUgenNocjY0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChiM09wY29kZSkgeworICAgICAgICBj
YXNlIFNobDoKKyAgICAgICAgICAgIHJldHVybiBvcGNvZGVGb3JUeXBlKHNobDMyLCBzaGw2NCwg
bV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgY2FzZSBTU2hyOgorICAgICAgICAgICAgcmV0dXJu
IG9wY29kZUZvclR5cGUoc3NocjMyLCBzc2hyNjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAg
IGNhc2UgWlNocjoKKyAgICAgICAgICAgIHJldHVybiBvcGNvZGVGb3JUeXBlKHpzaHIzMiwgenNo
cjY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIEFpcjo6T29wczsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIENhbGwgdGhpcyBtZXRo
b2Qgd2hlbiBkb2luZyB0d28tb3BlcmFuZCBsb3dlcmluZyBvZiBhIGNvbW11dGF0aXZlIG9wZXJh
dGlvbi4gWW91IGhhdmUgYSBjaG9pY2Ugb2YKICAgICAvLyB3aGljaCBpbmNvbWluZyBWYWx1ZSBp
cyBtb3ZlZCBpbnRvIHRoZSByZXN1bHQuIFRoaXMgd2lsbCBzZWxlY3Qgd2hpY2ggb25lIGlzIGxp
a2VseSB0byBiZSBtb3N0CiAgICAgLy8gcHJvZml0YWJsZSB0byB1c2UgYXMgdGhlIHJlc3VsdC4g
RG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGNhbiBoYXZlIGJpZyBwZXJmb3JtYW5jZSBjb25zZXF1ZW5j
ZXMgaW4gdGlnaHQKQEAgLTI2NDksMjAgKzI2NjYsMTAgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgLy8gYWRkLXdpdGgtc2hpZnQgUGF0dGVybjogbiArIChtIFNoaWZ0VHlwZSBhbW91bnQpCiAg
ICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEFkZFdpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgYXV0byB0cnlPcGNvZGUg
PSBbJl0gKEIzOjpPcGNvZGUgb3Bjb2RlKSAtPiBBaXI6Ok9wY29kZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2hsOgot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeU9wY29kZUZvclR5cGUoQWRkTGVmdFNo
aWZ0MzIsIEFkZExlZnRTaGlmdDY0LCBtX3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIFNTaHI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5T3Bjb2Rl
Rm9yVHlwZShBZGRSaWdodFNoaWZ0MzIsIEFkZFJpZ2h0U2hpZnQ2NCwgbV92YWx1ZS0+dHlwZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBaU2hyOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRyeU9wY29kZUZvclR5cGUoQWRkVW5zaWduZWRSaWdodFNoaWZ0MzIsIEFkZFVu
c2lnbmVkUmlnaHRTaGlmdDY0LCBtX3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGUocmlnaHQtPm9wY29kZSgpKTsKKyAgICAg
ICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBsb3dlckIzdG9BaXJJbk9wY29kZShyaWdo
dC0+b3Bjb2RlKCksIAorICAgICAgICAgICAgICAgICAgICBBZGRMZWZ0U2hpZnQzMiwgQWRkTGVm
dFNoaWZ0NjQsIAorICAgICAgICAgICAgICAgICAgICBBZGRSaWdodFNoaWZ0MzIsIEFkZFJpZ2h0
U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIEFkZFVuc2lnbmVkUmlnaHRTaGlmdDMyLCBB
ZGRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9y
bShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoIWNhbkJl
SW50ZXJuYWwocmlnaHQpIHx8ICFpbW0ocmlnaHQtPmNoaWxkKDEpKSB8fCByaWdodC0+Y2hpbGQo
MSktPmFzSW50KCkgPCAwKQpAQCAtMjczNCwyMCArMjc0MSwxMCBAQCBwcml2YXRlOgogCiAgICAg
ICAgICAgICAvLyBzdWItd2l0aC1zaGlmdCBQYXR0ZXJuOiBuIC0gKG0gU2hpZnRUeXBlIGFtb3Vu
dCkKICAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kU3ViQW5kU2hpZnQgPSBbJl0gKCkgLT4gYm9v
bCB7Ci0gICAgICAgICAgICAgICAgYXV0byB0cnlPcGNvZGUgPSBbJl0gKEIzOjpPcGNvZGUgb3Bj
b2RlKSAtPiBBaXI6Ok9wY29kZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU2hsOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRyeU9wY29kZUZvclR5cGUoU3ViTGVmdFNoaWZ0MzIsIFN1YkxlZnRTaGlmdDY0
LCBtX3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBjYXNlIFNTaHI6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5T3Bjb2RlRm9yVHlwZShTdWJSaWdodFNoaWZ0
MzIsIFN1YlJpZ2h0U2hpZnQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBaU2hyOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeU9wY29kZUZv
clR5cGUoU3ViVW5zaWduZWRSaWdodFNoaWZ0MzIsIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDY0LCBt
X3ZhbHVlLT50eXBlKCkpOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUg
PSB0cnlPcGNvZGUocmlnaHQtPm9wY29kZSgpKTsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUgPSBsb3dlckIzdG9BaXJJbk9wY29kZShyaWdodC0+b3Bjb2RlKCksIAorICAgICAg
ICAgICAgICAgICAgICBTdWJMZWZ0U2hpZnQzMiwgU3ViTGVmdFNoaWZ0NjQsIAorICAgICAgICAg
ICAgICAgICAgICBTdWJSaWdodFNoaWZ0MzIsIFN1YlJpZ2h0U2hpZnQ2NCwgCisgICAgICAgICAg
ICAgICAgICAgIFN1YlVuc2lnbmVkUmlnaHRTaGlmdDMyLCBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCk7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBB
cmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoIWNhbkJlSW50ZXJuYWwocmlnaHQpIHx8ICFp
bW0ocmlnaHQtPmNoaWxkKDEpKSB8fCByaWdodC0+Y2hpbGQoMSktPmFzSW50KCkgPCAwKQpAQCAt
MzEyMywyNyArMzEyMCw3MiBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBC
aXRYb3I6IHsKKyAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gbV92YWx1ZS0+Y2hpbGQoMCk7Cisg
ICAgICAgICAgICBWYWx1ZSogcmlnaHQgPSBtX3ZhbHVlLT5jaGlsZCgxKTsKKwogICAgICAgICAg
ICAgLy8gRklYTUU6IElmIGNhbkJlSW50ZXJuYWwoY2hpbGQpLCB3ZSBzaG91bGQgZ2VuZXJhdGUg
dGhpcyB1c2luZyB0aGUgY29tcGFyaXNvbiBwYXRoLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjM2NwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMSktPmlzSW50KC0xKSkgewotICAgICAgICAgICAg
ICAgIGFwcGVuZFVuT3A8Tm90MzIsIE5vdDY0PihtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICBpZiAocmlnaHQtPmlzSW50KC0xKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZFVuT3A8
Tm90MzIsIE5vdDY0PihsZWZ0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRoaXMgcGF0dGVybiBpcyBzdXBlciB1
c2VmdWwgb24gYm90aCB4ODYgYW5kIEFSTTY0LCBzaW5jZSB0aGUgaW52ZXJzaW9uIG9mIHRoZSBD
QVMgcmVzdWx0CiAgICAgICAgICAgICAvLyBjYW4gYmUgZG9uZSB3aXRoIHplcm8gY29zdCBvbiB4
ODYgKGp1c3QgZmxpcCB0aGUgc2V0IGZyb20gRSB0byBORSkgYW5kIGl0J3MgYSBwcm9ncmVzc2lv
bgogICAgICAgICAgICAgLy8gb24gQVJNNjQgKHNpbmNlIFNUWCByZXR1cm5zIDAgb24gc3VjY2Vz
cywgc28gb3JkaW5hcmlseSB3ZSBoYXZlIHRvIGZsaXAgaXQpLgotICAgICAgICAgICAgaWYgKG1f
dmFsdWUtPmNoaWxkKDEpLT5pc0ludCgxKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBBdG9taWNXZWFrQ0FTCi0gICAgICAgICAgICAgICAgJiYgY2Fu
QmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKLSAgICAgICAgICAgICAgICBjb21taXRJ
bnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kQ0FTKG1f
dmFsdWUtPmNoaWxkKDApLCB0cnVlKTsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aXNJbnQoMSkg
JiYgbGVmdC0+b3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUyAmJiBjYW5CZUludGVybmFsKGxlZnQp
KSB7CisgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobGVmdCk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kQ0FTKGxlZnQsIHRydWUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXBwZW5kQmluT3A8WG9yMzIsIFhv
cjY0LCBYb3JEb3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2ZT4oCi0gICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKworICAgICAgICAgICAgLy8g
RU9OIFBhdHRlcm46IGQgPSBuIF4gKG0gXiAtMSkKKyAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5k
RU9OID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpICE9IEJpdFhvcikKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBsZWZ0Owor
ICAgICAgICAgICAgICAgIFZhbHVlKiBtaW51c09uZSA9IHJpZ2h0LT5jaGlsZCgxKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9sb2NrZWQuY29udGFpbnMoblZhbHVlKSB8fCAhbWludXNPbmUtPmhh
c0ludCgpIHx8ICFtaW51c09uZS0+aXNJbnQoLTEpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAvLyBlb24td2l0aC1zaGlmdCBQYXR0ZXJuOiBk
ID0gbiBeICgobSBTaGlmdFR5cGUgYW1vdW50KSBeIC0xKQorICAgICAgICAgICAgICAgIGF1dG8g
dHJ5QXBwZW5kRU9OV2l0aFNoaWZ0ID0gWyZdIChWYWx1ZSogc2hpZnRWYWx1ZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IGxvd2VyQjN0b0Fpcklu
T3Bjb2RlKHNoaWZ0VmFsdWUtPm9wY29kZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIFhv
ck5vdExlZnRTaGlmdDMyLCBYb3JOb3RMZWZ0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBYb3JOb3RSaWdodFNoaWZ0MzIsIFhvck5vdFJpZ2h0U2hpZnQ2NCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBYb3JOb3RVbnNpZ25lZFJpZ2h0U2hpZnQzMiwgWG9yTm90VW5zaWduZWRS
aWdodFNoaWZ0NjQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG1W
YWx1ZSA9IHNoaWZ0VmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSog
YW1vdW50VmFsdWUgPSBzaGlmdFZhbHVlLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFjYW5CZUludGVybmFsKHNoaWZ0VmFsdWUpIHx8IG1fbG9ja2VkLmNvbnRhaW5zKG1WYWx1
ZSkgfHwgIWltbShhbW91bnRWYWx1ZSkgfHwgYW1vdW50VmFsdWUtPmFzSW50KCkgPCAwKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB1
aW50NjRfdCBhbW91bnQgPSBhbW91bnRWYWx1ZS0+YXNJbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT50eXBlKCkgPT0gSW50MzIgPyAzMiA6IDY0
OworICAgICAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID49IGRhdGFzaXplKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHRtcChuVmFsdWUpLCB0bXAobVZhbHVlKSwgaW1tKGFtb3VudFZhbHVlKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwoc2hpZnRWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kRU9OV2l0aFNoaWZ0KHJpZ2h0LT5jaGls
ZCgwKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAg
ICAgVmFsdWUqIG1WYWx1ZSA9IHJpZ2h0LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFhvck5vdDMyLCBYb3JOb3Q2NCwgbV92YWx1
ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJn
OjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkgfHwgbV9sb2NrZWQuY29udGFpbnMobVZhbHVlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHRtcChuVmFsdWUpLCB0bXAobVZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlm
ICh0cnlBcHBlbmRFT04obGVmdCwgcmlnaHQpIHx8IHRyeUFwcGVuZEVPTihyaWdodCwgbGVmdCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBhcHBlbmRCaW5PcDxYb3Iz
MiwgWG9yNjQsIFhvckRvdWJsZSwgWG9yRmxvYXQsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKaW5kZXggNTkxZGEzYTQ0
Zjg1ZTAwOTZkYTZkMjc4MDllYzk5MmI4YmUxNTVlYy4uY2VhNTFhMzg4YWNjOWIwOWY3YzhiYzUx
MTJkNWI1NTllYWU2ZjIxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCkBAIC04NTksNiArODU5LDMwIEBAIGFybTY0OiBPck5vdDMyIFU6Rzoz
MiwgVTpHOjMyLCBaRDpHOjMyCiBhcm02NDogT3JOb3Q2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0
CiAgICAgVG1wLCBUbXAsIFRtcAogCithcm02NDogWG9yTm90MzIgVTpHOjMyLCBVOkc6MzIsIFpE
Okc6MzIKKyAgICBUbXAsIFRtcCwgVG1wCisKK2FybTY0OiBYb3JOb3Q2NCBVOkc6NjQsIFU6Rzo2
NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCithcm02NDogWG9yTm90TGVmdFNoaWZ0MzIg
VTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAor
Cithcm02NDogWG9yTm90UmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6
MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvck5vdFVuc2lnbmVkUmlnaHRT
aGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1t
LCBUbXAKKworYXJtNjQ6IFhvck5vdExlZnRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQs
IEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yTm90UmlnaHRTaGlm
dDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRt
cAorCithcm02NDogWG9yTm90VW5zaWduZWRSaWdodFNoaWZ0NjQgVTpHOjY0LCBVOkc6NjQsIFU6
Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKIGFybTY0OiBFeHRyYWN0SW5z
ZXJ0Qml0ZmllbGRBdExvd0VuZDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFVaRDpHOjMyCiAg
ICAgVG1wLCBJbW0sIEltbSwgVG1wCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaAppbmRleCAz
YmUyY2FhMmUxY2I2OGE2YWE0YWNjOGQzMzQ0YjMwNWNjOTUwNzdjLi5jNzAzMmVjMDg0ZGRmZGQ5
MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5oCkBA
IC00MzksNiArNDM5LDE0IEBAIHZvaWQgdGVzdEJJQzMyKCk7CiB2b2lkIHRlc3RCSUM2NCgpOwog
dm9pZCB0ZXN0T3JOb3QzMigpOwogdm9pZCB0ZXN0T3JOb3Q2NCgpOwordm9pZCB0ZXN0WG9yTm90
MzIoKTsKK3ZvaWQgdGVzdFhvck5vdDY0KCk7Cit2b2lkIHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0
MzIoKTsKK3ZvaWQgdGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvck5v
dFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwordm9pZCB0ZXN0WG9yTm90V2l0aExlZnRTaGlm
dDY0KCk7Cit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KCk7Cit2b2lkIHRlc3RYb3JO
b3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKIHZvaWQgdGVzdEJpdGZpZWxkWmVyb0V4dGVu
ZDMyKCk7CiB2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2NCgpOwogdm9pZCB0ZXN0RXh0cmFj
dFJlZ2lzdGVyMzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjNfMi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzXzIuY3BwCmluZGV4IDc4
YzU5MmIwMjc2YTZjOTBiYjRlOWQzMDQzNzc5YzlhMGJiYTc5MDkuLjMyOTI1MzBiYTkzN2UxNWJi
YmE2YjdlNGViZDk0YTIxNGU3MDhiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjNfMi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18y
LmNwcApAQCAtNDQyNyw2ICs0NDI3LDM0MiBAQCB2b2lkIHRlc3RPck5vdDY0KCkKICAgICB9CiB9
CiAKK3ZvaWQgdGVzdFhvck5vdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0
QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGVzdCBQYXR0ZXJu
OiBkID0gbiBeIChtIF4gLTEpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQzMl90IG4sIGludDMy
X3QgbSkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNp
Y0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFs
dWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBt
aW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIC0xKTsKKworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG1WYWx1ZSwgbWludXNPbmVWYWx1ZSk7CisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2Rl
ID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImVvbiIpOworICAgICAgICByZXR1cm4gaW52
b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG4gOiBp
bnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkp
CisgICAgICAgICAgICBDSEVDSyh0ZXN0KG4udmFsdWUsIG0udmFsdWUpID09IChuLnZhbHVlIF4g
KG0udmFsdWUgXiAtMSkpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvck5vdDY0KCkKK3sKKyAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtIF4gLTEpCisgICAgYXV0byB0
ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSkgLT4gaW50NjRfdCB7CisgICAgICAgIFBy
b2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZh
bHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBtaW51c09uZVZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsK
KworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIG1WYWx1ZSwgbWludXNPbmVWYWx1ZSk7CisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9y
aWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGls
ZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1Vz
ZXNJbnN0cnVjdGlvbigqY29kZSwgImVvbiIpOworICAgICAgICByZXR1cm4gaW52b2tlPGludDY0
X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRzKCkpCisgICAgICAg
ICAgICBDSEVDSyh0ZXN0KG4udmFsdWUsIG0udmFsdWUpID09IChuLnZhbHVlIF4gKG0udmFsdWUg
XiAtMUxMKSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDMyKCkK
K3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsK
KworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAoKG0gPDwgYW1vdW50KSBeIC0xKQorICAg
IGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAt
PiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
IAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3Vu
dCk7CisgICAgICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBh
bW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgbWludXNPbmVWYWx1ZSk7
CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9yVmFsdWUpKTsKKworICAgICAgICBh
dXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgewor
ICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9uLiosLiosLiosLipsc2wgIyIpOwor
ICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAg
ICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7
CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50MzJf
dCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50MzJfdCBtID0gbU9wZXJh
bmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBu
IF4gKChtIDw8IGFtb3VudCkgXiAtMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlND
OjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAg
IFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3Qg
UGF0dGVybjogZCA9IG4gXiAoKG0gPj4gYW1vdW50KSBeIC0xKQorICAgIGF1dG8gdGVzdCA9IFsm
XSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisgICAgICAgIFZh
bHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOwor
ICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIG1pbnVzT25lVmFsdWUpOworCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3Is
IE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvbi4qLC4qLC4qLC4qYXNyICMiKTsKKyAgICAgICAgICAgIHJl
Z2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAg
ICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8g
YW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDMyX3QgbiA9IG5PcGVyYW5k
LnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOworICAg
ICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeICgobSA+PiBhbW91
bnQpIF4gLTEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0
ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rv
cjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBUZXN0IFBhdHRl
cm46IGQgPSBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkKKyAgICBhdXRvIHRlc3QgPSBbJl0gKGlu
dDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gdWludDMyX3QgeworICAgICAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKyAgICAgICAgVmFsdWUq
IG1pbnVzT25lVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmln
aW4oKSwgLTEpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAg
ICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9y
LCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgbWludXNPbmVWYWx1ZSk7CisKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3Jp
Z2luKCksIG5WYWx1ZSwgeG9yVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxl
UHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpz
dHJpbmcgcmVnZXgoIi4qZW9uLiosLiosLiosLipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXgg
Kz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJ
bnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBm
b3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1v
dW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVpbnQzMl90IG4gPSBuT3BlcmFuZC52
YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKChtID4+IGFtb3Vu
dCkgXiAtMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRl
c3RYb3JOb3RXaXRoTGVmdFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+
IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBe
ICgobSA8PCBhbW91bnQpIF4gLTEpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGlu
dDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAg
ICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1ZSogbVZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsKKyAgICAg
ICAgVmFsdWUqIG1pbnVzT25lVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgLTEpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVl
KTsKKyAgICAgICAgVmFsdWUqIHhvclZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRYb3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCBtaW51c09uZVZhbHVlKTsKKworICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
WG9yLCBPcmlnaW4oKSwgblZhbHVlLCB4b3JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyByZWdleCgiLiplb24uKiwuKiwuKiwuKmxzbCAjIik7CisgICAgICAgICAg
ICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG4gPSBuT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAoKG0gPDwg
YW1vdW50KSBeIC0xKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6
OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPGlu
dDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBk
ID0gbiBeICgobSA+PiBhbW91bnQpIF4gLTEpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90
IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3QgeworICAgICAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBWYWx1
ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KTsK
KyAgICAgICAgVmFsdWUqIG1pbnVzT25lVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91
bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgbWludXNPbmVWYWx1ZSk7CisK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9yVmFsdWUpKTsKKworICAgICAgICBhdXRv
IGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAg
ICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9uLiosLiosLiosLiphc3IgIyIpOworICAg
ICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAg
ICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7Cisg
ICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAg
IGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBu
ID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQu
dmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4g
KChtID4+IGFtb3VudCkgXiAtMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKQoreworICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8v
IFRlc3QgUGF0dGVybjogZCA9IG4gXiAoKG0gPj4gYW1vdW50KSBeIC0xKQorICAgIGF1dG8gdGVz
dCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiB1aW50NjRf
dCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0g
cHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIFZh
bHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBhbW91bnQpOworICAgICAgICBWYWx1ZSogbWludXNPbmVWYWx1ZSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSk7CisKKyAgICAgICAgVmFs
dWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFpTaHIsIE9yaWdp
bigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHhvclZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCBt
aW51c09uZVZhbHVlKTsKKworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisg
ICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCB4b3JWYWx1ZSkp
OworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAo
aXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb24uKiwuKiwu
KiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQp
ICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5j
X3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPHVpbnQ2NF90
PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIHVp
bnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0
KG4sIG0sIGFtb3VudCksIG4gXiAoKG0gPj4gYW1vdW50KSBeIC0xKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMyKCkK
IHsKICAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKQEAgLTYw
MjUsNiArNjM2MSwxNCBAQCB2b2lkIGFkZEJpdFRlc3RzKGNvbnN0IGNoYXIqIGZpbHRlciwgRGVx
dWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNrcykKICAgICBSVU4odGVzdEJJQzY0
KCkpOwogICAgIFJVTih0ZXN0T3JOb3QzMigpKTsKICAgICBSVU4odGVzdE9yTm90NjQoKSk7Cisg
ICAgUlVOKHRlc3RYb3JOb3QzMigpKTsKKyAgICBSVU4odGVzdFhvck5vdDY0KCkpOworICAgIFJV
Tih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aFJp
Z2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQz
MigpKTsKKyAgICBSVU4odGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQ2NCgpKTsKKyAgICBSVU4odGVz
dFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWdu
ZWRSaWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RCaXRmaWVsZFplcm9FeHRlbmQzMigpKTsK
ICAgICBSVU4odGVzdEJpdGZpZWxkWmVyb0V4dGVuZDY0KCkpOwogICAgIFJVTih0ZXN0RXh0cmFj
dFJlZ2lzdGVyMzIoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433762</attachid>
            <date>2021-07-18 15:47:34 -0700</date>
            <delta_ts>2021-07-20 15:24:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228057-20210718174733.patch</filename>
            <type>text/plain</type>
            <size>36785</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi40YjJmYzU1YjZkZDU4YzY0
NDY5NWNkMmY5NzZkZTgzZDRiYmM2Y2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MCBAQAorMjAyMS0wNy0xOCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIEFSTTY0IEVPTiBvcGNvZGUgYW5kIHNlbGVjdCBpdCBpbiBBSVIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODA1Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVPTiBSZCBS
biBSbSA8c2hpZnQ+ICNhbW91bnQKKworICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2ZSBPUiBOT1Qg
KHNoaWZ0ZWQgcmVnaXN0ZXIpIHBlcmZvcm1zIGEgYml0d2lzZSBFeGNsdXNpdmUgT1IgTk9UIAor
ICAgICAgICBvZiBhIHJlZ2lzdGVyIHZhbHVlIFJuIGFuZCBhbiBvcHRpb25hbGx5LXNoaWZ0ZWQg
cmVnaXN0ZXIgdmFsdWUgUm0sIGFuZCB3cml0ZXMgdGhlIAorICAgICAgICByZXN1bHQgdG8gdGhl
IGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiBUaGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgY2FuIHV0aWxp
emUgdGhpcyB0byAKKyAgICAgICAgbG93ZXJpbmcgY2VydGFpbiBwYXR0ZXJucyBpbiBCMyBJUiBi
ZWZvcmUgZnVydGhlciBBaXIgb3B0aW1pemF0aW9uLgorCisgICAgICAgIFRoZSBlcXVpdmFsZW50
IHBhdHRlcm4gb2YgRU9OIFJkIFJuIFJtIGlzIGQgPSBuIF4gKG0gXiAtMSkKKworICAgICAgICBH
aXZlbiBCMyBJUjoKKyAgICAgICAgSW50IEAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJ
bnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMiA9IC0xCisgICAgICAgIElu
dCBAMyA9IEJpdFhvcihAMSwgQDIpCisgICAgICAgIEludCBANCA9IEJpdFhvcihAMCwgYkAzKQor
ICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorCisgICAgICAgIC8vIE9sZCBv
cHRpbWl6ZWQgQUlSCisgICAgICAgIE5vdCAgICV4MSwgJXgxLCAgICAgIEAzCisgICAgICAgIFhv
ciAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJldCAgICV4MCwgICAgICAgICAgIEA1CisK
KyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAgWG9yTm90ICV4MCwgJXgxLCAl
eDAsIEA0CisgICAgICAgIFJldCAgICAleDAsICAgICAgICAgICBANQorCisgICAgICAgIFRoZSBl
cXVpdmFsZW50IHBhdHRlcm4gb2YgRU9OLXdpdGgtc2hpZnQgaXMgZCA9IG4gXiAoKG0gU2hpZnRU
eXBlIGFtb3VudCkgXiAtMSkKKworICAgICAgICBHaXZlbiBCMyBJUjoKKyAgICAgICAgSW50IEAw
ID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisg
ICAgICAgIEludCBAMiA9IGFtb3VudAorICAgICAgICBJbnQgQDMgPSAtMQorICAgICAgICBJbnQg
QDQgPSBTaGwoQDEsIEAyKQorICAgICAgICBJbnQgQDUgPSBCaXRYb3IoQDQsIEAzKQorICAgICAg
ICBJbnQgQDYgPSBCaXRYb3IoQDAsIEA1KQorICAgICAgICBWb2lkIGJANyA9IFJldHVybihiQDYs
IFRlcm1pbmFsKQorCisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlm
dDY0ICV4MSwgYW1vdW50LCAleDEsIEA0CisgICAgICAgIE5vdCAgICAgICV4MSwgICAgJXgxLCAg
ICAgIEA1CisgICAgICAgIFhvciAgICAgICV4MCwgICAgJXgxLCAleDAsIEA2CisgICAgICAgIFJl
dCAgICAgICV4MCwgICAgICAgICAgICAgIEA3CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBB
SVIKKyAgICAgICAgWG9yTm90TGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDYKKyAgICAg
ICAgUmV0ICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgQDcKKworICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6Onhvck5vdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
eG9yTm90NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JOb3RMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdFJpZ2h0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdFVuc2ln
bmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9y
Tm90TGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JO
b3RSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JO
b3RVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNw
cDoKKyAgICAgICAgKEpTQzo6dGVzdFhvck5vdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvck5v
dDY0KToKKyAgICAgICAgKEpTQzo6dGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMik6CisgICAgICAg
IChKU0M6OnRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhv
ck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RYb3JOb3RX
aXRoTGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2
NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQpOgor
ICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18y
LmNwcDoKKyAgICAgICAgKHRlc3RYb3JOb3QzMik6CisgICAgICAgICh0ZXN0WG9yTm90NjQpOgor
ICAgICAgICAodGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yTm90
V2l0aFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRT
aGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0NjQpOgorICAgICAgICAo
dGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChhZGRCaXRUZXN0cyk6CisKIDIwMjEtMDctMTYg
IFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBFeHRl
bmRUeXBlIHRvIEFpcjo6QXJnIEluZGV4IHRvIGZ1bGx5IHV0aWxpemUgYWRkcmVzcyBjb21wdXRh
dGlvbiBpbiBtZW1vcnkgaW5zdHJ1Y3Rpb24gZm9yIEFSTTY0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IDg4ZjM0
MGI0ODNlOTRmMGY2ZGM0MjVmNDQ4YTQ5NmE1ZWUxMGZmNjIuLmZlMzBkOWM4NGQzNTI3ZWViMTZm
Y2QwNmUxMTVmYzY4ZDY5MDkwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC01MDksNiArNTA5LDQ2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIub3JuPDY0PihkZXN0LCBzcmMsIG1hc2spOwogICAg
IH0KIAorICAgIHZvaWQgeG9yTm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFzaywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9uPDMyPihkZXN0
LCBzcmMsIG1hc2spOworICAgIH0KKworICAgIHZvaWQgeG9yTm90NjQoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW9uPDY0PihkZXN0LCBzcmMsIG1hc2spOworICAgIH0KKworICAgIHZvaWQgeG9yTm90
TGVmdFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvbjwzMj4oZCwg
biwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvck5vdFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZElt
bTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9u
PDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yTm90VW5zaWduZWRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3Rl
cklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVvbjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3Zh
bHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvck5vdExlZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwg
UmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5lb248NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91
bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JOb3RSaWdodFNoaWZ0NjQoUmVnaXN0
ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvbjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpB
U1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvck5vdFVuc2lnbmVkUmln
aHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb248NjQ+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCBl
eHRyYWN0SW5zZXJ0Qml0ZmllbGRBdExvd0VuZDMyKFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1t
MzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmJmeGlsPDMyPihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5t
X3ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAK
aW5kZXggNzFjZDIzOTk4Y2U3YTI0MTIwMTk2ZDBmMDQ1NjI0NmQxNGQ5MThhNy4uZjIyYmZmY2Ux
NTU0YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTIwMjAsNiArMjAyMCwxOTggQEAgdm9pZCB0
ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwor
dm9pZCB0ZXN0WG9yTm90MzIoKQoreworICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoW10gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAg
ICAgICAgaml0Lnhvck5vdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgZm9yIChh
dXRvIG1hc2sgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgaW50MzJfdCBzcmMgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQzMl90Pih0ZXN0LCBzcmMsIG1hc2spLCAoc3JjIF4gfm1hc2spKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludDMyX3Q+KHRlc3QsIDBVLCBtYXNrKSwgfm1hc2spOworICAgIH0KK30K
Kwordm9pZCB0ZXN0WG9yTm90NjQoKQoreworICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoW10gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgaml0Lnhvck5vdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgZm9y
IChhdXRvIG1hc2sgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgaW50NjRfdCBzcmMgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ2NF90Pih0ZXN0LCBzcmMsIG1hc2spLCAoc3JjIF4gfm1hc2spKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KHRlc3QsIDBVTEwsIG1hc2spLCB+bWFzayk7CisgICAg
fQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQueG9yTm90TGVmdFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90
IGxocyA9IGludm9rZTxpbnQzMl90Pih0ZXN0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQz
Ml90IHJocyA9IG4gXiB+KG0gPDwgYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShs
aHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVz
dFhvck5vdFdpdGhSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRz
ID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRlc3QgPSBj
b21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTm90
UmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBpbnZva2U8
aW50MzJfdD4odGVzdCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4g
fihtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoVW5z
aWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsg
MCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB0ZXN0ID0gY29tcGls
ZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lnhvck5vdFVuc2ln
bmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52
b2tlPHVpbnQzMl90Pih0ZXN0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByaHMg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obikgXiB+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtKSA+
PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTm90V2l0aExlZnRTaGlm
dDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07Cisg
ICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0g
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91
bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lnhvck5vdExlZnRTaGlmdDY0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4odGVzdCwgbiwgbSk7
CisgICAgICAgICAgICAgICAgaW50NjRfdCByaHMgPSBuIF4gfihtIDw8IGFtb3VudCk7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBW
ZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4g
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAg
ICAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgaml0Lnhvck5vdFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAs
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IGludDY0X3QgbGhzID0gaW52b2tlPGludDY0X3Q+KHRlc3QsIG4sIG0pOworICAgICAgICAgICAg
ICAgIGludDY0X3QgcmhzID0gbiBeIH4obSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCB0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8
dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50
NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAg
ICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGppdC54b3JOb3RVbnNpZ25lZFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4odGVzdCwgbiwgbSk7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG4pIF4gfihzdGF0
aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19F
UShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CiAjZW5kaWYK
IAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKQEAgLTQyNzQsNiAr
NDQ2NiwxNSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVB
RF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFN1YldpdGhMZWZ0U2hpZnQ2NCgpKTsKICAg
ICBSVU4odGVzdFN1YldpdGhSaWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RTdWJXaXRoVW5z
aWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdFhvck5vdDMyKCkpOworICAgIFJV
Tih0ZXN0WG9yTm90NjQoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0MzIoKSk7
CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9y
Tm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aExl
ZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKKyAg
ICBSVU4odGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKICNlbmRpZgogCiAj
aWYgQ1BVKEFSTTY0RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
aW5kZXggNjNhNmZiMTJmYTUyMmNkYWRhZGJiYTk5ZmY2MjlkNzg3OGEwODQ0OC4uZTUyMTA1OTI0
NjA1NGY2ODQwYzgxZTg3ZjgyNzViY2M5Y2I2OWQzMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTgyNiw2ICs4MjYsMjMgQEAgcHJpdmF0ZToKICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgcmVzdWx0KTsKICAgICB9CiAKKyAgICBBaXI6Ok9wY29kZSBsb3dl
ckIzdG9BaXJJbk9wY29kZShCMzo6T3Bjb2RlIGIzT3Bjb2RlLCAKKyAgICAgICAgQWlyOjpPcGNv
ZGUgc2hsMzIsIEFpcjo6T3Bjb2RlIHNobDY0LCAKKyAgICAgICAgQWlyOjpPcGNvZGUgc3NocjMy
LCBBaXI6Ok9wY29kZSBzc2hyNjQsIAorICAgICAgICBBaXI6Ok9wY29kZSB6c2hyMzIsIEFpcjo6
T3Bjb2RlIHpzaHI2NCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYjNPcGNvZGUpIHsKKyAgICAg
ICAgY2FzZSBTaGw6CisgICAgICAgICAgICByZXR1cm4gb3Bjb2RlRm9yVHlwZShzaGwzMiwgc2hs
NjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAgIGNhc2UgU1NocjoKKyAgICAgICAgICAgIHJl
dHVybiBvcGNvZGVGb3JUeXBlKHNzaHIzMiwgc3NocjY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAg
ICAgICBjYXNlIFpTaHI6CisgICAgICAgICAgICByZXR1cm4gb3Bjb2RlRm9yVHlwZSh6c2hyMzIs
IHpzaHI2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBBaXI6Ok9vcHM7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBDYWxsIHRoaXMg
bWV0aG9kIHdoZW4gZG9pbmcgdHdvLW9wZXJhbmQgbG93ZXJpbmcgb2YgYSBjb21tdXRhdGl2ZSBv
cGVyYXRpb24uIFlvdSBoYXZlIGEgY2hvaWNlIG9mCiAgICAgLy8gd2hpY2ggaW5jb21pbmcgVmFs
dWUgaXMgbW92ZWQgaW50byB0aGUgcmVzdWx0LiBUaGlzIHdpbGwgc2VsZWN0IHdoaWNoIG9uZSBp
cyBsaWtlbHkgdG8gYmUgbW9zdAogICAgIC8vIHByb2ZpdGFibGUgdG8gdXNlIGFzIHRoZSByZXN1
bHQuIERvaW5nIHRoZSByaWdodCB0aGluZyBjYW4gaGF2ZSBiaWcgcGVyZm9ybWFuY2UgY29uc2Vx
dWVuY2VzIGluIHRpZ2h0CkBAIC0yNjQ5LDIwICsyNjY2LDEwIEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgIC8vIGFkZC13aXRoLXNoaWZ0IFBhdHRlcm46IG4gKyAobSBTaGlmdFR5cGUgYW1vdW50
KQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRBZGRXaXRoU2hpZnQgPSBbJl0gKFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIGF1dG8gdHJ5T3Bj
b2RlID0gWyZdIChCMzo6T3Bjb2RlIG9wY29kZSkgLT4gQWlyOjpPcGNvZGUgewotICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNo
bDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlPcGNvZGVGb3JUeXBlKEFkZExl
ZnRTaGlmdDMyLCBBZGRMZWZ0U2hpZnQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBTU2hyOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeU9w
Y29kZUZvclR5cGUoQWRkUmlnaHRTaGlmdDMyLCBBZGRSaWdodFNoaWZ0NjQsIG1fdmFsdWUtPnR5
cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgWlNocjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnlPcGNvZGVGb3JUeXBlKEFkZFVuc2lnbmVkUmlnaHRTaGlmdDMyLCBB
ZGRVbnNpZ25lZFJpZ2h0U2hpZnQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBaXI6Ok9vcHM7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gdHJ5T3Bjb2RlKHJpZ2h0LT5vcGNvZGUoKSk7Cisg
ICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlID0gbG93ZXJCM3RvQWlySW5PcGNvZGUo
cmlnaHQtPm9wY29kZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgQWRkTGVmdFNoaWZ0MzIsIEFk
ZExlZnRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgQWRkUmlnaHRTaGlmdDMyLCBBZGRS
aWdodFNoaWZ0NjQsIAorICAgICAgICAgICAgICAgICAgICBBZGRVbnNpZ25lZFJpZ2h0U2hpZnQz
MiwgQWRkVW5zaWduZWRSaWdodFNoaWZ0NjQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKCFj
YW5CZUludGVybmFsKHJpZ2h0KSB8fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNo
aWxkKDEpLT5hc0ludCgpIDwgMCkKQEAgLTI3MzQsMjAgKzI3NDEsMTAgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgLy8gc3ViLXdpdGgtc2hpZnQgUGF0dGVybjogbiAtIChtIFNoaWZ0VHlwZSBh
bW91bnQpCiAgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZFN1YkFuZFNoaWZ0ID0gWyZdICgpIC0+
IGJvb2wgewotICAgICAgICAgICAgICAgIGF1dG8gdHJ5T3Bjb2RlID0gWyZdIChCMzo6T3Bjb2Rl
IG9wY29kZSkgLT4gQWlyOjpPcGNvZGUgewotICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9w
Y29kZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFNobDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnlPcGNvZGVGb3JUeXBlKFN1YkxlZnRTaGlmdDMyLCBTdWJMZWZ0U2hp
ZnQ2NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTU2hyOgot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeU9wY29kZUZvclR5cGUoU3ViUmlnaHRT
aGlmdDMyLCBTdWJSaWdodFNoaWZ0NjQsIG1fdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgWlNocjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlPcGNv
ZGVGb3JUeXBlKFN1YlVuc2lnbmVkUmlnaHRTaGlmdDMyLCBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQ2
NCwgbV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBBaXI6Ok9vcHM7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAgQWlyOjpPcGNvZGUgb3Bj
b2RlID0gdHJ5T3Bjb2RlKHJpZ2h0LT5vcGNvZGUoKSk7CisgICAgICAgICAgICAgICAgQWlyOjpP
cGNvZGUgb3Bjb2RlID0gbG93ZXJCM3RvQWlySW5PcGNvZGUocmlnaHQtPm9wY29kZSgpLCAKKyAg
ICAgICAgICAgICAgICAgICAgU3ViTGVmdFNoaWZ0MzIsIFN1YkxlZnRTaGlmdDY0LCAKKyAgICAg
ICAgICAgICAgICAgICAgU3ViUmlnaHRTaGlmdDMyLCBTdWJSaWdodFNoaWZ0NjQsIAorICAgICAg
ICAgICAgICAgICAgICBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQzMiwgU3ViVW5zaWduZWRSaWdodFNo
aWZ0NjQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRt
cCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHJpZ2h0KSB8
fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNoaWxkKDEpLT5hc0ludCgpIDwgMCkK
QEAgLTMxMjMsMjcgKzMxMjAsNzIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgQml0WG9yOiB7CisgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDAp
OworICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7CisKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJZiBjYW5CZUludGVybmFsKGNoaWxkKSwgd2Ugc2hvdWxkIGdlbmVy
YXRlIHRoaXMgdXNpbmcgdGhlIGNvbXBhcmlzb24gcGF0aC4KICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNjcKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgtMSkpIHsKLSAgICAgICAg
ICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2ND4obV92YWx1ZS0+Y2hpbGQoMCkpOworICAg
ICAgICAgICAgaWYgKHJpZ2h0LT5pc0ludCgtMSkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmRV
bk9wPE5vdDMyLCBOb3Q2ND4obGVmdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGlzIHBhdHRlcm4gaXMgc3Vw
ZXIgdXNlZnVsIG9uIGJvdGggeDg2IGFuZCBBUk02NCwgc2luY2UgdGhlIGludmVyc2lvbiBvZiB0
aGUgQ0FTIHJlc3VsdAogICAgICAgICAgICAgLy8gY2FuIGJlIGRvbmUgd2l0aCB6ZXJvIGNvc3Qg
b24geDg2IChqdXN0IGZsaXAgdGhlIHNldCBmcm9tIEUgdG8gTkUpIGFuZCBpdCdzIGEgcHJvZ3Jl
c3Npb24KICAgICAgICAgICAgIC8vIG9uIEFSTTY0IChzaW5jZSBTVFggcmV0dXJucyAwIG9uIHN1
Y2Nlc3MsIHNvIG9yZGluYXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4KLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVl
LT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUwotICAgICAgICAgICAgICAgICYm
IGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7Ci0gICAgICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgIGFwcGVuZENB
UyhtX3ZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgICAgICAgICBpZiAocmlnaHQtPmlzSW50
KDEpICYmIGxlZnQtPm9wY29kZSgpID09IEF0b21pY1dlYWtDQVMgJiYgY2FuQmVJbnRlcm5hbChs
ZWZ0KSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxlZnQpOworICAgICAgICAg
ICAgICAgIGFwcGVuZENBUyhsZWZ0LCB0cnVlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFwcGVuZEJpbk9wPFhvcjMy
LCBYb3I2NCwgWG9yRG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+KAotICAgICAgICAgICAg
ICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisKKyAgICAgICAgICAg
IC8vIEVPTiBQYXR0ZXJuOiBkID0gbiBeIChtIF4gLTEpCisgICAgICAgICAgICBhdXRvIHRyeUFw
cGVuZEVPTiA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSAhPSBCaXRYb3IpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogblZhbHVlID0gbGVm
dDsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbWludXNPbmUgPSByaWdodC0+Y2hpbGQoMSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKG5WYWx1ZSkgfHwgIW1pbnVzT25l
LT5oYXNJbnQoKSB8fCAhbWludXNPbmUtPmlzSW50KC0xKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gZW9uLXdpdGgtc2hpZnQgUGF0dGVy
bjogZCA9IG4gXiAoKG0gU2hpZnRUeXBlIGFtb3VudCkgXiAtMSkKKyAgICAgICAgICAgICAgICBh
dXRvIHRyeUFwcGVuZEVPTldpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIHNoaWZ0VmFsdWUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBsb3dlckIzdG9B
aXJJbk9wY29kZShzaGlmdFZhbHVlLT5vcGNvZGUoKSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICBYb3JOb3RMZWZ0U2hpZnQzMiwgWG9yTm90TGVmdFNoaWZ0NjQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgWG9yTm90UmlnaHRTaGlmdDMyLCBYb3JOb3RSaWdodFNoaWZ0NjQsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgWG9yTm90VW5zaWduZWRSaWdodFNoaWZ0MzIsIFhvck5vdFVuc2ln
bmVkUmlnaHRTaGlmdDY0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShv
cGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIFZhbHVl
KiBtVmFsdWUgPSBzaGlmdFZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgVmFs
dWUqIGFtb3VudFZhbHVlID0gc2hpZnRWYWx1ZS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghY2FuQmVJbnRlcm5hbChzaGlmdFZhbHVlKSB8fCBtX2xvY2tlZC5jb250YWlucyht
VmFsdWUpIHx8ICFpbW0oYW1vdW50VmFsdWUpIHx8IGFtb3VudFZhbHVlLT5hc0ludCgpIDwgMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgdWludDY0X3QgYW1vdW50ID0gYW1vdW50VmFsdWUtPmFzSW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IGRhdGFzaXplID0gbV92YWx1ZS0+dHlwZSgpID09IEludDMyID8gMzIg
OiA2NDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFtb3VudCA+PSBkYXRhc2l6ZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBh
cHBlbmQob3Bjb2RlLCB0bXAoblZhbHVlKSwgdG1wKG1WYWx1ZSksIGltbShhbW91bnRWYWx1ZSks
IHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKHNoaWZ0
VmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9OworCisgICAgICAgICAgICAgICAgaWYgKHRyeUFwcGVuZEVPTldpdGhTaGlmdChyaWdodC0+
Y2hpbGQoMCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAg
ICAgICAgIFZhbHVlKiBtVmFsdWUgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAg
QWlyOjpPcGNvZGUgb3Bjb2RlID0gb3Bjb2RlRm9yVHlwZShYb3JOb3QzMiwgWG9yTm90NjQsIG1f
dmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApIHx8IG1fbG9ja2VkLmNvbnRhaW5zKG1WYWx1
ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBh
cHBlbmQob3Bjb2RlLCB0bXAoblZhbHVlKSwgdG1wKG1WYWx1ZSksIHRtcChtX3ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBpZiAodHJ5QXBwZW5kRU9OKGxlZnQsIHJpZ2h0KSB8fCB0cnlBcHBlbmRFT04ocmlnaHQsIGxl
ZnQpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgYXBwZW5kQmluT3A8
WG9yMzIsIFhvcjY0LCBYb3JEb3VibGUsIFhvckZsb2F0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmln
aHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCmluZGV4IDU5MWRh
M2E0NGY4NWUwMDk2ZGE2ZDI3ODA5ZWM5OTJiOGJlMTU1ZWMuLmNlYTUxYTM4OGFjYzliMDlmN2M4
YmM1MTEyZDViNTU5ZWFlNmYyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtODU5LDYgKzg1OSwzMCBAQCBhcm02NDogT3JOb3QzMiBV
Okc6MzIsIFU6RzozMiwgWkQ6RzozMgogYXJtNjQ6IE9yTm90NjQgVTpHOjY0LCBVOkc6NjQsIEQ6
Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKIAorYXJtNjQ6IFhvck5vdDMyIFU6RzozMiwgVTpHOjMy
LCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIFRtcAorCithcm02NDogWG9yTm90NjQgVTpHOjY0LCBV
Okc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBUbXAKKworYXJtNjQ6IFhvck5vdExlZnRTaGlm
dDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBU
bXAKKworYXJtNjQ6IFhvck5vdFJpZ2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBa
RDpHOjMyCisgICAgVG1wLCBUbXAsIEltbSwgVG1wCisKK2FybTY0OiBYb3JOb3RVbnNpZ25lZFJp
Z2h0U2hpZnQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAs
IEltbSwgVG1wCisKK2FybTY0OiBYb3JOb3RMZWZ0U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpH
OjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvck5vdFJpZ2h0
U2hpZnQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwgSW1t
LCBUbXAKKworYXJtNjQ6IFhvck5vdFVuc2lnbmVkUmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0
LCBVOkc6NjQsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCiBhcm02NDogRXh0cmFj
dEluc2VydEJpdGZpZWxkQXRMb3dFbmQzMiBVOkc6MzIsIFU6RzozMiwgVTpHOjMyLCBVWkQ6Rzoz
MgogICAgIFRtcCwgSW1tLCBJbW0sIFRtcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKaW5k
ZXggM2JlMmNhYTJlMWNiNjhhNmFhNGFjYzhkMzM0NGIzMDVjYzk1MDc3Yy4uYzcwMzJlYzA4NGRk
ZmRkOTM1ZTU1MjdmYWFlOTM1NjgxOTg0ODE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
aApAQCAtNDM5LDYgKzQzOSwxNCBAQCB2b2lkIHRlc3RCSUMzMigpOwogdm9pZCB0ZXN0QklDNjQo
KTsKIHZvaWQgdGVzdE9yTm90MzIoKTsKIHZvaWQgdGVzdE9yTm90NjQoKTsKK3ZvaWQgdGVzdFhv
ck5vdDMyKCk7Cit2b2lkIHRlc3RYb3JOb3Q2NCgpOwordm9pZCB0ZXN0WG9yTm90V2l0aExlZnRT
aGlmdDMyKCk7Cit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDMyKCk7Cit2b2lkIHRlc3RY
b3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvck5vdFdpdGhMZWZ0
U2hpZnQ2NCgpOwordm9pZCB0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpOwordm9pZCB0ZXN0
WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCk7CiB2b2lkIHRlc3RCaXRmaWVsZFplcm9F
eHRlbmQzMigpOwogdm9pZCB0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kNjQoKTsKIHZvaWQgdGVzdEV4
dHJhY3RSZWdpc3RlcjMyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcAppbmRl
eCA3OGM1OTJiMDI3NmE2YzkwYmI0ZTlkMzA0Mzc3OWM5YTBiYmE3OTA5Li4zMjkyNTMwYmE5Mzdl
MTViYmJhNmI3ZTRlYmQ5NGEyMTRlNzA4YjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzXzIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjNfMi5jcHAKQEAgLTQ0MjcsNiArNDQyNywzNDIgQEAgdm9pZCB0ZXN0T3JOb3Q2NCgpCiAgICAg
fQogfQogCit2b2lkIHRlc3RYb3JOb3QzMigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVm
YXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRlc3QgUGF0
dGVybjogZCA9IG4gXiAobSBeIC0xKQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBp
bnQzMl90IG0pIC0+IGludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSog
bVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1
ZSogbWludXNPbmVWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAtMSk7CisKKyAgICAgICAgVmFsdWUqIHhvclZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBtVmFsdWUsIG1pbnVzT25lVmFsdWUpOwor
ICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCB4b3JWYWx1ZSkpOworCisgICAgICAgIGF1dG8g
Y29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAg
ICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJlb24iKTsKKyAgICAgICAgcmV0dXJu
IGludm9rZTxpbnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBu
IDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50MzJPcGVyYW5k
cygpKQorICAgICAgICAgICAgQ0hFQ0sodGVzdChuLnZhbHVlLCBtLnZhbHVlKSA9PSAobi52YWx1
ZSBeIChtLnZhbHVlIF4gLTEpKSk7CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3Q2NCgpCit7
CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAobSBeIC0xKQorICAgIGF1
dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0pIC0+IGludDY0X3QgeworICAgICAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAg
ICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1ZSogbWludXNP
bmVWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAt
MSk7CisKKyAgICAgICAgVmFsdWUqIHhvclZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRYb3IsIE9yaWdpbigpLCBtVmFsdWUsIG1pbnVzT25lVmFsdWUpOworICAgICAgICBy
b290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9y
LCBPcmlnaW4oKSwgblZhbHVlLCB4b3JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNv
bXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKQorICAgICAgICAgICAgY2hl
Y2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsICJlb24iKTsKKyAgICAgICAgcmV0dXJuIGludm9rZTxp
bnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuIDogaW50NjRP
cGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKQorICAg
ICAgICAgICAgQ0hFQ0sodGVzdChuLnZhbHVlLCBtLnZhbHVlKSA9PSAobi52YWx1ZSBeIChtLnZh
bHVlIF4gLTFMTCkpKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQz
MigpCit7CisgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisg
ICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMx
IH07CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKChtIDw8IGFtb3VudCkgXiAtMSkK
KyAgICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3Vu
dCkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigp
LCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdp
bigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91
bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBh
bW91bnQpOworICAgICAgICBWYWx1ZSogbWludXNPbmVWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAtMSk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0
VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFNobCwgT3JpZ2luKCksIG1WYWx1
ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIG1pbnVzT25lVmFs
dWUpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkp
IHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvbi4qLC4qLC4qLC4qbHNsICMi
KTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOwor
ICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRy
dWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUsIG4s
IG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGlu
dDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9IG1P
cGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50
KSwgbiBeICgobSA8PCBhbW91bnQpIF4gLTEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYg
KEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAgICAvLyBU
ZXN0IFBhdHRlcm46IGQgPSBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkKKyAgICBhdXRvIHRlc3Qg
PSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gaW50MzJfdCB7
CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworICAgICAg
ICBWYWx1ZSogbWludXNPbmVWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAtMSk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFNTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVl
KTsKKyAgICAgICAgVmFsdWUqIHhvclZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRYb3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCBtaW51c09uZVZhbHVlKTsKKworICAgICAg
ICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
WG9yLCBPcmlnaW4oKSwgblZhbHVlLCB4b3JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9
IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAg
ICBzdGQ6OnN0cmluZyByZWdleCgiLiplb24uKiwuKiwuKiwuKmFzciAjIik7CisgICAgICAgICAg
ICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNo
ZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChh
dXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG4gPSBuT3Bl
cmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG0gPSBtT3BlcmFuZC52YWx1ZTsK
KyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAoKG0gPj4g
YW1vdW50KSBeIC0xKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQzMigpCit7CisgICAgaWYgKEpTQzo6
T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCisgICAgICAgIHJldHVybjsKKyAgICBW
ZWN0b3I8dWludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDE3LCAzMSB9OworCisgICAgLy8gVGVzdCBQ
YXR0ZXJuOiBkID0gbiBeICgobSA+PiBhbW91bnQpIF4gLTEpCisgICAgYXV0byB0ZXN0ID0gWyZd
IChpbnQzMl90IG4sIGludDMyX3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IHVpbnQzMl90IHsKKyAg
ICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisgICAgICAgIFZh
bHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgWlNociwgT3JpZ2luKCksIG1WYWx1ZSwgYW1vdW50VmFsdWUpOwor
ICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIG1pbnVzT25lVmFsdWUpOworCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3Is
IE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAgICAgYXV0byBjb2RlID0gY29t
cGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvbi4qLC4qLC4qLC4qbHNyICMiKTsKKyAgICAgICAgICAgIHJl
Z2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAgICAgICAgICAgY2hlY2tV
c2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBpbnZva2U8dWludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisg
ICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAo
YXV0byBtT3BlcmFuZCA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRv
IGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBuID0gbk9wZXJh
bmQudmFsdWU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgbSA9IG1PcGVyYW5kLnZhbHVlOwor
ICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwgbiBeICgobSA+PiBh
bW91bnQpIF4gLTEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCB0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpk
ZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQz
Ml90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9
IG4gXiAoKG0gPDwgYW1vdW50KSBeIC0xKQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBu
LCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisK
KyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgVmFsdWUq
IG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCk7Cisg
ICAgICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hsLCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRW
YWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgbWludXNPbmVWYWx1ZSk7CisKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9yVmFsdWUpKTsKKworICAgICAgICBhdXRvIGNv
ZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAg
ICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9uLiosLiosLiosLipsc2wgIyIpOworICAgICAg
ICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7CisgICAgICAgICAg
ICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAg
fTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCBuID0g
bk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgaW50NjRfdCBtID0gbU9wZXJhbmQudmFs
dWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKCht
IDw8IGFtb3VudCkgXiAtMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRp
b25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3Rv
cjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAzNCwgNjMgfTsKKworICAgIC8vIFRlc3QgUGF0dGVy
bjogZCA9IG4gXiAoKG0gPj4gYW1vdW50KSBeIC0xKQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50
NjRfdCBuLCBpbnQ2NF90IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQ2NF90IHsKKyAgICAgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2Nr
KCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAg
VmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgVmFsdWUqIGFtb3VudFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3Vu
dCk7CisgICAgICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogc2hpZnRWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1WYWx1ZSwg
YW1vdW50VmFsdWUpOworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIG1pbnVzT25lVmFsdWUp
OworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAgICAg
YXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkpIHsK
KyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvbi4qLC4qLC4qLC4qYXNyICMiKTsK
KyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioiOworICAg
ICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCksIHRydWUp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50NjRfdD4oKmNvZGUsIG4sIG0p
OworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsK
KyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVyYW5kcygpKSB7CisgICAgICAg
ICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIGludDY0
X3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDY0X3QgbSA9IG1PcGVy
YW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1vdW50KSwg
biBeICgobSA+PiBhbW91bnQpIF4gLTEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCB0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAg
ICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0
dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07CisKKyAg
ICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkKKyAgICBhdXRv
IHRlc3QgPSBbJl0gKGludDY0X3QgbiwgaW50NjRfdCBtLCBpbnQzMl90IGFtb3VudCkgLT4gdWlu
dDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYW1vdW50KTsKKyAgICAgICAgVmFsdWUqIG1pbnVzT25lVmFsdWUgPSByb290
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpOworCisgICAgICAg
IFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBP
cmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1
ZSwgbWludXNPbmVWYWx1ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9yVmFs
dWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAg
aWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9uLios
LiosLiosLipsc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1v
dW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVn
ZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50
NjRfdD4oKmNvZGUsIG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBp
bnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAg
ICAgICAgICAgICAgIHVpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAg
ICB1aW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEo
dGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQz
MigpCiB7CiAgICAgaWYgKEpTQzo6T3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSA8IDIpCkBA
IC02MDI1LDYgKzYzNjEsMTQgQEAgdm9pZCBhZGRCaXRUZXN0cyhjb25zdCBjaGFyKiBmaWx0ZXIs
IERlcXVlPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+PiYgdGFza3MpCiAgICAgUlVOKHRlc3RC
SUM2NCgpKTsKICAgICBSVU4odGVzdE9yTm90MzIoKSk7CiAgICAgUlVOKHRlc3RPck5vdDY0KCkp
OworICAgIFJVTih0ZXN0WG9yTm90MzIoKSk7CisgICAgUlVOKHRlc3RYb3JOb3Q2NCgpKTsKKyAg
ICBSVU4odGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvck5vdFdp
dGhSaWdodFNoaWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNo
aWZ0MzIoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0NjQoKSk7CisgICAgUlVO
KHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aFVu
c2lnbmVkUmlnaHRTaGlmdDY0KCkpOwogICAgIFJVTih0ZXN0Qml0ZmllbGRaZXJvRXh0ZW5kMzIo
KSk7CiAgICAgUlVOKHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2NCgpKTsKICAgICBSVU4odGVzdEV4
dHJhY3RSZWdpc3RlcjMyKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433904</attachid>
            <date>2021-07-20 15:24:25 -0700</date>
            <delta_ts>2021-07-20 16:20:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-228057-20210720172424.patch</filename>
            <type>text/plain</type>
            <size>36802</size>
            <attacher name="Yijia Huang">yijia_huang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTg1MTNhN2M1Y2U1Y2VkMmQ0YjdhMjA5NTYxMjUzMmRjYTU1YThjLi4wOWI2MTZhZjlkYTc3OGZi
NTY5ZDg4YmNkZTU3MjFkMzNkNTA5M2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MCBAQAorMjAyMS0wNy0yMCAgWWlqaWEgSHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQWRkIEFSTTY0IEVPTiBvcGNvZGUgYW5kIHNlbGVjdCBpdCBpbiBBSVIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyODA1Nwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVPTiBSZCBS
biBSbSA8c2hpZnQ+ICNhbW91bnQKKworICAgICAgICBCaXR3aXNlIEV4Y2x1c2l2ZSBPUiBOT1Qg
KHNoaWZ0ZWQgcmVnaXN0ZXIpIHBlcmZvcm1zIGEgYml0d2lzZSBFeGNsdXNpdmUgT1IgTk9UIAor
ICAgICAgICBvZiBhIHJlZ2lzdGVyIHZhbHVlIFJuIGFuZCBhbiBvcHRpb25hbGx5LXNoaWZ0ZWQg
cmVnaXN0ZXIgdmFsdWUgUm0sIGFuZCB3cml0ZXMgdGhlIAorICAgICAgICByZXN1bHQgdG8gdGhl
IGRlc3RpbmF0aW9uIHJlZ2lzdGVyLiBUaGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IgY2FuIHV0aWxp
emUgdGhpcyB0byAKKyAgICAgICAgbG93ZXJpbmcgY2VydGFpbiBwYXR0ZXJucyBpbiBCMyBJUiBi
ZWZvcmUgZnVydGhlciBBaXIgb3B0aW1pemF0aW9uLgorCisgICAgICAgIFRoZSBlcXVpdmFsZW50
IHBhdHRlcm4gb2YgRU9OIFJkIFJuIFJtIGlzIGQgPSBuIF4gKG0gXiAtMSkKKworICAgICAgICBH
aXZlbiBCMyBJUjoKKyAgICAgICAgSW50IEAwID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJ
bnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisgICAgICAgIEludCBAMiA9IC0xCisgICAgICAgIElu
dCBAMyA9IEJpdFhvcihAMSwgQDIpCisgICAgICAgIEludCBANCA9IEJpdFhvcihAMCwgYkAzKQor
ICAgICAgICBWb2lkQDUgPSBSZXR1cm4oQDQsIFRlcm1pbmFsKQorCisgICAgICAgIC8vIE9sZCBv
cHRpbWl6ZWQgQUlSCisgICAgICAgIE5vdCAgICV4MSwgJXgxLCAgICAgIEAzCisgICAgICAgIFhv
ciAgICV4MCwgJXgxLCAleDAsIEA0CisgICAgICAgIFJldCAgICV4MCwgICAgICAgICAgIEA1CisK
KyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBBSVIKKyAgICAgICAgWG9yTm90ICV4MCwgJXgxLCAl
eDAsIEA0CisgICAgICAgIFJldCAgICAleDAsICAgICAgICAgICBANQorCisgICAgICAgIFRoZSBl
cXVpdmFsZW50IHBhdHRlcm4gb2YgRU9OLXdpdGgtc2hpZnQgaXMgZCA9IG4gXiAoKG0gU2hpZnRU
eXBlIGFtb3VudCkgXiAtMSkKKworICAgICAgICBHaXZlbiBCMyBJUjoKKyAgICAgICAgSW50IEAw
ID0gQXJndW1lbnRSZWcoJXgwKQorICAgICAgICBJbnQgQDEgPSBBcmd1bWVudFJlZygleDEpCisg
ICAgICAgIEludCBAMiA9IGFtb3VudAorICAgICAgICBJbnQgQDMgPSAtMQorICAgICAgICBJbnQg
QDQgPSBTaGwoQDEsIEAyKQorICAgICAgICBJbnQgQDUgPSBCaXRYb3IoQDQsIEAzKQorICAgICAg
ICBJbnQgQDYgPSBCaXRYb3IoQDAsIEA1KQorICAgICAgICBWb2lkIGJANyA9IFJldHVybihiQDYs
IFRlcm1pbmFsKQorCisgICAgICAgIC8vIE9sZCBvcHRpbWl6ZWQgQUlSCisgICAgICAgIExzaGlm
dCAgICV4MSwgYW1vdW50LCAleDEsIEA0CisgICAgICAgIE5vdCAgICAgICV4MSwgICAgJXgxLCAg
ICAgIEA1CisgICAgICAgIFhvciAgICAgICV4MCwgICAgJXgxLCAleDAsIEA2CisgICAgICAgIFJl
dCAgICAgICV4MCwgICAgICAgICAgICAgIEA3CisKKyAgICAgICAgLy8gTmV3IG9wdGltaXplZCBB
SVIKKyAgICAgICAgWG9yTm90TGVmdFNoaWZ0ICV4MCwgJXgxLCAkNjMsICV4MCwgQDYKKyAgICAg
ICAgUmV0ICAgICAgICAgICAgICV4MCwgICAgICAgICAgICAgICAgQDcKKworICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNNjQ6Onhvck5vdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6
eG9yTm90NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JOb3RMZWZ0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdFJpZ2h0
U2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Onhvck5vdFVuc2ln
bmVkUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6eG9y
Tm90TGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JO
b3RSaWdodFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0Ojp4b3JO
b3RVbnNpZ25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgICogYXNzZW1ibGVyL3Rlc3RtYXNtLmNw
cDoKKyAgICAgICAgKEpTQzo6dGVzdFhvck5vdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhvck5v
dDY0KToKKyAgICAgICAgKEpTQzo6dGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMik6CisgICAgICAg
IChKU0M6OnRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDMyKToKKyAgICAgICAgKEpTQzo6dGVzdFhv
ck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQzMik6CisgICAgICAgIChKU0M6OnRlc3RYb3JOb3RX
aXRoTGVmdFNoaWZ0NjQpOgorICAgICAgICAoSlNDOjp0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2
NCk6CisgICAgICAgIChKU0M6OnRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQpOgor
ICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzOgorICAgICAgICAqIGIzL3Rlc3RiMy5oOgorICAgICAgICAqIGIzL3Rlc3RiM18y
LmNwcDoKKyAgICAgICAgKHRlc3RYb3JOb3QzMik6CisgICAgICAgICh0ZXN0WG9yTm90NjQpOgor
ICAgICAgICAodGVzdFhvck5vdFdpdGhMZWZ0U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yTm90
V2l0aFJpZ2h0U2hpZnQzMik6CisgICAgICAgICh0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRT
aGlmdDMyKToKKyAgICAgICAgKHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0NjQpOgorICAgICAgICAo
dGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQpOgorICAgICAgICAodGVzdFhvck5vdFdpdGhVbnNp
Z25lZFJpZ2h0U2hpZnQ2NCk6CisgICAgICAgIChhZGRCaXRUZXN0cyk6CisKIDIwMjEtMDctMTYg
IFlpamlhIEh1YW5nICA8eWlqaWFfaHVhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBFeHRl
bmRUeXBlIHRvIEFpcjo6QXJnIEluZGV4IHRvIGZ1bGx5IHV0aWxpemUgYWRkcmVzcyBjb21wdXRh
dGlvbiBpbiBtZW1vcnkgaW5zdHJ1Y3Rpb24gZm9yIEFSTTY0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCmluZGV4IDg4ZjM0
MGI0ODNlOTRmMGY2ZGM0MjVmNDQ4YTQ5NmE1ZWUxMGZmNjIuLmZlMzBkOWM4NGQzNTI3ZWViMTZm
Y2QwNmUxMTVmYzY4ZDY5MDkwZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCkBAIC01MDksNiArNTA5LDQ2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIub3JuPDY0PihkZXN0LCBzcmMsIG1hc2spOwogICAg
IH0KIAorICAgIHZvaWQgeG9yTm90MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgbWFzaywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9uPDMyPihkZXN0
LCBzcmMsIG1hc2spOworICAgIH0KKworICAgIHZvaWQgeG9yTm90NjQoUmVnaXN0ZXJJRCBzcmMs
IFJlZ2lzdGVySUQgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZW9uPDY0PihkZXN0LCBzcmMsIG1hc2spOworICAgIH0KKworICAgIHZvaWQgeG9yTm90
TGVmdFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91
bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvbjwzMj4oZCwg
biwgbSwgQXNzZW1ibGVyOjpMU0wsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IHhvck5vdFJpZ2h0U2hpZnQzMihSZWdpc3RlcklEIG4sIFJlZ2lzdGVySUQgbSwgVHJ1c3RlZElt
bTMyIGFtb3VudCwgUmVnaXN0ZXJJRCBkKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9u
PDMyPihkLCBuLCBtLCBBc3NlbWJsZXI6OkFTUiwgYW1vdW50Lm1fdmFsdWUpOworICAgIH0KKwor
ICAgIHZvaWQgeG9yTm90VW5zaWduZWRSaWdodFNoaWZ0MzIoUmVnaXN0ZXJJRCBuLCBSZWdpc3Rl
cklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLmVvbjwzMj4oZCwgbiwgbSwgQXNzZW1ibGVyOjpMU1IsIGFtb3VudC5tX3Zh
bHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvck5vdExlZnRTaGlmdDY0KFJlZ2lzdGVySUQgbiwg
UmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50LCBSZWdpc3RlcklEIGQpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5lb248NjQ+KGQsIG4sIG0sIEFzc2VtYmxlcjo6TFNMLCBhbW91
bnQubV92YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCB4b3JOb3RSaWdodFNoaWZ0NjQoUmVnaXN0
ZXJJRCBuLCBSZWdpc3RlcklEIG0sIFRydXN0ZWRJbW0zMiBhbW91bnQsIFJlZ2lzdGVySUQgZCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvbjw2ND4oZCwgbiwgbSwgQXNzZW1ibGVyOjpB
U1IsIGFtb3VudC5tX3ZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHhvck5vdFVuc2lnbmVkUmln
aHRTaGlmdDY0KFJlZ2lzdGVySUQgbiwgUmVnaXN0ZXJJRCBtLCBUcnVzdGVkSW1tMzIgYW1vdW50
LCBSZWdpc3RlcklEIGQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb248NjQ+KGQsIG4s
IG0sIEFzc2VtYmxlcjo6TFNSLCBhbW91bnQubV92YWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCBl
eHRyYWN0SW5zZXJ0Qml0ZmllbGRBdExvd0VuZDMyKFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1t
MzIgbHNiLCBUcnVzdGVkSW1tMzIgd2lkdGgsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLmJmeGlsPDMyPihkZXN0LCBzcmMsIGxzYi5tX3ZhbHVlLCB3aWR0aC5t
X3ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvdGVz
dG1hc20uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAK
aW5kZXggNzFjZDIzOTk4Y2U3YTI0MTIwMTk2ZDBmMDQ1NjI0NmQxNGQ5MThhNy4uZjIyYmZmY2Ux
NTU0YjAyYzIyNmMyMTQ5MmFiMDY3YmFiMzhjNDBiNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci90ZXN0bWFzbS5jcHAKQEAgLTIwMjAsNiArMjAyMCwxOTggQEAgdm9pZCB0
ZXN0U3ViV2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKICAgICAgICAgfQogICAgIH0KIH0KKwor
dm9pZCB0ZXN0WG9yTm90MzIoKQoreworICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoW10gKENDYWxs
SGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAg
ICAgICAgaml0Lnhvck5vdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0aW9u
RXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgZm9yIChh
dXRvIG1hc2sgOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgaW50MzJfdCBzcmMgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CisgICAgICAgIENIRUNLX0VRKGludm9r
ZTxpbnQzMl90Pih0ZXN0LCBzcmMsIG1hc2spLCAoc3JjIF4gfm1hc2spKTsKKyAgICAgICAgQ0hF
Q0tfRVEoaW52b2tlPGludDMyX3Q+KHRlc3QsIDBVLCBtYXNrKSwgfm1hc2spOworICAgIH0KK30K
Kwordm9pZCB0ZXN0WG9yTm90NjQoKQoreworICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoW10gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisK
KyAgICAgICAgaml0Lnhvck5vdDY0KEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgaml0LnJldCgpOworICAgIH0pOworCisgICAgZm9y
IChhdXRvIG1hc2sgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgaW50NjRfdCBzcmMgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCk7CisgICAgICAgIENIRUNLX0VRKGlu
dm9rZTxpbnQ2NF90Pih0ZXN0LCBzcmMsIG1hc2spLCAoc3JjIF4gfm1hc2spKTsKKyAgICAgICAg
Q0hFQ0tfRVEoaW52b2tlPGludDY0X3Q+KHRlc3QsIDBVTEwsIG1hc2spLCB+bWFzayk7CisgICAg
fQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjxp
bnQzMl90PiBhbW91bnRzID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMy
T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHRlc3QgPSBjb21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZW1pdEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICBqaXQueG9yTm90TGVmdFNoaWZ0MzIoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmFyZ3VtZW50R1BSMSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihhbW91bnQpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAgICAg
ICAgICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZShqaXQpOworICAgICAgICAgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBpbnQzMl90
IGxocyA9IGludm9rZTxpbnQzMl90Pih0ZXN0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICBpbnQz
Ml90IHJocyA9IG4gXiB+KG0gPDwgYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUShs
aHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVz
dFhvck5vdFdpdGhSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRz
ID0geyAwLCAxNywgMzEgfTsKKyAgICBmb3IgKGF1dG8gbiA6IGludDMyT3BlcmFuZHMoKSkgewor
ICAgICAgICBmb3IgKGF1dG8gbSA6IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICAgICAgZm9y
IChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHRlc3QgPSBj
b21waWxlKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoaml0KTsKKworICAgICAgICAgICAgICAgICAgICBqaXQueG9yTm90
UmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgaW50MzJfdCBsaHMgPSBpbnZva2U8
aW50MzJfdD4odGVzdCwgbiwgbSk7CisgICAgICAgICAgICAgICAgaW50MzJfdCByaHMgPSBuIF4g
fihtID4+IGFtb3VudCk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoVW5z
aWduZWRSaWdodFNoaWZ0MzIoKQoreworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsg
MCwgMTcsIDMxIH07CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAg
ICAgZm9yIChhdXRvIG0gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB0ZXN0ID0gY29tcGls
ZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5j
dGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lnhvck5vdFVuc2ln
bmVkUmlnaHRTaGlmdDMyKEdQUkluZm86OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjphcmd1bWVudEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOwor
ICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgdWludDMyX3QgbGhzID0gaW52
b2tlPHVpbnQzMl90Pih0ZXN0LCBuLCBtKTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCByaHMg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4obikgXiB+KHN0YXRpY19jYXN0PHVpbnQzMl90PihtKSA+
PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENIRUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTm90V2l0aExlZnRTaGlm
dDY0KCkKK3sKKyAgICBWZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07Cisg
ICAgZm9yIChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0g
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91
bnRzKSB7CisgICAgICAgICAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGpp
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lnhvck5vdExlZnRTaGlmdDY0KEdQUkluZm86
OmFyZ3VtZW50R1BSMCwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoYW1vdW50KSwgCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAgICAgaW50NjRfdCBsaHMgPSBpbnZva2U8aW50NjRfdD4odGVzdCwgbiwgbSk7
CisgICAgICAgICAgICAgICAgaW50NjRfdCByaHMgPSBuIF4gfihtIDw8IGFtb3VudCk7CisgICAg
ICAgICAgICAgICAgQ0hFQ0tfRVEobGhzLCByaHMpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBW
ZWN0b3I8aW50MzJfdD4gYW1vdW50cyA9IHsgMCwgMzQsIDYzIH07CisgICAgZm9yIChhdXRvIG4g
OiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2NE9wZXJhbmRz
KCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAgICAg
ICAgICAgICAgYXV0byB0ZXN0ID0gY29tcGlsZShbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvblByb2xvZ3VlKGppdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgaml0Lnhvck5vdFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQUjAs
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCksIAor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAg
ICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAgICAg
ICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg
IGludDY0X3QgbGhzID0gaW52b2tlPGludDY0X3Q+KHRlc3QsIG4sIG0pOworICAgICAgICAgICAg
ICAgIGludDY0X3QgcmhzID0gbiBeIH4obSA+PiBhbW91bnQpOworICAgICAgICAgICAgICAgIENI
RUNLX0VRKGxocywgcmhzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCB0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDY0KCkKK3sKKyAgICBWZWN0b3I8
dWludDMyX3Q+IGFtb3VudHMgPSB7IDAsIDM0LCA2MyB9OworICAgIGZvciAoYXV0byBuIDogaW50
NjRPcGVyYW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtIDogaW50NjRPcGVyYW5kcygpKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAg
ICAgIGF1dG8gdGVzdCA9IGNvbXBpbGUoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAg
ICAgICAgICAgICAgICBlbWl0RnVuY3Rpb25Qcm9sb2d1ZShqaXQpOworCisgICAgICAgICAgICAg
ICAgICAgIGppdC54b3JOb3RVbnNpZ25lZFJpZ2h0U2hpZnQ2NChHUFJJbmZvOjphcmd1bWVudEdQ
UjAsIAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGFtb3VudCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworCisg
ICAgICAgICAgICAgICAgICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKGppdCk7CisgICAgICAgICAg
ICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IGxocyA9IGludm9rZTx1aW50NjRfdD4odGVzdCwgbiwgbSk7CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgcmhzID0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG4pIF4gfihzdGF0
aWNfY2FzdDx1aW50NjRfdD4obSkgPj4gYW1vdW50KTsKKyAgICAgICAgICAgICAgICBDSEVDS19F
UShsaHMsIHJocyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CiAjZW5kaWYK
IAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKQEAgLTQyNzQsNiAr
NDQ2NiwxNSBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpIFdURl9JR05PUkVTX1RIUkVB
RF9TQUZFVFlfQU5BTFlTSVMKICAgICBSVU4odGVzdFN1YldpdGhMZWZ0U2hpZnQ2NCgpKTsKICAg
ICBSVU4odGVzdFN1YldpdGhSaWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RTdWJXaXRoVW5z
aWduZWRSaWdodFNoaWZ0NjQoKSk7CisKKyAgICBSVU4odGVzdFhvck5vdDMyKCkpOworICAgIFJV
Tih0ZXN0WG9yTm90NjQoKSk7CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0MzIoKSk7
CisgICAgUlVOKHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9y
Tm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aExl
ZnRTaGlmdDY0KCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQ2NCgpKTsKKyAg
ICBSVU4odGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQ2NCgpKTsKICNlbmRpZgogCiAj
aWYgQ1BVKEFSTTY0RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
aW5kZXggNjNhNmZiMTJmYTUyMmNkYWRhZGJiYTk5ZmY2MjlkNzg3OGEwODQ0OC4uZDVmYzMxNjQ2
NTk2OGViNzM3MWI2ZmYxY2M2ZjgzMTdmZWNkZTUyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5jcHAKQEAgLTgyNiw2ICs4MjYsMjMgQEAgcHJpdmF0ZToKICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgcmVzdWx0KTsKICAgICB9CiAKKyAgICBBaXI6Ok9wY29kZSBvcGNv
ZGVCYXNlZE9uU2hpZnRLaW5kKEIzOjpPcGNvZGUgYjNPcGNvZGUsIAorICAgICAgICBBaXI6Ok9w
Y29kZSBzaGwzMiwgQWlyOjpPcGNvZGUgc2hsNjQsIAorICAgICAgICBBaXI6Ok9wY29kZSBzc2hy
MzIsIEFpcjo6T3Bjb2RlIHNzaHI2NCwgCisgICAgICAgIEFpcjo6T3Bjb2RlIHpzaHIzMiwgQWly
OjpPcGNvZGUgenNocjY0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChiM09wY29kZSkgeworICAg
ICAgICBjYXNlIFNobDoKKyAgICAgICAgICAgIHJldHVybiB0cnlPcGNvZGVGb3JUeXBlKHNobDMy
LCBzaGw2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgY2FzZSBTU2hyOgorICAgICAgICAg
ICAgcmV0dXJuIHRyeU9wY29kZUZvclR5cGUoc3NocjMyLCBzc2hyNjQsIG1fdmFsdWUtPnR5cGUo
KSk7CisgICAgICAgIGNhc2UgWlNocjoKKyAgICAgICAgICAgIHJldHVybiB0cnlPcGNvZGVGb3JU
eXBlKHpzaHIzMiwgenNocjY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIEFpcjo6T29wczsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8v
IENhbGwgdGhpcyBtZXRob2Qgd2hlbiBkb2luZyB0d28tb3BlcmFuZCBsb3dlcmluZyBvZiBhIGNv
bW11dGF0aXZlIG9wZXJhdGlvbi4gWW91IGhhdmUgYSBjaG9pY2Ugb2YKICAgICAvLyB3aGljaCBp
bmNvbWluZyBWYWx1ZSBpcyBtb3ZlZCBpbnRvIHRoZSByZXN1bHQuIFRoaXMgd2lsbCBzZWxlY3Qg
d2hpY2ggb25lIGlzIGxpa2VseSB0byBiZSBtb3N0CiAgICAgLy8gcHJvZml0YWJsZSB0byB1c2Ug
YXMgdGhlIHJlc3VsdC4gRG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGNhbiBoYXZlIGJpZyBwZXJmb3Jt
YW5jZSBjb25zZXF1ZW5jZXMgaW4gdGlnaHQKQEAgLTI2NDksMjAgKzI2NjYsMTAgQEAgcHJpdmF0
ZToKIAogICAgICAgICAgICAgLy8gYWRkLXdpdGgtc2hpZnQgUGF0dGVybjogbiArIChtIFNoaWZ0
VHlwZSBhbW91bnQpCiAgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEFkZFdpdGhTaGlmdCA9IFsm
XSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAg
YXV0byB0cnlPcGNvZGUgPSBbJl0gKEIzOjpPcGNvZGUgb3Bjb2RlKSAtPiBBaXI6Ok9wY29kZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgU2hsOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeU9wY29kZUZv
clR5cGUoQWRkTGVmdFNoaWZ0MzIsIEFkZExlZnRTaGlmdDY0LCBtX3ZhbHVlLT50eXBlKCkpOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFNTaHI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ5T3Bjb2RlRm9yVHlwZShBZGRSaWdodFNoaWZ0MzIsIEFkZFJpZ2h0U2hpZnQ2NCwg
bV92YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBaU2hyOgotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyeU9wY29kZUZvclR5cGUoQWRkVW5zaWduZWRSaWdo
dFNoaWZ0MzIsIEFkZFVuc2lnbmVkUmlnaHRTaGlmdDY0LCBtX3ZhbHVlLT50eXBlKCkpOwotICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEFpcjo6T29wczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSB0cnlPcGNvZGUocmlnaHQtPm9w
Y29kZSgpKTsKKyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVCYXNl
ZE9uU2hpZnRLaW5kKHJpZ2h0LT5vcGNvZGUoKSwgCisgICAgICAgICAgICAgICAgICAgIEFkZExl
ZnRTaGlmdDMyLCBBZGRMZWZ0U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgIEFkZFJpZ2h0
U2hpZnQzMiwgQWRkUmlnaHRTaGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgQWRkVW5zaWdu
ZWRSaWdodFNoaWZ0MzIsIEFkZFVuc2lnbmVkUmlnaHRTaGlmdDY0KTsKICAgICAgICAgICAgICAg
ICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwg
QXJnOjpUbXApKSAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChyaWdodCkgfHwgIWltbShyaWdodC0+Y2hpbGQoMSkp
IHx8IHJpZ2h0LT5jaGlsZCgxKS0+YXNJbnQoKSA8IDApCkBAIC0yNzM0LDIwICsyNzQxLDEwIEBA
IHByaXZhdGU6CiAKICAgICAgICAgICAgIC8vIHN1Yi13aXRoLXNoaWZ0IFBhdHRlcm46IG4gLSAo
bSBTaGlmdFR5cGUgYW1vdW50KQogICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRTdWJBbmRTaGlm
dCA9IFsmXSAoKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBhdXRvIHRyeU9wY29kZSA9IFsm
XSAoQjM6Ok9wY29kZSBvcGNvZGUpIC0+IEFpcjo6T3Bjb2RlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGw6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ5T3Bjb2RlRm9yVHlwZShTdWJMZWZ0U2hpZnQz
MiwgU3ViTGVmdFNoaWZ0NjQsIG1fdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgU1NocjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnlPcGNvZGVGb3JU
eXBlKFN1YlJpZ2h0U2hpZnQzMiwgU3ViUmlnaHRTaGlmdDY0LCBtX3ZhbHVlLT50eXBlKCkpOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFpTaHI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ5T3Bjb2RlRm9yVHlwZShTdWJVbnNpZ25lZFJpZ2h0U2hpZnQzMiwgU3ViVW5zaWdu
ZWRSaWdodFNoaWZ0NjQsIG1fdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWlyOjpPb3BzOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIEFp
cjo6T3Bjb2RlIG9wY29kZSA9IHRyeU9wY29kZShyaWdodC0+b3Bjb2RlKCkpOworICAgICAgICAg
ICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZSA9IG9wY29kZUJhc2VkT25TaGlmdEtpbmQocmlnaHQt
Pm9wY29kZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgU3ViTGVmdFNoaWZ0MzIsIFN1YkxlZnRT
aGlmdDY0LCAKKyAgICAgICAgICAgICAgICAgICAgU3ViUmlnaHRTaGlmdDMyLCBTdWJSaWdodFNo
aWZ0NjQsIAorICAgICAgICAgICAgICAgICAgICBTdWJVbnNpZ25lZFJpZ2h0U2hpZnQzMiwgU3Vi
VW5zaWduZWRSaWdodFNoaWZ0NjQpOwogICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIAogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKCFjYW5CZUlu
dGVybmFsKHJpZ2h0KSB8fCAhaW1tKHJpZ2h0LT5jaGlsZCgxKSkgfHwgcmlnaHQtPmNoaWxkKDEp
LT5hc0ludCgpIDwgMCkKQEAgLTMxMjMsMjcgKzMxMjAsNzIgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgQml0WG9yOiB7CisgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG1f
dmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gbV92YWx1ZS0+Y2hp
bGQoMSk7CisKICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiBjYW5CZUludGVybmFsKGNoaWxkKSwg
d2Ugc2hvdWxkIGdlbmVyYXRlIHRoaXMgdXNpbmcgdGhlIGNvbXBhcmlzb24gcGF0aC4KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIzNjcK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludCgt
MSkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2ND4obV92YWx1ZS0+
Y2hpbGQoMCkpOworICAgICAgICAgICAgaWYgKHJpZ2h0LT5pc0ludCgtMSkpIHsKKyAgICAgICAg
ICAgICAgICBhcHBlbmRVbk9wPE5vdDMyLCBOb3Q2ND4obGVmdCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGlz
IHBhdHRlcm4gaXMgc3VwZXIgdXNlZnVsIG9uIGJvdGggeDg2IGFuZCBBUk02NCwgc2luY2UgdGhl
IGludmVyc2lvbiBvZiB0aGUgQ0FTIHJlc3VsdAogICAgICAgICAgICAgLy8gY2FuIGJlIGRvbmUg
d2l0aCB6ZXJvIGNvc3Qgb24geDg2IChqdXN0IGZsaXAgdGhlIHNldCBmcm9tIEUgdG8gTkUpIGFu
ZCBpdCdzIGEgcHJvZ3Jlc3Npb24KICAgICAgICAgICAgIC8vIG9uIEFSTTY0IChzaW5jZSBTVFgg
cmV0dXJucyAwIG9uIHN1Y2Nlc3MsIHNvIG9yZGluYXJpbHkgd2UgaGF2ZSB0byBmbGlwIGl0KS4K
LSAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQoMSkKLSAgICAgICAgICAg
ICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljV2Vha0NBUwotICAg
ICAgICAgICAgICAgICYmIGNhbkJlSW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpKSB7Ci0gICAg
ICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwobV92YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAg
ICAgICAgIGFwcGVuZENBUyhtX3ZhbHVlLT5jaGlsZCgwKSwgdHJ1ZSk7CisgICAgICAgICAgICBp
ZiAocmlnaHQtPmlzSW50KDEpICYmIGxlZnQtPm9wY29kZSgpID09IEF0b21pY1dlYWtDQVMgJiYg
Y2FuQmVJbnRlcm5hbChsZWZ0KSkgeworICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKGxl
ZnQpOworICAgICAgICAgICAgICAgIGFwcGVuZENBUyhsZWZ0LCB0cnVlKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFw
cGVuZEJpbk9wPFhvcjMyLCBYb3I2NCwgWG9yRG91YmxlLCBYb3JGbG9hdCwgQ29tbXV0YXRpdmU+
KAotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7
CisKKyAgICAgICAgICAgIC8vIEVPTiBQYXR0ZXJuOiBkID0gbiBeIChtIF4gLTEpCisgICAgICAg
ICAgICBhdXRvIHRyeUFwcGVuZEVPTiA9IFsmXSAoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKHJpZ2h0LT5vcGNvZGUoKSAhPSBCaXRYb3Ip
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogblZhbHVlID0gbGVmdDsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbWludXNPbmUgPSByaWdo
dC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2VkLmNvbnRhaW5zKG5WYWx1
ZSkgfHwgIW1pbnVzT25lLT5oYXNJbnQoKSB8fCAhbWludXNPbmUtPmlzSW50KC0xKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gZW9uLXdp
dGgtc2hpZnQgUGF0dGVybjogZCA9IG4gXiAoKG0gU2hpZnRUeXBlIGFtb3VudCkgXiAtMSkKKyAg
ICAgICAgICAgICAgICBhdXRvIHRyeUFwcGVuZEVPTldpdGhTaGlmdCA9IFsmXSAoVmFsdWUqIHNo
aWZ0VmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNv
ZGUgPSBvcGNvZGVCYXNlZE9uU2hpZnRLaW5kKHNoaWZ0VmFsdWUtPm9wY29kZSgpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFhvck5vdExlZnRTaGlmdDMyLCBYb3JOb3RMZWZ0U2hpZnQ2NCwg
CisgICAgICAgICAgICAgICAgICAgICAgICBYb3JOb3RSaWdodFNoaWZ0MzIsIFhvck5vdFJpZ2h0
U2hpZnQ2NCwgCisgICAgICAgICAgICAgICAgICAgICAgICBYb3JOb3RVbnNpZ25lZFJpZ2h0U2hp
ZnQzMiwgWG9yTm90VW5zaWduZWRSaWdodFNoaWZ0NjQpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJn
OjpUbXApKSAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHNoaWZ0VmFsdWUtPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgICAgICBWYWx1ZSogYW1vdW50VmFsdWUgPSBzaGlmdFZhbHVlLT5jaGlsZCgxKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5CZUludGVybmFsKHNoaWZ0VmFsdWUpIHx8IG1f
bG9ja2VkLmNvbnRhaW5zKG1WYWx1ZSkgfHwgIWltbShhbW91bnRWYWx1ZSkgfHwgYW1vdW50VmFs
dWUtPmFzSW50KCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBhbW91bnQgPSBhbW91bnRWYWx1ZS0+YXNJbnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZGF0YXNpemUgPSBtX3ZhbHVlLT50eXBl
KCkgPT0gSW50MzIgPyAzMiA6IDY0OworICAgICAgICAgICAgICAgICAgICBpZiAoYW1vdW50ID49
IGRhdGFzaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChuVmFsdWUpLCB0bXAobVZhbHVlKSwg
aW1tKGFtb3VudFZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgY29t
bWl0SW50ZXJuYWwoc2hpZnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kRU9O
V2l0aFNoaWZ0KHJpZ2h0LT5jaGlsZCgwKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgICAgICAgICAgVmFsdWUqIG1WYWx1ZSA9IHJpZ2h0LT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICBBaXI6Ok9wY29kZSBvcGNvZGUgPSBvcGNvZGVGb3JUeXBlKFhvck5v
dDMyLCBYb3JOb3Q2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlz
VmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkgfHwgbV9sb2Nr
ZWQuY29udGFpbnMobVZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChuVmFsdWUpLCB0bXAobVZhbHVlKSwg
dG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH07CisKKyAgICAgICAgICAgIGlmICh0cnlBcHBlbmRFT04obGVmdCwgcmlnaHQpIHx8IHRyeUFw
cGVuZEVPTihyaWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBhcHBlbmRCaW5PcDxYb3IzMiwgWG9yNjQsIFhvckRvdWJsZSwgWG9yRmxvYXQsIENvbW11
dGF0aXZlPihsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMKaW5kZXggNTkxZGEzYTQ0Zjg1ZTAwOTZkYTZkMjc4MDllYzk5MmI4YmUxNTVlYy4uNjYx
ZWFkZDIzNzNjNTRhNGJiYTk0N2E1NGJkYTI1NTdiZGI4YWU0YSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCkBAIC04NTksNiArODU5LDMwIEBA
IGFybTY0OiBPck5vdDMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiBhcm02NDogT3JOb3Q2NCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CiAgICAgVG1wLCBUbXAsIFRtcAogCithcm02NDogWG9yTm90
MzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgVG1wCisKK2FybTY0OiBY
b3JOb3Q2NCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCithcm02
NDogWG9yTm90TGVmdFNoaWZ0MzIgVTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAg
IFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yTm90UmlnaHRTaGlmdDMyIFU6RzozMiwg
VTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6
IFhvck5vdFVuc2lnbmVkUmlnaHRTaGlmdDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6
MzIKKyAgICBUbXAsIFRtcCwgSW1tLCBUbXAKKworYXJtNjQ6IFhvck5vdExlZnRTaGlmdDY0IFU6
Rzo2NCwgVTpHOjY0LCBVOkc6MzIsIEQ6Rzo2NAorICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCith
cm02NDogWG9yTm90UmlnaHRTaGlmdDY0IFU6Rzo2NCwgVTpHOjY0LCBVOkc6MzIsIEQ6Rzo2NAor
ICAgIFRtcCwgVG1wLCBJbW0sIFRtcAorCithcm02NDogWG9yTm90VW5zaWduZWRSaWdodFNoaWZ0
NjQgVTpHOjY0LCBVOkc6NjQsIFU6RzozMiwgRDpHOjY0CisgICAgVG1wLCBUbXAsIEltbSwgVG1w
CisKIGFybTY0OiBFeHRyYWN0SW5zZXJ0Qml0ZmllbGRBdExvd0VuZDMyIFU6RzozMiwgVTpHOjMy
LCBVOkc6MzIsIFVaRDpHOjMyCiAgICAgVG1wLCBJbW0sIEltbSwgVG1wCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuaAppbmRleCAzYmUyY2FhMmUxY2I2OGE2YWE0YWNjOGQzMzQ0YjMwNWNjOTUw
NzdjLi5jNzAzMmVjMDg0ZGRmZGQ5MzVlNTUyN2ZhYWU5MzU2ODE5ODQ4MTc5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5oCkBAIC00MzksNiArNDM5LDE0IEBAIHZvaWQgdGVzdEJJQzMyKCk7
CiB2b2lkIHRlc3RCSUM2NCgpOwogdm9pZCB0ZXN0T3JOb3QzMigpOwogdm9pZCB0ZXN0T3JOb3Q2
NCgpOwordm9pZCB0ZXN0WG9yTm90MzIoKTsKK3ZvaWQgdGVzdFhvck5vdDY0KCk7Cit2b2lkIHRl
c3RYb3JOb3RXaXRoTGVmdFNoaWZ0MzIoKTsKK3ZvaWQgdGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0
MzIoKTsKK3ZvaWQgdGVzdFhvck5vdFdpdGhVbnNpZ25lZFJpZ2h0U2hpZnQzMigpOwordm9pZCB0
ZXN0WG9yTm90V2l0aExlZnRTaGlmdDY0KCk7Cit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlm
dDY0KCk7Cit2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKTsKIHZvaWQg
dGVzdEJpdGZpZWxkWmVyb0V4dGVuZDMyKCk7CiB2b2lkIHRlc3RCaXRmaWVsZFplcm9FeHRlbmQ2
NCgpOwogdm9pZCB0ZXN0RXh0cmFjdFJlZ2lzdGVyMzIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzXzIuY3BwCmluZGV4IDc4YzU5MmIwMjc2YTZjOTBiYjRlOWQzMDQzNzc5YzlhMGJiYTc5
MDkuLjMyOTI1MzBiYTkzN2UxNWJiYmE2YjdlNGViZDk0YTIxNGU3MDhiMDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjNfMi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiM18yLmNwcApAQCAtNDQyNyw2ICs0NDI3LDM0MiBAQCB2b2lkIHRl
c3RPck5vdDY0KCkKICAgICB9CiB9CiAKK3ZvaWQgdGVzdFhvck5vdDMyKCkKK3sKKyAgICBpZiAo
SlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeIChtIF4gLTEpCisgICAgYXV0byB0ZXN0ID0g
WyZdIChpbnQzMl90IG4sIGludDMyX3QgbSkgLT4gaW50MzJfdCB7CisgICAgICAgIFByb2NlZHVy
ZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisg
ICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIx
KSk7CisgICAgICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogeG9yVmFsdWUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG1WYWx1ZSwg
bWludXNPbmVWYWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAg
ICAgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7
CisKKyAgICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChp
c0FSTTY0KCkpCisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImVvbiIp
OworICAgICAgICByZXR1cm4gaW52b2tlPGludDMyX3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9Owor
CisgICAgZm9yIChhdXRvIG4gOiBpbnQzMk9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IG0gOiBpbnQzMk9wZXJhbmRzKCkpCisgICAgICAgICAgICBDSEVDSyh0ZXN0KG4udmFsdWUsIG0u
dmFsdWUpID09IChuLnZhbHVlIF4gKG0udmFsdWUgXiAtMSkpKTsKKyAgICB9Cit9CisKK3ZvaWQg
dGVzdFhvck5vdDY0KCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZl
bCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBe
IChtIF4gLTEpCisgICAgYXV0byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSkgLT4g
aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBuVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAg
ICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG1WYWx1ZSwgbWludXNPbmVW
YWx1ZSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAgICAg
ICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0KCkp
CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgImVvbiIpOworICAgICAg
ICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpjb2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9y
IChhdXRvIG4gOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG0gOiBpbnQ2
NE9wZXJhbmRzKCkpCisgICAgICAgICAgICBDSEVDSyh0ZXN0KG4udmFsdWUsIG0udmFsdWUpID09
IChuLnZhbHVlIF4gKG0udmFsdWUgXiAtMUxMKSkpOworICAgIH0KK30KKwordm9pZCB0ZXN0WG9y
Tm90V2l0aExlZnRTaGlmdDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKKyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91
bnRzID0geyAxLCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAoKG0g
PDwgYW1vdW50KSBeIC0xKQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90
IG0sIGludDMyX3QgYW1vdW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAg
VmFsdWUqIG5WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAg
ICAgVmFsdWUqIG1WYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAg
ICAgICAgVmFsdWUqIGFtb3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGFtb3VudCk7CisgICAgICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsKKworICAg
ICAgICBWYWx1ZSogc2hpZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU2hs
LCBPcmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRW
YWx1ZSwgbWludXNPbmVWYWx1ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZh
bHVlKAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9y
VmFsdWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAg
ICAgaWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9u
LiosLiosLiosLipsc2wgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmco
YW1vdW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwg
cmVnZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxp
bnQzMl90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6
IGludDMyT3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQzMk9w
ZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAg
ICAgaW50MzJfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEo
dGVzdChuLCBtLCBhbW91bnQpLCBuIF4gKChtIDw8IGFtb3VudCkgXiAtMSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoUmlnaHRTaGlm
dDMyKCkKK3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworICAgIFZlY3RvcjxpbnQzMl90PiBhbW91bnRzID0geyAxLCAxNywg
MzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAoKG0gPj4gYW1vdW50KSBeIC0x
KQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50MzJfdCBuLCBpbnQzMl90IG0sIGludDMyX3QgYW1v
dW50KSAtPiBpbnQzMl90IHsKKyAgICAgICAgUHJvY2VkdXJlIHByb2M7CisgICAgICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICAgICAgVmFsdWUqIG5WYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICAgICAgVmFsdWUqIG1WYWx1
ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICAgICAgVmFsdWUqIGFt
b3VudFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IGFtb3VudCk7CisgICAgICAgIFZhbHVlKiBtaW51c09uZVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PENvbnN0NjRWYWx1ZT4ocHJvYywgT3JpZ2luKCksIC0xKTsKKworICAgICAgICBWYWx1ZSogc2hp
ZnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU1NociwgT3JpZ2luKCksIG1W
YWx1ZSwgYW1vdW50VmFsdWUpOworICAgICAgICBWYWx1ZSogeG9yVmFsdWUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIHNoaWZ0VmFsdWUsIG1pbnVzT25l
VmFsdWUpOworCisgICAgICAgIHJvb3QtPmFwcGVuZE5ld0NvbnRyb2xWYWx1ZSgKKyAgICAgICAg
ICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBuVmFsdWUsIHhvclZhbHVlKSk7CisKKyAg
ICAgICAgYXV0byBjb2RlID0gY29tcGlsZVByb2MocHJvYyk7CisgICAgICAgIGlmIChpc0FSTTY0
KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZ2V4KCIuKmVvbi4qLC4qLC4qLC4qYXNy
ICMiKTsKKyAgICAgICAgICAgIHJlZ2V4ICs9IHN0ZDo6dG9fc3RyaW5nKGFtb3VudCkgKyAiLioi
OworICAgICAgICAgICAgY2hlY2tVc2VzSW5zdHJ1Y3Rpb24oKmNvZGUsIHJlZ2V4LmNfc3RyKCks
IHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBpbnZva2U8aW50MzJfdD4oKmNvZGUs
IG4sIG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRz
KCkpIHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAg
IGludDMyX3QgbiA9IG5PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIGludDMyX3QgbSA9
IG1PcGVyYW5kLnZhbHVlOworICAgICAgICAgICAgICAgIENIRUNLX0VRKHRlc3QobiwgbSwgYW1v
dW50KSwgbiBeICgobSA+PiBhbW91bnQpIF4gLTEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCB0ZXN0WG9yTm90V2l0aFVuc2lnbmVkUmlnaHRTaGlmdDMyKCkK
K3sKKyAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpIDwgMikKKyAgICAg
ICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50MzJfdD4gYW1vdW50cyA9IHsgMSwgMTcsIDMxIH07
CisKKyAgICAvLyBUZXN0IFBhdHRlcm46IGQgPSBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkKKyAg
ICBhdXRvIHRlc3QgPSBbJl0gKGludDMyX3QgbiwgaW50MzJfdCBtLCBpbnQzMl90IGFtb3VudCkg
LT4gdWludDMyX3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgICAgICBWYWx1ZSogbVZhbHVlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4o
KSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpOworICAgICAgICBWYWx1ZSogYW1vdW50
VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1v
dW50KTsKKyAgICAgICAgVmFsdWUqIG1pbnVzT25lVmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29u
c3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpOworCisgICAgICAgIFZhbHVlKiBzaGlmdFZh
bHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBaU2hyLCBPcmlnaW4oKSwgbVZhbHVl
LCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1ZSwgbWludXNPbmVWYWx1
ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVlKAorICAgICAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9yVmFsdWUpKTsKKworICAgICAg
ICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAgaWYgKGlzQVJNNjQoKSkg
eworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9uLiosLiosLiosLipsc3IgIyIp
OworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1vdW50KSArICIuKiI7Cisg
ICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVnZXguY19zdHIoKSwgdHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTx1aW50MzJfdD4oKmNvZGUsIG4s
IG0pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8gbk9wZXJhbmQgOiBpbnQzMk9wZXJhbmRzKCkp
IHsKKyAgICAgICAgZm9yIChhdXRvIG1PcGVyYW5kIDogaW50MzJPcGVyYW5kcygpKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gYW1vdW50IDogYW1vdW50cykgeworICAgICAgICAgICAgICAgIHVp
bnQzMl90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBtID0g
bU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVzdChuLCBtLCBhbW91
bnQpLCBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoTGVmdFNoaWZ0NjQoKQoreworICAgIGlm
IChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICByZXR1cm47
CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisgICAgLy8g
VGVzdCBQYXR0ZXJuOiBkID0gbiBeICgobSA8PCBhbW91bnQpIF4gLTEpCisgICAgYXV0byB0ZXN0
ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGludDY0X3Qg
eworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBWYWx1
ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmln
aW4oKSwgYW1vdW50KTsKKyAgICAgICAgVmFsdWUqIG1pbnVzT25lVmFsdWUgPSByb290LT5hcHBl
bmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpOworCisgICAgICAgIFZhbHVl
KiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTaGwsIE9yaWdpbigp
LCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAgVmFsdWUqIHhvclZhbHVlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBzaGlmdFZhbHVlLCBtaW51
c09uZVZhbHVlKTsKKworICAgICAgICByb290LT5hcHBlbmROZXdDb250cm9sVmFsdWUoCisgICAg
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgblZhbHVlLCB4b3JWYWx1ZSkpOwor
CisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9jKHByb2MpOworICAgICAgICBpZiAoaXNB
Uk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmluZyByZWdleCgiLiplb24uKiwuKiwuKiwu
KmxzbCAjIik7CisgICAgICAgICAgICByZWdleCArPSBzdGQ6OnRvX3N0cmluZyhhbW91bnQpICsg
Ii4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3RydWN0aW9uKCpjb2RlLCByZWdleC5jX3N0
cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW52b2tlPGludDY0X3Q+KCpj
b2RlLCBuLCBtKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvIG5PcGVyYW5kIDogaW50NjRPcGVy
YW5kcygpKSB7CisgICAgICAgIGZvciAoYXV0byBtT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkg
eworICAgICAgICAgICAgZm9yIChhdXRvIGFtb3VudCA6IGFtb3VudHMpIHsKKyAgICAgICAgICAg
ICAgICBpbnQ2NF90IG4gPSBuT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBpbnQ2NF90
IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAgICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0s
IGFtb3VudCksIG4gXiAoKG0gPDwgYW1vdW50KSBeIC0xKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKQorewor
ICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkgPCAyKQorICAgICAgICBy
ZXR1cm47CisgICAgVmVjdG9yPGludDMyX3Q+IGFtb3VudHMgPSB7IDEsIDM0LCA2MyB9OworCisg
ICAgLy8gVGVzdCBQYXR0ZXJuOiBkID0gbiBeICgobSA+PiBhbW91bnQpIF4gLTEpCisgICAgYXV0
byB0ZXN0ID0gWyZdIChpbnQ2NF90IG4sIGludDY0X3QgbSwgaW50MzJfdCBhbW91bnQpIC0+IGlu
dDY0X3QgeworICAgICAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICAgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgICAgICBWYWx1ZSogblZhbHVlID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgICAgICBWYWx1ZSogbVZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAg
ICBWYWx1ZSogYW1vdW50VmFsdWUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgYW1vdW50KTsKKyAgICAgICAgVmFsdWUqIG1pbnVzT25lVmFsdWUgPSByb290
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgLTEpOworCisgICAgICAg
IFZhbHVlKiBzaGlmdFZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTU2hyLCBP
cmlnaW4oKSwgbVZhbHVlLCBhbW91bnRWYWx1ZSk7CisgICAgICAgIFZhbHVlKiB4b3JWYWx1ZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgc2hpZnRWYWx1
ZSwgbWludXNPbmVWYWx1ZSk7CisKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3Q29udHJvbFZhbHVl
KAorICAgICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5WYWx1ZSwgeG9yVmFs
dWUpKTsKKworICAgICAgICBhdXRvIGNvZGUgPSBjb21waWxlUHJvYyhwcm9jKTsKKyAgICAgICAg
aWYgKGlzQVJNNjQoKSkgeworICAgICAgICAgICAgc3RkOjpzdHJpbmcgcmVnZXgoIi4qZW9uLios
LiosLiosLiphc3IgIyIpOworICAgICAgICAgICAgcmVnZXggKz0gc3RkOjp0b19zdHJpbmcoYW1v
dW50KSArICIuKiI7CisgICAgICAgICAgICBjaGVja1VzZXNJbnN0cnVjdGlvbigqY29kZSwgcmVn
ZXguY19zdHIoKSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGludm9rZTxpbnQ2
NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAoYXV0byBuT3BlcmFuZCA6IGlu
dDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9wZXJhbmQgOiBpbnQ2NE9wZXJh
bmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQgOiBhbW91bnRzKSB7CisgICAg
ICAgICAgICAgICAgaW50NjRfdCBuID0gbk9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAg
aW50NjRfdCBtID0gbU9wZXJhbmQudmFsdWU7CisgICAgICAgICAgICAgICAgQ0hFQ0tfRVEodGVz
dChuLCBtLCBhbW91bnQpLCBuIF4gKChtID4+IGFtb3VudCkgXiAtMSkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdo
dFNoaWZ0NjQoKQoreworICAgIGlmIChKU0M6Ok9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCkg
PCAyKQorICAgICAgICByZXR1cm47CisgICAgVmVjdG9yPHVpbnQzMl90PiBhbW91bnRzID0geyAx
LCAxNywgMzEgfTsKKworICAgIC8vIFRlc3QgUGF0dGVybjogZCA9IG4gXiAoKG0gPj4gYW1vdW50
KSBeIC0xKQorICAgIGF1dG8gdGVzdCA9IFsmXSAoaW50NjRfdCBuLCBpbnQ2NF90IG0sIGludDMy
X3QgYW1vdW50KSAtPiB1aW50NjRfdCB7CisgICAgICAgIFByb2NlZHVyZSBwcm9jOworICAgICAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgICAgIFZhbHVlKiBu
VmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIFZhbHVlKiBtVmFsdWUgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMSk7CisgICAgICAgIFZhbHVlKiBhbW91bnRWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpOworICAgICAgICBWYWx1ZSogbWlu
dXNPbmVWYWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigp
LCAtMSk7CisKKyAgICAgICAgVmFsdWUqIHNoaWZ0VmFsdWUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFpTaHIsIE9yaWdpbigpLCBtVmFsdWUsIGFtb3VudFZhbHVlKTsKKyAgICAgICAg
VmFsdWUqIHhvclZhbHVlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9y
aWdpbigpLCBzaGlmdFZhbHVlLCBtaW51c09uZVZhbHVlKTsKKworICAgICAgICByb290LT5hcHBl
bmROZXdDb250cm9sVmFsdWUoCisgICAgICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCAK
KyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4o
KSwgblZhbHVlLCB4b3JWYWx1ZSkpOworCisgICAgICAgIGF1dG8gY29kZSA9IGNvbXBpbGVQcm9j
KHByb2MpOworICAgICAgICBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyByZWdleCgiLiplb24uKiwuKiwuKiwuKmxzciAjIik7CisgICAgICAgICAgICByZWdleCArPSBz
dGQ6OnRvX3N0cmluZyhhbW91bnQpICsgIi4qIjsKKyAgICAgICAgICAgIGNoZWNrVXNlc0luc3Ry
dWN0aW9uKCpjb2RlLCByZWdleC5jX3N0cigpLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gaW52b2tlPHVpbnQ2NF90PigqY29kZSwgbiwgbSk7CisgICAgfTsKKworICAgIGZvciAo
YXV0byBuT3BlcmFuZCA6IGludDY0T3BlcmFuZHMoKSkgeworICAgICAgICBmb3IgKGF1dG8gbU9w
ZXJhbmQgOiBpbnQ2NE9wZXJhbmRzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBhbW91bnQg
OiBhbW91bnRzKSB7CisgICAgICAgICAgICAgICAgdWludDY0X3QgbiA9IG5PcGVyYW5kLnZhbHVl
OworICAgICAgICAgICAgICAgIHVpbnQ2NF90IG0gPSBtT3BlcmFuZC52YWx1ZTsKKyAgICAgICAg
ICAgICAgICBDSEVDS19FUSh0ZXN0KG4sIG0sIGFtb3VudCksIG4gXiAoKG0gPj4gYW1vdW50KSBe
IC0xKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgdGVzdEJp
dGZpZWxkWmVyb0V4dGVuZDMyKCkKIHsKICAgICBpZiAoSlNDOjpPcHRpb25zOjpkZWZhdWx0QjNP
cHRMZXZlbCgpIDwgMikKQEAgLTYwMjUsNiArNjM2MSwxNCBAQCB2b2lkIGFkZEJpdFRlc3RzKGNv
bnN0IGNoYXIqIGZpbHRlciwgRGVxdWU8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4+JiB0YXNr
cykKICAgICBSVU4odGVzdEJJQzY0KCkpOwogICAgIFJVTih0ZXN0T3JOb3QzMigpKTsKICAgICBS
VU4odGVzdE9yTm90NjQoKSk7CisgICAgUlVOKHRlc3RYb3JOb3QzMigpKTsKKyAgICBSVU4odGVz
dFhvck5vdDY0KCkpOworICAgIFJVTih0ZXN0WG9yTm90V2l0aExlZnRTaGlmdDMyKCkpOworICAg
IFJVTih0ZXN0WG9yTm90V2l0aFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvck5vdFdp
dGhVbnNpZ25lZFJpZ2h0U2hpZnQzMigpKTsKKyAgICBSVU4odGVzdFhvck5vdFdpdGhMZWZ0U2hp
ZnQ2NCgpKTsKKyAgICBSVU4odGVzdFhvck5vdFdpdGhSaWdodFNoaWZ0NjQoKSk7CisgICAgUlVO
KHRlc3RYb3JOb3RXaXRoVW5zaWduZWRSaWdodFNoaWZ0NjQoKSk7CiAgICAgUlVOKHRlc3RCaXRm
aWVsZFplcm9FeHRlbmQzMigpKTsKICAgICBSVU4odGVzdEJpdGZpZWxkWmVyb0V4dGVuZDY0KCkp
OwogICAgIFJVTih0ZXN0RXh0cmFjdFJlZ2lzdGVyMzIoKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>