<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>12618</bug_id>
          
          <creation_ts>2007-08-23 16:44:05 +0400</creation_ts>
          <short_desc>uvesafb</short_desc>
          <delta_ts>2008-07-11 14:09:26 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>kernel-image-std-smp</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>led</reporter>
          <assigned_to name="Sergey Vlasov">vsu</assigned_to>
          <cc>icesik</cc>
    
    <cc>mike</cc>
    
    <cc>sbolshakov</cc>
    
    <cc>silicium</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54425</commentid>
    <comment_count>0</comment_count>
    <who name="">led</who>
    <bug_when>2007-08-23 16:44:05 +0400</bug_when>
    <thetext>Можно добавить в ядро uvesafb?

http://dev.gentoo.org/~spock/projects/uvesafb/

Есть патч для 2.6.18.

Проверил - работает на x86_64 и на x86_32. Требования VBE 2.0+ видеодаптер. 
Использование намного приятнее, чем стандартный vesafb: работает значительно 
быстрее, можно устанавливать разные режимы, в т.ч. и &quot;на лету&quot; (а не только при 
загрузке ядра), собирается в виде отдельного модуля, который можно поместить в 
initrd</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54426</commentid>
    <comment_count>1</comment_count>
      <attachid>2161</attachid>
    <who name="">led</who>
    <bug_when>2007-08-23 16:46:28 +0400</bug_when>
    <thetext>Created attachment 2161
uvesafb-0.1-rc3-2.6.18.patch

Собственно, патч.
Соотвественно, нужно ещё добавить в конфиг ядра &quot;CONFIG_FB_UVESA=m&quot; (сразу
после &quot;CONFIG_FB_VGA16=m&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55927</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-09-27 10:34:53 +0400</bug_when>
    <thetext>Давай-ка перевесим на std.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73908</commentid>
    <comment_count>3</comment_count>
    <who name="Michail Yakushin">silicium</who>
    <bug_when>2008-07-11 12:50:08 +0400</bug_when>
    <thetext>в std-def этот модуль уже есть. Бага давно протухла, закрываю.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2161</attachid>
            <date>2007-08-23 16:46:28 +0400</date>
            <delta_ts>2007-08-23 16:46:28 +0400</delta_ts>
            <desc>uvesafb-0.1-rc3-2.6.18.patch</desc>
            <filename>uvesafb-0.1-rc3-2.6.18.patch</filename>
            <type>text/plain</type>
            <size>70667</size>
            <attacher>led</attacher>
            
              <data encoding="base64">ZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvRG9jdW1lbnRhdGlvbi9mYi91dmVz
YWZiLnR4dCBrZXJuZWwtc291cmNlLTIuNi4xOC9Eb2N1bWVudGF0aW9uL2ZiL3V2ZXNhZmIudHh0
Ci0tLSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL0RvY3VtZW50YXRpb24vZmIvdXZlc2FmYi50
eHQJMTk3MC0wMS0wMSAwMzowMDowMCArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvRG9j
dW1lbnRhdGlvbi9mYi91dmVzYWZiLnR4dAkyMDA3LTA4LTIyIDIzOjU3OjU4ICswMzAwCkBAIC0w
LDAgKzEsMTg4IEBACisKK3V2ZXNhZmIgLSBBIEdlbmVyaWMgRHJpdmVyIGZvciBWQkUyKyBjb21w
bGlhbnQgdmlkZW8gY2FyZHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKworMS4gUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0tLS0K
KwordXZlc2FmYiBzaG91bGQgd29yayB3aXRoIGFueSB2aWRlbyBjYXJkIHRoYXQgaGFzIGEgVmlk
ZW8gQklPUyBjb21wbGlhbnQKK3dpdGggdGhlIFZCRSAyLjAgc3RhbmRhcmQuCisKK1VubGlrZSBv
dGhlciBkcml2ZXJzLCB1dmVzYWZiIG1ha2VzIHVzZSBvZiBhIHVzZXJzcGFjZSBoZWxwZXIgY2Fs
bGVkCit2ODZkLiAgdjg2ZCBpcyB1c2VkIHRvIHJ1biB0aGUgeDg2IFZpZGVvIEJJT1MgY29kZSBp
biBhIHNpbXVsYXRlZCBhbmQKK2NvbnRyb2xsZWQgZW52aXJvbm1lbnQuICBUaGlzIGFsbG93cyB1
dmVzYWZiIHRvIGZ1bmN0aW9uIG9uIGFyY2hlcyBvdGhlcgordGhhbiB4ODYuICBDaGVjayB0aGUg
djg2ZCBkb2N1bWVudGF0aW9uIGZvciBhIGxpc3Qgb2YgY3VycmVudGx5IHN1cHBvcnRlZAorYXJj
aGVzLgorCit2ODZkIHNvdXJjZSBjb2RlIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gdGhlIGZvbGxv
d2luZyB3ZWJzaXRlOgorICBodHRwOi8vZGV2LmdlbnRvby5vcmcvfnNwb2NrL3Byb2plY3RzL3V2
ZXNhZmIKKworUGxlYXNlIHJlZmVyIHRvIHRoZSB2ODZkIGRvY3VtZW50YXRpb24gZm9yIGRldGFp
bGVkIGNvbmZpZ3VyYXRpb24gYW5kCitpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCitOb3Rl
IHRoYXQgdGhlIHY4NmQgdXNlcnNwYWNlIGhlbHBlciBoYXMgdG8gYmUgYXZhaWxhYmxlIGF0IGFs
bCB0aW1lcyBpbgorb3JkZXIgZm9yIHV2ZXNhZmIgdG8gd29yayBwcm9wZXJseS4gIElmIHlvdSB3
YW50IHRvIHVzZSB1dmVzYWZiIGR1cmluZworZWFybHkgYm9vdCwgeW91IHdpbGwgaGF2ZSB0byBp
bmNsdWRlIHY4NmQgaW50byBhbiBpbml0cmFtZnMgaW1hZ2UsIGFuZAorZWl0aGVyIGNvbXBpbGUg
aXQgaW50byB0aGUga2VybmVsIG9yIHVzZSBpdCBhcyBhbiBpbml0cmQuCisKKzIuIENhdmVhdHMg
YW5kIGxpbWl0YXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1dmVzYWZiIGlz
IGEgX2dlbmVyaWNfIGRyaXZlciB3aGljaCBzdXBwb3J0cyBhIHdpZGUgdmFyaWV0eSBvZiB2aWRl
bworY2FyZHMsIGJ1dCB3aGljaCBpcyB1bHRpbWF0ZWx5IGxpbWl0ZWQgYnkgdGhlIFZpZGVvIEJJ
T1MgaW50ZXJmYWNlLgorVGhlIG1vc3QgaW1wb3J0YW50IGxpbWl0YXRpb25zIGFyZToKKworLSBM
YWNrIG9mIGFueSB0eXBlIG9mIGFjY2VsZXJhdGlvbi4KKy0gQSBzdHJpY3QgYW5kIGxpbWl0ZWQg
c2V0IG9mIHN1cHBvcnRlZCB2aWRlbyBtb2Rlcy4gIE9mdGVuIHRoZSBuYXRpdmUKKyAgb3IgbW9z
dCBvcHRpbWFsIHJlc29sdXRpb24vcmVmcmVzaCByYXRlIGZvciB5b3VyIHNldHVwIHdpbGwgbm90
IHdvcmsKKyAgd2l0aCB1dmVzYWZiLCBzaW1wbHkgYmVjYXVzZSB0aGUgVmlkZW8gQklPUyBkb2Vz
bid0IHN1cHBvcnQgdGhlCisgIHZpZGVvIG1vZGUgeW91IHdhbnQgdG8gdXNlLiAgVGhpcyBjYW4g
YmUgZXNwZWNpYWxseSBwYWluZnVsIHdpdGgKKyAgd2lkZXNjcmVlbiBwYW5lbHMsIHdoZXJlIG5h
dGl2ZSB2aWRlbyBtb2RlcyBkb24ndCBoYXZlIHRoZSA0OjMgYXNwZWN0CisgIHJhdGlvLCB3aGlj
aCBpcyB3aGF0IG1vc3QgQklPUy1lcyBhcmUgbGltaXRlZCB0by4KKy0gQWRqdXN0aW5nIHRoZSBy
ZWZyZXNoIHJhdGUgaXMgb25seSBwb3NzaWJsZSB3aXRoIGEgVkJFIDMuMCBjb21wbGlhbnQKKyAg
VmlkZW8gQklPUy4gIE5vdGUgdGhhdCBtYW55IG5WaWRpYSBWaWRlbyBCSU9TLWVzIGNsYWltIHRv
IGJlIFZCRSAzLjAKKyAgY29tcGxpYW50LCB3aGlsZSB0aGV5IHNpbXBseSBpZ25vcmUgYW55IHJl
ZnJlc2ggcmF0ZSBzZXR0aW5ncy4KKworMy4gQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0t
LQorCit1dmVzYWZiIGNhbiBiZSBjb21waWxlZCBlaXRoZXIgYXMgYSBtb2R1bGUsIG9yIGRpcmVj
dGx5IGludG8gdGhlIGtlcm5lbC4KK0luIGJvdGggY2FzZXMgaXQgc3VwcG9ydHMgdGhlIHNhbWUg
c2V0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2gKK2FyZSBlaXRoZXIgZ2l2ZW4gb24g
dGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgb3IgYXMgbW9kdWxlIHBhcmFtZXRlcnMsIGUuZy46CisK
KyB2aWRlbz11dmVzYWZiOjEwMjR4NzY4LTMyLG10cnI6Myx5d3JhcCAoY29tcGlsZWQgaW50byB0
aGUga2VybmVsKQorCisgIyBtb2Rwcm9iZSB1dmVzYWZiIG1vZGU9MTAyNHg3NjgtMzIgbXRycj0z
IHNjcm9sbD15d3JhcCAgKG1vZHVsZSkKKworQWNjZXB0ZWQgb3B0aW9uczoKKworeXBhbiAgICBF
bmFibGUgZGlzcGxheSBwYW5uaW5nIHVzaW5nIHRoZSBWRVNBIHByb3RlY3RlZCBtb2RlCisgICAg
ICAgIGludGVyZmFjZS4gIFRoZSB2aXNpYmxlIHNjcmVlbiBpcyBqdXN0IGEgd2luZG93IG9mIHRo
ZQorICAgICAgICB2aWRlbyBtZW1vcnksIGNvbnNvbGUgc2Nyb2xsaW5nIGlzIGRvbmUgYnkgY2hh
bmdpbmcgdGhlCisgICAgICAgIHN0YXJ0IG9mIHRoZSB3aW5kb3cuICBBdmFpbGFibGUgb24geDg2
IG9ubHkuCisKK3l3cmFwICAgU2FtZSBhcyB5cGFuLCBidXQgYXNzdW1lcyB5b3VyIGdmeCBib2Fy
ZCBjYW4gd3JhcC1hcm91bmQKKyAgICAgICAgdGhlIHZpZGVvIG1lbW9yeSAoaS5lLiBzdGFydHMg
cmVhZGluZyBmcm9tIHRvcCBpZiBpdAorICAgICAgICByZWFjaGVzIHRoZSBlbmQgb2YgdmlkZW8g
bWVtb3J5KS4gIEZhc3RlciB0aGFuIHlwYW4uCisJCUF2YWlsYWJsZSBvbiB4ODYgb25seS4KKwor
cmVkcmF3ICBTY3JvbGwgYnkgcmVkcmF3aW5nIHRoZSBhZmZlY3RlZCBwYXJ0IG9mIHRoZSBzY3Jl
ZW4sIHRoaXMKKyAgICAgICAgaXMgdGhlIHNhZmUgKGFuZCBzbG93KSBkZWZhdWx0LgorCisoSWYg
eW91J3JlIHVzaW5nIHV2ZXNhZmIgYXMgYSBtb2R1bGUsIHRoZSBhYm92ZSB0aHJlZSBvcHRpb25z
IGFyZQorIHVzZWQgYSBwYXJhbWV0ZXIgb2YgdGhlIHNjcm9sbCBvcHRpb24sIGUuZy4gc2Nyb2xs
PXlwYW4uKQorCit2Z2FwYWwgIFVzZSB0aGUgc3RhbmRhcmQgVkdBIHJlZ2lzdGVycyBmb3IgcGFs
ZXR0ZSBjaGFuZ2VzLgorCitwbWlwYWwgIFVzZSB0aGUgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNl
IGZvciBwYWxldHRlIGNoYW5nZXMuCisgICAgICAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhl
IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBpcworICAgICAgICBhdmFpbGFibGUuICBBdmFpbGFi
bGUgb24geDg2IG9ubHkuCisKK210cnI6biAgU2V0dXAgbWVtb3J5IHR5cGUgcmFuZ2UgcmVnaXN0
ZXJzIGZvciB0aGUgZnJhbWVidWZmZXIKKyAgICAgICAgd2hlcmUgbjoKKyAgICAgICAgICAgICAg
MCAtIGRpc2FibGVkIChlcXVpdmFsZW50IHRvIG5vbXRycikgKGRlZmF1bHQpCisgICAgICAgICAg
ICAgIDEgLSB1bmNhY2hhYmxlCisgICAgICAgICAgICAgIDIgLSB3cml0ZS1iYWNrCisgICAgICAg
ICAgICAgIDMgLSB3cml0ZS1jb21iaW5pbmcKKyAgICAgICAgICAgICAgNCAtIHdyaXRlLXRocm91
Z2gKKworICAgICAgICBJZiB5b3Ugc2VlIHRoZSBmb2xsb3dpbmcgaW4gZG1lc2csIGNob29zZSB0
aGUgdHlwZSB0aGF0IG1hdGNoZXMKKyAgICAgICAgdGhlIG9sZCBvbmUuICBJbiB0aGlzIGV4YW1w
bGUsIHVzZSAibXRycjoyIi4KKy4uLgorbXRycjogdHlwZSBtaXNtYXRjaCBmb3IgZTAwMDAwMDAs
ODAwMDAwMCBvbGQ6IHdyaXRlLWJhY2sgbmV3OiB3cml0ZS1jb21iaW5pbmcKKy4uLgorCitub210
cnIgIERvIG5vdCB1c2UgbWVtb3J5IHR5cGUgcmFuZ2UgcmVnaXN0ZXJzLgorCit2cmVtYXA6bgor
ICAgICAgICBSZW1hcCAnbicgTWlCIG9mIHZpZGVvIFJBTS4gIElmIDAgb3Igbm90IHNwZWNpZmll
ZCwgcmVtYXAgbWVtb3J5CisgICAgICAgIGFjY29yZGluZyB0byB2aWRlbyBtb2RlLgorCit2dG90
YWw6bgorICAgICAgICBJZiB0aGUgdmlkZW8gQklPUyBvZiB5b3VyIGNhcmQgaW5jb3JyZWN0bHkg
ZGV0ZXJtaW5lcyB0aGUgdG90YWwKKyAgICAgICAgYW1vdW50IG9mIHZpZGVvIFJBTSwgdXNlIHRo
aXMgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSBCSU9TIChpbiBNaUIpLgorCis8bW9kZT4gIFRoZSBt
b2RlIHlvdSB3YW50IHRvIHNldCwgaW4gdGhlIHN0YW5kYXJkIG1vZGVkYiBmb3JtYXQuICBSZWZl
ciB0bworICAgICAgICBtb2RlZGIudHh0IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uLiAgV2hl
biB1dmVzYWZiIGlzIGNvbXBpbGVkIGFzCisgICAgICAgIGEgbW9kdWxlLCB0aGUgbW9kZSBzdHJp
bmcgc2hvdWxkIGJlIHByb3ZpZGVkIGFzIGEgdmFsdWUgb2YgdGhlCisgICAgICAgICdtb2RlJyBv
cHRpb24uCisKK3ZiZW1vZGU6eAorICAgICAgICBGb3JjZSB0aGUgdXNlIG9mIFZCRSBtb2RlIHgu
ICBUaGUgbW9kZSB3aWxsIG9ubHkgYmUgc2V0IGlmIGl0J3MKKyAgICAgICAgZm91bmQgaW4gdGhl
IFZCRS1wcm92aWRlZCBsaXN0IG9mIHN1cHBvcnRlZCBtb2Rlcy4KKyAgICAgICAgTk9URTogVGhl
IG1vZGUgbnVtYmVyICd4JyBzaG91bGQgYmUgc3BlY2lmaWVkIGluIFZFU0EgbW9kZSBudW1iZXIK
KyAgICAgICAgbm90YXRpb24sIG5vdCB0aGUgTGludXgga2VybmVsIG9uZSAoZWcuIDI1NyBpbnN0
ZWFkIG9mIDc2OSkuCisgICAgICAgIEhJTlQ6IElmIHlvdSB1c2UgdGhpcyBvcHRpb24gYmVjYXVz
ZSBub3JtYWwgPG1vZGU+IHBhcmFtZXRlciBkb2VzCisgICAgICAgIG5vdCB3b3JrIGZvciB5b3Ug
YW5kIHlvdSB1c2UgYSBYIHNlcnZlciwgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8KKyAgICAgICAg
c2V0IHRoZSAnbm9jcnRjJyBvcHRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIHZpZGVvIG1vZGUgaXMg
cHJvcGVybHkKKyAgICAgICAgcmVzdG9yZWQgYWZ0ZXIgY29uc29sZSA8LT4gWCBzd2l0Y2hlcy4K
Kworbm9jcnRjICBEbyBub3QgdXNlIENSVEMgdGltaW5ncyB3aGlsZSBzZXR0aW5nIHRoZSB2aWRl
byBtb2RlLiAgVGhpcyBvcHRpb24KKyAgICAgICAgaGFzIGFueSBlZmZlY3Qgb25seSBpZiB0aGUg
VmlkZW8gQklPUyBpcyBWQkUgMy4wIGNvbXBsaWFudC4gIFVzZSBpdAorICAgICAgICBpZiB5b3Ug
aGF2ZSBwcm9ibGVtcyB3aXRoIG1vZGVzIHNldCB0aGUgc3RhbmRhcmQgd2F5LiAgTm90ZSB0aGF0
CisgICAgICAgIHVzaW5nIHRoaXMgb3B0aW9uIGltcGxpZXMgdGhhdCBhbnkgcmVmcmVzaCByYXRl
IGFkanVzdG1lbnRzIHdpbGwKKyAgICAgICAgYmUgaWdub3JlZCBhbmQgdGhlIHJlZnJlc2ggcmF0
ZSB3aWxsIHN0YXkgYXQgeW91ciBCSU9TIGRlZmF1bHQgKDYwIEh6KS4KKworbm9lZGlkICBEbyBu
b3QgdHJ5IHRvIGZldGNoIGFuZCB1c2UgRURJRC1wcm92aWRlZCBtb2Rlcy4KKworbm9ibGFuayBE
aXNhYmxlIGhhcmR3YXJlIGJsYW5raW5nLgorCit2ODZkOnBhdGgKKyAgICAgICAgU2V0IHBhdGgg
dG8gdGhlIHY4NmQgZXhlY3V0YWJsZS4gVGhpcyBvcHRpb24gaXMgb25seSBhdmFpbGFibGUgYXMK
KyAgICAgICAgYSBtb2R1bGUgcGFyYW1ldGVyLCBhbmQgbm90IGFzIGEgcGFydCBvZiB0aGUgdmlk
ZW89IHN0cmluZy4gIElmIHlvdQorICAgICAgICBuZWVkIHRvIHVzZSBpdCBhbmQgaGF2ZSB1dmVz
YWZiIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgdXNlCisgICAgICAgIHV2ZXNhZmIudjg2ZD0icGF0
aCIuCisKK0FkZGl0aW9uYWxseSwgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIG1heSBiZSBwcm92
aWRlZC4gIFRoZXkgYWxsIG92ZXJyaWRlIHRoZQorRURJRC1wcm92aWRlZCB2YWx1ZXMgYW5kIEJJ
T1MgZGVmYXVsdHMuICBSZWZlciB0byB5b3VyIG1vbml0b3IncyBzcGVjcyB0byBnZXQKK3RoZSBj
b3JyZWN0IHZhbHVlcyBmb3IgbWF4aGYsIG1heHZmIGFuZCBtYXhjbGsgZm9yIHlvdXIgaGFyZHdh
cmUuCisKK21heGhmOm4gICAgIE1heGltdW0gaG9yaXpvbnRhbCBmcmVxdWVuY3kgKGluIGtIeiku
CittYXh2ZjpuICAgICBNYXhpbXVtIHZlcnRpY2FsIGZyZXF1ZW5jeSAoaW4gSHopLgorbWF4Y2xr
Om4gICAgTWF4aW11bSBwaXhlbCBjbG9jayAoaW4gTUh6KS4KKworNC4gVGhlIHN5c2ZzIGludGVy
ZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1dmVzYWZiIHByb3ZpZGVzIHNldmVyYWwg
c3lzZnMgbm9kZXMgZm9yIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzIGFuZAorYWRkaXRpb25hbCBp
bmZvcm1hdGlvbi4KKworRHJpdmVyIGF0dHJpYnV0ZXM6CisKKy9zeXMvYnVzL3BsYXRmb3JtL2Ry
aXZlcnMvdXZlc2FmYgorICAtIHY4NmQgKGRlZmF1bHQ6IC9zYmluL3Y4NmQpCisgICAgUGF0aCB0
byB0aGUgdjg2ZCBleGVjdXRhYmxlLiB2ODZkIGlzIHN0YXJ0ZWQgYnkgdXZlc2FmYgorICAgIGlm
IGFuIGluc3RhbmNlIG9mIHRoZSBkYWVtb24gaXNuJ3QgYWxyZWFkeSBydW5uaW5nLgorCitEZXZp
Y2UgYXR0cmlidXRlczoKKworL3N5cy9idXMvcGxhdGZvcm0vZHJpdmVycy91dmVzYWZiL3V2ZXNh
ZmIuMAorICAtIG5vY3J0YworICAgIFVzZSB0aGUgZGVmYXVsdCByZWZyZXNoIHJhdGUgKDYwIEh6
KSBpZiBzZXQgdG8gMS4KKworICAtIG9lbV9wcm9kdWN0X25hbWUKKyAgLSBvZW1fcHJvZHVjdF9y
ZXYKKyAgLSBvZW1fc3RyaW5nCisgIC0gb2VtX3ZlbmRvcgorICAgIEluZm9ybWF0aW9uIGFib3V0
IHRoZSBjYXJkIGFuZCBpdHMgbWFrZXIuCisKKyAgLSB2YmVfbW9kZXMKKyAgICBBIGxpc3Qgb2Yg
dmlkZW8gbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBWaWRlbyBCSU9TIGFsb25nIHdpdGggdGhlaXIK
KyAgICBWQkUgbW9kZSBudW1iZXJzIGluIGhleC4KKworICAtIHZiZV92ZXJzaW9uCisgICAgQSBC
Q0QgdmFsdWUgaW5kaWNhdGluZyB0aGUgaW1wbGVtZW50ZWQgVkJFIHN0YW5kYXJkLgorCis1LiBN
aXNjZWxsYW5lb3VzCistLS0tLS0tLS0tLS0tLS0tCisKK1V2ZXNhZmIgd2lsbCBzZXQgYSB2aWRl
byBtb2RlIHdpdGggdGhlIGRlZmF1bHQgcmVmcmVzaCByYXRlIGFuZCB0aW1pbmdzCitmcm9tIHRo
ZSBWaWRlbyBCSU9TIGlmIHlvdSBzZXQgcGl4Y2xvY2sgdG8gMCBpbiBmYl92YXJfc2NyZWVuaW5m
by4KKworCistLQorIE1pY2hhbCBKYW51c3pld3NraSA8c3BvY2tAZ2VudG9vLm9yZz4KKyBMYXN0
IHVwZGF0ZWQ6IDIwMDctMDYtMTYKKworIERvY3VtZW50YXRpb24gb2YgdGhlIHV2ZXNhZmIgb3B0
aW9ucyBpcyBsb29zZWx5IGJhc2VkIG9uIHZlc2FmYi50eHQuCisKZGlmZiAtdXJOIGtlcm5lbC1z
b3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy92aWRlby9LY29uZmlnIGtlcm5lbC1zb3VyY2UtMi42
LjE4L2RyaXZlcnMvdmlkZW8vS2NvbmZpZwotLS0ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9k
cml2ZXJzL3ZpZGVvL0tjb25maWcJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVs
LXNvdXJjZS0yLjYuMTgvZHJpdmVycy92aWRlby9LY29uZmlnCTIwMDctMDgtMjIgMjM6NTc6NTgg
KzAzMDAKQEAgLTU0MCw2ICs1NDAsMjQgQEAKIAkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBk
ZXZpY2UgZHJpdmVyIGZvciBnZW5lcmljIFRHQSBncmFwaGljCiAJICBjYXJkcy4gU2F5IFkgaWYg
eW91IGhhdmUgb25lIG9mIHRob3NlLgogCitjb25maWcgRkJfVVZFU0EKKwl0cmlzdGF0ZSAiVXNl
cnNwYWNlIFZFU0EgVkdBIGdyYXBoaWNzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGQiAmJiBDT05O
RUNUT1IKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQor
CXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJc2VsZWN0IEZCX01PREVfSEVMUEVSUworCWhlbHAK
KwkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkcml2ZXIgZm9yIGdlbmVyaWMgVkJFIDIuMCBj
b21wbGlhbnQKKwkgIGdyYXBoaWMgY2FyZHMuIEl0IGNhbiBhbHNvIHRha2UgYWR2YW50YWdlIG9m
IFZCRSAzLjAgZmVhdHVyZXMsCisJICBzdWNoIGFzIHJlZnJlc2ggcmF0ZSBhZGp1c3RtZW50Lgor
CisJICBUaGlzIGRyaXZlciBnZW5lcmFsbHkgcHJvdmlkZXMgbW9yZSBmZWF0dXJlcyB0aGFuIHZl
c2FmYiBidXQKKwkgIHJlcXVpcmVzIGEgdXNlcnNwYWNlIGhlbHBlciBhcHBsaWNhdGlvbiBjYWxs
ZWQgJ3Y4NmQnLiBTZWUKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vZmIvdXZlc2FmYi50eHQ+IGZv
ciBtb3JlIGluZm9ybWF0aW9uLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgRkJf
VkVTQQogCWJvb2wgIlZFU0EgVkdBIGdyYXBoaWNzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoRkIg
PSB5KSAmJiBYODYKZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy92
aWRlby9NYWtlZmlsZSBrZXJuZWwtc291cmNlLTIuNi4xOC9kcml2ZXJzL3ZpZGVvL01ha2VmaWxl
Ci0tLSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUJMjAw
Ni0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZHJpdmVycy92
aWRlby9NYWtlZmlsZQkyMDA3LTA4LTIyIDIzOjU3OjU4ICswMzAwCkBAIC0xMDAsNiArMTAwLDcg
QEAKIG9iai0kKENPTkZJR19GQl9QTlg0MDA4X0RVTV9SR0IpICArPSBwbng0MDA4LwogCiAjIFBs
YXRmb3JtIG9yIGZhbGxiYWNrIGRyaXZlcnMgZ28gaGVyZQorb2JqLSQoQ09ORklHX0ZCX1VWRVNB
KSAgICAgICAgICAgICs9IHV2ZXNhZmIubwogb2JqLSQoQ09ORklHX0ZCX1ZFU0EpICAgICAgICAg
ICAgICs9IHZlc2FmYi5vCiBvYmotJChDT05GSUdfRkJfSU1BQykgICAgICAgICAgICAgKz0gaW1h
Y2ZiLm8KIG9iai0kKENPTkZJR19GQl9WR0ExNikgICAgICAgICAgICArPSB2Z2ExNmZiLm8gdmdh
c3RhdGUubwpkaWZmIC11ck4ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9kcml2ZXJzL3ZpZGVv
L21vZGVkYi5jIGtlcm5lbC1zb3VyY2UtMi42LjE4L2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKLS0t
IGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZHJpdmVycy92aWRlby9tb2RlZGIuYwkyMDA2LTA5
LTIwIDA2OjQyOjA2ICswMzAwCisrKyBrZXJuZWwtc291cmNlLTIuNi4xOC9kcml2ZXJzL3ZpZGVv
L21vZGVkYi5jCTIwMDctMDgtMjIgMjM6NTc6NTggKzAzMDAKQEAgLTYwNywyOCArNjA3LDI1IEBA
CiAJRFBSSU5USygiVHJ5aW5nIHNwZWNpZmllZCB2aWRlbyBtb2RlJXMgJWl4JWlcbiIsCiAJICAg
IHJlZnJlc2hfc3BlY2lmaWVkID8gIiIgOiAiIChpZ25vcmluZyByZWZyZXNoIHJhdGUpIiwgeHJl
cywgeXJlcyk7CiAKLQlkaWZmID0gcmVmcmVzaDsKKwlkaWZmID0gKHJlZnJlc2hfc3BlY2lmaWVk
KSA/IHJlZnJlc2ggOiAwOwogCWJlc3QgPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwgZGJzaXplOyBp
KyspIHsKLQkJaWYgKChuYW1lX21hdGNoZXMoZGJbaV0sIG5hbWUsIG5hbWVsZW4pICYmCi0JCQkh
ZmJfdHJ5X21vZGUodmFyLCBpbmZvLCAmZGJbaV0sIGJwcCkpKQotCQkJcmV0dXJuIDE7Ci0JCWlm
IChyZXNfc3BlY2lmaWVkICYmIHJlc19tYXRjaGVzKGRiW2ldLCB4cmVzLCB5cmVzKSkgewotCQkJ
aWYoIWZiX3RyeV9tb2RlKHZhciwgaW5mbywgJmRiW2ldLCBicHApKSB7Ci0JCQkJaWYoIXJlZnJl
c2hfc3BlY2lmaWVkIHx8IGRiW2ldLnJlZnJlc2ggPT0gcmVmcmVzaCkKLQkJCQkJcmV0dXJuIDE7
Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmKGRpZmYgPiBhYnMoZGJbaV0ucmVmcmVzaCAtIHJlZnJlc2gp
KSB7Ci0JCQkJCQlkaWZmID0gYWJzKGRiW2ldLnJlZnJlc2ggLSByZWZyZXNoKTsKLQkJCQkJCWJl
c3QgPSBpOwotCQkJCQl9CisJCWlmICgobmFtZV9tYXRjaGVzKGRiW2ldLCBuYW1lLCBuYW1lbGVu
KSB8fAorCQkgICAgKHJlc19zcGVjaWZpZWQgJiYgcmVzX21hdGNoZXMoZGJbaV0sIHhyZXMsIHly
ZXMpKSkgJiYKKwkJICAgICFmYl90cnlfbW9kZSh2YXIsIGluZm8sICZkYltpXSwgYnBwKSkgewor
CQkJaWYgKHJlZnJlc2hfc3BlY2lmaWVkICYmIGRiW2ldLnJlZnJlc2ggPT0gcmVmcmVzaCkgewor
CQkJCXJldHVybiAxOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZGlmZiA8IGRiW2ldLnJlZnJlc2gp
IHsKKwkJCQkJZGlmZiA9IGRiW2ldLnJlZnJlc2g7CisJCQkJCWJlc3QgPSBpOwogCQkJCX0KIAkJ
CX0KIAkJfQogCX0KIAlpZiAoYmVzdCAhPSAtMSkgewogCQlmYl90cnlfbW9kZSh2YXIsIGluZm8s
ICZkYltiZXN0XSwgYnBwKTsKLQkJcmV0dXJuIDI7CisJCXJldHVybiAocmVmcmVzaF9zcGVjaWZp
ZWQpID8gMiA6IDE7CiAJfQogCiAJZGlmZiA9IHhyZXMgKyB5cmVzOwpAQCAtOTM2LDYgKzkzMyw3
IEBACiAJCWtmcmVlKHBvcyk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoZmJfZGVzdHJveV9t
b2RlbGlzdCk7CiAKIC8qKgogICogZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0OiBjb252ZXJ0IG1v
ZGUgYXJyYXkgdG8gbW9kZSBsaXN0CmRpZmYgLXVyTiBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmln
L2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGtlcm5lbC1zb3VyY2UtMi42LjE4L2RyaXZlcnMvdmlk
ZW8vdXZlc2FmYi5jCi0tLSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2RyaXZlcnMvdmlkZW8v
dXZlc2FmYi5jCTE5NzAtMDEtMDEgMDM6MDA6MDAgKzAzMDAKKysrIGtlcm5lbC1zb3VyY2UtMi42
LjE4L2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jCTIwMDctMDgtMjMgMDA6MDU6MzcgKzAzMDAKQEAg
LTAsMCArMSwyMDc2IEBACisvKgorICogQSBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFZCRSAyLjAr
IGNvbXBsaWFudCB2aWRlbyBjYXJkcworICoKKyAqIChjKSAyMDA3IE1pY2hhbCBKYW51c3pld3Nr
aSA8c3BvY2tAZ2VudG9vLm9yZz4KKyAqICAgICBMb29zZWx5IGJhc2VkIHVwb24gdGhlIHZlc2Fm
YiBkcml2ZXIuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp
bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8
bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51
eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvY29ubmVjdG9yLmg+CisjaW5jbHVkZSA8
bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5j
bHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxs
aW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8dmlkZW8vZWRp
ZC5oPgorI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgorI2luY2x1ZGUgPHZpZGVvL3V2ZXNhZmIuaD4K
KyNpZmRlZiBDT05GSUdfTVRSUgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjZW5kaWYKKyNpbmNs
dWRlICJlZGlkLmgiCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisKK3N0cnVjdCBybmRfc3Rh
dGUge3UzMiBzMSwgczIsIHMzO307CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgcm5k
X3N0YXRlLCBuZXRfcmFuZF9zdGF0ZSk7CisKKyNkZWZpbmUgVEFVU1dPUlRIRShzLGEsYixjLGQp
ICgocyZjKTw8ZCkgXiAoKChzIDw8YSkgXiBzKT4+YikKKworc3RhdGljIHUzMiByYW5kb20zMih2
b2lkKQoreworCXN0cnVjdCBybmRfc3RhdGUgKnN0YXRlID0gJmdldF9jcHVfdmFyKG5ldF9yYW5k
X3N0YXRlKTsKKworCXN0YXRlLT5zMSA9IFRBVVNXT1JUSEUoc3RhdGUtPnMxLCAxMywgMTksIDQy
OTQ5NjcyOTRVTCwgMTIpOworCXN0YXRlLT5zMiA9IFRBVVNXT1JUSEUoc3RhdGUtPnMyLCAyLCAy
NSwgNDI5NDk2NzI4OFVMLCA0KTsKKwlzdGF0ZS0+czMgPSBUQVVTV09SVEhFKHN0YXRlLT5zMywg
MywgMTEsIDQyOTQ5NjcyODBVTCwgMTcpOworCXB1dF9jcHVfdmFyKHN0YXRlKTsKKwlyZXR1cm4g
KHN0YXRlLT5zMSBeIHN0YXRlLT5zMiBeIHN0YXRlLT5zMyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg
Y2JfaWQgdXZlc2FmYl9jbl9pZCA9IHsKKwkuaWR4ID0gQ05fSURYX1Y4NkQsCisJLnZhbCA9IENO
X1ZBTF9WODZEX1VWRVNBRkIKK307CitzdGF0aWMgY2hhciB2ODZkX3BhdGhbUEFUSF9NQVhdID0g
Ii9zYmluL3Y4NmQiOworc3RhdGljIGNoYXIgdjg2ZF9zdGFydGVkOwkvKiBoYXMgdjg2ZCBiZWVu
IHN0YXJ0ZWQgYnkgdXZlc2FmYj8gKi8KKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5m
byB1dmVzYWZiX2ZpeCBfX2RldmluaXRkYXRhID0geworCS5pZAk9ICJWRVNBIFZHQSIsCisJLnR5
cGUJPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMsCisJLmFjY2VsCT0gRkJfQUNDRUxfTk9ORSwKKwku
dmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUiwKK307CisKK3N0YXRpYyBpbnQgbXRycgkJX19k
ZXZpbml0ZGF0YSA9IDM7IC8qIGVuYWJsZSBtdHJyIGJ5IGRlZmF1bHQgKi8KK3N0YXRpYyBpbnQg
YmxhbmsJX19kZXZpbml0ZGF0YSA9IDE7IC8qIGVuYWJsZSBibGFua2luZyBieSBkZWZhdWx0ICov
CitzdGF0aWMgaW50IHlwYW4JCV9fZGV2aW5pdGRhdGEgPSAxOyAvKiAwOiBzY3JvbGwsIDE6IHlw
YW4sIDI6IHl3cmFwICovCitzdGF0aWMgaW50IHBtaV9zZXRwYWwJX19kZXZpbml0ZGF0YSA9IDE7
IC8qIHVzZSBQTUkgZm9yIHBhbGV0dGUgY2hhbmdlcyAqLworc3RhdGljIGludCBub2NydGMJX19k
ZXZpbml0ZGF0YTsgLyogaWdub3JlIENSVEMgc2V0dGluZ3MgKi8KK3N0YXRpYyBpbnQgbm9lZGlk
CV9fZGV2aW5pdGRhdGE7IC8qIGRvbid0IHRyeSBEREMgdHJhbnNmZXJzICovCitzdGF0aWMgaW50
IHZyYW1fcmVtYXAJX19kZXZpbml0ZGF0YTsgLyogc2V0IGFtdC4gb2YgbWVtb3J5IHRvIGJlIHVz
ZWQgKi8KK3N0YXRpYyBpbnQgdnJhbV90b3RhbAlfX2RldmluaXRkYXRhOyAvKiBzZXQgdG90YWwg
YW1vdW50IG9mIG1lbW9yeSAqLworc3RhdGljIHUxNiBtYXhjbGsJX19kZXZpbml0ZGF0YTsgLyog
bWF4aW11bSBwaXhlbCBjbG9jayAqLworc3RhdGljIHUxNiBtYXh2ZglfX2RldmluaXRkYXRhOyAv
KiBtYXhpbXVtIHZlcnRpY2FsIGZyZXF1ZW5jeSAqLworc3RhdGljIHUxNiBtYXhoZglfX2Rldmlu
aXRkYXRhOyAvKiBtYXhpbXVtIGhvcml6b250YWwgZnJlcXVlbmN5ICovCitzdGF0aWMgdTE2IHZi
ZW1vZGUJX19kZXZpbml0ZGF0YTsgLyogZm9yY2UgdXNlIG9mIGEgc3BlY2lmaWMgVkJFIG1vZGUg
Ki8KK3N0YXRpYyBjaGFyICptb2RlX29wdGlvbiBfX2RldmluaXRkYXRhOworCitzdGF0aWMgc3Ry
dWN0IHV2ZXNhZmJfa3Rhc2sgKnV2ZmJfdGFza3NbVVZFU0FGQl9UQVNLU19NQVhdOworc3RhdGlj
IERFRklORV9NVVRFWCh1dmZiX2xvY2spOworCisvKgorICogQSBoYW5kbGVyIGZvciByZXBsaWVz
IGZyb20gdXNlcnNwYWNlLgorICoKKyAqIE1ha2Ugc3VyZSBlYWNoIG1lc3NhZ2UgcGFzc2VzIGNv
bnNpc3RlbmN5IGNoZWNrcyBhbmQgaWYgaXQgZG9lcywKKyAqIGZpbmQgdGhlIGtlcm5lbCBwYXJ0
IG9mIHRoZSB0YXNrIHN0cnVjdCwgY29weSB0aGUgcmVnaXN0ZXJzIGFuZAorICogdGhlIGJ1ZmZl
ciBjb250ZW50cyBhbmQgdGhlbiBjb21wbGV0ZSB0aGUgdGFzay4KKyAqLworc3RhdGljIHZvaWQg
dXZlc2FmYl9jbl9jYWxsYmFjayh2b2lkICpkYXRhKQoreworCXN0cnVjdCBjbl9tc2cgKm1zZyA9
IGRhdGE7CisJc3RydWN0IHV2ZXNhZmJfdGFzayAqdXRhc2s7CisJc3RydWN0IHV2ZXNhZmJfa3Rh
c2sgKnRhc2s7CisKKwlpZiAobXNnLT5zZXEgPj0gVVZFU0FGQl9UQVNLU19NQVgpCisJCXJldHVy
bjsKKworCW11dGV4X2xvY2soJnV2ZmJfbG9jayk7CisJdGFzayA9IHV2ZmJfdGFza3NbbXNnLT5z
ZXFdOworCisJaWYgKCF0YXNrIHx8IG1zZy0+YWNrICE9IHRhc2stPmFjaykgeworCQltdXRleF91
bmxvY2soJnV2ZmJfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwl1dGFzayA9IChzdHJ1Y3QgdXZl
c2FmYl90YXNrICopbXNnLT5kYXRhOworCisJLyogU2FuaXR5IGNoZWNrcyBmb3IgdGhlIGJ1ZmZl
ciBsZW5ndGguICovCisJaWYgKHRhc2stPnQuYnVmX2xlbiA8IHV0YXNrLT5idWZfbGVuIHx8CisJ
ICAgIHV0YXNrLT5idWZfbGVuID4gbXNnLT5sZW4gLSBzaXplb2YoKnV0YXNrKSkgeworCQltdXRl
eF91bmxvY2soJnV2ZmJfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwl1dmZiX3Rhc2tzW21zZy0+
c2VxXSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ1dmZiX2xvY2spOworCisJbWVtY3B5KCZ0YXNr
LT50LCB1dGFzaywgc2l6ZW9mKCp1dGFzaykpOworCisJaWYgKHRhc2stPnQuYnVmX2xlbiAmJiB0
YXNrLT5idWYpCisJCW1lbWNweSh0YXNrLT5idWYsIHV0YXNrICsgMSwgdGFzay0+dC5idWZfbGVu
KTsKKworCWNvbXBsZXRlKHRhc2stPmRvbmUpOworCXJldHVybjsKK30KKworc3RhdGljIGludCB1
dmVzYWZiX2hlbHBlcl9zdGFydCh2b2lkKQoreworCWNoYXIgKmVudnBbXSA9IHsKKwkJIkhPTUU9
LyIsCisJCSJQQVRIPS9zYmluOi9iaW4iLAorCQlOVUxMLAorCX07CisKKwljaGFyICphcmd2W10g
PSB7CisJCXY4NmRfcGF0aCwKKwkJTlVMTCwKKwl9OworCisJcmV0dXJuIGNhbGxfdXNlcm1vZGVo
ZWxwZXIodjg2ZF9wYXRoLCBhcmd2LCBlbnZwLCAxKTsKK30KKworLyoKKyAqIEV4ZWN1dGUgYSB1
dmVzYWZiIHRhc2suCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB0YXNrIGlzIGV4ZWN1dGVkIHN1
Y2Nlc3NmdWxseS4KKyAqCisgKiBBIG1lc3NhZ2Ugc2VudCB0byB0aGUgdXNlcnNwYWNlIGNvbnNp
c3RzIG9mIHRoZSB1dmVzYWZiX3Rhc2sKKyAqIHN0cnVjdCBhbmQgKG9wdGlvbmFsbHkpIGEgYnVm
ZmVyLiBUaGUgdXZlc2FmYl90YXNrIHN0cnVjdCBpcworICogYSBzaW1wbGlmaWVkIHZlcnNpb24g
b2YgdXZlc2FmYl9rdGFzayAoaXRzIGtlcm5lbCBjb3VudGVycGFydCkKKyAqIGNvbnRhaW5pbmcg
b25seSB0aGUgcmVnaXN0ZXIgdmFsdWVzLCBmbGFncyBhbmQgdGhlIGxlbmd0aCBvZgorICogdGhl
IGJ1ZmZlci4KKyAqCisgKiBFYWNoIG1lc3NhZ2UgaXMgYXNzaWduZWQgYSBzZXF1ZW5jZSBudW1i
ZXIgKGluY3JlYXNlZCBsaW5lYXJseSkKKyAqIGFuZCBhIHJhbmRvbSBhY2sgbnVtYmVyLiBUaGUg
c2VxdWVuY2UgbnVtYmVyIGlzIHVzZWQgYXMgYSBrZXkKKyAqIGZvciB0aGUgdXZmYl90YXNrcyBh
cnJheSB3aGljaCBob2xkcyBwb2ludGVycyB0byB1dmVzYWZiX2t0YXNrCisgKiBzdHJ1Y3RzIGZv
ciBhbGwgcmVxdWVzdHMuCisgKi8KK3N0YXRpYyBpbnQgdXZlc2FmYl9leGVjKHN0cnVjdCB1dmVz
YWZiX2t0YXNrICp0YXNrKQoreworCXN0YXRpYyBpbnQgc2VxOworCXN0cnVjdCBjbl9tc2cgKm07
CisJaW50IGVycjsKKwlpbnQgbGVuID0gc2l6ZW9mKHRhc2stPnQpICsgdGFzay0+dC5idWZfbGVu
OworCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBtZXNzYWdlIGlzbid0IGxvbmdlciB0aGFu
IHRoZSBtYXhpbXVtCisJICogYWxsb3dlZCBieSBjb25uZWN0b3IuCisJICovCisJaWYgKHNpemVv
ZigqbSkgKyBsZW4gPiBDT05ORUNUT1JfTUFYX01TR19TSVpFKSB7CisJCXByaW50ayhLRVJOX1dB
Uk5JTkcgInV2ZXNhZmI6IG1lc3NhZ2UgdG9vIGxvbmcgKCVkKSwgIgorCQkJImNhbid0IGV4ZWN1
dGUgdGFza1xuIiwgKGludCkoc2l6ZW9mKCptKSArIGxlbikpOworCQlyZXR1cm4gLUUyQklHOwor
CX0KKworCW0gPSBremFsbG9jKHNpemVvZigqbSkgKyBsZW4sIEdGUF9LRVJORUwpOworCWlmICgh
bSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbml0X2NvbXBsZXRpb24odGFzay0+ZG9uZSk7CisK
KwltZW1jcHkoJm0tPmlkLCAmdXZlc2FmYl9jbl9pZCwgc2l6ZW9mKG0tPmlkKSk7CisJbS0+c2Vx
ID0gc2VxOworCW0tPmxlbiA9IGxlbjsKKwltLT5hY2sgPSByYW5kb20zMigpOworCisJLyogdXZl
c2FmYl90YXNrIHN0cnVjdHVyZSAqLworCW1lbWNweShtICsgMSwgJnRhc2stPnQsIHNpemVvZih0
YXNrLT50KSk7CisKKwkvKiBCdWZmZXIgKi8KKwltZW1jcHkoKHU4ICopKG0gKyAxKSArIHNpemVv
Zih0YXNrLT50KSwgdGFzay0+YnVmLCB0YXNrLT50LmJ1Zl9sZW4pOworCisJLyoKKwkgKiBTYXZl
IHRoZSBtZXNzYWdlIGFjayBudW1iZXIgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGUga2VybmVsCisJ
ICogcGFydCBvZiB0aGlzIHRhc2sgd2hlbiBhIHJlcGx5IGlzIHJlY2VpdmVkIGZyb20gdXNlcnNw
YWNlLgorCSAqLworCXRhc2stPmFjayA9IG0tPmFjazsKKworCW11dGV4X2xvY2soJnV2ZmJfbG9j
ayk7CisKKwkvKiBJZiBhbGwgc2xvdHMgYXJlIHRha2VuIC0tIGJhaWwgb3V0LiAqLworCWlmICh1
dmZiX3Rhc2tzW3NlcV0pIHsKKwkJbXV0ZXhfdW5sb2NrKCZ1dmZiX2xvY2spOworCQlyZXR1cm4g
LUVCVVNZOworCX0KKworCS8qIFNhdmUgYSBwb2ludGVyIHRvIHRoZSBrZXJuZWwgcGFydCBvZiB0
aGUgdGFzayBzdHJ1Y3QuICovCisJdXZmYl90YXNrc1tzZXFdID0gdGFzazsKKwltdXRleF91bmxv
Y2soJnV2ZmJfbG9jayk7CisKKwllcnIgPSBjbl9uZXRsaW5rX3NlbmQobSwgMCwgZ2ZwX2FueSgp
KTsKKwlpZiAoZXJyID09IC1FU1JDSCkgeworCQkvKgorCQkgKiBUcnkgdG8gc3RhcnQgdGhlIHVz
ZXJzcGFjZSBoZWxwZXIgaWYgc2VuZGluZworCQkgKiB0aGUgcmVxdWVzdCBmYWlsZWQgdGhlIGZp
cnN0IHRpbWUuCisJCSAqLworCQllcnIgPSB1dmVzYWZiX2hlbHBlcl9zdGFydCgpOworCQlpZiAo
ZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInV2ZXNhZmI6IGZhaWxlZCB0byBleGVjdXRlICVz
XG4iLAorCQkJCQl2ODZkX3BhdGgpOworCQkJcHJpbnRrKEtFUk5fRVJSICJ1dmVzYWZiOiBtYWtl
IHN1cmUgdGhhdCB0aGUgdjg2ZCAiCisJCQkJCSJoZWxwZXIgaXMgaW5zdGFsbGVkIGFuZCBleGVj
dXRhYmxlXG4iKTsKKwkJfSBlbHNlIHsKKwkJCXY4NmRfc3RhcnRlZCA9IDE7CisJCQllcnIgPSBj
bl9uZXRsaW5rX3NlbmQobSwgMCwgZ2ZwX2FueSgpKTsKKwkJfQorCX0KKwlrZnJlZShtKTsKKwor
CWlmICghZXJyICYmICEodGFzay0+dC5mbGFncyAmIFRGX0VYSVQpKQorCQllcnIgPSAhd2FpdF9m
b3JfY29tcGxldGlvbl90aW1lb3V0KHRhc2stPmRvbmUsCisJCQkJbXNlY3NfdG9famlmZmllcyhV
VkVTQUZCX1RJTUVPVVQpKTsKKworCW11dGV4X2xvY2soJnV2ZmJfbG9jayk7CisJdXZmYl90YXNr
c1tzZXFdID0gTlVMTDsKKwltdXRleF91bmxvY2soJnV2ZmJfbG9jayk7CisKKwlzZXErKzsKKwlp
ZiAoc2VxID49IFVWRVNBRkJfVEFTS1NfTUFYKQorCQlzZXEgPSAwOworCisJcmV0dXJuIGVycjsK
K30KKworLyoKKyAqIEZyZWUgYSB1dmVzYWZiX2t0YXNrIHN0cnVjdC4KKyAqLworc3RhdGljIHZv
aWQgdXZlc2FmYl9mcmVlKHN0cnVjdCB1dmVzYWZiX2t0YXNrICp0YXNrKQoreworCWlmICh0YXNr
KSB7CisJCWlmICh0YXNrLT5kb25lKQorCQkJa2ZyZWUodGFzay0+ZG9uZSk7CisJCWtmcmVlKHRh
c2spOworCX0KK30KKworLyoKKyAqIFByZXBhcmUgYSB1dmVzYWZiX2t0YXNrIHN0cnVjdCB0byBi
ZSB1c2VkIGFnYWluLgorICovCitzdGF0aWMgdm9pZCB1dmVzYWZiX3Jlc2V0KHN0cnVjdCB1dmVz
YWZiX2t0YXNrICp0YXNrKQoreworCXN0cnVjdCBjb21wbGV0aW9uICpjcGwgPSB0YXNrLT5kb25l
OworCisJbWVtc2V0KHRhc2ssIDAsIHNpemVvZigqdGFzaykpOworCXRhc2stPmRvbmUgPSBjcGw7
Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbmQgcHJlcGFyZSBhIHV2ZXNhZmJfa3Rhc2sgc3RydWN0
LgorICovCitzdGF0aWMgc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnV2ZXNhZmJfcHJlcCh2b2lkKQor
eworCXN0cnVjdCB1dmVzYWZiX2t0YXNrICp0YXNrOworCisJdGFzayA9IGt6YWxsb2Moc2l6ZW9m
KCp0YXNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRhc2spIHsKKwkJdGFzay0+ZG9uZSA9IGt6YWxs
b2Moc2l6ZW9mKCp0YXNrLT5kb25lKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGFzay0+ZG9uZSkg
eworCQkJa2ZyZWUodGFzayk7CisJCQl0YXNrID0gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gdGFz
azsKK30KKworc3RhdGljIHZvaWQgdXZlc2FmYl9zZXR1cF92YXIoc3RydWN0IGZiX3Zhcl9zY3Jl
ZW5pbmZvICp2YXIsCisJCXN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3QgdmJlX21vZGVfaWIg
Km1vZGUpCit7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwl2YXIt
PnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKKwl2YXItPnN5bmMgPSBGQl9TWU5DX1ZF
UlRfSElHSF9BQ1Q7CisKKwl2YXItPnhyZXMgPSBtb2RlLT54X3JlczsKKwl2YXItPnlyZXMgPSBt
b2RlLT55X3JlczsKKwl2YXItPnhyZXNfdmlydHVhbCA9IG1vZGUtPnhfcmVzOworCXZhci0+eXJl
c192aXJ0dWFsID0gKHBhci0+eXBhbikgPworCQkJaW5mby0+Zml4LnNtZW1fbGVuIC8gbW9kZS0+
Ynl0ZXNfcGVyX3NjYW5fbGluZSA6CisJCQltb2RlLT55X3JlczsKKwl2YXItPnhvZmZzZXQgPSAw
OworCXZhci0+eW9mZnNldCA9IDA7CisJdmFyLT5iaXRzX3Blcl9waXhlbCA9IG1vZGUtPmJpdHNf
cGVyX3BpeGVsOworCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTUpCisJCXZhci0+Yml0
c19wZXJfcGl4ZWwgPSAxNjsKKworCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID4gOCkgeworCQl2
YXItPnJlZC5vZmZzZXQgICAgPSBtb2RlLT5yZWRfb2ZmOworCQl2YXItPnJlZC5sZW5ndGggICAg
PSBtb2RlLT5yZWRfbGVuOworCQl2YXItPmdyZWVuLm9mZnNldCAgPSBtb2RlLT5ncmVlbl9vZmY7
CisJCXZhci0+Z3JlZW4ubGVuZ3RoICA9IG1vZGUtPmdyZWVuX2xlbjsKKwkJdmFyLT5ibHVlLm9m
ZnNldCAgID0gbW9kZS0+Ymx1ZV9vZmY7CisJCXZhci0+Ymx1ZS5sZW5ndGggICA9IG1vZGUtPmJs
dWVfbGVuOworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSBtb2RlLT5yc3ZkX29mZjsKKwkJdmFyLT50
cmFuc3AubGVuZ3RoID0gbW9kZS0+cnN2ZF9sZW47CisJfSBlbHNlIHsKKwkJdmFyLT5yZWQub2Zm
c2V0ICAgID0gMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgID0gMDsKKwkJdmFyLT5ibHVlLm9mZnNl
dCAgID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKworCQkvKgorCQkgKiBXZSdyZSBh
c3N1bWluZyB0aGF0IHdlIGNhbiBzd2l0Y2ggdGhlIERBQyB0byA4IGJpdHMuIElmCisJCSAqIHRo
aXMgcHJvdmVzIHRvIGJlIGluY29ycmVjdCwgd2UnbGwgdXBkYXRlIHRoZSBmaWVsZHMKKwkJICog
bGF0ZXIgaW4gc2V0X3BhcigpLgorCQkgKi8KKwkJaWYgKHBhci0+dmJlX2liLmNhcGFiaWxpdGll
cyAmIFZCRV9DQVBfQ0FOX1NXSVRDSF9EQUMpIHsKKwkJCXZhci0+cmVkLmxlbmd0aCAgICA9IDg7
CisJCQl2YXItPmdyZWVuLmxlbmd0aCAgPSA4OworCQkJdmFyLT5ibHVlLmxlbmd0aCAgID0gODsK
KwkJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCX0gZWxzZSB7CisJCQl2YXItPnJlZC5sZW5n
dGggICAgPSA2OworCQkJdmFyLT5ncmVlbi5sZW5ndGggID0gNjsKKwkJCXZhci0+Ymx1ZS5sZW5n
dGggICA9IDY7CisJCQl2YXItPnRyYW5zcC5sZW5ndGggPSAwOworCQl9CisJfQorfQorCitzdGF0
aWMgaW50IHV2ZXNhZmJfdmJlX2ZpbmRfbW9kZShzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciwKKwkJ
aW50IHhyZXMsIGludCB5cmVzLCBpbnQgZGVwdGgsIHVuc2lnbmVkIGNoYXIgZmxhZ3MpCit7CisJ
aW50IGksIG1hdGNoID0gLTEsIGggPSAwLCBkID0gMHg3ZmZmZmZmZjsKKworCWZvciAoaSA9IDA7
IGkgPCBwYXItPnZiZV9tb2Rlc19jbnQ7IGkrKykgeworCQloID0gYWJzKHBhci0+dmJlX21vZGVz
W2ldLnhfcmVzIC0geHJlcykgKworCQkgICAgYWJzKHBhci0+dmJlX21vZGVzW2ldLnlfcmVzIC0g
eXJlcykgKworCQkgICAgYWJzKGRlcHRoIC0gcGFyLT52YmVfbW9kZXNbaV0uZGVwdGgpOworCisJ
CS8qCisJCSAqIFdlIGhhdmUgYW4gZXhhY3QgbWF0Y2ggaW4gdGVybXMgb2YgcmVzb2x1dGlvbgor
CQkgKiBhbmQgZGVwdGguCisJCSAqLworCQlpZiAoaCA9PSAwKQorCQkJcmV0dXJuIGk7CisKKwkJ
aWYgKGggPCBkIHx8IChoID09IGQgJiYgcGFyLT52YmVfbW9kZXNbaV0uZGVwdGggPiBkZXB0aCkp
IHsKKwkJCWQgPSBoOworCQkJbWF0Y2ggPSBpOworCQl9CisJfQorCWkgPSAxOworCisJaWYgKGZs
YWdzICYgVVZFU0FGQl9FWEFDVF9ERVBUSCAmJgorCQkJcGFyLT52YmVfbW9kZXNbbWF0Y2hdLmRl
cHRoICE9IGRlcHRoKQorCQlpID0gMDsKKworCWlmIChmbGFncyAmIFVWRVNBRkJfRVhBQ1RfUkVT
ICYmIGQgPiAyNCkKKwkJaSA9IDA7CisKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gbWF0Y2g7CisJ
ZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB1OCAqdXZlc2FmYl92YmVfc3RhdGVfc2F2
ZShzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhcikKK3sKKwlzdHJ1Y3QgdXZlc2FmYl9rdGFzayAqdGFz
azsKKwl1OCAqc3RhdGU7CisJaW50IGVycjsKKworCWlmICghcGFyLT52YmVfc3RhdGVfc2l6ZSkK
KwkJcmV0dXJuIE5VTEw7CisKKwlzdGF0ZSA9IGttYWxsb2MocGFyLT52YmVfc3RhdGVfc2l6ZSwg
R0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwl0YXNrID0gdXZl
c2FmYl9wcmVwKCk7CisJaWYgKCF0YXNrKSB7CisJCWtmcmVlKHN0YXRlKTsKKwkJcmV0dXJuIE5V
TEw7CisJfQorCisJdGFzay0+dC5yZWdzLmVheCA9IDB4NGYwNDsKKwl0YXNrLT50LnJlZ3MuZWN4
ID0gMHgwMDBmOworCXRhc2stPnQucmVncy5lZHggPSAweDAwMDE7CisJdGFzay0+dC5mbGFncyA9
IFRGX0JVRl9SRVQgfCBURl9CVUZfRVNCWDsKKwl0YXNrLT50LmJ1Zl9sZW4gPSBwYXItPnZiZV9z
dGF0ZV9zaXplOworCXRhc2stPmJ1ZiA9IHN0YXRlOworCWVyciA9IHV2ZXNhZmJfZXhlYyh0YXNr
KTsKKworCWlmIChlcnIgfHwgKHRhc2stPnQucmVncy5lYXggJiAweGZmZmYpICE9IDB4MDA0Zikg
eworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1dmVzYWZiOiBWQkUgZ2V0IHN0YXRlIGNhbGwgIgor
CQkJCSJmYWlsZWQgKGVheD0weCV4LCBlcnI9JWQpXG4iLAorCQkJCXRhc2stPnQucmVncy5lYXgs
IGVycik7CisJCWtmcmVlKHN0YXRlKTsKKwkJc3RhdGUgPSBOVUxMOworCX0KKworCXV2ZXNhZmJf
ZnJlZSh0YXNrKTsKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIHV2ZXNhZmJfdmJl
X3N0YXRlX3Jlc3RvcmUoc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIsIHU4ICpzdGF0ZV9idWYpCit7
CisJc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRhc2s7CisJaW50IGVycjsKKworCWlmICghc3RhdGVf
YnVmKQorCQlyZXR1cm47CisKKwl0YXNrID0gdXZlc2FmYl9wcmVwKCk7CisJaWYgKCF0YXNrKQor
CQlyZXR1cm47CisKKwl0YXNrLT50LnJlZ3MuZWF4ID0gMHg0ZjA0OworCXRhc2stPnQucmVncy5l
Y3ggPSAweDAwMGY7CisJdGFzay0+dC5yZWdzLmVkeCA9IDB4MDAwMjsKKwl0YXNrLT50LmJ1Zl9s
ZW4gPSBwYXItPnZiZV9zdGF0ZV9zaXplOworCXRhc2stPnQuZmxhZ3MgPSBURl9CVUZfRVNCWDsK
Kwl0YXNrLT5idWYgPSBzdGF0ZV9idWY7CisKKwllcnIgPSB1dmVzYWZiX2V4ZWModGFzayk7CisJ
aWYgKGVyciB8fCAodGFzay0+dC5yZWdzLmVheCAmIDB4ZmZmZikgIT0gMHgwMDRmKQorCQlwcmlu
dGsoS0VSTl9XQVJOSU5HICJ1dmVzYWZiOiBWQkUgc3RhdGUgcmVzdG9yZSBjYWxsICIKKwkJCQki
ZmFpbGVkIChlYXg9MHgleCwgZXJyPSVkKVxuIiwKKwkJCQl0YXNrLT50LnJlZ3MuZWF4LCBlcnIp
OworCisJdXZlc2FmYl9mcmVlKHRhc2spOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1dmVz
YWZiX3ZiZV9nZXRpbmZvKHN0cnVjdCB1dmVzYWZiX2t0YXNrICp0YXNrLAorCQlzdHJ1Y3QgdXZl
c2FmYl9wYXIgKnBhcikKK3sKKwlpbnQgZXJyOworCisJdGFzay0+dC5yZWdzLmVheCA9IDB4NGYw
MDsKKwl0YXNrLT50LmZsYWdzID0gVEZfVkJFSUI7CisJdGFzay0+dC5idWZfbGVuID0gc2l6ZW9m
KHN0cnVjdCB2YmVfaWIpOworCXRhc2stPmJ1ZiA9ICZwYXItPnZiZV9pYjsKKwlzdHJuY3B5KHBh
ci0+dmJlX2liLnZiZV9zaWduYXR1cmUsICJWQkUyIiwgNCk7CisKKwllcnIgPSB1dmVzYWZiX2V4
ZWModGFzayk7CisJaWYgKGVyciB8fCAodGFzay0+dC5yZWdzLmVheCAmIDB4ZmZmZikgIT0gMHgw
MDRmKSB7CisJCXByaW50ayhLRVJOX0VSUiAidXZlc2FmYjogR2V0dGluZyBWQkUgaW5mbyBibG9j
ayBmYWlsZWQgIgorCQkJCSIoZWF4PTB4JXgsIGVycj0lZClcbiIsICh1MzIpdGFzay0+dC5yZWdz
LmVheCwKKwkJCQllcnIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGFyLT52YmVf
aWIudmJlX3ZlcnNpb24gPCAweDAyMDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1dmVzYWZiOiBT
b3JyeSwgcHJlLVZCRSAyLjAgY2FyZHMgYXJlICIKKwkJCQkibm90IHN1cHBvcnRlZC5cbiIpOwor
CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIXBhci0+dmJlX2liLm1vZGVfbGlzdF9wdHIp
IHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ1dmVzYWZiOiBNaXNzaW5nIG1vZGUgbGlzdCFcbiIpOwor
CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJ1dmVzYWZiOiAiKTsK
KworCS8qCisJICogQ29udmVydCBzdHJpbmcgcG9pbnRlcnMgYW5kIHRoZSBtb2RlIGxpc3QgcG9p
bnRlciBpbnRvCisJICogdXNhYmxlIGFkZHJlc3Nlcy4gUHJpbnQgaW5mb3JtYXRpb25hbCBtZXNz
YWdlcyBhYm91dCB0aGUKKwkgKiB2aWRlbyBhZGFwdGVyIGFuZCBpdHMgdmVuZG9yLgorCSAqLwor
CWlmIChwYXItPnZiZV9pYi5vZW1fdmVuZG9yX25hbWVfcHRyKQorCQlwcmludGsoIiVzLCAiLAor
CQkJKChjaGFyICopdGFzay0+YnVmKSArIHBhci0+dmJlX2liLm9lbV92ZW5kb3JfbmFtZV9wdHIp
OworCisJaWYgKHBhci0+dmJlX2liLm9lbV9wcm9kdWN0X25hbWVfcHRyKQorCQlwcmludGsoIiVz
LCAiLAorCQkJKChjaGFyICopdGFzay0+YnVmKSArIHBhci0+dmJlX2liLm9lbV9wcm9kdWN0X25h
bWVfcHRyKTsKKworCWlmIChwYXItPnZiZV9pYi5vZW1fcHJvZHVjdF9yZXZfcHRyKQorCQlwcmlu
dGsoIiVzLCAiLAorCQkJKChjaGFyICopdGFzay0+YnVmKSArIHBhci0+dmJlX2liLm9lbV9wcm9k
dWN0X3Jldl9wdHIpOworCisJaWYgKHBhci0+dmJlX2liLm9lbV9zdHJpbmdfcHRyKQorCQlwcmlu
dGsoIk9FTTogJXMsICIsCisJCQkoKGNoYXIgKil0YXNrLT5idWYpICsgcGFyLT52YmVfaWIub2Vt
X3N0cmluZ19wdHIpOworCisJcHJpbnRrKCJWQkUgdiVkLiVkXG4iLCAoKHBhci0+dmJlX2liLnZi
ZV92ZXJzaW9uICYgMHhmZjAwKSA+PiA4KSwKKwkJCXBhci0+dmJlX2liLnZiZV92ZXJzaW9uICYg
MHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdXZlc2FmYl92
YmVfZ2V0bW9kZXMoc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRhc2ssCisJCXN0cnVjdCB1dmVzYWZi
X3BhciAqcGFyKQoreworCWludCBvZmYgPSAwLCBlcnI7CisJdTE2ICptb2RlOworCisJcGFyLT52
YmVfbW9kZXNfY250ID0gMDsKKworCS8qIENvdW50IGF2YWlsYWJsZSBtb2Rlcy4gKi8KKwltb2Rl
ID0gKHUxNiAqKSAoKCh1OCAqKSZwYXItPnZiZV9pYikgKyBwYXItPnZiZV9pYi5tb2RlX2xpc3Rf
cHRyKTsKKwl3aGlsZSAoKm1vZGUgIT0gMHhmZmZmKSB7CisJCXBhci0+dmJlX21vZGVzX2NudCsr
OworCQltb2RlKys7CisJfQorCisJcGFyLT52YmVfbW9kZXMgPSBremFsbG9jKHNpemVvZihzdHJ1
Y3QgdmJlX21vZGVfaWIpICoKKwkJCQlwYXItPnZiZV9tb2Rlc19jbnQsIEdGUF9LRVJORUwpOwor
CWlmICghcGFyLT52YmVfbW9kZXMpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogR2V0IGluZm8g
YWJvdXQgYWxsIGF2YWlsYWJsZSBtb2Rlcy4gKi8KKwltb2RlID0gKHUxNiAqKSAoKCh1OCAqKSZw
YXItPnZiZV9pYikgKyBwYXItPnZiZV9pYi5tb2RlX2xpc3RfcHRyKTsKKwl3aGlsZSAoKm1vZGUg
IT0gMHhmZmZmKSB7CisJCXN0cnVjdCB2YmVfbW9kZV9pYiAqbWliOworCisJCXV2ZXNhZmJfcmVz
ZXQodGFzayk7CisJCXRhc2stPnQucmVncy5lYXggPSAweDRmMDE7CisJCXRhc2stPnQucmVncy5l
Y3ggPSAodTMyKSAqbW9kZTsKKwkJdGFzay0+dC5mbGFncyA9IFRGX0JVRl9SRVQgfCBURl9CVUZf
RVNESTsKKwkJdGFzay0+dC5idWZfbGVuID0gc2l6ZW9mKHN0cnVjdCB2YmVfbW9kZV9pYik7CisJ
CXRhc2stPmJ1ZiA9IHBhci0+dmJlX21vZGVzICsgb2ZmOworCisJCWVyciA9IHV2ZXNhZmJfZXhl
Yyh0YXNrKTsKKwkJaWYgKGVyciB8fCAodGFzay0+dC5yZWdzLmVheCAmIDB4ZmZmZikgIT0gMHgw
MDRmKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInV2ZXNhZmI6IEdldHRpbmcgbW9kZSBpbmZvIGJs
b2NrICIKKwkJCQkiZm9yIG1vZGUgMHgleCBmYWlsZWQgKGVheD0weCV4LCBlcnI9JWQpXG4iLAor
CQkJCSptb2RlLCAodTMyKXRhc2stPnQucmVncy5lYXgsIGVycik7CisJCQlyZXR1cm4gLUVJTlZB
TDsKKwkJfQorCisJCW1pYiA9IHRhc2stPmJ1ZjsKKwkJbWliLT5tb2RlX2lkID0gKm1vZGU7CisK
KwkJLyoKKwkJICogV2Ugb25seSB3YW50IG1vZGVzIHRoYXQgYXJlIHN1cHBvcnRlZCB3aXRoIHRo
ZSBjdXJyZW50CisJCSAqIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGNvbG9yLCBncmFwaGljcyBh
bmQgdGhhdCBoYXZlCisJCSAqIHN1cHBvcnQgZm9yIHRoZSBMRkIuCisJCSAqLworCQlpZiAoKG1p
Yi0+bW9kZV9hdHRyICYgVkJFX01PREVfTUFTSykgPT0gVkJFX01PREVfTUFTSyAmJgorCQkJCSBt
aWItPmJpdHNfcGVyX3BpeGVsID49IDgpCisJCQlvZmYrKzsKKwkJZWxzZQorCQkJcGFyLT52YmVf
bW9kZXNfY250LS07CisKKwkJbW9kZSsrOworCQltaWItPmRlcHRoID0gbWliLT5yZWRfbGVuICsg
bWliLT5ncmVlbl9sZW4gKyBtaWItPmJsdWVfbGVuOworCisJCS8qCisJCSAqIEhhbmRsZSA4YnBw
IG1vZGVzIGFuZCBtb2RlcyB3aXRoIGJyb2tlbiBjb2xvciBjb21wb25lbnQKKwkJICogbGVuZ3Ro
cy4KKwkJICovCisJCWlmIChtaWItPmRlcHRoID09IDAgfHwgKG1pYi0+ZGVwdGggPT0gMjQgJiYK
KwkJCQkJbWliLT5iaXRzX3Blcl9waXhlbCA9PSAzMikpCisJCQltaWItPmRlcHRoID0gbWliLT5i
aXRzX3Blcl9waXhlbDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBQcm90ZWN0
ZWQgTW9kZSBJbnRlcmZhY2UgaXMgMzItYml0IHg4NiBjb2RlLCBzbyB3ZSBvbmx5IHJ1biBpdCBv
bgorICogeDg2IGFuZCBub3QgeDg2XzY0LgorICovCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorc3Rh
dGljIGludCBfX2RldmluaXQgdXZlc2FmYl92YmVfZ2V0cG1pKHN0cnVjdCB1dmVzYWZiX2t0YXNr
ICp0YXNrLAorCQlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhcikKK3sKKwlpbnQgaSwgZXJyOworCisJ
dXZlc2FmYl9yZXNldCh0YXNrKTsKKwl0YXNrLT50LnJlZ3MuZWF4ID0gMHg0ZjBhOworCXRhc2st
PnQucmVncy5lYnggPSAweDA7CisJZXJyID0gdXZlc2FmYl9leGVjKHRhc2spOworCisJaWYgKCh0
YXNrLT50LnJlZ3MuZWF4ICYgMHhmZmZmKSAhPSAweDRmIHx8IHRhc2stPnQucmVncy5lcyA8IDB4
YzAwMCkgeworCQlwYXItPnBtaV9zZXRwYWwgPSBwYXItPnlwYW4gPSAwOworCX0gZWxzZSB7CisJ
CXBhci0+cG1pX2Jhc2UgPSAodTE2ICopcGh5c190b192aXJ0KCgodTMyKXRhc2stPnQucmVncy5l
cyA8PCA0KQorCQkJCQkJKyB0YXNrLT50LnJlZ3MuZWRpKTsKKwkJcGFyLT5wbWlfc3RhcnQgPSAo
dTggKilwYXItPnBtaV9iYXNlICsgcGFyLT5wbWlfYmFzZVsxXTsKKwkJcGFyLT5wbWlfcGFsID0g
KHU4ICopcGFyLT5wbWlfYmFzZSArIHBhci0+cG1pX2Jhc2VbMl07CisJCXByaW50ayhLRVJOX0lO
Rk8gInV2ZXNhZmI6IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBpbmZvIGF0ICIKKwkJCQkgIiUw
NHg6JTA0eFxuIiwKKwkJCQkgKHUxNil0YXNrLT50LnJlZ3MuZXMsICh1MTYpdGFzay0+dC5yZWdz
LmVkaSk7CisJCXByaW50ayhLRVJOX0lORk8gInV2ZXNhZmI6IHBtaTogc2V0IGRpc3BsYXkgc3Rh
cnQgPSAlcCwgIgorCQkJCSAic2V0IHBhbGV0dGUgPSAlcFxuIiwgcGFyLT5wbWlfc3RhcnQsCisJ
CQkJIHBhci0+cG1pX3BhbCk7CisKKwkJaWYgKHBhci0+cG1pX2Jhc2VbM10pIHsKKwkJCXByaW50
ayhLRVJOX0lORk8gInV2ZXNhZmI6IHBtaTogcG9ydHMgPSAiKTsKKwkJCWZvciAoaSA9IHBhci0+
cG1pX2Jhc2VbM10vMjsKKwkJCQkJcGFyLT5wbWlfYmFzZVtpXSAhPSAweGZmZmY7IGkrKykKKwkJ
CQlwcmludGsoIiV4ICIsIHBhci0+cG1pX2Jhc2VbaV0pOworCQkJcHJpbnRrKCJcbiIpOworCisJ
CQlpZiAocGFyLT5wbWlfYmFzZVtpXSAhPSAweGZmZmYpIHsKKwkJCQlwcmludGsoS0VSTl9JTkZP
ICJ1dmVzYWZiOiBjYW4ndCBoYW5kbGUgbWVtb3J5IgorCQkJCQkJICIgcmVxdWVzdHMsIHBtaSBk
aXNhYmxlZFxuIik7CisJCQkJcGFyLT55cGFuID0gcGFyLT5wbWlfc2V0cGFsID0gMDsKKwkJCX0K
KwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKKy8q
CisgKiBDaGVjayB3aGV0aGVyIGEgdmlkZW8gbW9kZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIFZpZGVv
IEJJT1MgYW5kIGlzCisgKiBjb21wYXRpYmxlIHdpdGggdGhlIG1vbml0b3IgbGltaXRzLgorICov
CitzdGF0aWMgaW50IF9fZGV2aW5pdCB1dmVzYWZiX2lzX3ZhbGlkX21vZGUoc3RydWN0IGZiX3Zp
ZGVvbW9kZSAqbW9kZSwKKwkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPm1v
bnNwZWNzLmd0ZikgeworCQlmYl92aWRlb21vZGVfdG9fdmFyKCZpbmZvLT52YXIsIG1vZGUpOwor
CQlpZiAoZmJfdmFsaWRhdGVfbW9kZSgmaW5mby0+dmFyLCBpbmZvKSkKKwkJCXJldHVybiAwOwor
CX0KKworCWlmICh1dmVzYWZiX3ZiZV9maW5kX21vZGUoaW5mby0+cGFyLCBtb2RlLT54cmVzLCBt
b2RlLT55cmVzLCA4LAorCQkJCVVWRVNBRkJfRVhBQ1RfUkVTKSA9PSAtMSkKKwkJcmV0dXJuIDA7
CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdXZlc2FmYl92YmVfZ2V0
ZWRpZChzdHJ1Y3QgdXZlc2FmYl9rdGFzayAqdGFzaywKKwkJc3RydWN0IGZiX2luZm8gKmluZm8p
Cit7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJaW50IGVyciA9IDA7
CisKKwlpZiAobm9lZGlkIHx8IHBhci0+dmJlX2liLnZiZV92ZXJzaW9uIDwgMHgwMzAwKQorCQly
ZXR1cm4gLUVJTlZBTDsKKworCXRhc2stPnQucmVncy5lYXggPSAweDRmMTU7CisJdGFzay0+dC5y
ZWdzLmVieCA9IDA7CisJdGFzay0+dC5yZWdzLmVjeCA9IDA7CisJdGFzay0+dC5idWZfbGVuID0g
MDsKKwl0YXNrLT50LmZsYWdzID0gMDsKKworCWVyciA9IHV2ZXNhZmJfZXhlYyh0YXNrKTsKKwor
CWlmICgodGFzay0+dC5yZWdzLmVheCAmIDB4ZmZmZikgIT0gMHgwMDRmIHx8IGVycikKKwkJcmV0
dXJuIC1FSU5WQUw7CisKKwlpZiAoKHRhc2stPnQucmVncy5lYnggJiAweDMpID09IDMpIHsKKwkJ
cHJpbnRrKEtFUk5fSU5GTyAidXZlc2FmYjogVkJJT1MvaGFyZHdhcmUgc3VwcG9ydHMgYm90aCAi
CisJCQkJICJEREMxIGFuZCBEREMyIHRyYW5zZmVyc1xuIik7CisJfSBlbHNlIGlmICgodGFzay0+
dC5yZWdzLmVieCAmIDB4MykgPT0gMikgeworCQlwcmludGsoS0VSTl9JTkZPICJ1dmVzYWZiOiBW
QklPUy9oYXJkd2FyZSBzdXBwb3J0cyBEREMyICIKKwkJCQkgInRyYW5zZmVyc1xuIik7CisJfSBl
bHNlIGlmICgodGFzay0+dC5yZWdzLmVieCAmIDB4MykgPT0gMSkgeworCQlwcmludGsoS0VSTl9J
TkZPICJ1dmVzYWZiOiBWQklPUy9oYXJkd2FyZSBzdXBwb3J0cyBEREMxICIKKwkJCQkgInRyYW5z
ZmVyc1xuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXZlc2FmYjogVkJJT1Mv
aGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0ICIKKwkJCQkgIkREQyB0cmFuc2ZlcnNcbiIpOworCQly
ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl0YXNrLT50LnJlZ3MuZWF4ID0gMHg0ZjE1OworCXRhc2st
PnQucmVncy5lYnggPSAxOworCXRhc2stPnQucmVncy5lY3ggPSB0YXNrLT50LnJlZ3MuZWR4ID0g
MDsKKwl0YXNrLT50LmZsYWdzID0gVEZfQlVGX1JFVCB8IFRGX0JVRl9FU0RJOworCXRhc2stPnQu
YnVmX2xlbiA9IEVESURfTEVOR1RIOworCXRhc2stPmJ1ZiA9IGt6YWxsb2MoRURJRF9MRU5HVEgs
IEdGUF9LRVJORUwpOworCisJZXJyID0gdXZlc2FmYl9leGVjKHRhc2spOworCisJaWYgKCh0YXNr
LT50LnJlZ3MuZWF4ICYgMHhmZmZmKSA9PSAweDAwNGYgJiYgIWVycikgeworCQlmYl9lZGlkX3Rv
X21vbnNwZWNzKHRhc2stPmJ1ZiwgJmluZm8tPm1vbnNwZWNzKTsKKworCQlpZiAoaW5mby0+bW9u
c3BlY3MudmZtYXggJiYgaW5mby0+bW9uc3BlY3MuaGZtYXgpIHsKKwkJCS8qCisJCQkgKiBJZiB0
aGUgbWF4aW11bSBwaXhlbCBjbG9jayB3YXNuJ3Qgc3BlY2lmaWVkIGluCisJCQkgKiB0aGUgRURJ
RCBibG9jaywgc2V0IGl0IHRvIDMwMCBNSHouCisJCQkgKi8KKwkJCWlmIChpbmZvLT5tb25zcGVj
cy5kY2xrbWF4ID09IDApCisJCQkJaW5mby0+bW9uc3BlY3MuZGNsa21heCA9IDMwMCAqIDEwMDAw
MDA7CisJCQlpbmZvLT5tb25zcGVjcy5ndGYgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJZXJyID0g
LUVJTlZBTDsKKwl9CisKKwlrZnJlZSh0YXNrLT5idWYpOworCXJldHVybiBlcnI7Cit9CisKK3N0
YXRpYyB2b2lkIF9fZGV2aW5pdCB1dmVzYWZiX3ZiZV9nZXRtb25zcGVjcyhzdHJ1Y3QgdXZlc2Fm
Yl9rdGFzayAqdGFzaywKKwkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHV2ZXNh
ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJaW50IGk7CisKKwltZW1zZXQoJmluZm8tPm1vbnNw
ZWNzLCAwLCBzaXplb2YoaW5mby0+bW9uc3BlY3MpKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3Qg
Z2V0IGFsbCBuZWNlc3NhcnkgZGF0YSBmcm9tIHRoZSBFRElEIGJsb2NrLAorCSAqIG1hcmsgaXQg
YXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIEdURiBhbmQgc2V0IG5vY3J0YyBzbworCSAqIHRoYXQg
d2UgYWx3YXlzIHVzZSB0aGUgZGVmYXVsdCBCSU9TIHJlZnJlc2ggcmF0ZS4KKwkgKi8KKwlpZiAo
dXZlc2FmYl92YmVfZ2V0ZWRpZCh0YXNrLCBpbmZvKSkgeworCQlpbmZvLT5tb25zcGVjcy5ndGYg
PSAwOworCQlwYXItPm5vY3J0YyA9IDE7CisJfQorCisJLyogS2VybmVsIGNvbW1hbmQgbGluZSBv
dmVycmlkZXMuICovCisJaWYgKG1heGNsaykKKwkJaW5mby0+bW9uc3BlY3MuZGNsa21heCA9IG1h
eGNsayAqIDEwMDAwMDA7CisJaWYgKG1heHZmKQorCQlpbmZvLT5tb25zcGVjcy52Zm1heCA9IG1h
eHZmOworCWlmIChtYXhoZikKKwkJaW5mby0+bW9uc3BlY3MuaGZtYXggPSBtYXhoZiAqIDEwMDA7
CisKKwkvKgorCSAqIEluIGNhc2UgRERDIHRyYW5zZmVycyBhcmUgbm90IHN1cHBvcnRlZCwgdGhl
IHVzZXIgY2FuIHByb3ZpZGUKKwkgKiBtb25pdG9yIGxpbWl0cyBtYW51YWxseS4gTG93ZXIgbGlt
aXRzIGFyZSBzZXQgdG8gInNhZmUiIHZhbHVlcy4KKwkgKi8KKwlpZiAoaW5mby0+bW9uc3BlY3Mu
Z3RmID09IDAgJiYgbWF4Y2xrICYmIG1heHZmICYmIG1heGhmKSB7CisJCWluZm8tPm1vbnNwZWNz
LmRjbGttaW4gPSAwOworCQlpbmZvLT5tb25zcGVjcy52Zm1pbiA9IDYwOworCQlpbmZvLT5tb25z
cGVjcy5oZm1pbiA9IDI5MDAwOworCQlpbmZvLT5tb25zcGVjcy5ndGYgPSAxOworCQlwYXItPm5v
Y3J0YyA9IDA7CisJfQorCisJaWYgKGluZm8tPm1vbnNwZWNzLmd0ZikKKwkJcHJpbnRrKEtFUk5f
SU5GTworCQkJInV2ZXNhZmI6IG1vbml0b3IgbGltaXRzOiB2ZiA9ICVkIEh6LCBoZiA9ICVkIGtI
eiwgIgorCQkJImNsayA9ICVkIE1IelxuIiwgaW5mby0+bW9uc3BlY3MudmZtYXgsCisJCQkoaW50
KShpbmZvLT5tb25zcGVjcy5oZm1heCAvIDEwMDApLAorCQkJKGludCkoaW5mby0+bW9uc3BlY3Mu
ZGNsa21heCAvIDEwMDAwMDApKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gInV2ZXNhZmI6
IG5vIG1vbml0b3IgbGltaXRzIGhhdmUgYmVlbiBzZXQsICIKKwkJCQkgImRlZmF1bHQgcmVmcmVz
aCByYXRlIHdpbGwgYmUgdXNlZFxuIik7CisKKwkvKiBBZGQgVkJFIG1vZGVzIHRvIHRoZSBtb2Rl
bGlzdC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGFyLT52YmVfbW9kZXNfY250OyBpKyspIHsKKwkJ
c3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHZhcjsKKwkJc3RydWN0IHZiZV9tb2RlX2liICptb2Rl
OworCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlIHZtb2RlOworCisJCW1vZGUgPSAmcGFyLT52YmVfbW9k
ZXNbaV07CisJCW1lbXNldCgmdmFyLCAwLCBzaXplb2YodmFyKSk7CisKKwkJdmFyLnhyZXMgPSBt
b2RlLT54X3JlczsKKwkJdmFyLnlyZXMgPSBtb2RlLT55X3JlczsKKworCQlmYl9nZXRfbW9kZShG
Ql9WU1lOQ1RJTUlOR1MgfCBGQl9JR05PUkVNT04sIDYwLCAmdmFyLCBpbmZvKTsKKwkJZmJfdmFy
X3RvX3ZpZGVvbW9kZSgmdm1vZGUsICZ2YXIpOworCQlmYl9hZGRfdmlkZW9tb2RlKCZ2bW9kZSwg
JmluZm8tPm1vZGVsaXN0KTsKKwl9CisKKwkvKiBBZGQgdmFsaWQgVkVTQSBtb2RlcyB0byBvdXIg
bW9kZWxpc3QuICovCisJZm9yIChpID0gMDsgaSA8IFZFU0FfTU9ERURCX1NJWkU7IGkrKykgewor
CQlpZiAodXZlc2FmYl9pc192YWxpZF9tb2RlKChzdHJ1Y3QgZmJfdmlkZW9tb2RlICopCisJCQkJ
CQkmdmVzYV9tb2Rlc1tpXSwgaW5mbykpCisJCQlmYl9hZGRfdmlkZW9tb2RlKCZ2ZXNhX21vZGVz
W2ldLCAmaW5mby0+bW9kZWxpc3QpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5tb25z
cGVjcy5tb2RlZGJfbGVuOyBpKyspIHsKKwkJaWYgKHV2ZXNhZmJfaXNfdmFsaWRfbW9kZSgmaW5m
by0+bW9uc3BlY3MubW9kZWRiW2ldLCBpbmZvKSkKKwkJCWZiX2FkZF92aWRlb21vZGUoJmluZm8t
Pm1vbnNwZWNzLm1vZGVkYltpXSwKKwkJCQkJJmluZm8tPm1vZGVsaXN0KTsKKwl9CisKKwlyZXR1
cm47Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCB1dmVzYWZiX3ZiZV9nZXRzdGF0ZXNpemUo
c3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRhc2ssCisJCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyKQor
eworCWludCBlcnI7CisKKwl1dmVzYWZiX3Jlc2V0KHRhc2spOworCisJLyoKKwkgKiBHZXQgdGhl
IFZCRSBzdGF0ZSBidWZmZXIgc2l6ZS4gV2Ugd2FudCBhbGwgYXZhaWxhYmxlCisJICogaGFyZHdh
cmUgc3RhdGUgZGF0YSAoQ0wgPSAweDBmKS4KKwkgKi8KKwl0YXNrLT50LnJlZ3MuZWF4ID0gMHg0
ZjA0OworCXRhc2stPnQucmVncy5lY3ggPSAweDAwMGY7CisJdGFzay0+dC5yZWdzLmVkeCA9IDB4
MDAwMDsKKwl0YXNrLT50LmZsYWdzID0gMDsKKworCWVyciA9IHV2ZXNhZmJfZXhlYyh0YXNrKTsK
KworCWlmIChlcnIgfHwgKHRhc2stPnQucmVncy5lYXggJiAweGZmZmYpICE9IDB4MDA0Zikgewor
CQlwcmludGsoS0VSTl9XQVJOSU5HICJ1dmVzYWZiOiBWQkUgc3RhdGUgYnVmZmVyIHNpemUgIgor
CQkJImNhbm5vdCBiZSBkZXRlcm1pbmVkIChlYXg9MHgleCwgZXJyPSVkKVxuIiwKKwkJCXRhc2st
PnQucmVncy5lYXgsIGVycik7CisJCXBhci0+dmJlX3N0YXRlX3NpemUgPSAwOworCQlyZXR1cm47
CisJfQorCisJcGFyLT52YmVfc3RhdGVfc2l6ZSA9IDY0ICogKHRhc2stPnQucmVncy5lYnggJiAw
eGZmZmYpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB1dmVzYWZiX3ZiZV9pbml0KHN0cnVj
dCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB1dmVzYWZiX2t0YXNrICp0YXNrID0gTlVMTDsK
KwlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlpbnQgZXJyOworCisJdGFz
ayA9IHV2ZXNhZmJfcHJlcCgpOworCWlmICghdGFzaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwll
cnIgPSB1dmVzYWZiX3ZiZV9nZXRpbmZvKHRhc2ssIHBhcik7CisJaWYgKGVycikKKwkJZ290byBv
dXQ7CisKKwllcnIgPSB1dmVzYWZiX3ZiZV9nZXRtb2Rlcyh0YXNrLCBwYXIpOworCWlmIChlcnIp
CisJCWdvdG8gb3V0OworCisJcGFyLT5ub2NydGMgPSBub2NydGM7CisjaWZkZWYgQ09ORklHX1g4
Nl8zMgorCXBhci0+cG1pX3NldHBhbCA9IHBtaV9zZXRwYWw7CisJcGFyLT55cGFuID0geXBhbjsK
KworCWlmIChwYXItPnBtaV9zZXRwYWwgfHwgcGFyLT55cGFuKQorCQl1dmVzYWZiX3ZiZV9nZXRw
bWkodGFzaywgcGFyKTsKKyNlbHNlCisJLyogVGhlIHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBp
cyBub3QgYXZhaWxhYmxlIG9uIG5vbi14ODYuICovCisJcGFyLT5wbWlfc2V0cGFsID0gcGFyLT55
cGFuID0gMDsKKyNlbmRpZgorCisJSU5JVF9MSVNUX0hFQUQoJmluZm8tPm1vZGVsaXN0KTsKKwl1
dmVzYWZiX3ZiZV9nZXRtb25zcGVjcyh0YXNrLCBpbmZvKTsKKwl1dmVzYWZiX3ZiZV9nZXRzdGF0
ZXNpemUodGFzaywgcGFyKTsKKworb3V0Ogl1dmVzYWZiX2ZyZWUodGFzayk7CisJcmV0dXJuIGVy
cjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdXZlc2FmYl92YmVfaW5pdF9tb2RlKHN0cnVj
dCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgZmJf
bW9kZWxpc3QgKm1vZGVsaXN0OworCXN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisJc3RydWN0
IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJaW50IGksIG1vZGVpZDsKKworCS8qIEhh
cyB0aGUgdXNlciByZXF1ZXN0ZWQgYSBzcGVjaWZpYyBWRVNBIG1vZGU/ICovCisJaWYgKHZiZW1v
ZGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBhci0+dmJlX21vZGVzX2NudDsgaSsrKSB7CisJCQlp
ZiAocGFyLT52YmVfbW9kZXNbaV0ubW9kZV9pZCA9PSB2YmVtb2RlKSB7CisJCQkJZmJfZ2V0X21v
ZGUoRkJfVlNZTkNUSU1JTkdTIHwgRkJfSUdOT1JFTU9OLCA2MCwKKwkJCQkJCQkmaW5mby0+dmFy
LCBpbmZvKTsKKwkJCQkvKgorCQkJCSAqIFdpdGggcGl4Y2xvY2sgc2V0IHRvIDAsIHRoZSBkZWZh
dWx0IEJJT1MKKwkJCQkgKiB0aW1pbmdzIHdpbGwgYmUgdXNlZCBpbiBzZXRfcGFyKCkuCisJCQkJ
ICovCisJCQkJaW5mby0+dmFyLnBpeGNsb2NrID0gMDsKKwkJCQltb2RlaWQgPSBpOworCQkJCWdv
dG8gZ290bW9kZTsKKwkJCX0KKwkJfQorCQlwcmludGsoS0VSTl9JTkZPICJ1dmVzYWZiOiByZXF1
ZXN0ZWQgVkJFIG1vZGUgMHgleCBpcyAiCisJCQkJICJ1bmF2YWlsYWJsZVxuIiwgdmJlbW9kZSk7
CisJCXZiZW1vZGUgPSAwOworCX0KKworCS8qIENvdW50IHRoZSBtb2RlcyBpbiB0aGUgbW9kZWxp
c3QgKi8KKwlpID0gMDsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJmluZm8tPm1vZGVsaXN0KQorCQlp
Kys7CisKKwkvKgorCSAqIENvbnZlcnQgdGhlIG1vZGVsaXN0IGludG8gYSBtb2RlZGIgc28gdGhh
dCB3ZSBjYW4gdXNlIGl0IHdpdGgKKwkgKiBmYl9maW5kX21vZGUoKS4KKwkgKi8KKwltb2RlID0g
a3phbGxvYyhpICogc2l6ZW9mKCptb2RlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1vZGUpIHsKKwkJ
aSA9IDA7CisJCWxpc3RfZm9yX2VhY2gocG9zLCAmaW5mby0+bW9kZWxpc3QpIHsKKwkJCW1vZGVs
aXN0ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBmYl9tb2RlbGlzdCwgbGlzdCk7CisJCQltb2Rl
W2ldID0gbW9kZWxpc3QtPm1vZGU7CisJCQlpKys7CisJCX0KKworCQlpZiAoIW1vZGVfb3B0aW9u
KQorCQkJbW9kZV9vcHRpb24gPSBVVkVTQUZCX0RFRkFVTFRfTU9ERTsKKworCQlpID0gZmJfZmlu
ZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIG1vZGVfb3B0aW9uLCBtb2RlLCBpLAorCQkJTlVMTCwg
OCk7CisKKwkJa2ZyZWUobW9kZSk7CisJfQorCisJLyogZmJfZmluZF9tb2RlKCkgZmFpbGVkICov
CisJaWYgKGkgPT0gMCB8fCBpID49IDMpIHsKKwkJaW5mby0+dmFyLnhyZXMgPSA2NDA7CisJCWlu
Zm8tPnZhci55cmVzID0gNDgwOworCQltb2RlID0gKHN0cnVjdCBmYl92aWRlb21vZGUgKikKKwkJ
CQlmYl9maW5kX2Jlc3RfbW9kZSgmaW5mby0+dmFyLCAmaW5mby0+bW9kZWxpc3QpOworCisJCWlm
IChtb2RlKSB7CisJCQlmYl92aWRlb21vZGVfdG9fdmFyKCZpbmZvLT52YXIsIG1vZGUpOworCQl9
IGVsc2UgeworCQkJbW9kZWlkID0gcGFyLT52YmVfbW9kZXNbMF0ubW9kZV9pZDsKKwkJCWZiX2dl
dF9tb2RlKEZCX1ZTWU5DVElNSU5HUyB8IEZCX0lHTk9SRU1PTiwgNjAsCisJCQkJICAgICZpbmZv
LT52YXIsIGluZm8pOworCQkJZ290byBnb3Rtb2RlOworCQl9CisJfQorCisJLyogTG9vayBmb3Ig
YSBtYXRjaGluZyBWQkUgbW9kZS4gKi8KKwltb2RlaWQgPSB1dmVzYWZiX3ZiZV9maW5kX21vZGUo
cGFyLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCisJCQlpbmZvLT52YXIuYml0c19w
ZXJfcGl4ZWwsIFVWRVNBRkJfRVhBQ1RfUkVTKTsKKworCWlmIChtb2RlaWQgPT0gLTEpCisJCXJl
dHVybiAtRUlOVkFMOworCitnb3Rtb2RlOgorCXV2ZXNhZmJfc2V0dXBfdmFyKCZpbmZvLT52YXIs
IGluZm8sICZwYXItPnZiZV9tb2Rlc1ttb2RlaWRdKTsKKworCS8qCisJICogSWYgd2UgYXJlIG5v
dCBWQkUzLjArIGNvbXBsaWFudCwgd2UncmUgZG9uZSAtLSB0aGUgQklPUyB3aWxsCisJICogaWdu
b3JlIG91ciB0aW1pbmdzIGFueXdheS4KKwkgKi8KKwlpZiAocGFyLT52YmVfaWIudmJlX3ZlcnNp
b24gPCAweDAzMDAgfHwgcGFyLT5ub2NydGMpCisJCWZiX2dldF9tb2RlKEZCX1ZTWU5DVElNSU5H
UyB8IEZCX0lHTk9SRU1PTiwgNjAsCisJCQkJCSZpbmZvLT52YXIsIGluZm8pOworCisJcmV0dXJu
IG1vZGVpZDsKK30KKworc3RhdGljIGludCB1dmVzYWZiX3NldHBhbGV0dGUoc3RydWN0IHV2ZXNh
ZmJfcGFsX2VudHJ5ICplbnRyaWVzLCBpbnQgY291bnQsCisJCWludCBzdGFydCwgc3RydWN0IGZi
X2luZm8gKmluZm8pCit7CisJc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRhc2s7CisJc3RydWN0IHV2
ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJaW50IGkgPSBwYXItPm1vZGVfaWR4OworCWlu
dCBlcnIgPSAwOworCisJLyoKKwkgKiBXZSBzdXBwb3J0IHBhbGV0dGUgbW9kaWZpY2F0aW9ucyBm
b3IgOCBicHAgbW9kZXMgb25seSwgc28KKwkgKiB0aGVyZSBjYW4gbmV2ZXIgYmUgbW9yZSB0aGFu
IDI1NiBlbnRyaWVzLgorCSAqLworCWlmIChzdGFydCArIGNvdW50ID4gMjU2KQorCQlyZXR1cm4g
LUVJTlZBTDsKKworCS8qIFVzZSBWR0EgcmVnaXN0ZXJzIGlmIG1vZGUgaXMgVkdBLWNvbXBhdGli
bGUuICovCisJaWYgKGkgPj0gMCAmJiBpIDwgcGFyLT52YmVfbW9kZXNfY250ICYmCisJICAgIHBh
ci0+dmJlX21vZGVzW2ldLm1vZGVfYXR0ciAmIFZCRV9NT0RFX1ZHQUNPTVBBVCkgeworCQlmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJb3V0Yl9wKHN0YXJ0ICsgaSwgICAgICAgIGRh
Y19yZWcpOworCQkJb3V0Yl9wKGVudHJpZXNbaV0ucmVkLCAgIGRhY192YWwpOworCQkJb3V0Yl9w
KGVudHJpZXNbaV0uZ3JlZW4sIGRhY192YWwpOworCQkJb3V0Yl9wKGVudHJpZXNbaV0uYmx1ZSwg
IGRhY192YWwpOworCQl9CisJfQorI2lmZGVmIENPTkZJR19YODZfMzIKKwllbHNlIGlmIChwYXIt
PnBtaV9zZXRwYWwpIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSJjYWxsICooJSVlc2kp
IgorCQk6IC8qIG5vIHJldHVybiB2YWx1ZSAqLworCQk6ICJhIiAoMHg0ZjA5KSwgICAgICAgICAv
KiBFQVggKi8KKwkJICAiYiIgKDApLCAgICAgICAgICAgICAgLyogRUJYICovCisJCSAgImMiIChj
b3VudCksICAgICAgICAgIC8qIEVDWCAqLworCQkgICJkIiAoc3RhcnQpLCAgICAgICAgICAvKiBF
RFggKi8KKwkJICAiRCIgKGVudHJpZXMpLCAgICAgICAgLyogRURJICovCisJCSAgIlMiICgmcGFy
LT5wbWlfcGFsKSk7IC8qIEVTSSAqLworCX0KKyNlbmRpZgorCWVsc2UgeworCQl0YXNrID0gdXZl
c2FmYl9wcmVwKCk7CisJCWlmICghdGFzaykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXRhc2st
PnQucmVncy5lYXggPSAweDRmMDk7CisJCXRhc2stPnQucmVncy5lYnggPSAweDA7CisJCXRhc2st
PnQucmVncy5lY3ggPSBjb3VudDsKKwkJdGFzay0+dC5yZWdzLmVkeCA9IHN0YXJ0OworCQl0YXNr
LT50LmZsYWdzID0gVEZfQlVGX0VTREk7CisJCXRhc2stPnQuYnVmX2xlbiA9IHNpemVvZihzdHJ1
Y3QgdXZlc2FmYl9wYWxfZW50cnkpICogY291bnQ7CisJCXRhc2stPmJ1ZiA9IGVudHJpZXM7CisK
KwkJZXJyID0gdXZlc2FmYl9leGVjKHRhc2spOworCQlpZiAoKHRhc2stPnQucmVncy5lYXggJiAw
eGZmZmYpICE9IDB4MDA0ZikKKwkJCWVyciA9IDE7CisKKwkJdXZlc2FmYl9mcmVlKHRhc2spOwor
CX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHV2ZXNhZmJfc2V0Y29scmVnKHVuc2ln
bmVkIHJlZ25vLCB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLAorCQl1bnNpZ25lZCBibHVl
LCB1bnNpZ25lZCB0cmFuc3AsCisJCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCB1
dmVzYWZiX3BhbF9lbnRyeSBlbnRyeTsKKwlpbnQgc2hpZnQgPSAxNiAtIGluZm8tPnZhci5ncmVl
bi5sZW5ndGg7CisJaW50IGVyciA9IDA7CisKKwlpZiAocmVnbm8gPj0gaW5mby0+Y21hcC5sZW4p
CisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4
KSB7CisJCWVudHJ5LnJlZCAgID0gcmVkICAgPj4gc2hpZnQ7CisJCWVudHJ5LmdyZWVuID0gZ3Jl
ZW4gPj4gc2hpZnQ7CisJCWVudHJ5LmJsdWUgID0gYmx1ZSAgPj4gc2hpZnQ7CisJCWVudHJ5LnBh
ZCAgID0gMDsKKworCQllcnIgPSB1dmVzYWZiX3NldHBhbGV0dGUoJmVudHJ5LCAxLCByZWdubywg
aW5mbyk7CisJfSBlbHNlIGlmIChyZWdubyA8IDE2KSB7CisJCXN3aXRjaCAoaW5mby0+dmFyLmJp
dHNfcGVyX3BpeGVsKSB7CisJCWNhc2UgMTY6CisJCQlpZiAoaW5mby0+dmFyLnJlZC5vZmZzZXQg
PT0gMTApIHsKKwkJCQkvKiAxOjU6NTo1ICovCisJCQkJKCh1MzIgKikgKGluZm8tPnBzZXVkb19w
YWxldHRlKSlbcmVnbm9dID0KKwkJCQkJCSgocmVkICAgJiAweGY4MDApID4+ICAxKSB8CisJCQkJ
CQkoKGdyZWVuICYgMHhmODAwKSA+PiAgNikgfAorCQkJCQkJKChibHVlICAmIDB4ZjgwMCkgPj4g
MTEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiAwOjU6Njo1ICovCisJCQkJKCh1MzIgKikgKGluZm8t
PnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KKwkJCQkJCSgocmVkICAgJiAweGY4MDApICAgICAg
KSB8CisJCQkJCQkoKGdyZWVuICYgMHhmYzAwKSA+PiAgNSkgfAorCQkJCQkJKChibHVlICAmIDB4
ZjgwMCkgPj4gMTEpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSAyNDoKKwkJY2FzZSAzMjoK
KwkJCXJlZCAgID4+PSA4OworCQkJZ3JlZW4gPj49IDg7CisJCQlibHVlICA+Pj0gODsKKwkJCSgo
dTMyICopKGluZm8tPnBzZXVkb19wYWxldHRlKSlbcmVnbm9dID0KKwkJCQkocmVkICAgPDwgaW5m
by0+dmFyLnJlZC5vZmZzZXQpICAgfAorCQkJCShncmVlbiA8PCBpbmZvLT52YXIuZ3JlZW4ub2Zm
c2V0KSB8CisJCQkJKGJsdWUgIDw8IGluZm8tPnZhci5ibHVlLm9mZnNldCk7CisJCQlicmVhazsK
KwkJfQorCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHV2ZXNhZmJfc2V0Y21hcChz
dHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHV2
ZXNhZmJfcGFsX2VudHJ5ICplbnRyaWVzOworCWludCBzaGlmdCA9IDE2IC0gaW5mby0+dmFyLmdy
ZWVuLmxlbmd0aDsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChpbmZvLT52YXIuYml0c19wZXJf
cGl4ZWwgPT0gOCkgeworCQlpZiAoY21hcC0+c3RhcnQgKyBjbWFwLT5sZW4gPiBpbmZvLT5jbWFw
LnN0YXJ0ICsKKwkJICAgIGluZm8tPmNtYXAubGVuIHx8IGNtYXAtPnN0YXJ0IDwgaW5mby0+Y21h
cC5zdGFydCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWVudHJpZXMgPSBrbWFsbG9jKHNpemVv
ZigqZW50cmllcykgKiBjbWFwLT5sZW4sIEdGUF9LRVJORUwpOworCQlpZiAoIWVudHJpZXMpCisJ
CQlyZXR1cm4gLUVOT01FTTsKKworCQlmb3IgKGkgPSAwOyBpIDwgY21hcC0+bGVuOyBpKyspIHsK
KwkJCWVudHJpZXNbaV0ucmVkICAgPSBjbWFwLT5yZWRbaV0gICA+PiBzaGlmdDsKKwkJCWVudHJp
ZXNbaV0uZ3JlZW4gPSBjbWFwLT5ncmVlbltpXSA+PiBzaGlmdDsKKwkJCWVudHJpZXNbaV0uYmx1
ZSAgPSBjbWFwLT5ibHVlW2ldICA+PiBzaGlmdDsKKwkJCWVudHJpZXNbaV0ucGFkICAgPSAwOwor
CQl9CisJCWVyciA9IHV2ZXNhZmJfc2V0cGFsZXR0ZShlbnRyaWVzLCBjbWFwLT5sZW4sIGNtYXAt
PnN0YXJ0LCBpbmZvKTsKKwkJa2ZyZWUoZW50cmllcyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICog
Rm9yIG1vZGVzIHdpdGggYnBwID4gOCwgd2Ugb25seSBzZXQgdGhlIHBzZXVkbyBwYWxldHRlIGlu
CisJCSAqIHRoZSBmYl9pbmZvIHN0cnVjdC4gV2UgcmVseSBvbiB1dmVzYWZiX3NldGNvbHJlZyB0
byBkbyBhbGwKKwkJICogc2FuaXR5IGNoZWNraW5nLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8
IGNtYXAtPmxlbjsgaSsrKSB7CisJCQllcnIgfD0gdXZlc2FmYl9zZXRjb2xyZWcoY21hcC0+c3Rh
cnQgKyBpLCBjbWFwLT5yZWRbaV0sCisJCQkJCQljbWFwLT5ncmVlbltpXSwgY21hcC0+Ymx1ZVtp
XSwKKwkJCQkJCTAsIGluZm8pOworCQl9CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBp
bnQgdXZlc2FmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJ
c3RydWN0IGZiX2luZm8gKmluZm8pCit7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWludCBvZmZz
ZXQ7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlvZmZzZXQgPSAo
dmFyLT55b2Zmc2V0ICogaW5mby0+Zml4LmxpbmVfbGVuZ3RoICsgdmFyLT54b2Zmc2V0KSAvIDQ7
CisKKwkvKgorCSAqIEl0IHR1cm5zIG91dCBpdCdzIG5vdCB0aGUgYmVzdCBpZGVhIHRvIGRvIHBh
bm5pbmcgdmlhIHZtODYsCisJICogc28gd2Ugb25seSBhbGxvdyBpdCBpZiB3ZSBoYXZlIGEgUE1J
LgorCSAqLworCWlmIChwYXItPnBtaV9zdGFydCkgeworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygK
KwkJCSJjYWxsICooJSVlZGkpIgorCQkJOiAvKiBubyByZXR1cm4gdmFsdWUgKi8KKwkJCTogImEi
ICgweDRmMDcpLCAgICAgICAgIC8qIEVBWCAqLworCQkJICAiYiIgKDApLCAgICAgICAgICAgICAg
LyogRUJYICovCisJCQkgICJjIiAob2Zmc2V0KSwgICAgICAgICAvKiBFQ1ggKi8KKwkJCSAgImQi
IChvZmZzZXQgPj4gMTYpLCAgIC8qIEVEWCAqLworCQkJICAiRCIgKCZwYXItPnBtaV9zdGFydCkp
OyAgICAvKiBFREkgKi8KKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1
dmVzYWZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0
IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRh
c2s7CisJaW50IGVyciA9IDE7CisKKwlpZiAocGFyLT52YmVfaWIuY2FwYWJpbGl0aWVzICYgVkJF
X0NBUF9WR0FDT01QQVQpIHsKKwkJaW50IGxvb3AgPSAxMDAwMDsKKwkJdTggc2VxID0gMCwgY3J0
YzE3ID0gMDsKKworCQlpZiAoYmxhbmsgPT0gRkJfQkxBTktfUE9XRVJET1dOKSB7CisJCQlzZXEg
PSAweDIwOworCQkJY3J0YzE3ID0gMHgwMDsKKwkJCWVyciA9IDA7CisJCX0gZWxzZSB7CisJCQlz
ZXEgPSAweDAwOworCQkJY3J0YzE3ID0gMHg4MDsKKwkJCWVyciA9IChibGFuayA9PSBGQl9CTEFO
S19VTkJMQU5LKSA/IDAgOiAtRUlOVkFMOworCQl9CisKKwkJdmdhX3dzZXEoTlVMTCwgMHgwMCwg
MHgwMSk7CisJCXNlcSB8PSB2Z2FfcnNlcShOVUxMLCAweDAxKSAmIH4weDIwOworCQl2Z2Ffd3Nl
cShOVUxMLCAweDAwLCBzZXEpOworCisJCWNydGMxNyB8PSB2Z2FfcmNydChOVUxMLCAweDE3KSAm
IH4weDgwOworCQl3aGlsZSAobG9vcC0tKTsKKwkJdmdhX3djcnQoTlVMTCwgMHgxNywgY3J0YzE3
KTsKKwkJdmdhX3dzZXEoTlVMTCwgMHgwMCwgMHgwMyk7CisJfSBlbHNlIHsKKwkJdGFzayA9IHV2
ZXNhZmJfcHJlcCgpOworCQlpZiAoIXRhc2spCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQl0YXNr
LT50LnJlZ3MuZWF4ID0gMHg0ZjEwOworCQlzd2l0Y2ggKGJsYW5rKSB7CisJCWNhc2UgRkJfQkxB
TktfVU5CTEFOSzoKKwkJCXRhc2stPnQucmVncy5lYnggPSAweDAwMDE7CisJCQlicmVhazsKKwkJ
Y2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCQl0YXNrLT50LnJlZ3MuZWJ4ID0gMHgwMTAxOwkvKiBz
dGFuZGJ5ICovCisJCQlicmVhazsKKwkJY2FzZSBGQl9CTEFOS19QT1dFUkRPV046CisJCQl0YXNr
LT50LnJlZ3MuZWJ4ID0gMHgwNDAxOwkvKiBwb3dlcmRvd24gKi8KKwkJCWJyZWFrOworCQlkZWZh
dWx0OgorCQkJZ290byBvdXQ7CisJCX0KKworCQllcnIgPSB1dmVzYWZiX2V4ZWModGFzayk7CisJ
CWlmIChlcnIgfHwgKHRhc2stPnQucmVncy5lYXggJiAweGZmZmYpICE9IDB4MDA0ZikKKwkJCWVy
ciA9IDE7CitvdXQ6CQl1dmVzYWZiX2ZyZWUodGFzayk7CisJfQorCXJldHVybiBlcnI7Cit9CisK
K3N0YXRpYyBpbnQgdXZlc2FmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikK
K3sKKwlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwlpbnQgY250ID0gYXRv
bWljX3JlYWQoJnBhci0+cmVmX2NvdW50KTsKKworCWlmICghY250ICYmIHBhci0+dmJlX3N0YXRl
X3NpemUpCisJCXBhci0+dmJlX3N0YXRlX29yaWcgPSB1dmVzYWZiX3ZiZV9zdGF0ZV9zYXZlKHBh
cik7CisKKwlhdG9taWNfaW5jKCZwYXItPnJlZl9jb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0
YXRpYyBpbnQgdXZlc2FmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikK
K3sKKwlzdHJ1Y3QgdXZlc2FmYl9rdGFzayAqdGFzayA9IE5VTEw7CisJc3RydWN0IHV2ZXNhZmJf
cGFyICpwYXIgPSBpbmZvLT5wYXI7CisJaW50IGNudCA9IGF0b21pY19yZWFkKCZwYXItPnJlZl9j
b3VudCk7CisKKwlpZiAoIWNudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY250ICE9IDEp
CisJCWdvdG8gb3V0OworCisJdGFzayA9IHV2ZXNhZmJfcHJlcCgpOworCWlmICghdGFzaykKKwkJ
Z290byBvdXQ7CisKKwkvKiBGaXJzdCwgdHJ5IHRvIHNldCB0aGUgc3RhbmRhcmQgODB4MjUgdGV4
dCBtb2RlLiAqLworCXRhc2stPnQucmVncy5lYXggPSAweDAwMDM7CisJdXZlc2FmYl9leGVjKHRh
c2spOworCisJLyoKKwkgKiBOb3cgdHJ5IHRvIHJlc3RvcmUgd2hhdGV2ZXIgaGFyZHdhcmUgc3Rh
dGUgd2UgbWlnaHQgaGF2ZQorCSAqIHNhdmVkIHdoZW4gdGhlIGZiIGRldmljZSB3YXMgZmlyc3Qg
b3BlbmVkLgorCSAqLworCXV2ZXNhZmJfdmJlX3N0YXRlX3Jlc3RvcmUocGFyLCBwYXItPnZiZV9z
dGF0ZV9vcmlnKTsKK291dDoKKwlhdG9taWNfZGVjKCZwYXItPnJlZl9jb3VudCk7CisJaWYgKHRh
c2spCisJCXV2ZXNhZmJfZnJlZSh0YXNrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1
dmVzYWZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IHV2ZXNhZmJf
cGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHV2ZXNhZmJfa3Rhc2sgKnRhc2sgPSBOVUxM
OworCXN0cnVjdCB2YmVfY3J0Y19pYiAqY3J0YyA9IE5VTEw7CisJc3RydWN0IHZiZV9tb2RlX2li
ICptb2RlID0gTlVMTDsKKwlpbnQgaSwgZXJyID0gMCwgZGVwdGggPSBpbmZvLT52YXIuYml0c19w
ZXJfcGl4ZWw7CisKKwlpZiAoZGVwdGggPiA4ICYmIGRlcHRoICE9IDMyKQorCQlkZXB0aCA9IGlu
Zm8tPnZhci5yZWQubGVuZ3RoICsgaW5mby0+dmFyLmdyZWVuLmxlbmd0aCArCisJCQlpbmZvLT52
YXIuYmx1ZS5sZW5ndGg7CisKKwlpID0gdXZlc2FmYl92YmVfZmluZF9tb2RlKHBhciwgaW5mby0+
dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLCBkZXB0aCwKKwkJCQkgVVZFU0FGQl9FWEFDVF9SRVMg
fCBVVkVTQUZCX0VYQUNUX0RFUFRIKTsKKwlpZiAoaSA+PSAwKQorCQltb2RlID0gJnBhci0+dmJl
X21vZGVzW2ldOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0YXNrID0gdXZlc2FmYl9w
cmVwKCk7CisJaWYgKCF0YXNrKQorCQlyZXR1cm4gLUVOT01FTTsKK3NldG1vZGU6CisJdGFzay0+
dC5yZWdzLmVheCA9IDB4NGYwMjsKKwl0YXNrLT50LnJlZ3MuZWJ4ID0gbW9kZS0+bW9kZV9pZCB8
IDB4NDAwMDsJLyogdXNlIExGQiAqLworCisJaWYgKHBhci0+dmJlX2liLnZiZV92ZXJzaW9uID49
IDB4MDMwMCAmJiAhcGFyLT5ub2NydGMgJiYKKwkgICAgaW5mby0+dmFyLnBpeGNsb2NrICE9IDAp
IHsKKwkJdGFzay0+dC5yZWdzLmVieCB8PSAweDA4MDA7CQkvKiB1c2UgQ1JUQyBkYXRhICovCisJ
CXRhc2stPnQuZmxhZ3MgPSBURl9CVUZfRVNESTsKKwkJY3J0YyA9IGt6YWxsb2Moc2l6ZW9mKHN0
cnVjdCB2YmVfY3J0Y19pYiksIEdGUF9LRVJORUwpOworCQlpZiAoIWNydGMpIHsKKwkJCWVyciA9
IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQljcnRjLT5ob3Jpel9zdGFydCA9IGluZm8t
PnZhci54cmVzICsgaW5mby0+dmFyLnJpZ2h0X21hcmdpbjsKKwkJY3J0Yy0+aG9yaXpfZW5kCSAg
PSBjcnRjLT5ob3Jpel9zdGFydCArIGluZm8tPnZhci5oc3luY19sZW47CisJCWNydGMtPmhvcml6
X3RvdGFsID0gY3J0Yy0+aG9yaXpfZW5kICsgaW5mby0+dmFyLmxlZnRfbWFyZ2luOworCisJCWNy
dGMtPnZlcnRfc3RhcnQgID0gaW5mby0+dmFyLnlyZXMgKyBpbmZvLT52YXIubG93ZXJfbWFyZ2lu
OworCQljcnRjLT52ZXJ0X2VuZCAgICA9IGNydGMtPnZlcnRfc3RhcnQgKyBpbmZvLT52YXIudnN5
bmNfbGVuOworCQljcnRjLT52ZXJ0X3RvdGFsICA9IGNydGMtPnZlcnRfZW5kICsgaW5mby0+dmFy
LnVwcGVyX21hcmdpbjsKKworCQljcnRjLT5waXhlbF9jbG9jayA9IFBJQ09TMktIWihpbmZvLT52
YXIucGl4Y2xvY2spICogMTAwMDsKKwkJY3J0Yy0+cmVmcmVzaF9yYXRlID0gKHUxNikoMTAwICog
KGNydGMtPnBpeGVsX2Nsb2NrIC8KKwkJCQkoY3J0Yy0+dmVydF90b3RhbCAqIGNydGMtPmhvcml6
X3RvdGFsKSkpOworCisJCWlmIChpbmZvLT52YXIudm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCisJ
CQljcnRjLT5mbGFncyB8PSAweDE7CisJCWlmIChpbmZvLT52YXIudm1vZGUgJiBGQl9WTU9ERV9J
TlRFUkxBQ0VEKQorCQkJY3J0Yy0+ZmxhZ3MgfD0gMHgyOworCQlpZiAoIShpbmZvLT52YXIuc3lu
YyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKSkKKwkJCWNydGMtPmZsYWdzIHw9IDB4NDsKKwkJaWYg
KCEoaW5mby0+dmFyLnN5bmMgJiBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QpKQorCQkJY3J0Yy0+Zmxh
Z3MgfD0gMHg4OworCQltZW1jcHkoJnBhci0+Y3J0YywgY3J0Yywgc2l6ZW9mKCpjcnRjKSk7CisJ
fSBlbHNlIHsKKwkJbWVtc2V0KCZwYXItPmNydGMsIDAsIHNpemVvZigqY3J0YykpOworCX0KKwor
CXRhc2stPnQuYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgdmJlX2NydGNfaWIpOworCXRhc2stPmJ1
ZiA9ICZwYXItPmNydGM7CisKKwllcnIgPSB1dmVzYWZiX2V4ZWModGFzayk7CisJaWYgKGVyciB8
fCAodGFzay0+dC5yZWdzLmVheCAmIDB4ZmZmZikgIT0gMHgwMDRmKSB7CisJCS8qCisJCSAqIFRo
ZSBtb2RlIHN3aXRjaCBtaWdodCBoYXZlIGZhaWxlZCBiZWNhdXNlIHdlIHRyaWVkIHRvCisJCSAq
IHVzZSBvdXIgb3duIHRpbWluZ3MuICBUcnkgYWdhaW4gd2l0aCB0aGUgZGVmYXVsdCB0aW1pbmdz
LgorCQkgKi8KKwkJaWYgKGNydGMgIT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAi
dXZlc2FmYjogbW9kZSBzd2l0Y2ggZmFpbGVkICIKKwkJCQkiKGVheD0weCV4LCBlcnI9JWQpLiBU
cnlpbmcgYWdhaW4gd2l0aCAiCisJCQkJImRlZmF1bHQgdGltaW5ncy5cbiIsIHRhc2stPnQucmVn
cy5lYXgsIGVycik7CisJCQl1dmVzYWZiX3Jlc2V0KHRhc2spOworCQkJa2ZyZWUoY3J0Yyk7CisJ
CQljcnRjID0gTlVMTDsKKwkJCWluZm8tPnZhci5waXhjbG9jayA9IDA7CisJCQlnb3RvIHNldG1v
ZGU7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9FUlIgInV2ZXNhZmI6IG1vZGUgc3dpdGNo
IGZhaWxlZCAoZWF4PSIKKwkJCQkiMHgleCwgZXJyPSVkKVxuIiwgdGFzay0+dC5yZWdzLmVheCwg
ZXJyKTsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlwYXItPm1v
ZGVfaWR4ID0gaTsKKworCS8qIEZvciA4YnBwIG1vZGVzLCBhbHdheXMgdHJ5IHRvIHNldCB0aGUg
REFDIHRvIDggYml0cy4gKi8KKwlpZiAocGFyLT52YmVfaWIuY2FwYWJpbGl0aWVzICYgVkJFX0NB
UF9DQU5fU1dJVENIX0RBQyAmJgorCSAgICBtb2RlLT5iaXRzX3Blcl9waXhlbCA8PSA4KSB7CisJ
CXV2ZXNhZmJfcmVzZXQodGFzayk7CisJCXRhc2stPnQucmVncy5lYXggPSAweDRmMDg7CisJCXRh
c2stPnQucmVncy5lYnggPSAweDA4MDA7CisKKwkJZXJyID0gdXZlc2FmYl9leGVjKHRhc2spOwor
CQlpZiAoZXJyIHx8ICh0YXNrLT50LnJlZ3MuZWF4ICYgMHhmZmZmKSAhPSAweDAwNGYgfHwKKwkJ
ICAgICgodGFzay0+dC5yZWdzLmVieCAmIDB4ZmYwMCkgPj4gOCkgIT0gOCkgeworCQkJLyoKKwkJ
CSAqIFdlJ3ZlIGZhaWxlZCB0byBzZXQgdGhlIERBQyBwYWxldHRlIGZvcm1hdCAtCisJCQkgKiB0
aW1lIHRvIGNvcnJlY3QgdmFyLgorCQkJICovCisJCQlpbmZvLT52YXIucmVkLmxlbmd0aCAgICA9
IDY7CisJCQlpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoICA9IDY7CisJCQlpbmZvLT52YXIuYmx1ZS5s
ZW5ndGggICA9IDY7CisJCX0KKwl9CisKKwlpbmZvLT5maXgudmlzdWFsID0gKGluZm8tPnZhci5i
aXRzX3Blcl9waXhlbCA9PSA4KSA/CisJCQkJRkJfVklTVUFMX1BTRVVET0NPTE9SIDogRkJfVklT
VUFMX1RSVUVDT0xPUjsKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSBtb2RlLT5ieXRlc19wZXJf
c2Nhbl9saW5lOworCitvdXQ6CWlmIChjcnRjICE9IE5VTEwpCisJCWtmcmVlKGNydGMpOworCXV2
ZXNhZmJfZnJlZSh0YXNrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHV2ZXNh
ZmJfY2hlY2tfbGltaXRzKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQlzdHJ1Y3Qg
ZmJfaW5mbyAqaW5mbykKK3sKKwljb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlOworCXN0
cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJLyoKKwkgKiBJZiBwaXhjbG9j
ayBpcyBzZXQgdG8gMCwgdGhlbiB3ZSdyZSB1c2luZyBkZWZhdWx0IEJJT1MgdGltaW5ncworCSAq
IGFuZCB0aHVzIGRvbid0IGhhdmUgdG8gcGVyZm9ybSBhbnkgY2hlY2tzIGhlcmUuCisJICovCisJ
aWYgKCF2YXItPnBpeGNsb2NrKQorCQlyZXR1cm47CisKKwlpZiAocGFyLT52YmVfaWIudmJlX3Zl
cnNpb24gPCAweDAzMDApIHsKKwkJZmJfZ2V0X21vZGUoRkJfVlNZTkNUSU1JTkdTIHwgRkJfSUdO
T1JFTU9OLCA2MCwgdmFyLCBpbmZvKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghZmJfdmFsaWRh
dGVfbW9kZSh2YXIsIGluZm8pKQorCQlyZXR1cm47CisKKwltb2RlID0gZmJfZmluZF9iZXN0X21v
ZGUodmFyLCAmaW5mby0+bW9kZWxpc3QpOworCWlmIChtb2RlKSB7CisJCWlmIChtb2RlLT54cmVz
ID09IHZhci0+eHJlcyAmJiBtb2RlLT55cmVzID09IHZhci0+eXJlcyAmJgorCQkgICAgIShtb2Rl
LT52bW9kZSAmIChGQl9WTU9ERV9JTlRFUkxBQ0VEIHwgRkJfVk1PREVfRE9VQkxFKSkpIHsKKwkJ
CWZiX3ZpZGVvbW9kZV90b192YXIodmFyLCBtb2RlKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwor
CWlmIChpbmZvLT5tb25zcGVjcy5ndGYgJiYgIWZiX2dldF9tb2RlKEZCX01BWFRJTUlOR1MsIDAs
IHZhciwgaW5mbykpCisJCXJldHVybjsKKwkvKiBVc2UgZGVmYXVsdCByZWZyZXNoIHJhdGUgKi8K
Kwl2YXItPnBpeGNsb2NrID0gMDsKK30KKworc3RhdGljIGludCB1dmVzYWZiX2NoZWNrX3Zhcihz
dHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJc3RydWN0IGZiX2luZm8gKmluZm8pCit7
CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJc3RydWN0IHZiZV9tb2Rl
X2liICptb2RlID0gTlVMTDsKKwlpbnQgbWF0Y2ggPSAtMTsKKwlpbnQgZGVwdGggPSB2YXItPnJl
ZC5sZW5ndGggKyB2YXItPmdyZWVuLmxlbmd0aCArIHZhci0+Ymx1ZS5sZW5ndGg7CisKKwkvKgor
CSAqIFZhcmlvdXMgYXBwcyB3aWxsIHVzZSBiaXRzX3Blcl9waXhlbCB0byBzZXQgdGhlIGNvbG9y
IGRlcHRoLAorCSAqIHdoaWNoIGlzIHRoZW9yZXRpY2FsbHkgaW5jb3JyZWN0LCBidXQgd2hpY2gg
d2UnbGwgdHJ5IHRvIGhhbmRsZQorCSAqIGhlcmUuCisJICovCisJaWYgKGRlcHRoID09IDAgfHwg
YWJzKGRlcHRoIC0gdmFyLT5iaXRzX3Blcl9waXhlbCkgPj0gOCkKKwkJZGVwdGggPSB2YXItPmJp
dHNfcGVyX3BpeGVsOworCisJbWF0Y2ggPSB1dmVzYWZiX3ZiZV9maW5kX21vZGUocGFyLCB2YXIt
PnhyZXMsIHZhci0+eXJlcywgZGVwdGgsCisJCQkJCQlVVkVTQUZCX0VYQUNUX1JFUyk7CisJaWYg
KG1hdGNoID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1vZGUgPSAmcGFyLT52YmVfbW9k
ZXNbbWF0Y2hdOworCXV2ZXNhZmJfc2V0dXBfdmFyKHZhciwgaW5mbywgbW9kZSk7CisKKwkvKgor
CSAqIENoZWNrIHdoZXRoZXIgd2UgaGF2ZSByZW1hcHBlZCBlbm91Z2ggbWVtb3J5IGZvciB0aGlz
IG1vZGUuCisJICogV2UgbWlnaHQgYmUgY2FsbGVkIGF0IGFuIGVhcmx5IHN0YWdlLCB3aGVuIHdl
IGhhdmVuJ3QgcmVtYXBwZWQKKwkgKiBhbnkgbWVtb3J5IHlldCwgaW4gd2hpY2ggY2FzZSB3ZSBz
aW1wbHkgc2tpcCB0aGUgY2hlY2suCisJICovCisJaWYgKHZhci0+eXJlcyAqIG1vZGUtPmJ5dGVz
X3Blcl9zY2FuX2xpbmUgPiBpbmZvLT5maXguc21lbV9sZW4KKwkJCQkJCSYmIGluZm8tPmZpeC5z
bWVtX2xlbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHZhci0+dm1vZGUgJiBGQl9WTU9E
RV9ET1VCTEUpICYmCisJCQkJIShwYXItPnZiZV9tb2Rlc1ttYXRjaF0ubW9kZV9hdHRyICYgMHgx
MDApKQorCQl2YXItPnZtb2RlICY9IH5GQl9WTU9ERV9ET1VCTEU7CisKKwlpZiAoKHZhci0+dm1v
ZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEKSAmJgorCQkJCSEocGFyLT52YmVfbW9kZXNbbWF0Y2hd
Lm1vZGVfYXR0ciAmIDB4MjAwKSkKKwkJdmFyLT52bW9kZSAmPSB+RkJfVk1PREVfSU5URVJMQUNF
RDsKKworCXV2ZXNhZmJfY2hlY2tfbGltaXRzKHZhciwgaW5mbyk7CisKKwl2YXItPnhyZXNfdmly
dHVhbCA9IHZhci0+eHJlczsKKwl2YXItPnlyZXNfdmlydHVhbCA9IChwYXItPnlwYW4pID8KKwkJ
CQlpbmZvLT5maXguc21lbV9sZW4gLyBtb2RlLT5ieXRlc19wZXJfc2Nhbl9saW5lIDoKKwkJCQl2
YXItPnlyZXM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHV2ZXNhZmJfc2F2ZV9zdGF0
ZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGlu
Zm8tPnBhcjsKKworCWlmIChwYXItPnZiZV9zdGF0ZV9zYXZlZCkKKwkJa2ZyZWUocGFyLT52YmVf
c3RhdGVfc2F2ZWQpOworCisJcGFyLT52YmVfc3RhdGVfc2F2ZWQgPSB1dmVzYWZiX3ZiZV9zdGF0
ZV9zYXZlKHBhcik7Cit9CisKK3N0YXRpYyB2b2lkIHV2ZXNhZmJfcmVzdG9yZV9zdGF0ZShzdHJ1
Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGluZm8tPnBh
cjsKKworCXV2ZXNhZmJfdmJlX3N0YXRlX3Jlc3RvcmUocGFyLCBwYXItPnZiZV9zdGF0ZV9zYXZl
ZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIHV2ZXNhZmJfb3BzID0geworCS5vd25lcgkJ
PSBUSElTX01PRFVMRSwKKwkuZmJfb3Blbgk9IHV2ZXNhZmJfb3BlbiwKKwkuZmJfcmVsZWFzZQk9
IHV2ZXNhZmJfcmVsZWFzZSwKKwkuZmJfc2V0Y29scmVnCT0gdXZlc2FmYl9zZXRjb2xyZWcsCisJ
LmZiX3NldGNtYXAJPSB1dmVzYWZiX3NldGNtYXAsCisJLmZiX3Bhbl9kaXNwbGF5CT0gdXZlc2Fm
Yl9wYW5fZGlzcGxheSwKKwkuZmJfYmxhbmsJPSB1dmVzYWZiX2JsYW5rLAorCS5mYl9maWxscmVj
dAk9IGNmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBjZmJfY29weWFyZWEsCisJLmZiX2lt
YWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCisJLmZiX2NoZWNrX3Zhcgk9IHV2ZXNhZmJfY2hlY2tf
dmFyLAorCS5mYl9zZXRfcGFyCT0gdXZlc2FmYl9zZXRfcGFyLAorCS5mYl9zYXZlX3N0YXRlCT0g
dXZlc2FmYl9zYXZlX3N0YXRlLAorCS5mYl9yZXN0b3JlX3N0YXRlID0gdXZlc2FmYl9yZXN0b3Jl
X3N0YXRlLAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IHV2ZXNhZmJfaW5pdF9pbmZvKHN0
cnVjdCBmYl9pbmZvICppbmZvLAorCQlzdHJ1Y3QgdmJlX21vZGVfaWIgKm1vZGUpCit7CisJdW5z
aWduZWQgaW50IHNpemVfdm1vZGU7CisJdW5zaWduZWQgaW50IHNpemVfcmVtYXA7CisJdW5zaWdu
ZWQgaW50IHNpemVfdG90YWw7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7
CisJaW50IGksIGg7CisKKwlpbmZvLT5wc2V1ZG9fcGFsZXR0ZSA9ICgodTggKilpbmZvLT5wYXIg
KyBzaXplb2Yoc3RydWN0IHV2ZXNhZmJfcGFyKSk7CisJaW5mby0+Zml4ID0gdXZlc2FmYl9maXg7
CisJaW5mby0+Zml4LnlwYW5zdGVwID0gcGFyLT55cGFuID8gMSA6IDA7CisJaW5mby0+Zml4Lnl3
cmFwc3RlcCA9IChwYXItPnlwYW4gPiAxKSA/IDEgOiAwOworCisJLyoKKwkgKiBJZiB3ZSB3ZXJl
IHVuYWJsZSB0byBnZXQgdGhlIHN0YXRlIGJ1ZmZlciBzaXplLCBkaXNhYmxlCisJICogZnVuY3Rp
b25zIGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyB0aGUgaGFyZHdhcmUgc3RhdGUuCisJICovCisJ
aWYgKHBhci0+dmJlX3N0YXRlX3NpemUgPT0gMCkgeworCQlpbmZvLT5mYm9wcy0+ZmJfc2F2ZV9z
dGF0ZSA9IE5VTEw7CisJCWluZm8tPmZib3BzLT5mYl9yZXN0b3JlX3N0YXRlID0gTlVMTDsKKwl9
CisKKwkvKiBEaXNhYmxlIGJsYW5raW5nIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBzby4gKi8KKwlp
ZiAoIWJsYW5rKQorCQlpbmZvLT5mYm9wcy0+ZmJfYmxhbmsgPSBOVUxMOworCisJLyoKKwkgKiBG
aW5kIG91dCBob3cgbXVjaCBJTyBtZW1vcnkgaXMgcmVxdWlyZWQgZm9yIHRoZSBtb2RlIHdpdGgK
KwkgKiB0aGUgaGlnaGVzdCByZXNvbHV0aW9uLgorCSAqLworCXNpemVfcmVtYXAgPSAwOworCWZv
ciAoaSA9IDA7IGkgPCBwYXItPnZiZV9tb2Rlc19jbnQ7IGkrKykgeworCQloID0gcGFyLT52YmVf
bW9kZXNbaV0uYnl0ZXNfcGVyX3NjYW5fbGluZSAqCisJCQkJCXBhci0+dmJlX21vZGVzW2ldLnlf
cmVzOworCQlpZiAoaCA+IHNpemVfcmVtYXApCisJCQlzaXplX3JlbWFwID0gaDsKKwl9CisJc2l6
ZV9yZW1hcCAqPSAyOworCisJLyoKKwkgKiAgIHNpemVfdm1vZGUgLS0gdGhhdCBpcyB0aGUgYW1v
dW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yIHRoZQorCSAqICAgICAgICAgICAgICAgICB1c2VkIHZp
ZGVvIG1vZGUsIGkuZS4gdGhlIG1pbmltdW0gYW1vdW50IG9mCisJICogICAgICAgICAgICAgICAg
IG1lbW9yeSB3ZSBuZWVkLgorCSAqLworCWlmIChtb2RlICE9IE5VTEwpIHsKKwkJc2l6ZV92bW9k
ZSA9IGluZm8tPnZhci55cmVzICogbW9kZS0+Ynl0ZXNfcGVyX3NjYW5fbGluZTsKKwl9IGVsc2Ug
eworCQlzaXplX3Ztb2RlID0gaW5mby0+dmFyLnlyZXMgKiBpbmZvLT52YXIueHJlcyAqCisJCQkg
ICAgICgoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsICsgNykgPj4gMyk7CisJfQorCisJLyoKKwkg
KiAgIHNpemVfdG90YWwgLS0gYWxsIHZpZGVvIG1lbW9yeSB3ZSBoYXZlLiBVc2VkIGZvciBtdHJy
CisJICogICAgICAgICAgICAgICAgIGVudHJpZXMsIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGJv
dW5kcworCSAqICAgICAgICAgICAgICAgICBjaGVja2luZy4KKwkgKi8KKwlzaXplX3RvdGFsID0g
cGFyLT52YmVfaWIudG90YWxfbWVtb3J5ICogNjU1MzY7CisJaWYgKHZyYW1fdG90YWwpCisJCXNp
emVfdG90YWwgPSB2cmFtX3RvdGFsICogMTAyNCAqIDEwMjQ7CisJaWYgKHNpemVfdG90YWwgPCBz
aXplX3Ztb2RlKQorCQlzaXplX3RvdGFsID0gc2l6ZV92bW9kZTsKKworCS8qCisJICogICBzaXpl
X3JlbWFwIC0tIHRoZSBhbW91bnQgb2YgdmlkZW8gbWVtb3J5IHdlIGFyZSBnb2luZyB0bworCSAq
ICAgICAgICAgICAgICAgICB1c2UgZm9yIHZlc2FmYi4gIFdpdGggbW9kZXJuIGNhcmRzIGl0IGlz
IG5vCisJICogICAgICAgICAgICAgICAgIG9wdGlvbiB0byBzaW1wbHkgdXNlIHNpemVfdG90YWwg
YXMgdGgKKwkgKiAgICAgICAgICAgICAgICAgd2FzdGVzIHBsZW50eSBvZiBrZXJuZWwgYWRkcmVz
cyBzcGFjZS4KKwkgKi8KKwlpZiAodnJhbV9yZW1hcCkKKwkJc2l6ZV9yZW1hcCA9IHZyYW1fcmVt
YXAgKiAxMDI0ICogMTAyNDsKKwlpZiAoc2l6ZV9yZW1hcCA8IHNpemVfdm1vZGUpCisJCXNpemVf
cmVtYXAgPSBzaXplX3Ztb2RlOworCWlmIChzaXplX3JlbWFwID4gc2l6ZV90b3RhbCkKKwkJc2l6
ZV9yZW1hcCA9IHNpemVfdG90YWw7CisKKwlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplX3JlbWFw
OworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gbW9kZS0+cGh5c19iYXNlX3B0cjsKKworCS8qCisJ
ICogV2UgaGF2ZSB0byBzZXQgeXJlc192aXJ0dWFsIGhlcmUgYmVjYXVzZSB3aGVuIHNldHVwX3Zh
cigpIHdhcworCSAqIGNhbGxlZCwgc21lbV9sZW4gd2Fzbid0IGRlZmluZWQgeWV0LgorCSAqLwor
CWluZm8tPnZhci55cmVzX3ZpcnR1YWwgPSBpbmZvLT5maXguc21lbV9sZW4gLworCQkJCSBtb2Rl
LT5ieXRlc19wZXJfc2Nhbl9saW5lOworCisJaWYgKHBhci0+eXBhbiAmJiBpbmZvLT52YXIueXJl
c192aXJ0dWFsID4gaW5mby0+dmFyLnlyZXMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAidXZlc2Fm
Yjogc2Nyb2xsaW5nOiAlcyAiCisJCQkidXNpbmcgcHJvdGVjdGVkIG1vZGUgaW50ZXJmYWNlLCAi
CisJCQkieXJlc192aXJ0dWFsPSVkXG4iLAorCQkJKHBhci0+eXBhbiA+IDEpID8gInl3cmFwIiA6
ICJ5cGFuIiwKKwkJCWluZm8tPnZhci55cmVzX3ZpcnR1YWwpOworCX0gZWxzZSB7CisJCXByaW50
ayhLRVJOX0lORk8gInV2ZXNhZmI6IHNjcm9sbGluZzogcmVkcmF3XG4iKTsKKwkJaW5mby0+dmFy
LnlyZXNfdmlydHVhbCA9IGluZm8tPnZhci55cmVzOworCQlwYXItPnlwYW4gPSAwOworCX0KKwor
CWluZm8tPmZsYWdzID0gRkJJTkZPX0ZMQUdfREVGQVVMVCB8CisJCQkocGFyLT55cGFuKSA/IEZC
SU5GT19IV0FDQ0VMX1lQQU4gOiAwOworCisJaWYgKCFwYXItPnlwYW4pCisJCWluZm8tPmZib3Bz
LT5mYl9wYW5fZGlzcGxheSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHV2ZXNhZmJfaW5pdF9t
dHJyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworI2lmZGVmIENPTkZJR19NVFJSCisJaWYgKG10
cnIgJiYgIShpbmZvLT5maXguc21lbV9zdGFydCAmIChQQUdFX1NJWkUgLSAxKSkpIHsKKwkJaW50
IHRlbXBfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKwkJdW5zaWduZWQgaW50IHR5cGUgPSAw
OworCisJCXN3aXRjaCAobXRycikgeworCQljYXNlIDE6CisJCQl0eXBlID0gTVRSUl9UWVBFX1VO
Q0FDSEFCTEU7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdHlwZSA9IE1UUlJfVFlQRV9XUkJB
Q0s7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJdHlwZSA9IE1UUlJfVFlQRV9XUkNPTUI7CisJ
CQlicmVhazsKKwkJY2FzZSA0OgorCQkJdHlwZSA9IE1UUlJfVFlQRV9XUlRIUk9VR0g7CisJCQli
cmVhazsKKwkJZGVmYXVsdDoKKwkJCXR5cGUgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAo
dHlwZSkgeworCQkJaW50IHJjOworCisJCQkvKiBGaW5kIHRoZSBsYXJnZXN0IHBvd2VyLW9mLXR3
byAqLworCQkJd2hpbGUgKHRlbXBfc2l6ZSAmICh0ZW1wX3NpemUgLSAxKSkKKwkJCQl0ZW1wX3Np
emUgJj0gKHRlbXBfc2l6ZSAtIDEpOworCisJCQkvKiBUcnkgYW5kIGZpbmQgYSBwb3dlciBvZiB0
d28gdG8gYWRkICovCisJCQlkbyB7CisJCQkJcmMgPSBtdHJyX2FkZChpbmZvLT5maXguc21lbV9z
dGFydCwKKwkJCQkJICAgICAgdGVtcF9zaXplLCB0eXBlLCAxKTsKKwkJCQl0ZW1wX3NpemUgPj49
IDE7CisJCQl9IHdoaWxlICh0ZW1wX3NpemUgPj0gUEFHRV9TSVpFICYmIHJjID09IC1FSU5WQUwp
OworCQl9CisJfQorI2VuZGlmIC8qIENPTkZJR19NVFJSICovCit9CisKKworc3RhdGljIHNzaXpl
X3QgdXZlc2FmYl9zaG93X3ZiZV92ZXIoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2
aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBmYl9pbmZvICppbmZv
ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCXN0cnVj
dCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJcmV0dXJuIHNucHJpbnRmKGJ1Ziwg
UEFHRV9TSVpFLCAiJS40eFxuIiwgcGFyLT52YmVfaWIudmJlX3ZlcnNpb24pOworfQorCitzdGF0
aWMgREVWSUNFX0FUVFIodmJlX3ZlcnNpb24sIFNfSVJVR08sIHV2ZXNhZmJfc2hvd192YmVfdmVy
LCBOVUxMKTsKKworc3RhdGljIHNzaXplX3QgdXZlc2FmYl9zaG93X3ZiZV9tb2RlcyhzdHJ1Y3Qg
ZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYp
Cit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0
Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7
CisJaW50IHJldCA9IDAsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFyLT52YmVfbW9kZXNfY250
ICYmIHJldCA8IFBBR0VfU0laRTsgaSsrKSB7CisJCXJldCArPSBzbnByaW50ZihidWYgKyByZXQs
IFBBR0VfU0laRSAtIHJldCwKKwkJCSIlZHglZC0lZCwgMHglLjR4XG4iLAorCQkJcGFyLT52YmVf
bW9kZXNbaV0ueF9yZXMsIHBhci0+dmJlX21vZGVzW2ldLnlfcmVzLAorCQkJcGFyLT52YmVfbW9k
ZXNbaV0uZGVwdGgsIHBhci0+dmJlX21vZGVzW2ldLm1vZGVfaWQpOworCX0KKworCXJldHVybiBy
ZXQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih2YmVfbW9kZXMsIFNfSVJVR08sIHV2ZXNhZmJf
c2hvd192YmVfbW9kZXMsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCB1dmVzYWZiX3Nob3dfdmVu
ZG9yKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIs
IGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZk
YXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9
IGluZm8tPnBhcjsKKworCWlmIChwYXItPnZiZV9pYi5vZW1fdmVuZG9yX25hbWVfcHRyKQorCQly
ZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgKGNoYXIgKikKKwkJCSgmcGFy
LT52YmVfaWIpICsgcGFyLT52YmVfaWIub2VtX3ZlbmRvcl9uYW1lX3B0cik7CisJZWxzZQorCQly
ZXR1cm4gMDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG9lbV92ZW5kb3IsIFNfSVJVR08sIHV2
ZXNhZmJfc2hvd192ZW5kb3IsIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCB1dmVzYWZiX3Nob3df
cHJvZHVjdF9uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1
dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3Jt
X2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlzdHJ1Y3QgdXZlc2FmYl9w
YXIgKnBhciA9IGluZm8tPnBhcjsKKworCWlmIChwYXItPnZiZV9pYi5vZW1fcHJvZHVjdF9uYW1l
X3B0cikKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIChjaGFyICop
CisJCQkoJnBhci0+dmJlX2liKSArIHBhci0+dmJlX2liLm9lbV9wcm9kdWN0X25hbWVfcHRyKTsK
KwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIob2VtX3Byb2R1Y3Rf
bmFtZSwgU19JUlVHTywgdXZlc2FmYl9zaG93X3Byb2R1Y3RfbmFtZSwgTlVMTCk7CisKK3N0YXRp
YyBzc2l6ZV90IHV2ZXNhZmJfc2hvd19wcm9kdWN0X3JldihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJ
CXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGZi
X2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2
KSk7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlpZiAocGFyLT52
YmVfaWIub2VtX3Byb2R1Y3RfcmV2X3B0cikKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9T
SVpFLCAiJXNcbiIsIChjaGFyICopCisJCQkoJnBhci0+dmJlX2liKSArIHBhci0+dmJlX2liLm9l
bV9wcm9kdWN0X3Jldl9wdHIpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBERVZJ
Q0VfQVRUUihvZW1fcHJvZHVjdF9yZXYsIFNfSVJVR08sIHV2ZXNhZmJfc2hvd19wcm9kdWN0X3Jl
diwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHV2ZXNhZmJfc2hvd19vZW1fc3RyaW5nKHN0cnVj
dCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1
ZikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3Bs
YXRmb3JtX2RldmljZShkZXYpKTsKKwlzdHJ1Y3QgdXZlc2FmYl9wYXIgKnBhciA9IGluZm8tPnBh
cjsKKworCWlmIChwYXItPnZiZV9pYi5vZW1fc3RyaW5nX3B0cikKKwkJcmV0dXJuIHNucHJpbnRm
KGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCisJCQkoY2hhciAqKSgmcGFyLT52YmVfaWIpICsgcGFy
LT52YmVfaWIub2VtX3N0cmluZ19wdHIpOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBERVZJQ0VfQVRUUihvZW1fc3RyaW5nLCBTX0lSVUdPLCB1dmVzYWZiX3Nob3dfb2VtX3N0cmlu
ZywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHV2ZXNhZmJfc2hvd19ub2NydGMoc3RydWN0IGRl
dmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQor
eworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZv
cm1fZGV2aWNlKGRldikpOworCXN0cnVjdCB1dmVzYWZiX3BhciAqcGFyID0gaW5mby0+cGFyOwor
CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHBhci0+bm9jcnRjKTsK
K30KKworc3RhdGljIHNzaXplX3QgdXZlc2FmYl9zdG9yZV9ub2NydGMoc3RydWN0IGRldmljZSAq
ZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBz
aXplX3QgY291bnQpCit7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2
ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJc3RydWN0IHV2ZXNhZmJfcGFyICpwYXIg
PSBpbmZvLT5wYXI7CisKKwlpZiAoY291bnQgPiAwKSB7CisJCWlmIChidWZbMF0gPT0gJzAnKQor
CQkJcGFyLT5ub2NydGMgPSAwOworCQllbHNlCisJCQlwYXItPm5vY3J0YyA9IDE7CisJfQorCXJl
dHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG5vY3J0YywgU19JUlVHTyB8IFNf
SVdVU1IsIHV2ZXNhZmJfc2hvd19ub2NydGMsCisJCQl1dmVzYWZiX3N0b3JlX25vY3J0Yyk7CisK
K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp1dmVzYWZiX2Rldl9hdHRyc1tdID0geworCSZkZXZf
YXR0cl92YmVfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl92YmVfbW9kZXMuYXR0ciwKKwkmZGV2
X2F0dHJfb2VtX3ZlbmRvci5hdHRyLAorCSZkZXZfYXR0cl9vZW1fcHJvZHVjdF9uYW1lLmF0dHIs
CisJJmRldl9hdHRyX29lbV9wcm9kdWN0X3Jldi5hdHRyLAorCSZkZXZfYXR0cl9vZW1fc3RyaW5n
LmF0dHIsCisJJmRldl9hdHRyX25vY3J0Yy5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3Ry
dWN0IGF0dHJpYnV0ZV9ncm91cCB1dmVzYWZiX2Rldl9hdHRncnAgPSB7CisJLm5hbWUgPSBOVUxM
LAorCS5hdHRycyA9IHV2ZXNhZmJfZGV2X2F0dHJzLAorfTsKKworc3RhdGljIGludCBfX2Rldmlu
aXQgdXZlc2FmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0
IGZiX2luZm8gKmluZm87CisJc3RydWN0IHZiZV9tb2RlX2liICptb2RlID0gTlVMTDsKKwlzdHJ1
Y3QgdXZlc2FmYl9wYXIgKnBhcjsKKwlpbnQgZXJyID0gMCwgaTsKKworCWluZm8gPSBmcmFtZWJ1
ZmZlcl9hbGxvYyhzaXplb2YoKnBhcikgKwlzaXplb2YodTMyKSAqIDI1NiwgJmRldi0+ZGV2KTsK
KwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PTUVNOworCisJcGFyID0gaW5mby0+cGFyOworCisJ
ZXJyID0gdXZlc2FmYl92YmVfaW5pdChpbmZvKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJO
X0VSUiAidXZlc2FmYjogdmJlX2luaXQoKSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyKTsKKwkJZ290
byBvdXQ7CisJfQorCisJaW5mby0+ZmJvcHMgPSAmdXZlc2FmYl9vcHM7CisKKwlpID0gdXZlc2Fm
Yl92YmVfaW5pdF9tb2RlKGluZm8pOworCWlmIChpIDwgMCkgeworCQllcnIgPSAtRUlOVkFMOwor
CQlnb3RvIG91dDsKKwl9IGVsc2UgeworCQltb2RlID0gJnBhci0+dmJlX21vZGVzW2ldOworCX0K
KworCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgeworCQllcnIg
PSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCXV2ZXNhZmJfaW5pdF9pbmZvKGluZm8sIG1v
ZGUpOworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaW5mby0+Zml4LnNtZW1fc3RhcnQsIGlu
Zm8tPmZpeC5zbWVtX2xlbiwKKwkJCQkidXZlc2FmYiIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAi
dXZlc2FmYjogY2Fubm90IHJlc2VydmUgdmlkZW8gbWVtb3J5IGF0ICIKKwkJCQkiMHglbHhcbiIs
IGluZm8tPmZpeC5zbWVtX3N0YXJ0KTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfbW9kZTsK
Kwl9CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXAoaW5mby0+Zml4LnNtZW1fc3RhcnQs
IGluZm8tPmZpeC5zbWVtX2xlbik7CisKKwlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7CisJCXBy
aW50ayhLRVJOX0VSUgorCQkJInV2ZXNhZmI6IGFib3J0LCBjYW5ub3QgaW9yZW1hcCAweCV4IGJ5
dGVzIG9mIHZpZGVvICIKKwkJCSJtZW1vcnkgYXQgMHglbHhcbiIsCisJCQlpbmZvLT5maXguc21l
bV9sZW4sIGluZm8tPmZpeC5zbWVtX3N0YXJ0KTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRf
bWVtOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24oMHgzYzAsIDMyLCAidXZlc2FmYiIpKSB7
CisJCXByaW50ayhLRVJOX0VSUiAidXZlc2FmYjogcmVxdWVzdCByZWdpb24gMHgzYzAtMHgzZTAg
ZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfdW5tYXA7CisJfQorCisJdXZl
c2FmYl9pbml0X210cnIoaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsK
KworCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5f
RVJSCisJCQkidXZlc2FmYjogZmFpbGVkIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyIGRldmljZVxu
Iik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlZzsKKwl9CisKKwlwcmludGsoS0VS
Tl9JTkZPICJ1dmVzYWZiOiBmcmFtZWJ1ZmZlciBhdCAweCVseCwgbWFwcGVkIHRvIDB4JXAsICIK
KwkJCSJ1c2luZyAlZGssIHRvdGFsICVka1xuIiwgaW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQlp
bmZvLT5zY3JlZW5fYmFzZSwgaW5mby0+Zml4LnNtZW1fbGVuLzEwMjQsCisJCQlwYXItPnZiZV9p
Yi50b3RhbF9tZW1vcnkgKiA2NCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUg
YnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwKKwkJCWluZm8tPmZpeC5pZCk7CisKKwllcnIg
PSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+ZGV2LmtvYmosICZ1dmVzYWZiX2Rldl9hdHRncnAp
OworCWlmIChlcnIgIT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZmIlZDogZmFpbGVkIHRv
IHJlZ2lzdGVyIGF0dHJpYnV0ZXNcbiIsCisJCQlpbmZvLT5ub2RlKTsKKworCXJldHVybiAwOwor
CitvdXRfcmVnOgorCXJlbGVhc2VfcmVnaW9uKDB4M2MwLCAzMik7CitvdXRfdW5tYXA6CisJaW91
bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7CitvdXRfbWVtOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihp
bmZvLT5maXguc21lbV9zdGFydCwgaW5mby0+Zml4LnNtZW1fbGVuKTsKK291dF9tb2RlOgorCWlm
ICghbGlzdF9lbXB0eSgmaW5mby0+bW9kZWxpc3QpKQorCQlmYl9kZXN0cm95X21vZGVsaXN0KCZp
bmZvLT5tb2RlbGlzdCk7CisJZmJfZGVzdHJveV9tb2RlZGIoaW5mby0+bW9uc3BlY3MubW9kZWRi
KTsKKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworb3V0OgorCWlmIChwYXItPnZiZV9t
b2RlcykKKwkJa2ZyZWUocGFyLT52YmVfbW9kZXMpOworCisJZnJhbWVidWZmZXJfcmVsZWFzZShp
bmZvKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHV2ZXNhZmJfcmVtb3ZlKHN0cnVj
dCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRm
b3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaW5mbykgeworCQlzdHJ1Y3QgdXZlc2FmYl9w
YXIgKnBhciA9IGluZm8tPnBhcjsKKworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+ZGV2Lmtv
YmosICZ1dmVzYWZiX2Rldl9hdHRncnApOworCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8p
OworCQlyZWxlYXNlX3JlZ2lvbigweDNjMCwgMzIpOworCQlpb3VubWFwKGluZm8tPnNjcmVlbl9i
YXNlKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5m
aXguc21lbV9sZW4pOworCQlmYl9kZXN0cm95X21vZGVkYihpbmZvLT5tb25zcGVjcy5tb2RlZGIp
OworCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCisJCWlmIChwYXIpIHsKKwkJCWlm
IChwYXItPnZiZV9tb2RlcykKKwkJCQlrZnJlZShwYXItPnZiZV9tb2Rlcyk7CisJCQlpZiAocGFy
LT52YmVfc3RhdGVfb3JpZykKKwkJCQlrZnJlZShwYXItPnZiZV9zdGF0ZV9vcmlnKTsKKwkJCWlm
IChwYXItPnZiZV9zdGF0ZV9zYXZlZCkKKwkJCQlrZnJlZShwYXItPnZiZV9zdGF0ZV9zYXZlZCk7
CisJCX0KKworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKwlyZXR1cm4gMDsKK30K
Kworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdXZlc2FmYl9kcml2ZXIgPSB7CisJLnBy
b2JlICA9IHV2ZXNhZmJfcHJvYmUsCisJLnJlbW92ZSA9IHV2ZXNhZmJfcmVtb3ZlLAorCS5kcml2
ZXIgPSB7CisJCS5uYW1lID0gInV2ZXNhZmIiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBs
YXRmb3JtX2RldmljZSAqdXZlc2FmYl9kZXZpY2U7CisKKyNpZm5kZWYgTU9EVUxFCitzdGF0aWMg
aW50IF9fZGV2aW5pdCB1dmVzYWZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCit7CisJY2hhciAqdGhp
c19vcHQ7CisKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKKworCXdo
aWxlICgodGhpc19vcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYg
KCEqdGhpc19vcHQpIGNvbnRpbnVlOworCisJCWlmICghc3RyY21wKHRoaXNfb3B0LCAicmVkcmF3
IikpCisJCQl5cGFuID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgInlwYW4iKSkK
KwkJCXlwYW4gPSAxOworCQllbHNlIGlmICghc3RyY21wKHRoaXNfb3B0LCAieXdyYXAiKSkKKwkJ
CXlwYW4gPSAyOworCQllbHNlIGlmICghc3RyY21wKHRoaXNfb3B0LCAidmdhcGFsIikpCisJCQlw
bWlfc2V0cGFsID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgInBtaXBhbCIpKQor
CQkJcG1pX3NldHBhbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibXRycjoi
LCA1KSkKKwkJCW10cnIgPSBzaW1wbGVfc3RydG91bCh0aGlzX29wdCs1LCBOVUxMLCAwKTsKKwkJ
ZWxzZSBpZiAoIXN0cmNtcCh0aGlzX29wdCwgIm5vbXRyciIpKQorCQkJbXRyciA9IDA7CisJCWVs
c2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJub2NydGMiKSkKKwkJCW5vY3J0YyA9IDE7CisJCWVs
c2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJub2VkaWQiKSkKKwkJCW5vZWRpZCA9IDE7CisJCWVs
c2UgaWYgKCFzdHJjbXAodGhpc19vcHQsICJub2JsYW5rIikpCisJCQlibGFuayA9IDA7CisJCWVs
c2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAidnRvdGFsOiIsIDcpKQorCQkJdnJhbV90b3RhbCA9
IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0ICsgNywgTlVMTCwgMCk7CisJCWVsc2UgaWYgKCFzdHJu
Y21wKHRoaXNfb3B0LCAidnJlbWFwOiIsIDcpKQorCQkJdnJhbV9yZW1hcCA9IHNpbXBsZV9zdHJ0
b3VsKHRoaXNfb3B0ICsgNywgTlVMTCwgMCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0
LCAibWF4aGY6IiwgNikpCisJCQltYXhoZiA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0ICsgNiwg
TlVMTCwgMCk7CisJCWVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibWF4dmY6IiwgNikpCisJ
CQltYXh2ZiA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNfb3B0ICsgNiwgTlVMTCwgMCk7CisJCWVsc2Ug
aWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibWF4Y2xrOiIsIDcpKQorCQkJbWF4Y2xrID0gc2ltcGxl
X3N0cnRvdWwodGhpc19vcHQgKyA3LCBOVUxMLCAwKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAodGhp
c19vcHQsICJ2YmVtb2RlOiIsIDgpKQorCQkJdmJlbW9kZSA9IHNpbXBsZV9zdHJ0b3VsKHRoaXNf
b3B0ICsgOCwgTlVMTCwgMCk7CisJCWVsc2UgaWYgKHRoaXNfb3B0WzBdID49ICcwJyAmJiB0aGlz
X29wdFswXSA8PSAnOScpIHsKKwkJCW1vZGVfb3B0aW9uID0gdGhpc19vcHQ7CisJCX0gZWxzZSB7
CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJInV2ZXNhZmI6IHVucmVjb2duaXplZCBvcHRp
b24gJXNcbiIsIHRoaXNfb3B0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2VuZGlmIC8q
ICFNT0RVTEUgKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd192ODZkKHN0cnVjdCBkZXZpY2VfZHJp
dmVyICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUs
ICIlc1xuIiwgdjg2ZF9wYXRoKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdjg2ZChzdHJ1
Y3QgZGV2aWNlX2RyaXZlciAqZGV2LCBjb25zdCBjaGFyICpidWYsCisJCXNpemVfdCBjb3VudCkK
K3sKKwlzdHJuY3B5KHY4NmRfcGF0aCwgYnVmLCBQQVRIX01BWCk7CisJcmV0dXJuIGNvdW50Owor
fQorCitzdGF0aWMgRFJJVkVSX0FUVFIodjg2ZCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdjg2
ZCwgc3RvcmVfdjg2ZCk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHV2ZXNhZmJfaW5pdCh2b2lk
KQoreworCWludCBlcnI7CisKKyNpZm5kZWYgTU9EVUxFCisJY2hhciAqb3B0aW9uID0gTlVMTDsK
KworCWlmIChmYl9nZXRfb3B0aW9ucygidXZlc2FmYiIsICZvcHRpb24pKQorCQlyZXR1cm4gLUVO
T0RFVjsKKwl1dmVzYWZiX3NldHVwKG9wdGlvbik7CisjZW5kaWYKKwllcnIgPSBjbl9hZGRfY2Fs
bGJhY2soJnV2ZXNhZmJfY25faWQsICJ1dmVzYWZiIiwgdXZlc2FmYl9jbl9jYWxsYmFjayk7CisJ
aWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rl
cigmdXZlc2FmYl9kcml2ZXIpOworCisJaWYgKCFlcnIpIHsKKwkJdXZlc2FmYl9kZXZpY2UgPSBw
bGF0Zm9ybV9kZXZpY2VfYWxsb2MoInV2ZXNhZmIiLCAwKTsKKwkJaWYgKHV2ZXNhZmJfZGV2aWNl
KQorCQkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZCh1dmVzYWZiX2RldmljZSk7CisJCWVsc2UK
KwkJCWVyciA9IC1FTk9NRU07CisKKwkJaWYgKGVycikgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1
dCh1dmVzYWZiX2RldmljZSk7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdXZlc2Fm
Yl9kcml2ZXIpOworCQkJY25fZGVsX2NhbGxiYWNrKCZ1dmVzYWZiX2NuX2lkKTsKKwkJCXJldHVy
biBlcnI7CisJCX0KKworCQllcnIgPSBkcml2ZXJfY3JlYXRlX2ZpbGUoJnV2ZXNhZmJfZHJpdmVy
LmRyaXZlciwKKwkJCQkmZHJpdmVyX2F0dHJfdjg2ZCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50
ayhLRVJOX1dBUk5JTkcgInV2ZXNhZmI6IGZhaWxlZCB0byByZWdpc3RlciAiCisJCQkJCSJhdHRy
aWJ1dGVzXG4iKTsKKwkJCWVyciA9IDA7CisJCX0KKwl9CisJcmV0dXJuIGVycjsKK30KKworbW9k
dWxlX2luaXQodXZlc2FmYl9pbml0KTsKKworc3RhdGljIHZvaWQgX19kZXZleGl0IHV2ZXNhZmJf
ZXhpdCh2b2lkKQoreworCXN0cnVjdCB1dmVzYWZiX2t0YXNrICp0YXNrOworCisJaWYgKHY4NmRf
c3RhcnRlZCkgeworCQl0YXNrID0gdXZlc2FmYl9wcmVwKCk7CisJCWlmICh0YXNrKSB7CisJCQl0
YXNrLT50LmZsYWdzID0gVEZfRVhJVDsKKwkJCXV2ZXNhZmJfZXhlYyh0YXNrKTsKKwkJCXV2ZXNh
ZmJfZnJlZSh0YXNrKTsKKwkJfQorCX0KKworCWNuX2RlbF9jYWxsYmFjaygmdXZlc2FmYl9jbl9p
ZCk7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZ1dmVzYWZiX2RyaXZlci5kcml2ZXIsICZkcml2ZXJf
YXR0cl92ODZkKTsKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1dmVzYWZiX2RldmljZSk7
CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnV2ZXNhZmJfZHJpdmVyKTsKK30KKworbW9k
dWxlX2V4aXQodXZlc2FmYl9leGl0KTsKKworc3RhdGljIGlubGluZSBpbnQgcGFyYW1fZ2V0X3Nj
cm9sbChjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiAw
OworfQorCitzdGF0aWMgaW5saW5lIGludCBwYXJhbV9zZXRfc2Nyb2xsKGNvbnN0IGNoYXIgKnZh
bCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJeXBhbiA9IDA7CisKKwlpZiAoIXN0cmNt
cCh2YWwsICJyZWRyYXciKSkKKwkJeXBhbiA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWwsICJ5
cGFuIikpCisJCXlwYW4gPSAxOworCWVsc2UgaWYgKCFzdHJjbXAodmFsLCAieXdyYXAiKSkKKwkJ
eXBhbiA9IDI7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBwYXJhbV9jaGVja19zY3JvbGwo
bmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB2b2lkKTsKKworbW9kdWxlX3BhcmFtX25h
bWVkKHNjcm9sbCwgeXBhbiwgc2Nyb2xsLCAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2Nyb2xsLAor
CSJTY3JvbGxpbmcgbW9kZSwgc2V0IHRvICdyZWRyYXcnLCAnJ3lwYW4nIG9yICd5d3JhcCciKTsK
K21vZHVsZV9wYXJhbV9uYW1lZCh2Z2FwYWwsIHBtaV9zZXRwYWwsIGludmJvb2wsIDApOworTU9E
VUxFX1BBUk1fREVTQyh2Z2FwYWwsICJTZXQgcGFsZXR0ZSB1c2luZyBWR0EgcmVnaXN0ZXJzIik7
Cittb2R1bGVfcGFyYW1fbmFtZWQocG1pcGFsLCBwbWlfc2V0cGFsLCBib29sLCAwKTsKK01PRFVM
RV9QQVJNX0RFU0MocG1pcGFsLCAiU2V0IHBhbGV0dGUgdXNpbmcgUE1JIGNhbGxzIik7Cittb2R1
bGVfcGFyYW0obXRyciwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG10cnIsCisJIk1lbW9y
eSBUeXBlIFJhbmdlIFJlZ2lzdGVycyBzZXR0aW5nLiBVc2UgMCB0byBkaXNhYmxlLiIpOworbW9k
dWxlX3BhcmFtKGJsYW5rLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYmxhbmssICJFbmFi
bGUgaGFyZHdhcmUgYmxhbmtpbmciKTsKK21vZHVsZV9wYXJhbShub2NydGMsIGJvb2wsIDApOwor
TU9EVUxFX1BBUk1fREVTQyhub2NydGMsICJJZ25vcmUgQ1JUQyB0aW1pbmdzIHdoZW4gc2V0dGlu
ZyBtb2RlcyIpOworbW9kdWxlX3BhcmFtKG5vZWRpZCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9E
RVNDKG5vZWRpZCwKKwkiSWdub3JlIEVESUQtcHJvdmlkZWQgbW9uaXRvciBsaW1pdHMgd2hlbiBz
ZXR0aW5nIG1vZGVzIik7Cittb2R1bGVfcGFyYW0odnJhbV9yZW1hcCwgdWludCwgMCk7CitNT0RV
TEVfUEFSTV9ERVNDKHZyYW1fcmVtYXAsICJTZXQgYW1vdW50IG9mIHZpZGVvIG1lbW9yeSB0byBi
ZSB1c2VkIFtNaUJdIik7Cittb2R1bGVfcGFyYW0odnJhbV90b3RhbCwgdWludCwgMCk7CitNT0RV
TEVfUEFSTV9ERVNDKHZyYW1fdG90YWwsICJTZXQgdG90YWwgYW1vdW50IG9mIHZpZGVvIG1lbW9l
cnkgW01pQl0iKTsKK21vZHVsZV9wYXJhbShtYXhjbGssIHVzaG9ydCwgMCk7CitNT0RVTEVfUEFS
TV9ERVNDKG1heGNsaywgIk1heGltdW0gcGl4ZWxjbG9jayBbTUh6XSwgb3ZlcnJpZGVzIEVESUQg
ZGF0YSIpOworbW9kdWxlX3BhcmFtKG1heGhmLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVT
QyhtYXhoZiwKKwkiTWF4aW11bSBob3Jpem9udGFsIGZyZXF1ZW5jeSBba0h6XSwgb3ZlcnJpZGVz
IEVESUQgZGF0YSIpOworbW9kdWxlX3BhcmFtKG1heHZmLCB1c2hvcnQsIDApOworTU9EVUxFX1BB
Uk1fREVTQyhtYXh2ZiwKKwkiTWF4aW11bSB2ZXJ0aWNhbCBmcmVxdWVuY3kgW0h6XSwgb3ZlcnJp
ZGVzIEVESUQgZGF0YSIpOworbW9kdWxlX3BhcmFtX25hbWVkKG1vZGUsIG1vZGVfb3B0aW9uLCBj
aGFycCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1vZGUsCisJIlNwZWNpZnkgaW5pdGlhbCB2aWRl
byBtb2RlIGFzIFwiPHhyZXM+eDx5cmVzPlstPGJwcD5dW0A8cmVmcmVzaD5dXCIiKTsKK21vZHVs
ZV9wYXJhbSh2YmVtb2RlLCB1c2hvcnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh2YmVtb2RlLAor
CSJWQkUgbW9kZSBudW1iZXIgdG8gc2V0LCBvdmVycmlkZXMgdGhlICdtb2RlJyBvcHRpb24iKTsK
K21vZHVsZV9wYXJhbV9zdHJpbmcodjg2ZCwgdjg2ZF9wYXRoLCBQQVRIX01BWCwgMDY2MCk7CitN
T0RVTEVfUEFSTV9ERVNDKHY4NmQsICJQYXRoIHRvIHRoZSB2ODZkIHVzZXJzcGFjZSBoZWxwZXIu
Iik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhbCBKYW51
c3pld3NraSA8c3BvY2tAZ2VudG9vLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJhbWVi
dWZmZXIgZHJpdmVyIGZvciBWQkUyLjArIGNvbXBsaWFudCBncmFwaGljcyBib2FyZHMiKTsKKwpk
aWZmIC11ck4ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rv
ci5oIGtlcm5lbC1zb3VyY2UtMi42LjE4L2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKLS0tIGtl
cm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAkyMDA2LTA5
LTIwIDA2OjQyOjA2ICswMzAwCisrKyBrZXJuZWwtc291cmNlLTIuNi4xOC9pbmNsdWRlL2xpbnV4
L2Nvbm5lY3Rvci5oCTIwMDctMDgtMjIgMjM6NTc6NTggKzAzMDAKQEAgLTM2LDE0ICszNiwxNSBA
QAogI2RlZmluZSBDTl9WQUxfQ0lGUyAgICAgICAgICAgICAgICAgICAgIDB4MQogI2RlZmluZSBD
Tl9XMV9JRFgJCQkweDMJLyogdzEgY29tbXVuaWNhdGlvbiAqLwogI2RlZmluZSBDTl9XMV9WQUwJ
CQkweDEKKyNkZWZpbmUgQ05fSURYX1Y4NkQJCQkweDQKKyNkZWZpbmUgQ05fVkFMX1Y4NkRfVVZF
U0FGQgkJMHgxCiAKLQotI2RlZmluZSBDTl9ORVRMSU5LX1VTRVJTCQk0CisjZGVmaW5lIENOX05F
VExJTktfVVNFUlMJCTUKIAogLyoKICAqIE1heGltdW0gY29ubmVjdG9yJ3MgbWVzc2FnZSBzaXpl
LgogICovCi0jZGVmaW5lIENPTk5FQ1RPUl9NQVhfTVNHX1NJWkUgCTEwMjQKKyNkZWZpbmUgQ09O
TkVDVE9SX01BWF9NU0dfU0laRQkxNjM4NAogCiAvKgogICogaWR4IGFuZCB2YWwgYXJlIHVuaXF1
ZSBpZGVudGlmaWVycyB3aGljaCAKZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcv
aW5jbHVkZS92aWRlby9LYnVpbGQga2VybmVsLXNvdXJjZS0yLjYuMTgvaW5jbHVkZS92aWRlby9L
YnVpbGQKLS0tIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvaW5jbHVkZS92aWRlby9LYnVpbGQJ
MjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvaW5jbHVk
ZS92aWRlby9LYnVpbGQJMjAwNy0wOC0yMiAyMzo1ODoyMSArMDMwMApAQCAtMSArMSBAQAotdW5p
ZmRlZi15ICs9IHNpc2ZiLmgKK3VuaWZkZWYteSArPSBzaXNmYi5oIHV2ZXNhZmIuaApkaWZmIC11
ck4ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9pbmNsdWRlL3ZpZGVvL3V2ZXNhZmIuaCBrZXJu
ZWwtc291cmNlLTIuNi4xOC9pbmNsdWRlL3ZpZGVvL3V2ZXNhZmIuaAotLS0ga2VybmVsLXNvdXJj
ZS0yLjYuMTgub3JpZy9pbmNsdWRlL3ZpZGVvL3V2ZXNhZmIuaAkxOTcwLTAxLTAxIDAzOjAwOjAw
ICswMzAwCisrKyBrZXJuZWwtc291cmNlLTIuNi4xOC9pbmNsdWRlL3ZpZGVvL3V2ZXNhZmIuaAky
MDA3LTA4LTIyIDIzOjU3OjU4ICswMzAwCkBAIC0wLDAgKzEsMTkzIEBACisjaWZuZGVmIF9VVkVT
QUZCX0gKKyNkZWZpbmUgX1VWRVNBRkJfSAorCitzdHJ1Y3Qgdjg2X3JlZ3MgeworCV9fdTMyIGVi
eDsKKwlfX3UzMiBlY3g7CisJX191MzIgZWR4OworCV9fdTMyIGVzaTsKKwlfX3UzMiBlZGk7CisJ
X191MzIgZWJwOworCV9fdTMyIGVheDsKKwlfX3UzMiBlaXA7CisJX191MzIgZWZsYWdzOworCV9f
dTMyIGVzcDsKKwlfX3UxNiBjczsKKwlfX3UxNiBzczsKKwlfX3UxNiBlczsKKwlfX3UxNiBkczsK
KwlfX3UxNiBmczsKKwlfX3UxNiBnczsKK307CisKKy8qIFRhc2sgZmxhZ3MgKi8KKyNkZWZpbmUg
VEZfVkJFSUIJMHgwMQorI2RlZmluZSBURl9CVUZfRVNESQkweDAyCisjZGVmaW5lIFRGX0JVRl9F
U0JYCTB4MDQKKyNkZWZpbmUgVEZfQlVGX1JFVAkweDA4CisjZGVmaW5lIFRGX0VYSVQJCTB4MTAK
Kworc3RydWN0IHV2ZXNhZmJfdGFzayB7CisJX191OCBmbGFnczsKKwlpbnQgYnVmX2xlbjsKKwlz
dHJ1Y3Qgdjg2X3JlZ3MgcmVnczsKK307CisKKy8qIENvbnN0YW50cyBmb3IgdGhlIGNhcGFiaWxp
dGllcyBmaWVsZAorICogaW4gdmJlX2liICovCisjZGVmaW5lIFZCRV9DQVBfQ0FOX1NXSVRDSF9E
QUMJMHgwMQorI2RlZmluZSBWQkVfQ0FQX1ZHQUNPTVBBVAkweDAyCisKKy8qIFRoZSBWQkUgSW5m
byBCbG9jayAqLworc3RydWN0IHZiZV9pYiB7CisJY2hhciAgdmJlX3NpZ25hdHVyZVs0XTsKKwlf
X3UxNiB2YmVfdmVyc2lvbjsKKwlfX3UzMiBvZW1fc3RyaW5nX3B0cjsKKwlfX3UzMiBjYXBhYmls
aXRpZXM7CisJX191MzIgbW9kZV9saXN0X3B0cjsKKwlfX3UxNiB0b3RhbF9tZW1vcnk7CisJX191
MTYgb2VtX3NvZnR3YXJlX3JldjsKKwlfX3UzMiBvZW1fdmVuZG9yX25hbWVfcHRyOworCV9fdTMy
IG9lbV9wcm9kdWN0X25hbWVfcHRyOworCV9fdTMyIG9lbV9wcm9kdWN0X3Jldl9wdHI7CisJX191
OCAgcmVzZXJ2ZWRbMjIyXTsKKwljaGFyICBvZW1fZGF0YVsyNTZdOworCWNoYXIgIG1pc2NfZGF0
YVs1MTJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNpZmRlZiBfX0tFUk5FTF9f
CisKKy8qIFZCRSBDUlRDIEluZm8gQmxvY2sgKi8KK3N0cnVjdCB2YmVfY3J0Y19pYiB7CisJdTE2
IGhvcml6X3RvdGFsOworCXUxNiBob3Jpel9zdGFydDsKKwl1MTYgaG9yaXpfZW5kOworCXUxNiB2
ZXJ0X3RvdGFsOworCXUxNiB2ZXJ0X3N0YXJ0OworCXUxNiB2ZXJ0X2VuZDsKKwl1OCAgZmxhZ3M7
CisJdTMyIHBpeGVsX2Nsb2NrOworCXUxNiByZWZyZXNoX3JhdGU7CisJdTggIHJlc2VydmVkWzQw
XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFZCRV9NT0RFX1ZHQUNP
TVBBVAkweDIwCisjZGVmaW5lIFZCRV9NT0RFX0NPTE9SCQkweDA4CisjZGVmaW5lIFZCRV9NT0RF
X1NVUFBPUlRFREhXCTB4MDEKKyNkZWZpbmUgVkJFX01PREVfR1JBUEhJQ1MJMHgxMAorI2RlZmlu
ZSBWQkVfTU9ERV9MRkIJCTB4ODAKKworI2RlZmluZSBWQkVfTU9ERV9NQVNLCQkoVkJFX01PREVf
Q09MT1IgfCBWQkVfTU9ERV9TVVBQT1JURURIVyB8IFwKKwkJCQlWQkVfTU9ERV9HUkFQSElDUyB8
IFZCRV9NT0RFX0xGQikKKworLyogVkJFIE1vZGUgSW5mbyBCbG9jayAqLworc3RydWN0IHZiZV9t
b2RlX2liIHsKKwkvKiBmb3IgYWxsIFZCRSByZXZpc2lvbnMgKi8KKwl1MTYgbW9kZV9hdHRyOwor
CXU4ICB3aW5BX2F0dHI7CisJdTggIHdpbkJfYXR0cjsKKwl1MTYgd2luX2dyYW51bGFyaXR5Owor
CXUxNiB3aW5fc2l6ZTsKKwl1MTYgd2luQV9zZWc7CisJdTE2IHdpbkJfc2VnOworCXUzMiB3aW5f
ZnVuY19wdHI7CisJdTE2IGJ5dGVzX3Blcl9zY2FuX2xpbmU7CisKKwkvKiBmb3IgVkJFIDEuMisg
Ki8KKwl1MTYgeF9yZXM7CisJdTE2IHlfcmVzOworCXU4ICB4X2NoYXJfc2l6ZTsKKwl1OCAgeV9j
aGFyX3NpemU7CisJdTggIHBsYW5lczsKKwl1OCAgYml0c19wZXJfcGl4ZWw7CisJdTggIGJhbmtz
OworCXU4ICBtZW1vcnlfbW9kZWw7CisJdTggIGJhbmtfc2l6ZTsKKwl1OCAgaW1hZ2VfcGFnZXM7
CisJdTggIHJlc2VydmVkMTsKKworCS8qIERpcmVjdCBjb2xvciBmaWVsZHMgZm9yIGRpcmVjdC82
IGFuZCBZVVYvNyBtZW1vcnkgbW9kZWxzLiAqLworCS8qIE9mZnNldHMgYXJlIGJpdCBwb3NpdGlv
bnMgb2YgbHNiIGluIHRoZSBtYXNrLiAqLworCXU4ICByZWRfbGVuOworCXU4ICByZWRfb2ZmOwor
CXU4ICBncmVlbl9sZW47CisJdTggIGdyZWVuX29mZjsKKwl1OCAgYmx1ZV9sZW47CisJdTggIGJs
dWVfb2ZmOworCXU4ICByc3ZkX2xlbjsKKwl1OCAgcnN2ZF9vZmY7CisJdTggIGRpcmVjdF9jb2xv
cl9pbmZvOwkvKiBkaXJlY3QgY29sb3IgbW9kZSBhdHRyaWJ1dGVzICovCisKKwkvKiBmb3IgVkJF
IDIuMCsgKi8KKwl1MzIgcGh5c19iYXNlX3B0cjsKKwl1OCAgcmVzZXJ2ZWQyWzZdOworCisJLyog
Zm9yIFZCRSAzLjArICovCisJdTE2IGxpbl9ieXRlc19wZXJfc2Nhbl9saW5lOworCXU4ICBibmtf
aW1hZ2VfcGFnZXM7CisJdTggIGxpbl9pbWFnZV9wYWdlczsKKwl1OCAgbGluX3JlZF9sZW47CisJ
dTggIGxpbl9yZWRfb2ZmOworCXU4ICBsaW5fZ3JlZW5fbGVuOworCXU4ICBsaW5fZ3JlZW5fb2Zm
OworCXU4ICBsaW5fYmx1ZV9sZW47CisJdTggIGxpbl9ibHVlX29mZjsKKwl1OCAgbGluX3JzdmRf
bGVuOworCXU4ICBsaW5fcnN2ZF9vZmY7CisJdTMyIG1heF9waXhlbF9jbG9jazsKKwl1MTYgbW9k
ZV9pZDsKKwl1OCAgZGVwdGg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmlu
ZSBVVkVTQUZCX0RFRkFVTFRfTU9ERSAiNjQweDQ4MC0xNiIKKworLyogSG93IGxvbmcgdG8gd2Fp
dCBmb3IgYSByZXBseSBmcm9tIHVzZXJzcGFjZSBbbXNdICovCisjZGVmaW5lIFVWRVNBRkJfVElN
RU9VVCA1MDAwCisKKy8qIE1heCBudW1iZXIgb2YgY29uY3VycmVudCB0YXNrcyAqLworI2RlZmlu
ZSBVVkVTQUZCX1RBU0tTX01BWCAxNgorCisjZGVmaW5lIGRhY19yZWcJKDB4M2M4KQorI2RlZmlu
ZSBkYWNfdmFsCSgweDNjOSkKKworc3RydWN0IHV2ZXNhZmJfcGFsX2VudHJ5IHsKKwl1X2NoYXIg
Ymx1ZSwgZ3JlZW4sIHJlZCwgcGFkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0
cnVjdCB1dmVzYWZiX2t0YXNrIHsKKwlzdHJ1Y3QgdXZlc2FmYl90YXNrIHQ7CisJdm9pZCAqYnVm
OworCXN0cnVjdCBjb21wbGV0aW9uICpkb25lOworCXUzMiBhY2s7Cit9OworCitzdGF0aWMgaW50
IHV2ZXNhZmJfZXhlYyhzdHJ1Y3QgdXZlc2FmYl9rdGFzayAqdHNrKTsKKworI2RlZmluZSBVVkVT
QUZCX0VYQUNUX1JFUwkxCisjZGVmaW5lIFVWRVNBRkJfRVhBQ1RfREVQVEgJMgorCitzdHJ1Y3Qg
dXZlc2FmYl9wYXIgeworCXN0cnVjdCB2YmVfaWIgdmJlX2liOwkJLyogVkJFIEluZm8gQmxvY2sg
Ki8KKwlzdHJ1Y3QgdmJlX21vZGVfaWIgKnZiZV9tb2RlczsJLyogbGlzdCBvZiBzdXBwb3J0ZWQg
VkJFIG1vZGVzICovCisJaW50IHZiZV9tb2Rlc19jbnQ7CisKKwl1OCBub2NydGM7CisJdTggeXBh
bjsJCQkvKiAwIC0gbm90aGluZywgMSAtIHlwYW4sIDIgLSB5d3JhcCAqLworCXU4IHBtaV9zZXRw
YWw7CQkJLyogUE1JIGZvciBwYWxldHRlIGNoYW5nZXMgKi8KKwl1MTYgKnBtaV9iYXNlOwkJCS8q
IHByb3RlY3RlZCBtb2RlIGludGVyZmFjZSBsb2NhdGlvbiAqLworCXZvaWQgKnBtaV9zdGFydDsK
Kwl2b2lkICpwbWlfcGFsOworCXU4ICp2YmVfc3RhdGVfb3JpZzsJCS8qCisJCQkJCSAqIG9yaWdp
bmFsIGhhcmR3YXJlIHN0YXRlLCBiZWZvcmUgdGhlCisJCQkJCSAqIGRyaXZlciB3YXMgbG9hZGVk
CisJCQkJCSAqLworCXU4ICp2YmVfc3RhdGVfc2F2ZWQ7CQkvKiBzdGF0ZSBzYXZlZCBieSBmYl9z
YXZlX3N0YXRlICovCisJaW50IHZiZV9zdGF0ZV9zaXplOworCWF0b21pY190IHJlZl9jb3VudDsK
KworCWludCBtb2RlX2lkeDsKKwlzdHJ1Y3QgdmJlX2NydGNfaWIgY3J0YzsKK307CisKKyNlbmRp
ZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX1VWRVNBRkJfSCAqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>