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

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

    <bug>
          <bug_id>12565</bug_id>
          
          <creation_ts>2007-08-14 19:50:07 +0400</creation_ts>
          <short_desc>UDF + file with size &gt;1G</short_desc>
          <delta_ts>2008-07-11 14:10:07 +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>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>12100</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>led</reporter>
          <assigned_to name="Sergey Vlasov">vsu</assigned_to>
          <cc>icesik</cc>
    
    <cc>lakostis</cc>
    
    <cc>mike</cc>
    
    <cc>silicium</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54110</commentid>
    <comment_count>0</comment_count>
    <who name="">led</who>
    <bug_when>2007-08-14 19:50:08 +0400</bug_when>
    <thetext>Прошу добавить поддержку файлов с размером более 1Г в файловую систему UDF.
В 2.6.22 это уже починили.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54111</commentid>
    <comment_count>1</comment_count>
      <attachid>2145</attachid>
    <who name="">led</who>
    <bug_when>2007-08-14 19:51:14 +0400</bug_when>
    <thetext>Created attachment 2145
linux-2.6.18-udf.patch

Этот патч - &quot;честный&quot; бэкпорт с 2.6.22 на 2.6.18.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55042</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2007-09-11 16:29:31 +0400</bug_when>
    <thetext>Желающим протестировать -- ядро с этим патчем можно взять тут:
ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/led/Sisyphus

IMCO эта проблема должна блокировать Desktop 4.0.1, осенние дистрибутивы выйдут
минимум с 2.6.22.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73924</commentid>
    <comment_count>3</comment_count>
    <who name="Michail Yakushin">silicium</who>
    <bug_when>2008-07-11 13:02:34 +0400</bug_when>
    <thetext>видимо зафиксино </thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2145</attachid>
            <date>2007-08-14 19:51:14 +0400</date>
            <delta_ts>2007-08-14 19:51:14 +0400</delta_ts>
            <desc>linux-2.6.18-udf.patch</desc>
            <filename>linux-2.6.18-udf.patch</filename>
            <type>text/plain</type>
            <size>100848</size>
            <attacher>led</attacher>
            
              <data encoding="base64">ZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL2JhbGxvYy5jIGtlcm5l
bC1zb3VyY2UtMi42LjE4L2ZzL3VkZi9iYWxsb2MuYwotLS0ga2VybmVsLXNvdXJjZS0yLjYuMTgu
b3JpZy9mcy91ZGYvYmFsbG9jLmMJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVs
LXNvdXJjZS0yLjYuMTgvZnMvdWRmL2JhbGxvYy5jCTIwMDctMDgtMTQgMDM6MjY6MDggKzAzMDAK
QEAgLTQyNyw5ICs0MjcsOSBAQAogewogCXN0cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NC
KHNiKTsKIAl1aW50MzJfdCBzdGFydCwgZW5kOwotCXVpbnQzMl90IG5leHRvZmZzZXQsIG9leHRv
ZmZzZXQsIGVsZW47Ci0Ja2VybmVsX2xiX2FkZHIgbmJsb2MsIG9ibG9jLCBlbG9jOwotCXN0cnVj
dCBidWZmZXJfaGVhZCAqb2JoLCAqbmJoOworCXVpbnQzMl90IGVsZW47CisJa2VybmVsX2xiX2Fk
ZHIgZWxvYzsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIG9lcG9zLCBlcG9zOwogCWludDhfdCBl
dHlwZTsKIAlpbnQgaTsKIApAQCAtNDU3LDE0ICs0NTcsMTMgQEAKIAlzdGFydCA9IGJsb2MubG9n
aWNhbEJsb2NrTnVtICsgb2Zmc2V0OwogCWVuZCA9IGJsb2MubG9naWNhbEJsb2NrTnVtICsgb2Zm
c2V0ICsgY291bnQgLSAxOwogCi0Jb2V4dG9mZnNldCA9IG5leHRvZmZzZXQgPSBzaXplb2Yoc3Ry
dWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKKwllcG9zLm9mZnNldCA9IG9lcG9zLm9mZnNldCA9IHNp
emVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpOwogCWVsZW4gPSAwOwotCW9ibG9jID0gbmJs
b2MgPSBVREZfSV9MT0NBVElPTih0YWJsZSk7Ci0KLQlvYmggPSBuYmggPSBOVUxMOworCWVwb3Mu
YmxvY2sgPSBvZXBvcy5ibG9jayA9IFVERl9JX0xPQ0FUSU9OKHRhYmxlKTsKKwllcG9zLmJoID0g
b2Vwb3MuYmggPSBOVUxMOwogCiAJd2hpbGUgKGNvdW50ICYmIChldHlwZSA9Ci0JCXVkZl9uZXh0
X2FleHQodGFibGUsICZuYmxvYywgJm5leHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJm5iaCwgMSkp
ICE9IC0xKQorCQl1ZGZfbmV4dF9hZXh0KHRhYmxlLCAmZXBvcywgJmVsb2MsICZlbGVuLCAxKSkg
IT0gLTEpCiAJewogCQlpZiAoKChlbG9jLmxvZ2ljYWxCbG9ja051bSArIChlbGVuID4+IHNiLT5z
X2Jsb2Nrc2l6ZV9iaXRzKSkgPT0KIAkJCXN0YXJ0KSkKQEAgLTQ4Miw3ICs0ODEsNyBAQAogCQkJ
CXN0YXJ0ICs9IGNvdW50OwogCQkJCWNvdW50ID0gMDsKIAkJCX0KLQkJCXVkZl93cml0ZV9hZXh0
KHRhYmxlLCBvYmxvYywgJm9leHRvZmZzZXQsIGVsb2MsIGVsZW4sIG9iaCwgMSk7CisJCQl1ZGZf
d3JpdGVfYWV4dCh0YWJsZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKIAkJfQogCQllbHNlIGlm
IChlbG9jLmxvZ2ljYWxCbG9ja051bSA9PSAoZW5kICsgMSkpCiAJCXsKQEAgLTUwMiwyMCArNTAx
LDIwIEBACiAJCQkJZW5kIC09IGNvdW50OwogCQkJCWNvdW50ID0gMDsKIAkJCX0KLQkJCXVkZl93
cml0ZV9hZXh0KHRhYmxlLCBvYmxvYywgJm9leHRvZmZzZXQsIGVsb2MsIGVsZW4sIG9iaCwgMSk7
CisJCQl1ZGZfd3JpdGVfYWV4dCh0YWJsZSwgJm9lcG9zLCBlbG9jLCBlbGVuLCAxKTsKIAkJfQog
Ci0JCWlmIChuYmggIT0gb2JoKQorCQlpZiAoZXBvcy5iaCAhPSBvZXBvcy5iaCkKIAkJewogCQkJ
aSA9IC0xOwotCQkJb2Jsb2MgPSBuYmxvYzsKLQkJCXVkZl9yZWxlYXNlX2RhdGEob2JoKTsKLQkJ
CWF0b21pY19pbmMoJm5iaC0+Yl9jb3VudCk7Ci0JCQlvYmggPSBuYmg7Ci0JCQlvZXh0b2Zmc2V0
ID0gMDsKKwkJCW9lcG9zLmJsb2NrID0gZXBvcy5ibG9jazsKKwkJCWJyZWxzZShvZXBvcy5iaCk7
CisJCQlnZXRfYmgoZXBvcy5iaCk7CisJCQlvZXBvcy5iaCA9IGVwb3MuYmg7CisJCQlvZXBvcy5v
ZmZzZXQgPSAwOwogCQl9CiAJCWVsc2UKLQkJCW9leHRvZmZzZXQgPSBuZXh0b2Zmc2V0OworCQkJ
b2Vwb3Mub2Zmc2V0ID0gZXBvcy5vZmZzZXQ7CiAJfQogCiAJaWYgKGNvdW50KQpAQCAtNTQ3LDU1
ICs1NDYsNTMgQEAKIAkJCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKIAkJZWxzZQogCQl7Ci0J
CQl1ZGZfcmVsZWFzZV9kYXRhKG9iaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKG5iaCk7CisJCQli
cmVsc2Uob2Vwb3MuYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJZ290byBlcnJvcl9yZXR1
cm47CiAJCX0KIAotCQlpZiAobmV4dG9mZnNldCArICgyICogYWRzaXplKSA+IHNiLT5zX2Jsb2Nr
c2l6ZSkKKwkJaWYgKGVwb3Mub2Zmc2V0ICsgKDIgKiBhZHNpemUpID4gc2ItPnNfYmxvY2tzaXpl
KQogCQl7CiAJCQljaGFyICpzcHRyLCAqZHB0cjsKIAkJCWludCBsb2Zmc2V0OwogCQotCQkJdWRm
X3JlbGVhc2VfZGF0YShvYmgpOwotCQkJb2JoID0gbmJoOwotCQkJb2Jsb2MgPSBuYmxvYzsKLQkJ
CW9leHRvZmZzZXQgPSBuZXh0b2Zmc2V0OworCQkJYnJlbHNlKG9lcG9zLmJoKTsKKwkJCW9lcG9z
ID0gZXBvczsKIAogCQkJLyogU3RlYWwgYSBibG9jayBmcm9tIHRoZSBleHRlbnQgYmVpbmcgZnJl
ZSdkICovCi0JCQluYmxvYy5sb2dpY2FsQmxvY2tOdW0gPSBlbG9jLmxvZ2ljYWxCbG9ja051bTsK
KwkJCWVwb3MuYmxvY2subG9naWNhbEJsb2NrTnVtID0gZWxvYy5sb2dpY2FsQmxvY2tOdW07CiAJ
CQllbG9jLmxvZ2ljYWxCbG9ja051bSArKzsKIAkJCWVsZW4gLT0gc2ItPnNfYmxvY2tzaXplOwog
Ci0JCQlpZiAoIShuYmggPSB1ZGZfdHJlYWQoc2IsCi0JCQkJdWRmX2dldF9sYl9wYmxvY2soc2Is
IG5ibG9jLCAwKSkpKQorCQkJaWYgKCEoZXBvcy5iaCA9IHVkZl90cmVhZChzYiwKKwkJCQl1ZGZf
Z2V0X2xiX3BibG9jayhzYiwgZXBvcy5ibG9jaywgMCkpKSkKIAkJCXsKLQkJCQl1ZGZfcmVsZWFz
ZV9kYXRhKG9iaCk7CisJCQkJYnJlbHNlKG9lcG9zLmJoKTsKIAkJCQlnb3RvIGVycm9yX3JldHVy
bjsKIAkJCX0KLQkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKG5iaC0+Yl9kYXRhKTsK
LQkJCWFlZC0+cHJldmlvdXNBbGxvY0V4dExvY2F0aW9uID0gY3B1X3RvX2xlMzIob2Jsb2MubG9n
aWNhbEJsb2NrTnVtKTsKLQkJCWlmIChuZXh0b2Zmc2V0ICsgYWRzaXplID4gc2ItPnNfYmxvY2tz
aXplKQorCQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKikoZXBvcy5iaC0+Yl9kYXRhKTsK
KwkJCWFlZC0+cHJldmlvdXNBbGxvY0V4dExvY2F0aW9uID0gY3B1X3RvX2xlMzIob2Vwb3MuYmxv
Y2subG9naWNhbEJsb2NrTnVtKTsKKwkJCWlmIChlcG9zLm9mZnNldCArIGFkc2l6ZSA+IHNiLT5z
X2Jsb2Nrc2l6ZSkKIAkJCXsKLQkJCQlsb2Zmc2V0ID0gbmV4dG9mZnNldDsKKwkJCQlsb2Zmc2V0
ID0gZXBvcy5vZmZzZXQ7CiAJCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIo
YWRzaXplKTsKLQkJCQlzcHRyID0gVURGX0lfREFUQShpbm9kZSkgKyBuZXh0b2Zmc2V0IC0KKwkJ
CQlzcHRyID0gVURGX0lfREFUQShpbm9kZSkgKyBlcG9zLm9mZnNldCAtCiAJCQkJCXVkZl9maWxl
X2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkgKwogCQkJCQlVREZfSV9MRU5FQVRUUihpbm9kZSkg
LSBhZHNpemU7Ci0JCQkJZHB0ciA9IG5iaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4
dERlc2MpOworCQkJCWRwdHIgPSBlcG9zLmJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IGFsbG9j
RXh0RGVzYyk7CiAJCQkJbWVtY3B5KGRwdHIsIHNwdHIsIGFkc2l6ZSk7Ci0JCQkJbmV4dG9mZnNl
dCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSArIGFkc2l6ZTsKKwkJCQllcG9zLm9mZnNl
dCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSArIGFkc2l6ZTsKIAkJCX0KIAkJCWVsc2UK
IAkJCXsKLQkJCQlsb2Zmc2V0ID0gbmV4dG9mZnNldCArIGFkc2l6ZTsKKwkJCQlsb2Zmc2V0ID0g
ZXBvcy5vZmZzZXQgKyBhZHNpemU7CiAJCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3Rv
X2xlMzIoMCk7Ci0JCQkJc3B0ciA9IChvYmgpLT5iX2RhdGEgKyBuZXh0b2Zmc2V0OwotCQkJCW5l
eHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CisJCQkJc3B0ciA9IG9lcG9z
LmJoLT5iX2RhdGEgKyBlcG9zLm9mZnNldDsKKwkJCQllcG9zLm9mZnNldCA9IHNpemVvZihzdHJ1
Y3QgYWxsb2NFeHREZXNjKTsKIAotCQkJCWlmIChvYmgpCisJCQkJaWYgKG9lcG9zLmJoKQogCQkJ
CXsKLQkJCQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKikob2JoKS0+Yl9kYXRhOworCQkJ
CQlhZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKW9lcG9zLmJoLT5iX2RhdGE7CiAJCQkJCWFl
ZC0+bGVuZ3RoQWxsb2NEZXNjcyA9CiAJCQkJCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShhZWQt
Pmxlbmd0aEFsbG9jRGVzY3MpICsgYWRzaXplKTsKIAkJCQl9CkBAIC02MDYsMTEgKzYwMywxMSBA
QAogCQkJCX0KIAkJCX0KIAkJCWlmIChVREZfU0JfVURGUkVWKHNiKSA+PSAweDAyMDApCi0JCQkJ
dWRmX25ld190YWcobmJoLT5iX2RhdGEsIFRBR19JREVOVF9BRUQsIDMsIDEsCi0JCQkJCW5ibG9j
LmxvZ2ljYWxCbG9ja051bSwgc2l6ZW9mKHRhZykpOworCQkJCXVkZl9uZXdfdGFnKGVwb3MuYmgt
PmJfZGF0YSwgVEFHX0lERU5UX0FFRCwgMywgMSwKKwkJCQkJZXBvcy5ibG9jay5sb2dpY2FsQmxv
Y2tOdW0sIHNpemVvZih0YWcpKTsKIAkJCWVsc2UKLQkJCQl1ZGZfbmV3X3RhZyhuYmgtPmJfZGF0
YSwgVEFHX0lERU5UX0FFRCwgMiwgMSwKLQkJCQkJbmJsb2MubG9naWNhbEJsb2NrTnVtLCBzaXpl
b2YodGFnKSk7CisJCQkJdWRmX25ld190YWcoZXBvcy5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVE
LCAyLCAxLAorCQkJCQllcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSwgc2l6ZW9mKHRhZykpOwog
CQkJc3dpdGNoIChVREZfSV9BTExPQ1RZUEUodGFibGUpKQogCQkJewogCQkJCWNhc2UgSUNCVEFH
X0ZMQUdfQURfU0hPUlQ6CkBAIC02MTksNyArNjE2LDcgQEAKIAkJCQkJc2FkLT5leHRMZW5ndGgg
PSBjcHVfdG9fbGUzMigKIAkJCQkJCUVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQkJ
c2ItPnNfYmxvY2tzaXplKTsKLQkJCQkJc2FkLT5leHRQb3NpdGlvbiA9IGNwdV90b19sZTMyKG5i
bG9jLmxvZ2ljYWxCbG9ja051bSk7CisJCQkJCXNhZC0+ZXh0UG9zaXRpb24gPSBjcHVfdG9fbGUz
MihlcG9zLmJsb2NrLmxvZ2ljYWxCbG9ja051bSk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlj
YXNlIElDQlRBR19GTEFHX0FEX0xPTkc6CkBAIC02MjgsMTQgKzYyNSwxNCBAQAogCQkJCQlsYWQt
PmV4dExlbmd0aCA9IGNwdV90b19sZTMyKAogCQkJCQkJRVhUX05FWFRfRVhURU5UX0FMTE9DREVD
UyB8CiAJCQkJCQlzYi0+c19ibG9ja3NpemUpOwotCQkJCQlsYWQtPmV4dExvY2F0aW9uID0gY3B1
X3RvX2xlbGIobmJsb2MpOworCQkJCQlsYWQtPmV4dExvY2F0aW9uID0gY3B1X3RvX2xlbGIoZXBv
cy5ibG9jayk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQkJCWlmIChvYmgpCisJCQlpZiAo
b2Vwb3MuYmgpCiAJCQl7Ci0JCQkJdWRmX3VwZGF0ZV90YWcob2JoLT5iX2RhdGEsIGxvZmZzZXQp
OwotCQkJCW1hcmtfYnVmZmVyX2RpcnR5KG9iaCk7CisJCQkJdWRmX3VwZGF0ZV90YWcob2Vwb3Mu
YmgtPmJfZGF0YSwgbG9mZnNldCk7CisJCQkJbWFya19idWZmZXJfZGlydHkob2Vwb3MuYmgpOwog
CQkJfQogCQkJZWxzZQogCQkJCW1hcmtfaW5vZGVfZGlydHkodGFibGUpOwpAQCAtNjQzLDI2ICs2
NDAsMjYgQEAKIAogCQlpZiAoZWxlbikgLyogSXQncyBwb3NzaWJsZSB0aGF0IHN0ZWFsaW5nIHRo
ZSBibG9jayBlbXB0aWVkIHRoZSBleHRlbnQgKi8KIAkJewotCQkJdWRmX3dyaXRlX2FleHQodGFi
bGUsIG5ibG9jLCAmbmV4dG9mZnNldCwgZWxvYywgZWxlbiwgbmJoLCAxKTsKKwkJCXVkZl93cml0
ZV9hZXh0KHRhYmxlLCAmZXBvcywgZWxvYywgZWxlbiwgMSk7CiAKLQkJCWlmICghbmJoKQorCQkJ
aWYgKCFlcG9zLmJoKQogCQkJewogCQkJCVVERl9JX0xFTkFMTE9DKHRhYmxlKSArPSBhZHNpemU7
CiAJCQkJbWFya19pbm9kZV9kaXJ0eSh0YWJsZSk7CiAJCQl9CiAJCQllbHNlCiAJCQl7Ci0JCQkJ
YWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKiluYmgtPmJfZGF0YTsKKwkJCQlhZWQgPSAoc3Ry
dWN0IGFsbG9jRXh0RGVzYyAqKWVwb3MuYmgtPmJfZGF0YTsKIAkJCQlhZWQtPmxlbmd0aEFsbG9j
RGVzY3MgPQogCQkJCQljcHVfdG9fbGUzMihsZTMyX3RvX2NwdShhZWQtPmxlbmd0aEFsbG9jRGVz
Y3MpICsgYWRzaXplKTsKLQkJCQl1ZGZfdXBkYXRlX3RhZyhuYmgtPmJfZGF0YSwgbmV4dG9mZnNl
dCk7Ci0JCQkJbWFya19idWZmZXJfZGlydHkobmJoKTsKKwkJCQl1ZGZfdXBkYXRlX3RhZyhlcG9z
LmJoLT5iX2RhdGEsIGVwb3Mub2Zmc2V0KTsKKwkJCQltYXJrX2J1ZmZlcl9kaXJ0eShlcG9zLmJo
KTsKIAkJCX0KIAkJfQogCX0KIAotCXVkZl9yZWxlYXNlX2RhdGEobmJoKTsKLQl1ZGZfcmVsZWFz
ZV9kYXRhKG9iaCk7CisJYnJlbHNlKGVwb3MuYmgpOworCWJyZWxzZShvZXBvcy5iaCk7CiAKIGVy
cm9yX3JldHVybjoKIAlzYi0+c19kaXJ0ID0gMTsKQEAgLTY3Nyw5ICs2NzQsOSBAQAogewogCXN0
cnVjdCB1ZGZfc2JfaW5mbyAqc2JpID0gVURGX1NCKHNiKTsKIAlpbnQgYWxsb2NfY291bnQgPSAw
OwotCXVpbnQzMl90IGV4dG9mZnNldCwgZWxlbiwgYWRzaXplOwotCWtlcm5lbF9sYl9hZGRyIGJs
b2MsIGVsb2M7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwl1aW50MzJfdCBlbGVuLCBhZHNp
emU7CisJa2VybmVsX2xiX2FkZHIgZWxvYzsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3M7
CiAJaW50OF90IGV0eXBlID0gLTE7CiAKIAlpZiAoZmlyc3RfYmxvY2sgPCAwIHx8IGZpcnN0X2Js
b2NrID49IFVERl9TQl9QQVJUTEVOKHNiLCBwYXJ0aXRpb24pKQpAQCAtNjkzLDE0ICs2OTAsMTMg
QEAKIAkJcmV0dXJuIDA7CiAKIAltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwotCWV4
dG9mZnNldCA9IHNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpOwotCWJsb2MgPSBVREZf
SV9MT0NBVElPTih0YWJsZSk7Ci0KLQliaCA9IE5VTEw7CisJZXBvcy5vZmZzZXQgPSBzaXplb2Yo
c3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKKwllcG9zLmJsb2NrID0gVURGX0lfTE9DQVRJT04o
dGFibGUpOworCWVwb3MuYmggPSBOVUxMOwogCWVsb2MubG9naWNhbEJsb2NrTnVtID0gMHhGRkZG
RkZGRjsKIAogCXdoaWxlIChmaXJzdF9ibG9jayAhPSBlbG9jLmxvZ2ljYWxCbG9ja051bSAmJiAo
ZXR5cGUgPQotCQl1ZGZfbmV4dF9hZXh0KHRhYmxlLCAmYmxvYywgJmV4dG9mZnNldCwgJmVsb2Ms
ICZlbGVuLCAmYmgsIDEpKSAhPSAtMSkKKwkJdWRmX25leHRfYWV4dCh0YWJsZSwgJmVwb3MsICZl
bG9jLCAmZWxlbiwgMSkpICE9IC0xKQogCXsKIAkJdWRmX2RlYnVnKCJlbG9jPSVkLCBlbGVuPSVk
LCBmaXJzdF9ibG9jaz0lZFxuIiwKIAkJCWVsb2MubG9naWNhbEJsb2NrTnVtLCBlbGVuLCBmaXJz
dF9ibG9jayk7CkBAIC03MDksNyArNzA1LDcgQEAKIAogCWlmIChmaXJzdF9ibG9jayA9PSBlbG9j
LmxvZ2ljYWxCbG9ja051bSkKIAl7Ci0JCWV4dG9mZnNldCAtPSBhZHNpemU7CisJCWVwb3Mub2Zm
c2V0IC09IGFkc2l6ZTsKIAogCQlhbGxvY19jb3VudCA9IChlbGVuID4+IHNiLT5zX2Jsb2Nrc2l6
ZV9iaXRzKTsKIAkJaWYgKGlub2RlICYmIERRVU9UX1BSRUFMTE9DX0JMT0NLKGlub2RlLCBhbGxv
Y19jb3VudCA+IGJsb2NrX2NvdW50ID8gYmxvY2tfY291bnQgOiBhbGxvY19jb3VudCkpCkBAIC03
MTksMTUgKzcxNSwxNSBAQAogCQkJYWxsb2NfY291bnQgPSBibG9ja19jb3VudDsKIAkJCWVsb2Mu
bG9naWNhbEJsb2NrTnVtICs9IGFsbG9jX2NvdW50OwogCQkJZWxlbiAtPSAoYWxsb2NfY291bnQg
PDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwotCQkJdWRmX3dyaXRlX2FleHQodGFibGUsIGJsb2Ms
ICZleHRvZmZzZXQsIGVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuLCBiaCwgMSk7CisJCQl1ZGZf
d3JpdGVfYWV4dCh0YWJsZSwgJmVwb3MsIGVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuLCAxKTsK
IAkJfQogCQllbHNlCi0JCQl1ZGZfZGVsZXRlX2FleHQodGFibGUsIGJsb2MsIGV4dG9mZnNldCwg
ZWxvYywgKGV0eXBlIDw8IDMwKSB8IGVsZW4sIGJoKTsKKwkJCXVkZl9kZWxldGVfYWV4dCh0YWJs
ZSwgZXBvcywgZWxvYywgKGV0eXBlIDw8IDMwKSB8IGVsZW4pOwogCX0KIAllbHNlCiAJCWFsbG9j
X2NvdW50ID0gMDsKIAotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsK
IAogCWlmIChhbGxvY19jb3VudCAmJiBVREZfU0JfTFZJREJIKHNiKSkKIAl7CkBAIC03NDcsOSAr
NzQzLDkgQEAKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJdWludDMy
X3Qgc3ByZWFkID0gMHhGRkZGRkZGRiwgbnNwcmVhZCA9IDB4RkZGRkZGRkY7CiAJdWludDMyX3Qg
bmV3YmxvY2sgPSAwLCBhZHNpemU7Ci0JdWludDMyX3QgZXh0b2Zmc2V0LCBnb2FsX2V4dG9mZnNl
dCwgZWxlbiwgZ29hbF9lbGVuID0gMDsKLQlrZXJuZWxfbGJfYWRkciBibG9jLCBnb2FsX2Jsb2Ms
IGVsb2MsIGdvYWxfZWxvYzsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCAqZ29hbF9iaDsKKwl1
aW50MzJfdCBlbGVuLCBnb2FsX2VsZW4gPSAwOworCWtlcm5lbF9sYl9hZGRyIGVsb2MsIGdvYWxf
ZWxvYzsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MsIGdvYWxfZXBvczsKIAlpbnQ4X3Qg
ZXR5cGU7CiAKIAkqZXJyID0gLUVOT1NQQzsKQEAgLTc3MCwxNCArNzY2LDEyIEBACiAJICAgV2Ug
c3RvcmUgdGhlIGJ1ZmZlcl9oZWFkLCBibG9jLCBhbmQgZXh0b2Zmc2V0IG9mIHRoZSBjdXJyZW50
IGNsb3Nlc3QKIAkgICBtYXRjaCBhbmQgdXNlIHRoYXQgd2hlbiB3ZSBhcmUgZG9uZS4KIAkqLwot
Ci0JZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSk7Ci0JYmxvYyA9
IFVERl9JX0xPQ0FUSU9OKHRhYmxlKTsKLQotCWdvYWxfYmggPSBiaCA9IE5VTEw7CisJZXBvcy5v
ZmZzZXQgPSBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KTsKKwllcG9zLmJsb2NrID0g
VURGX0lfTE9DQVRJT04odGFibGUpOworCWVwb3MuYmggPSBnb2FsX2Vwb3MuYmggPSBOVUxMOwog
CiAJd2hpbGUgKHNwcmVhZCAmJiAoZXR5cGUgPQotCQl1ZGZfbmV4dF9hZXh0KHRhYmxlLCAmYmxv
YywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmYmgsIDEpKSAhPSAtMSkKKwkJdWRmX25leHRf
YWV4dCh0YWJsZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkpICE9IC0xKQogCXsKIAkJaWYgKGdv
YWwgPj0gZWxvYy5sb2dpY2FsQmxvY2tOdW0pCiAJCXsKQEAgLTc5MywyNCArNzg3LDI0IEBACiAJ
CWlmIChuc3ByZWFkIDwgc3ByZWFkKQogCQl7CiAJCQlzcHJlYWQgPSBuc3ByZWFkOwotCQkJaWYg
KGdvYWxfYmggIT0gYmgpCisJCQlpZiAoZ29hbF9lcG9zLmJoICE9IGVwb3MuYmgpCiAJCQl7Ci0J
CQkJdWRmX3JlbGVhc2VfZGF0YShnb2FsX2JoKTsKLQkJCQlnb2FsX2JoID0gYmg7Ci0JCQkJYXRv
bWljX2luYygmZ29hbF9iaC0+Yl9jb3VudCk7CisJCQkJYnJlbHNlKGdvYWxfZXBvcy5iaCk7CisJ
CQkJZ29hbF9lcG9zLmJoID0gZXBvcy5iaDsKKwkJCQlnZXRfYmgoZ29hbF9lcG9zLmJoKTsKIAkJ
CX0KLQkJCWdvYWxfYmxvYyA9IGJsb2M7Ci0JCQlnb2FsX2V4dG9mZnNldCA9IGV4dG9mZnNldCAt
IGFkc2l6ZTsKKwkJCWdvYWxfZXBvcy5ibG9jayA9IGVwb3MuYmxvY2s7CisJCQlnb2FsX2Vwb3Mu
b2Zmc2V0ID0gZXBvcy5vZmZzZXQgLSBhZHNpemU7CiAJCQlnb2FsX2Vsb2MgPSBlbG9jOwogCQkJ
Z29hbF9lbGVuID0gKGV0eXBlIDw8IDMwKSB8IGVsZW47CiAJCX0KIAl9CiAKLQl1ZGZfcmVsZWFz
ZV9kYXRhKGJoKTsKKwlicmVsc2UoZXBvcy5iaCk7CiAKIAlpZiAoc3ByZWFkID09IDB4RkZGRkZG
RkYpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKGdvYWxfYmgpOworCQlicmVsc2UoZ29hbF9lcG9z
LmJoKTsKIAkJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwogCQlyZXR1cm4gMDsK
IAl9CkBAIC04MjYsMTcgKzgyMCwxNyBAQAogCiAJaWYgKGlub2RlICYmIERRVU9UX0FMTE9DX0JM
T0NLKGlub2RlLCAxKSkKIAl7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoZ29hbF9iaCk7CisJCWJyZWxz
ZShnb2FsX2Vwb3MuYmgpOwogCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJ
CSplcnIgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoZ29hbF9lbGVuKQotCQl1
ZGZfd3JpdGVfYWV4dCh0YWJsZSwgZ29hbF9ibG9jLCAmZ29hbF9leHRvZmZzZXQsIGdvYWxfZWxv
YywgZ29hbF9lbGVuLCBnb2FsX2JoLCAxKTsKKwkJdWRmX3dyaXRlX2FleHQodGFibGUsICZnb2Fs
X2Vwb3MsIGdvYWxfZWxvYywgZ29hbF9lbGVuLCAxKTsKIAllbHNlCi0JCXVkZl9kZWxldGVfYWV4
dCh0YWJsZSwgZ29hbF9ibG9jLCBnb2FsX2V4dG9mZnNldCwgZ29hbF9lbG9jLCBnb2FsX2VsZW4s
IGdvYWxfYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoZ29hbF9iaCk7CisJCXVkZl9kZWxldGVfYWV4
dCh0YWJsZSwgZ29hbF9lcG9zLCBnb2FsX2Vsb2MsIGdvYWxfZWxlbik7CisJYnJlbHNlKGdvYWxf
ZXBvcy5iaCk7CiAKIAlpZiAoVURGX1NCX0xWSURCSChzYikpCiAJewpAQCAtOTIxLDExICs5MTUs
MTQgQEAKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwKIAl1aW50MTZfdCBwYXJ0aXRpb24sIHVpbnQz
Ml90IGdvYWwsIGludCAqZXJyKQogeworCWludCByZXQ7CisKIAlpZiAoVURGX1NCX1BBUlRGTEFH
UyhzYiwgcGFydGl0aW9uKSAmIFVERl9QQVJUX0ZMQUdfVU5BTExPQ19CSVRNQVApCiAJewotCQly
ZXR1cm4gdWRmX2JpdG1hcF9uZXdfYmxvY2soc2IsIGlub2RlLAorCQlyZXQgPSB1ZGZfYml0bWFw
X25ld19ibG9jayhzYiwgaW5vZGUsCiAJCQlVREZfU0JfUEFSVE1BUFMoc2IpW3BhcnRpdGlvbl0u
c191c3BhY2Uuc19iaXRtYXAsCiAJCQlwYXJ0aXRpb24sIGdvYWwsIGVycik7CisJCXJldHVybiBy
ZXQ7CiAJfQogCWVsc2UgaWYgKFVERl9TQl9QQVJURkxBR1Moc2IsIHBhcnRpdGlvbikgJiBVREZf
UEFSVF9GTEFHX1VOQUxMT0NfVEFCTEUpCiAJewpkaWZmIC11ck4ga2VybmVsLXNvdXJjZS0yLjYu
MTgub3JpZy9mcy91ZGYvZGlyLmMga2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL2Rpci5jCi0t
LSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi9kaXIuYwkyMDA2LTA5LTIwIDA2OjQy
OjA2ICswMzAwCisrKyBrZXJuZWwtc291cmNlLTIuNi4xOC9mcy91ZGYvZGlyLmMJMjAwNy0wOC0x
NCAwMzoyNjowOCArMDMwMApAQCAtMTExLDExICsxMTEsMTMgQEAKIAl1aW50MTZfdCBsaXU7CiAJ
dWludDhfdCBsZmk7CiAJbG9mZl90IHNpemUgPSAodWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXIt
Pmlfc2l6ZSkgPj4gMjsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCA9IE5VTEwsICogdG1wLCAq
IGJoYVsxNl07Ci0Ja2VybmVsX2xiX2FkZHIgYmxvYywgZWxvYzsKLQl1aW50MzJfdCBleHRvZmZz
ZXQsIGVsZW4sIG9mZnNldDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRtcCwgKmJoYVsxNl07CisJ
a2VybmVsX2xiX2FkZHIgZWxvYzsKKwl1aW50MzJfdCBlbGVuOworCXNlY3Rvcl90IG9mZnNldDsK
IAlpbnQgaSwgbnVtOwogCXVuc2lnbmVkIGludCBkdF90eXBlOworCXN0cnVjdCBleHRlbnRfcG9z
aXRpb24gZXBvcyA9IHsgTlVMTCwgMCwgezAsIDB9fTsKIAogCWlmIChuZl9wb3MgPj0gc2l6ZSkK
IAkJcmV0dXJuIDA7CkBAIC0xMjcsMjMgKzEyOSwyMiBAQAogCWlmIChVREZfSV9BTExPQ1RZUEUo
ZGlyKSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpCiAJCWZpYmguc2JoID0gZmliaC5lYmggPSBO
VUxMOwogCWVsc2UgaWYgKGlub2RlX2JtYXAoZGlyLCBuZl9wb3MgPj4gKGRpci0+aV9zYi0+c19i
bG9ja3NpemVfYml0cyAtIDIpLAotCQkmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAm
b2Zmc2V0LCAmYmgpID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKKwkJJmVwb3Ms
ICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzAp
KQogCXsKLQkJb2Zmc2V0ID4+PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJCWJsb2Nr
ID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3NiLCBlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsr
b2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPCBlbGVuKQogCQl7CiAJCQlp
ZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXh0
b2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJCQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNo
b3J0X2FkKTsKIAkJCWVsc2UgaWYgKFVERl9JX0FMTE9DVFlQRShkaXIpID09IElDQlRBR19GTEFH
X0FEX0xPTkcpCi0JCQkJZXh0b2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9m
ZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CiAJCX0KIAkJZWxzZQogCQkJb2Zmc2V0ID0gMDsKIAog
CQlpZiAoIShmaWJoLnNiaCA9IGZpYmguZWJoID0gdWRmX3RyZWFkKGRpci0+aV9zYiwgYmxvY2sp
KSkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJ
CQlyZXR1cm4gLUVJTzsKIAkJfQogCQpAQCAtMTcxLDcgKzE3Miw3IEBACiAJfQogCWVsc2UKIAl7
Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoZXBvcy5iaCk7CiAJCXJldHVybiAt
RU5PRU5UOwogCX0KIApAQCAtMTc5LDE0ICsxODAsMTQgQEAKIAl7CiAJCWZpbHAtPmZfcG9zID0g
bmZfcG9zICsgMTsKIAotCQlmaSA9IHVkZl9maWxlaWRlbnRfcmVhZChkaXIsICZuZl9wb3MsICZm
aWJoLCAmY2ZpLCAmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmb2Zmc2V0LCAmYmgp
OworCQlmaSA9IHVkZl9maWxlaWRlbnRfcmVhZChkaXIsICZuZl9wb3MsICZmaWJoLCAmY2ZpLCAm
ZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KTsKIAogCQlpZiAoIWZpKQogCQl7CiAJCQlpZiAo
ZmliaC5zYmggIT0gZmliaC5lYmgpCi0JCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0J
CQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOwor
CQkJCWJyZWxzZShmaWJoLmViaCk7CisJCQlicmVsc2UoZmliaC5zYmgpOworCQkJYnJlbHNlKGVw
b3MuYmgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMjQ0LDkgKzI0NSw5IEBACiAJCQlpZiAo
ZmlsbGRpcihkaXJlbnQsIGZuYW1lLCBmbGVuLCBmaWxwLT5mX3BvcywgaWJsb2NrLCBkdF90eXBl
KSA8IDApCiAJCQl7CiAJCQkJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQotCQkJCQl1ZGZfcmVs
ZWFzZV9kYXRhKGZpYmguZWJoKTsKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKLQkJ
CQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQkJYnJlbHNlKGZpYmguZWJoKTsKKwkJCQlicmVs
c2UoZmliaC5zYmgpOworCQkJCWJyZWxzZShlcG9zLmJoKTsKIAkgCQkJcmV0dXJuIDA7CiAJCQl9
CiAJCX0KQEAgLTI1NSw5ICsyNTYsOSBAQAogCWZpbHAtPmZfcG9zID0gbmZfcG9zICsgMTsKIAog
CWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7
Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJ
CWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKKwlicmVsc2UoZXBvcy5iaCk7
CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZnMv
dWRmL2RpcmVjdG9yeS5jIGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi9kaXJlY3RvcnkuYwot
LS0ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9mcy91ZGYvZGlyZWN0b3J5LmMJMjAwNi0wOS0y
MCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL2RpcmVjdG9y
eS5jCTIwMDctMDgtMTQgMDM6MjY6MDggKzAzMDAKQEAgLTM2LDE0ICszNiwxNCBAQAogCiAJaWYg
KCFhZCkKIAl7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoKmJoKTsKKwkJYnJlbHNlKCpiaCk7CiAJCSpl
cnJvciA9IDE7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWlmICgqb2Zmc2V0ID09IGRpci0+aV9z
Yi0+c19ibG9ja3NpemUpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKCpiaCk7CisJCWJyZWxzZSgq
YmgpOwogCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+aV9zYiwgZmVfbG9jLCArKypw
b3MpOwogCQlpZiAoIWJsb2NrKQogCQkJcmV0dXJuIE5VTEw7CkBAIC01Nyw3ICs1Nyw3IEBACiAJ
CXJlbWFpbmRlciA9IGRpci0+aV9zYi0+c19ibG9ja3NpemUgLSBsb2Zmc2V0OwogCQltZW1jcHko
KHVpbnQ4X3QgKilhZCwgKCpiaCktPmJfZGF0YSArIGxvZmZzZXQsIHJlbWFpbmRlcik7CiAKLQkJ
dWRmX3JlbGVhc2VfZGF0YSgqYmgpOworCQlicmVsc2UoKmJoKTsKIAkJYmxvY2sgPSB1ZGZfZ2V0
X2xiX3BibG9jayhkaXItPmlfc2IsIGZlX2xvYywgKysqcG9zKTsKIAkJaWYgKCFibG9jaykKIAkJ
CXJldHVybiBOVUxMOwpAQCAtNzUsOSArNzUsOSBAQAogdWRmX2ZpbGVpZGVudF9yZWFkKHN0cnVj
dCBpbm9kZSAqZGlyLCBsb2ZmX3QgKm5mX3BvcywKIAlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCAq
ZmliaCwKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqY2ZpLAotCWtlcm5lbF9sYl9hZGRyICpibG9j
LCB1aW50MzJfdCAqZXh0b2Zmc2V0LCAKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zLAog
CWtlcm5lbF9sYl9hZGRyICplbG9jLCB1aW50MzJfdCAqZWxlbiwKLQl1aW50MzJfdCAqb2Zmc2V0
LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKKwlzZWN0b3JfdCAqb2Zmc2V0KQogewogCXN0cnVj
dCBmaWxlSWRlbnREZXNjICpmaTsKIAlpbnQgaSwgbnVtLCBibG9jazsKQEAgLTEwNSwxMyArMTA1
LDExIEBACiAKIAlpZiAoZmliaC0+ZW9mZnNldCA9PSBkaXItPmlfc2ItPnNfYmxvY2tzaXplKQog
CXsKLQkJaW50IGxleHRvZmZzZXQgPSAqZXh0b2Zmc2V0OworCQlpbnQgbGV4dG9mZnNldCA9IGVw
b3MtPm9mZnNldDsKIAotCQlpZiAodWRmX25leHRfYWV4dChkaXIsIGJsb2MsIGV4dG9mZnNldCwg
ZWxvYywgZWxlbiwgYmgsIDEpICE9CisJCWlmICh1ZGZfbmV4dF9hZXh0KGRpciwgZXBvcywgZWxv
YywgZWxlbiwgMSkgIT0KIAkJCShFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKLQkJewog
CQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAogCQlibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKGRpci0+
aV9zYiwgKmVsb2MsICpvZmZzZXQpOwogCkBAIC0xMjAsOSArMTE4LDkgQEAKIAkJaWYgKCgqb2Zm
c2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cykgPj0gKmVsZW4pCiAJCQkqb2Zmc2V0
ID0gMDsKIAkJZWxzZQotCQkJKmV4dG9mZnNldCA9IGxleHRvZmZzZXQ7CisJCQllcG9zLT5vZmZz
ZXQgPSBsZXh0b2Zmc2V0OwogCi0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+c2JoKTsKKwkJYnJl
bHNlKGZpYmgtPnNiaCk7CiAJCWlmICghKGZpYmgtPnNiaCA9IGZpYmgtPmViaCA9IHVkZl90cmVh
ZChkaXItPmlfc2IsIGJsb2NrKSkpCiAJCQlyZXR1cm4gTlVMTDsKIAkJZmliaC0+c29mZnNldCA9
IGZpYmgtPmVvZmZzZXQgPSAwOwpAQCAtMTUxLDcgKzE0OSw3IEBACiAJfQogCWVsc2UgaWYgKGZp
YmgtPnNiaCAhPSBmaWJoLT5lYmgpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7
CisJCWJyZWxzZShmaWJoLT5zYmgpOwogCQlmaWJoLT5zYmggPSBmaWJoLT5lYmg7CiAJfQogCkBA
IC0xNjksMTMgKzE2NywxMSBAQAogCX0KIAllbHNlIGlmIChmaWJoLT5lb2Zmc2V0ID4gZGlyLT5p
X3NiLT5zX2Jsb2Nrc2l6ZSkKIAl7Ci0JCWludCBsZXh0b2Zmc2V0ID0gKmV4dG9mZnNldDsKKwkJ
aW50IGxleHRvZmZzZXQgPSBlcG9zLT5vZmZzZXQ7CiAKLQkJaWYgKHVkZl9uZXh0X2FleHQoZGly
LCBibG9jLCBleHRvZmZzZXQsIGVsb2MsIGVsZW4sIGJoLCAxKSAhPQorCQlpZiAodWRmX25leHRf
YWV4dChkaXIsIGVwb3MsIGVsb2MsIGVsZW4sIDEpICE9CiAJCQkoRVhUX1JFQ09SREVEX0FMTE9D
QVRFRCA+PiAzMCkpCi0JCXsKIAkJCXJldHVybiBOVUxMOwotCQl9CiAKIAkJYmxvY2sgPSB1ZGZf
Z2V0X2xiX3BibG9jayhkaXItPmlfc2IsICplbG9jLCAqb2Zmc2V0KTsKIApAQCAtMTg0LDcgKzE4
MCw3IEBACiAJCWlmICgoKm9mZnNldCA8PCBkaXItPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpID49
ICplbGVuKQogCQkJKm9mZnNldCA9IDA7CiAJCWVsc2UKLQkJCSpleHRvZmZzZXQgPSBsZXh0b2Zm
c2V0OworCQkJZXBvcy0+b2Zmc2V0ID0gbGV4dG9mZnNldDsKIAogCQlmaWJoLT5zb2Zmc2V0IC09
IGRpci0+aV9zYi0+c19ibG9ja3NpemU7CiAJCWZpYmgtPmVvZmZzZXQgLT0gZGlyLT5pX3NiLT5z
X2Jsb2Nrc2l6ZTsKZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL2Zp
bGUuYyBrZXJuZWwtc291cmNlLTIuNi4xOC9mcy91ZGYvZmlsZS5jCi0tLSBrZXJuZWwtc291cmNl
LTIuNi4xOC5vcmlnL2ZzL3VkZi9maWxlLmMJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysg
a2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL2ZpbGUuYwkyMDA3LTA4LTE0IDExOjM1OjUzICsw
MzAwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNs
dWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNp
bmNsdWRlIDxsaW51eC9haW8uaD4KIAogI2luY2x1ZGUgInVkZl9pLmgiCiAjaW5jbHVkZSAidWRm
X3NiLmgiCkBAIC0xMDMsMTAgKzEwNCwxMSBAQAogCS5jb21taXRfd3JpdGUJCT0gdWRmX2FkaW5p
Y2JfY29tbWl0X3dyaXRlLAogfTsKIAotc3RhdGljIHNzaXplX3QgdWRmX2ZpbGVfd3JpdGUoc3Ry
dWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQlzaXplX3QgY291bnQs
IGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90IHVkZl9maWxlX2Fpb193cml0ZShzdHJ1Y3Qg
a2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICBzaXplX3QgY291
bnQsIGxvZmZfdCBwcG9zKQogewogCXNzaXplX3QgcmV0dmFsOworCXN0cnVjdCBmaWxlICpmaWxl
ID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnkt
PmRfaW5vZGU7CiAJaW50IGVyciwgcG9zOwogCkBAIC0xMTUsNyArMTE3LDcgQEAKIAkJaWYgKGZp
bGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkKIAkJCXBvcyA9IGlub2RlLT5pX3NpemU7CiAJCWVsc2UK
LQkJCXBvcyA9ICpwcG9zOworCQkJcG9zID0gcHBvczsKIAogCQlpZiAoaW5vZGUtPmlfc2ItPnNf
YmxvY2tzaXplIDwgKHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkgKwogCQkJcG9z
ICsgY291bnQpKQpAQCAtMTM2LDcgKzEzOCw3IEBACiAJCX0KIAl9CiAKLQlyZXR2YWwgPSBnZW5l
cmljX2ZpbGVfd3JpdGUoZmlsZSwgYnVmLCBjb3VudCwgcHBvcyk7CisJcmV0dmFsID0gZ2VuZXJp
Y19maWxlX2Fpb193cml0ZShpb2NiLCBidWYsIGNvdW50LCBwcG9zKTsKIAogCWlmIChyZXR2YWwg
PiAwKQogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTI0OSwxNiArMjUxLDE4IEBACiB9
CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHsK
LQkucmVhZAkJCT0gZ2VuZXJpY19maWxlX3JlYWQsCisJLnJlYWQJCQk9IGRvX3N5bmNfcmVhZCwK
KwkuYWlvX3JlYWQJCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS5pb2N0bAkJCT0gdWRmX2lv
Y3RsLAogCS5vcGVuCQkJPSBnZW5lcmljX2ZpbGVfb3BlbiwKIAkubW1hcAkJCT0gZ2VuZXJpY19m
aWxlX21tYXAsCi0JLndyaXRlCQkJPSB1ZGZfZmlsZV93cml0ZSwKKwkud3JpdGUJCQk9IGRvX3N5
bmNfd3JpdGUsCisJLmFpb193cml0ZQkJPSB1ZGZfZmlsZV9haW9fd3JpdGUsCiAJLnJlbGVhc2UJ
CT0gdWRmX3JlbGVhc2VfZmlsZSwKIAkuZnN5bmMJCQk9IHVkZl9mc3luY19maWxlLAogCS5zZW5k
ZmlsZQkJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCiB9OwogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0
aW9ucyB1ZGZfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGlub2RlX29w
ZXJhdGlvbnMgdWRmX2ZpbGVfaW5vZGVfb3BlcmF0aW9ucyA9IHsKIAkudHJ1bmNhdGUJCT0gdWRm
X3RydW5jYXRlLAogfTsKZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRm
L2ZzeW5jLmMga2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL2ZzeW5jLmMKLS0tIGtlcm5lbC1z
b3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL2ZzeW5jLmMJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMw
MAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL2ZzeW5jLmMJMjAwNy0wOC0xNCAwMzoy
NjowOCArMDMwMApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgInVkZmRlY2wuaCIKIAogI2lu
Y2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogc3RhdGlj
IGludCB1ZGZfZnN5bmNfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CiAKZGlmZiAtdXJOIGtl
cm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL2lhbGxvYy5jIGtlcm5lbC1zb3VyY2UtMi42
LjE4L2ZzL3VkZi9pYWxsb2MuYwotLS0ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9mcy91ZGYv
aWFsbG9jLmMJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYu
MTgvZnMvdWRmL2lhbGxvYy5jCTIwMDctMDgtMTQgMDM6MjY6MDggKzAzMDAKQEAgLTEyMSw3ICsx
MjEsNiBAQAogCVVERl9JX0xPQ0FUSU9OKGlub2RlKS5sb2dpY2FsQmxvY2tOdW0gPSBibG9jazsK
IAlVREZfSV9MT0NBVElPTihpbm9kZSkucGFydGl0aW9uUmVmZXJlbmNlTnVtID0gVURGX0lfTE9D
QVRJT04oZGlyKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW07CiAJaW5vZGUtPmlfaW5vID0gdWRmX2dl
dF9sYl9wYmxvY2soc2IsIFVERl9JX0xPQ0FUSU9OKGlub2RlKSwgMCk7Ci0JaW5vZGUtPmlfYmxr
c2l6ZSA9IFBBR0VfU0laRTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCVVERl9JX0xFTkVBVFRS
KGlub2RlKSA9IDA7CiAJVURGX0lfTEVOQUxMT0MoaW5vZGUpID0gMDsKQEAgLTEzMCwxNCArMTI5
LDEyIEBACiAJewogCQlVREZfSV9FRkUoaW5vZGUpID0gMTsKIAkJVURGX1VQREFURV9VREZSRVYo
aW5vZGUtPmlfc2IsIFVERl9WRVJTX1VTRV9FWFRFTkRFRF9GRSk7Ci0JCVVERl9JX0RBVEEoaW5v
ZGUpID0ga21hbGxvYyhpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGV4
dGVuZGVkRmlsZUVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JCW1lbXNldChVREZfSV9EQVRBKGlub2Rl
KSwgMHgwMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBleHRlbmRl
ZEZpbGVFbnRyeSkpOworCQlVREZfSV9EQVRBKGlub2RlKSA9IGt6YWxsb2MoaW5vZGUtPmlfc2It
PnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEZpbGVFbnRyeSksIEdGUF9LRVJO
RUwpOwogCX0KIAllbHNlCiAJewogCQlVREZfSV9FRkUoaW5vZGUpID0gMDsKLQkJVURGX0lfREFU
QShpbm9kZSkgPSBrbWFsbG9jKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIHNpemVvZihzdHJ1
Y3QgZmlsZUVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JCW1lbXNldChVREZfSV9EQVRBKGlub2RlKSwg
MHgwMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkp
KTsKKwkJVURGX0lfREFUQShpbm9kZSkgPSBremFsbG9jKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6
ZSAtIHNpemVvZihzdHJ1Y3QgZmlsZUVudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJfQogCWlmIChVREZf
UVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfVVNFX0FEX0lOX0lDQikpCiAJCVVERl9J
X0FMTE9DVFlQRShpbm9kZSkgPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0I7CmRpZmYgLXVyTiBrZXJu
ZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi9pbm9kZS5jIGtlcm5lbC1zb3VyY2UtMi42LjE4
L2ZzL3VkZi9pbm9kZS5jCi0tLSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi9pbm9k
ZS5jCTIwMDYtMDktMjAgMDY6NDI6MDYgKzAzMDAKKysrIGtlcm5lbC1zb3VyY2UtMi42LjE4L2Zz
L3VkZi9pbm9kZS5jCTIwMDctMDgtMTQgMDM6MjY6MDggKzAzMDAKQEAgLTQ5LDEwICs0OSwxMCBA
QAogc3RhdGljIG1vZGVfdCB1ZGZfY29udmVydF9wZXJtaXNzaW9ucyhzdHJ1Y3QgZmlsZUVudHJ5
ICopOwogc3RhdGljIGludCB1ZGZfdXBkYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwog
c3RhdGljIHZvaWQgdWRmX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJf
aGVhZCAqKTsKLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmlub2RlX2dldGJsayhzdHJ1Y3Qg
aW5vZGUgKiwgbG9uZywgaW50ICosCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICppbm9kZV9n
ZXRibGsoc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBpbnQgKiwKIAlsb25nICosIGludCAqKTsK
LXN0YXRpYyBpbnQ4X3QgdWRmX2luc2VydF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBrZXJuZWxfbGJf
YWRkciwgaW50LAotCWtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgc3RydWN0IGJ1ZmZlcl9oZWFk
ICopOworc3RhdGljIGludDhfdCB1ZGZfaW5zZXJ0X2FleHQoc3RydWN0IGlub2RlICosIHN0cnVj
dCBleHRlbnRfcG9zaXRpb24sCisJa2VybmVsX2xiX2FkZHIsIHVpbnQzMl90KTsKIHN0YXRpYyB2
b2lkIHVkZl9zcGxpdF9leHRlbnRzKHN0cnVjdCBpbm9kZSAqLCBpbnQgKiwgaW50LCBpbnQsCiAJ
a2VybmVsX2xvbmdfYWQgW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50ICopOwogc3RhdGljIHZvaWQg
dWRmX3ByZWFsbG9jX2V4dGVudHMoc3RydWN0IGlub2RlICosIGludCwgaW50LApAQCAtNjEsNyAr
NjEsNyBAQAogCSBrZXJuZWxfbG9uZ19hZCBbRVhURU5UX01FUkdFX1NJWkVdLCBpbnQgKik7CiBz
dGF0aWMgdm9pZCB1ZGZfdXBkYXRlX2V4dGVudHMoc3RydWN0IGlub2RlICosCiAJa2VybmVsX2xv
bmdfYWQgW0VYVEVOVF9NRVJHRV9TSVpFXSwgaW50LCBpbnQsCi0Ja2VybmVsX2xiX2FkZHIsIHVp
bnQzMl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOworCXN0cnVjdCBleHRlbnRfcG9zaXRpb24g
Kik7CiBzdGF0aWMgaW50IHVkZl9nZXRfYmxvY2soc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBz
dHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKIAogLyoKQEAgLTEwMCwxNCArMTAwLDIzIEBACiAJ
Y2xlYXJfaW5vZGUoaW5vZGUpOwogfQogCisvKgorICogSWYgd2UgYXJlIGdvaW5nIHRvIHJlbGVh
c2UgaW5vZGUgZnJvbSBtZW1vcnksIHdlIGRpc2NhcmQgcHJlYWxsb2NhdGlvbiBhbmQKKyAqIHRy
dW5jYXRlIGxhc3QgaW5vZGUgZXh0ZW50IHRvIHByb3BlciBsZW5ndGguIFdlIGNvdWxkIHVzZSBk
cm9wX2lub2RlKCkgYnV0CisgKiBpdCdzIGNhbGxlZCB1bmRlciBpbm9kZV9sb2NrIGFuZCB0aHVz
IHdlIGNhbm5vdCBtYXJrIGlub2RlIGRpcnR5IHRoZXJlLiAgV2UKKyAqIHVzZSBjbGVhcl9pbm9k
ZSgpIGJ1dCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0byB3cml0ZSBpbm9kZSBhcyBpdCdzIG5vdCB3
cml0dGVuCisgKiBhdXRvbWF0aWNhbGx5LgorICovCiB2b2lkIHVkZl9jbGVhcl9pbm9kZShzdHJ1
Y3QgaW5vZGUgKmlub2RlKQogewogCWlmICghKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRP
TkxZKSkgewogCQlsb2NrX2tlcm5lbCgpOworCQkvKiBEaXNjYXJkIHByZWFsbG9jYXRpb24gZm9y
IGRpcmVjdG9yaWVzLCBzeW1saW5rcywgZXRjLiAqLwogCQl1ZGZfZGlzY2FyZF9wcmVhbGxvYyhp
bm9kZSk7CisJCXVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChpbm9kZSk7CiAJCXVubG9ja19rZXJu
ZWwoKTsKKwkJd3JpdGVfaW5vZGVfbm93KGlub2RlLCAxKTsKIAl9Ci0KIAlrZnJlZShVREZfSV9E
QVRBKGlub2RlKSk7CiAJVURGX0lfREFUQShpbm9kZSkgPSBOVUxMOwogfQpAQCAtMTk0LDEwICsy
MDMsMTEgQEAKIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVkZl9leHBhbmRfZGlyX2FkaW5pY2Ioc3Ry
dWN0IGlub2RlICppbm9kZSwgaW50ICpibG9jaywgaW50ICplcnIpCiB7CiAJaW50IG5ld2Jsb2Nr
OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqc2JoID0gTlVMTCwgKmRiaCA9IE5VTEw7Ci0Ja2VybmVs
X2xiX2FkZHIgYmxvYywgZWxvYzsKLQl1aW50MzJfdCBlbGVuLCBleHRvZmZzZXQ7CisJc3RydWN0
IGJ1ZmZlcl9oZWFkICpkYmggPSBOVUxMOworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJdWludDMy
X3QgZWxlbjsKIAl1aW50OF90IGFsbG9jdHlwZTsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVw
b3M7CiAKIAlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCBzZmliaCwgZGZpYmg7CiAJbG9mZl90IGZf
cG9zID0gdWRmX2V4dDBfb2Zmc2V0KGlub2RlKSA+PiAyOwpAQCAtMjM3LDE2ICsyNDcsMTYgQEAK
IAltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShkYmgsIGlub2RlKTsKIAogCXNmaWJoLnNvZmZzZXQg
PSBzZmliaC5lb2Zmc2V0ID0gKGZfcG9zICYgKChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAx
KSA+PiAyKSkgPDwgMjsKLQlzYmggPSBzZmliaC5zYmggPSBzZmliaC5lYmggPSBOVUxMOworCXNm
aWJoLnNiaCA9IHNmaWJoLmViaCA9IE5VTEw7CiAJZGZpYmguc29mZnNldCA9IGRmaWJoLmVvZmZz
ZXQgPSAwOwogCWRmaWJoLnNiaCA9IGRmaWJoLmViaCA9IGRiaDsKIAl3aGlsZSAoIChmX3BvcyA8
IHNpemUpICkKIAl7CiAJCVVERl9JX0FMTE9DVFlQRShpbm9kZSkgPSBJQ0JUQUdfRkxBR19BRF9J
Tl9JQ0I7Ci0JCXNmaSA9IHVkZl9maWxlaWRlbnRfcmVhZChpbm9kZSwgJmZfcG9zLCAmc2ZpYmgs
ICZjZmksIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworCQlzZmkgPSB1ZGZf
ZmlsZWlkZW50X3JlYWQoaW5vZGUsICZmX3BvcywgJnNmaWJoLCAmY2ZpLCBOVUxMLCBOVUxMLCBO
VUxMLCBOVUxMKTsKIAkJaWYgKCFzZmkpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZGJoKTsK
KwkJCWJyZWxzZShkYmgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KIAkJVURGX0lfQUxMT0NUWVBF
KGlub2RlKSA9IGFsbG9jdHlwZTsKQEAgLTI1OCw3ICsyNjgsNyBAQAogCQkJc2ZpLT5maWxlSWRl
bnQgKyBsZTE2X3RvX2NwdShzZmktPmxlbmd0aE9mSW1wVXNlKSkpCiAJCXsKIAkJCVVERl9JX0FM
TE9DVFlQRShpbm9kZSkgPSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0I7Ci0JCQl1ZGZfcmVsZWFzZV9k
YXRhKGRiaCk7CisJCQlicmVsc2UoZGJoKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJfQpAQCAt
MjY2LDE2ICsyNzYsMTcgQEAKIAogCW1lbXNldChVREZfSV9EQVRBKGlub2RlKSArIFVERl9JX0xF
TkVBVFRSKGlub2RlKSwgMCwgVURGX0lfTEVOQUxMT0MoaW5vZGUpKTsKIAlVREZfSV9MRU5BTExP
Qyhpbm9kZSkgPSAwOwotCWJsb2MgPSBVREZfSV9MT0NBVElPTihpbm9kZSk7CiAJZWxvYy5sb2dp
Y2FsQmxvY2tOdW0gPSAqYmxvY2s7CiAJZWxvYy5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBVREZf
SV9MT0NBVElPTihpbm9kZSkucGFydGl0aW9uUmVmZXJlbmNlTnVtOwogCWVsZW4gPSBpbm9kZS0+
aV9zaXplOwogCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gZWxlbjsKLQlleHRvZmZzZXQgPSB1
ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOwotCXVkZl9hZGRfYWV4dChpbm9kZSwg
JmJsb2MsICZleHRvZmZzZXQsIGVsb2MsIGVsZW4sICZzYmgsIDApOworCWVwb3MuYmggPSBOVUxM
OworCWVwb3MuYmxvY2sgPSBVREZfSV9MT0NBVElPTihpbm9kZSk7CisJZXBvcy5vZmZzZXQgPSB1
ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOworCXVkZl9hZGRfYWV4dChpbm9kZSwg
JmVwb3MsIGVsb2MsIGVsZW4sIDApOwogCS8qIFVuaXF1ZUlEIHN0dWZmICovCiAKLQl1ZGZfcmVs
ZWFzZV9kYXRhKHNiaCk7CisJYnJlbHNlKGVwb3MuYmgpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5v
ZGUpOwogCXJldHVybiBkYmg7CiB9CkBAIC0zNTQsNTMgKzM2NSwxNTMgQEAKIAlyZXR1cm4gTlVM
TDsKIH0KIAotc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIGlub2RlX2dldGJsayhzdHJ1Y3Qg
aW5vZGUgKiBpbm9kZSwgbG9uZyBibG9jaywKKy8qIEV4dGVuZCB0aGUgZmlsZSBieSAnYmxvY2tz
JyBibG9ja3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGV4dGVudHMgYWRkZWQgKi8KK2ludCB1ZGZf
ZXh0ZW5kX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAq
bGFzdF9wb3MsCisJa2VybmVsX2xvbmdfYWQgKmxhc3RfZXh0LCBzZWN0b3JfdCBibG9ja3MpCit7
CisJc2VjdG9yX3QgYWRkOworCWludCBjb3VudCA9IDAsIGZha2UgPSAhKGxhc3RfZXh0LT5leHRM
ZW5ndGggJiBVREZfRVhURU5UX0xFTkdUSF9NQVNLKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNi
ID0gaW5vZGUtPmlfc2I7CisJa2VybmVsX2xiX2FkZHIgcHJlYWxsb2NfbG9jID0gezAsIDB9Owor
CWludCBwcmVhbGxvY19sZW4gPSAwOworCisJLyogVGhlIHByZXZpb3VzIGV4dGVudCBpcyBmYWtl
IGFuZCB3ZSBzaG91bGQgbm90IGV4dGVuZCBieSBhbnl0aGluZworCSAqIC0gdGhlcmUncyBub3Ro
aW5nIHRvIGRvLi4uICovCisJaWYgKCFibG9ja3MgJiYgZmFrZSkKKwkJcmV0dXJuIDA7CisJLyog
Um91bmQgdGhlIGxhc3QgZXh0ZW50IHVwIHRvIGEgbXVsdGlwbGUgb2YgYmxvY2sgc2l6ZSAqLwor
CWlmIChsYXN0X2V4dC0+ZXh0TGVuZ3RoICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSB7CisJCWxh
c3RfZXh0LT5leHRMZW5ndGggPQorCQkJKGxhc3RfZXh0LT5leHRMZW5ndGggJiBVREZfRVhURU5U
X0ZMQUdfTUFTSykgfAorCQkJKCgobGFzdF9leHQtPmV4dExlbmd0aCAmIFVERl9FWFRFTlRfTEVO
R1RIX01BU0spICsKKwkJCQlzYi0+c19ibG9ja3NpemUgLSAxKSAmIH4oc2ItPnNfYmxvY2tzaXpl
IC0gMSkpOworCQlVREZfSV9MRU5FWFRFTlRTKGlub2RlKSA9CisJCQkoVURGX0lfTEVORVhURU5U
Uyhpbm9kZSkgKyBzYi0+c19ibG9ja3NpemUgLSAxKSAmCisJCQkJfihzYi0+c19ibG9ja3NpemUg
LSAxKTsKKwl9CisJLyogTGFzdCBleHRlbnQgYXJlIGp1c3QgcHJlYWxsb2NhdGVkIGJsb2Nrcz8g
Ki8KKwlpZiAoKGxhc3RfZXh0LT5leHRMZW5ndGggJiBVREZfRVhURU5UX0ZMQUdfTUFTSykgPT0g
RVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQpIHsKKwkJLyogU2F2ZSB0aGUgZXh0ZW50IHNvIHRo
YXQgd2UgY2FuIHJlYXR0YWNoIGl0IHRvIHRoZSBlbmQgKi8KKwkJcHJlYWxsb2NfbG9jID0gbGFz
dF9leHQtPmV4dExvY2F0aW9uOworCQlwcmVhbGxvY19sZW4gPSBsYXN0X2V4dC0+ZXh0TGVuZ3Ro
OworCQkvKiBNYXJrIHRoZSBleHRlbnQgYXMgYSBob2xlICovCisJCWxhc3RfZXh0LT5leHRMZW5n
dGggPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfAorCQkJKGxhc3RfZXh0LT5leHRM
ZW5ndGggJiBVREZfRVhURU5UX0xFTkdUSF9NQVNLKTsKKwkJbGFzdF9leHQtPmV4dExvY2F0aW9u
LmxvZ2ljYWxCbG9ja051bSA9IDA7CisgICAgICAgCQlsYXN0X2V4dC0+ZXh0TG9jYXRpb24ucGFy
dGl0aW9uUmVmZXJlbmNlTnVtID0gMDsKKwl9CisJLyogQ2FuIHdlIG1lcmdlIHdpdGggdGhlIHBy
ZXZpb3VzIGV4dGVudD8gKi8KKwlpZiAoKGxhc3RfZXh0LT5leHRMZW5ndGggJiBVREZfRVhURU5U
X0ZMQUdfTUFTSykgPT0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEKSB7CisJCWFkZCA9
ICgoMTw8MzApIC0gc2ItPnNfYmxvY2tzaXplIC0gKGxhc3RfZXh0LT5leHRMZW5ndGggJgorCQkJ
VURGX0VYVEVOVF9MRU5HVEhfTUFTSykpID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCQlpZiAo
YWRkID4gYmxvY2tzKQorCQkJYWRkID0gYmxvY2tzOworCQlibG9ja3MgLT0gYWRkOworCQlsYXN0
X2V4dC0+ZXh0TGVuZ3RoICs9IGFkZCA8PCBzYi0+c19ibG9ja3NpemVfYml0czsKKwl9CisKKwlp
ZiAoZmFrZSkgeworCQl1ZGZfYWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBsYXN0X2V4dC0+ZXh0
TG9jYXRpb24sCisJCQlsYXN0X2V4dC0+ZXh0TGVuZ3RoLCAxKTsKKwkJY291bnQrKzsKKwl9CisJ
ZWxzZQorCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgbGFzdF9wb3MsIGxhc3RfZXh0LT5leHRMb2Nh
dGlvbiwgbGFzdF9leHQtPmV4dExlbmd0aCwgMSk7CisJLyogTWFuYWdlZCB0byBkbyBldmVyeXRo
aW5nIG5lY2Vzc2FyeT8gKi8KKwlpZiAoIWJsb2NrcykKKwkJZ290byBvdXQ7CisKKwkvKiBBbGwg
ZnVydGhlciBleHRlbnRzIHdpbGwgYmUgTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgKi8KKwls
YXN0X2V4dC0+ZXh0TG9jYXRpb24ubG9naWNhbEJsb2NrTnVtID0gMDsKKyAgICAgICAJbGFzdF9l
eHQtPmV4dExvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IDA7CisJYWRkID0gKDEgPDwg
KDMwLXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSkgLSAxOworCWxhc3RfZXh0LT5leHRMZW5ndGggPSBF
WFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfCAoYWRkIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9i
aXRzKTsKKwkvKiBDcmVhdGUgZW5vdWdoIGV4dGVudHMgdG8gY292ZXIgdGhlIHdob2xlIGhvbGUg
Ki8KKwl3aGlsZSAoYmxvY2tzID4gYWRkKSB7CisJCWJsb2NrcyAtPSBhZGQ7CisJCWlmICh1ZGZf
YWRkX2FleHQoaW5vZGUsIGxhc3RfcG9zLCBsYXN0X2V4dC0+ZXh0TG9jYXRpb24sCisJCQlsYXN0
X2V4dC0+ZXh0TGVuZ3RoLCAxKSA9PSAtMSkKKwkJCXJldHVybiAtMTsKKwkJY291bnQrKzsKKwl9
CisJaWYgKGJsb2NrcykgeworCQlsYXN0X2V4dC0+ZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRF
RF9OT1RfQUxMT0NBVEVEIHwKKwkJCShibG9ja3MgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwor
CQlpZiAodWRmX2FkZF9hZXh0KGlub2RlLCBsYXN0X3BvcywgbGFzdF9leHQtPmV4dExvY2F0aW9u
LAorCQkJbGFzdF9leHQtPmV4dExlbmd0aCwgMSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCWNv
dW50Kys7CisJfQorb3V0OgorCS8qIERvIHdlIGhhdmUgc29tZSBwcmVhbGxvY2F0ZWQgYmxvY2tz
IHNhdmVkPyAqLworCWlmIChwcmVhbGxvY19sZW4pIHsKKwkJaWYgKHVkZl9hZGRfYWV4dChpbm9k
ZSwgbGFzdF9wb3MsIHByZWFsbG9jX2xvYywgcHJlYWxsb2NfbGVuLCAxKSA9PSAtMSkKKwkJCXJl
dHVybiAtMTsKKwkJbGFzdF9leHQtPmV4dExvY2F0aW9uID0gcHJlYWxsb2NfbG9jOworCQlsYXN0
X2V4dC0+ZXh0TGVuZ3RoID0gcHJlYWxsb2NfbGVuOworCQljb3VudCsrOworCX0KKwkvKiBsYXN0
X3BvcyBzaG91bGQgcG9pbnQgdG8gdGhlIGxhc3Qgd3JpdHRlbiBleHRlbnQuLi4gKi8KKwlpZiAo
VURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKKwkJbGFzdF9w
b3MtPm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOworCWVsc2UgaWYgKFVERl9JX0FMTE9DVFlQ
RShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKKwkJbGFzdF9wb3MtPm9mZnNldCAtPSBz
aXplb2YobG9uZ19hZCk7CisJZWxzZQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGNvdW50OworfQor
CitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogaW5vZGVfZ2V0YmxrKHN0cnVjdCBpbm9kZSAq
IGlub2RlLCBzZWN0b3JfdCBibG9jaywKIAlpbnQgKmVyciwgbG9uZyAqcGh5cywgaW50ICpuZXcp
CiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwYmggPSBOVUxMLCAqY2JoID0gTlVMTCwgKm5iaCA9
IE5VTEwsICpyZXN1bHQgPSBOVUxMOworCXN0YXRpYyBzZWN0b3JfdCBsYXN0X2Jsb2NrOworCXN0
cnVjdCBidWZmZXJfaGVhZCAqcmVzdWx0ID0gTlVMTDsKIAlrZXJuZWxfbG9uZ19hZCBsYWFycltF
WFRFTlRfTUVSR0VfU0laRV07Ci0JdWludDMyX3QgcGV4dG9mZnNldCA9IDAsIGNleHRvZmZzZXQg
PSAwLCBuZXh0b2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIHByZXZfZXBvcywg
Y3VyX2Vwb3MsIG5leHRfZXBvczsKIAlpbnQgY291bnQgPSAwLCBzdGFydG51bSA9IDAsIGVuZG51
bSA9IDA7Ci0JdWludDMyX3QgZWxlbiA9IDA7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYywgcGJsb2Ms
IGNibG9jLCBuYmxvYzsKKwl1aW50MzJfdCBlbGVuID0gMCwgdG1wZWxlbjsKKwlrZXJuZWxfbGJf
YWRkciBlbG9jLCB0bXBlbG9jOwogCWludCBjID0gMTsKLQl1aW50NjRfdCBsYmNvdW50ID0gMCwg
Yl9vZmYgPSAwOwotCXVpbnQzMl90IG5ld2Jsb2NrbnVtLCBuZXdibG9jaywgb2Zmc2V0ID0gMDsK
Kwlsb2ZmX3QgbGJjb3VudCA9IDAsIGJfb2ZmID0gMDsKKwl1aW50MzJfdCBuZXdibG9ja251bSwg
bmV3YmxvY2s7CisJc2VjdG9yX3Qgb2Zmc2V0ID0gMDsKIAlpbnQ4X3QgZXR5cGU7CiAJaW50IGdv
YWwgPSAwLCBwZ29hbCA9IFVERl9JX0xPQ0FUSU9OKGlub2RlKS5sb2dpY2FsQmxvY2tOdW07Ci0J
Y2hhciBsYXN0YmxvY2sgPSAwOworCWludCBsYXN0YmxvY2sgPSAwOwogCi0JcGV4dG9mZnNldCA9
IGNleHRvZmZzZXQgPSBuZXh0b2Zmc2V0ID0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlu
b2RlKTsKLQliX29mZiA9ICh1aW50NjRfdClibG9jayA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3Np
emVfYml0czsKLQlwYmxvYyA9IGNibG9jID0gbmJsb2MgPSBVREZfSV9MT0NBVElPTihpbm9kZSk7
CisJcHJldl9lcG9zLm9mZnNldCA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSk7
CisJcHJldl9lcG9zLmJsb2NrID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCXByZXZfZXBvcy5i
aCA9IE5VTEw7CisJY3VyX2Vwb3MgPSBuZXh0X2Vwb3MgPSBwcmV2X2Vwb3M7CisJYl9vZmYgPSAo
bG9mZl90KWJsb2NrIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCiAJLyogZmlu
ZCB0aGUgZXh0ZW50IHdoaWNoIGNvbnRhaW5zIHRoZSBibG9jayB3ZSBhcmUgbG9va2luZyBmb3Iu
CiAgICAgICAgYWx0ZXJuYXRlIGJldHdlZW4gbGFhcnJbMF0gYW5kIGxhYXJyWzFdIGZvciBsb2Nh
dGlvbnMgb2YgdGhlCiAgICAgICAgY3VycmVudCBleHRlbnQsIGFuZCB0aGUgcHJldmlvdXMgZXh0
ZW50ICovCiAJZG8KIAl7Ci0JCWlmIChwYmggIT0gY2JoKQorCQlpZiAocHJldl9lcG9zLmJoICE9
IGN1cl9lcG9zLmJoKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKHBiaCk7Ci0JCQlhdG9taWNf
aW5jKCZjYmgtPmJfY291bnQpOwotCQkJcGJoID0gY2JoOworCQkJYnJlbHNlKHByZXZfZXBvcy5i
aCk7CisJCQlnZXRfYmgoY3VyX2Vwb3MuYmgpOworCQkJcHJldl9lcG9zLmJoID0gY3VyX2Vwb3Mu
Ymg7CiAJCX0KLQkJaWYgKGNiaCAhPSBuYmgpCisJCWlmIChjdXJfZXBvcy5iaCAhPSBuZXh0X2Vw
b3MuYmgpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoY2JoKTsKLQkJCWF0b21pY19pbmMoJm5i
aC0+Yl9jb3VudCk7Ci0JCQljYmggPSBuYmg7CisJCQlicmVsc2UoY3VyX2Vwb3MuYmgpOworCQkJ
Z2V0X2JoKG5leHRfZXBvcy5iaCk7CisJCQljdXJfZXBvcy5iaCA9IG5leHRfZXBvcy5iaDsKIAkJ
fQogCiAJCWxiY291bnQgKz0gZWxlbjsKIAotCQlwYmxvYyA9IGNibG9jOwotCQljYmxvYyA9IG5i
bG9jOworCQlwcmV2X2Vwb3MuYmxvY2sgPSBjdXJfZXBvcy5ibG9jazsKKwkJY3VyX2Vwb3MuYmxv
Y2sgPSBuZXh0X2Vwb3MuYmxvY2s7CiAKLQkJcGV4dG9mZnNldCA9IGNleHRvZmZzZXQ7Ci0JCWNl
eHRvZmZzZXQgPSBuZXh0b2Zmc2V0OworCQlwcmV2X2Vwb3Mub2Zmc2V0ID0gY3VyX2Vwb3Mub2Zm
c2V0OworCQljdXJfZXBvcy5vZmZzZXQgPSBuZXh0X2Vwb3Mub2Zmc2V0OwogCi0JCWlmICgoZXR5
cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmbmJsb2MsICZuZXh0b2Zmc2V0LCAmZWxvYywgJmVs
ZW4sICZuYmgsIDEpKSA9PSAtMSkKKwkJaWYgKChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUs
ICZuZXh0X2Vwb3MsICZlbG9jLCAmZWxlbiwgMSkpID09IC0xKQogCQkJYnJlYWs7CiAKIAkJYyA9
ICFjOwpAQCAtNDE4LDYgKzUyOSwxMiBAQAogCiAJYl9vZmYgLT0gbGJjb3VudDsKIAlvZmZzZXQg
PSBiX29mZiA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwkvKgorCSAqIE1vdmUg
cHJldl9lcG9zIGFuZCBjdXJfZXBvcyBpbnRvIGluZGlyZWN0IGV4dGVudCBpZiB3ZSBhcmUgYXQK
KwkgKiB0aGUgcG9pbnRlciB0byBpdAorCSAqLworCXVkZl9uZXh0X2FleHQoaW5vZGUsICZwcmV2
X2Vwb3MsICZ0bXBlbG9jLCAmdG1wZWxlbiwgMCk7CisJdWRmX25leHRfYWV4dChpbm9kZSwgJmN1
cl9lcG9zLCAmdG1wZWxvYywgJnRtcGVsZW4sIDApOwogCiAJLyogaWYgdGhlIGV4dGVudCBpcyBh
bGxvY2F0ZWQgYW5kIHJlY29yZGVkLCByZXR1cm4gdGhlIGJsb2NrCiAgICAgICAgaWYgdGhlIGV4
dGVudCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgYmxvY2tzaXplLCByb3VuZCB1cCAqLwpAQCAt
NDI5LDU0ICs1NDYsNzcgQEAKIAkJCWVsZW4gPSBFWFRfUkVDT1JERURfQUxMT0NBVEVEIHwKIAkJ
CQkoKGVsZW4gKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCiAJCQkJfihpbm9kZS0+
aV9zYi0+c19ibG9ja3NpemUgLSAxKSk7Ci0JCQlldHlwZSA9IHVkZl93cml0ZV9hZXh0KGlub2Rl
LCBuYmxvYywgJmNleHRvZmZzZXQsIGVsb2MsIGVsZW4sIG5iaCwgMSk7CisJCQlldHlwZSA9IHVk
Zl93cml0ZV9hZXh0KGlub2RlLCAmY3VyX2Vwb3MsIGVsb2MsIGVsZW4sIDEpOwogCQl9Ci0JCXVk
Zl9yZWxlYXNlX2RhdGEocGJoKTsKLQkJdWRmX3JlbGVhc2VfZGF0YShjYmgpOwotCQl1ZGZfcmVs
ZWFzZV9kYXRhKG5iaCk7CisJCWJyZWxzZShwcmV2X2Vwb3MuYmgpOworCQlicmVsc2UoY3VyX2Vw
b3MuYmgpOworCQlicmVsc2UobmV4dF9lcG9zLmJoKTsKIAkJbmV3YmxvY2sgPSB1ZGZfZ2V0X2xi
X3BibG9jayhpbm9kZS0+aV9zYiwgZWxvYywgb2Zmc2V0KTsKIAkJKnBoeXMgPSBuZXdibG9jazsK
IAkJcmV0dXJuIE5VTEw7CiAJfQogCisJbGFzdF9ibG9jayA9IGJsb2NrOworCS8qIEFyZSB3ZSBi
ZXlvbmQgRU9GPyAqLwogCWlmIChldHlwZSA9PSAtMSkKIAl7Ci0JCWVuZG51bSA9IHN0YXJ0bnVt
ID0gKChjb3VudCA+IDEpID8gMSA6IGNvdW50KTsKLQkJaWYgKGxhYXJyW2NdLmV4dExlbmd0aCAm
IChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSkKLQkJewotCQkJbGFhcnJbY10uZXh0TGVu
Z3RoID0KLQkJCQkobGFhcnJbY10uZXh0TGVuZ3RoICYgVURGX0VYVEVOVF9GTEFHX01BU0spIHwK
LQkJCQkoKChsYWFycltjXS5leHRMZW5ndGggJiBVREZfRVhURU5UX0xFTkdUSF9NQVNLKSArCi0J
CQkJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpICYKLQkJCQl+KGlub2RlLT5pX3NiLT5z
X2Jsb2Nrc2l6ZSAtIDEpKTsKLQkJCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0KLQkJCQkoVURG
X0lfTEVORVhURU5UUyhpbm9kZSkgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCi0J
CQkJCX4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSk7CisJCWludCByZXQ7CisKKwkJaWYg
KGNvdW50KSB7CisJCQlpZiAoYykKKwkJCQlsYWFyclswXSA9IGxhYXJyWzFdOworCQkJc3RhcnRu
dW0gPSAxOworCQl9CisJCWVsc2UgeworCQkJLyogQ3JlYXRlIGEgZmFrZSBleHRlbnQgd2hlbiB0
aGVyZSdzIG5vdCBvbmUgKi8KKwkJCW1lbXNldCgmbGFhcnJbMF0uZXh0TG9jYXRpb24sIDB4MDAs
IHNpemVvZihrZXJuZWxfbGJfYWRkcikpOworCQkJbGFhcnJbMF0uZXh0TGVuZ3RoID0gRVhUX05P
VF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEOworCQkJLyogV2lsbCB1ZGZfZXh0ZW5kX2ZpbGUoKSBj
cmVhdGUgcmVhbCBleHRlbnQgZnJvbSBhIGZha2Ugb25lPyAqLworCQkJc3RhcnRudW0gPSAob2Zm
c2V0ID4gMCk7CisJCX0KKwkJLyogQ3JlYXRlIGV4dGVudHMgZm9yIHRoZSBob2xlIGJldHdlZW4g
RU9GIGFuZCBvZmZzZXQgKi8KKwkJcmV0ID0gdWRmX2V4dGVuZF9maWxlKGlub2RlLCAmcHJldl9l
cG9zLCBsYWFyciwgb2Zmc2V0KTsKKwkJaWYgKHJldCA9PSAtMSkgeworCQkJYnJlbHNlKHByZXZf
ZXBvcy5iaCk7CisJCQlicmVsc2UoY3VyX2Vwb3MuYmgpOworCQkJYnJlbHNlKG5leHRfZXBvcy5i
aCk7CisJCQkvKiBXZSBkb24ndCByZWFsbHkga25vdyB0aGUgZXJyb3IgaGVyZSBzbyB3ZSBqdXN0
IG1ha2UKKwkJCSAqIHNvbWV0aGluZyB1cCAqLworCQkJKmVyciA9IC1FTk9TUEM7CisJCQlyZXR1
cm4gTlVMTDsKIAkJfQotCQljID0gIWM7Ci0JCWxhYXJyW2NdLmV4dExlbmd0aCA9IEVYVF9OT1Rf
UkVDT1JERURfTk9UX0FMTE9DQVRFRCB8Ci0JCQkoKG9mZnNldCArIDEpIDw8IGlub2RlLT5pX3Ni
LT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJbWVtc2V0KCZsYWFycltjXS5leHRMb2NhdGlvbiwgMHgw
MCwgc2l6ZW9mKGtlcm5lbF9sYl9hZGRyKSk7Ci0JCWNvdW50ICsrOwotCQllbmRudW0gKys7CisJ
CWMgPSAwOworCQlvZmZzZXQgPSAwOworCQljb3VudCArPSByZXQ7CisJCS8qIFdlIGFyZSBub3Qg
Y292ZXJlZCBieSBhIHByZWFsbG9jYXRlZCBleHRlbnQ/ICovCisJCWlmICgobGFhcnJbMF0uZXh0
TGVuZ3RoICYgVURGX0VYVEVOVF9GTEFHX01BU0spICE9IEVYVF9OT1RfUkVDT1JERURfQUxMT0NB
VEVEKSB7CisJCQkvKiBJcyB0aGVyZSBhbnkgcmVhbCBleHRlbnQ/IC0gb3RoZXJ3aXNlIHdlIG92
ZXJ3cml0ZQorCQkJICogdGhlIGZha2Ugb25lLi4uICovCisJCQlpZiAoY291bnQpCisJCQkJYyA9
ICFjOworCQkJbGFhcnJbY10uZXh0TGVuZ3RoID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NB
VEVEIHwKKwkJCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJCQltZW1zZXQoJmxhYXJyW2Nd
LmV4dExvY2F0aW9uLCAweDAwLCBzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwkJCWNvdW50ICsr
OworCQkJZW5kbnVtICsrOworCQl9CisJCWVuZG51bSA9IGMrMTsKIAkJbGFzdGJsb2NrID0gMTsK
IAl9Ci0JZWxzZQorCWVsc2UgewogCQllbmRudW0gPSBzdGFydG51bSA9ICgoY291bnQgPiAyKSA/
IDIgOiBjb3VudCk7CiAKLQkvKiBpZiB0aGUgY3VycmVudCBleHRlbnQgaXMgaW4gcG9zaXRpb24g
MCwgc3dhcCBpdCB3aXRoIHRoZSBwcmV2aW91cyAqLwotCWlmICghYyAmJiBjb3VudCAhPSAxKQot
CXsKLQkJbGFhcnJbMl0gPSBsYWFyclswXTsKLQkJbGFhcnJbMF0gPSBsYWFyclsxXTsKLQkJbGFh
cnJbMV0gPSBsYWFyclsyXTsKLQkJYyA9IDE7Ci0JfQorCQkvKiBpZiB0aGUgY3VycmVudCBleHRl
bnQgaXMgaW4gcG9zaXRpb24gMCwgc3dhcCBpdCB3aXRoIHRoZSBwcmV2aW91cyAqLworCQlpZiAo
IWMgJiYgY291bnQgIT0gMSkKKwkJeworCQkJbGFhcnJbMl0gPSBsYWFyclswXTsKKwkJCWxhYXJy
WzBdID0gbGFhcnJbMV07CisJCQlsYWFyclsxXSA9IGxhYXJyWzJdOworCQkJYyA9IDE7CisJCX0K
IAotCS8qIGlmIHRoZSBjdXJyZW50IGJsb2NrIGlzIGxvY2F0ZWQgaW4gYSBleHRlbnQsIHJlYWQg
dGhlIG5leHQgZXh0ZW50ICovCi0JaWYgKGV0eXBlICE9IC0xKQotCXsKLQkJaWYgKChldHlwZSA9
IHVkZl9uZXh0X2FleHQoaW5vZGUsICZuYmxvYywgJm5leHRvZmZzZXQsICZlbG9jLCAmZWxlbiwg
Jm5iaCwgMCkpICE9IC0xKQorCQkvKiBpZiB0aGUgY3VycmVudCBibG9jayBpcyBsb2NhdGVkIGlu
IGFuIGV4dGVudCwgcmVhZCB0aGUgbmV4dCBleHRlbnQgKi8KKwkJaWYgKChldHlwZSA9IHVkZl9u
ZXh0X2FleHQoaW5vZGUsICZuZXh0X2Vwb3MsICZlbG9jLCAmZWxlbiwgMCkpICE9IC0xKQogCQl7
CiAJCQlsYWFycltjKzFdLmV4dExlbmd0aCA9IChldHlwZSA8PCAzMCkgfCBlbGVuOwogCQkJbGFh
cnJbYysxXS5leHRMb2NhdGlvbiA9IGVsb2M7CkBAIC00ODQsMTEgKzYyNCwxMCBAQAogCQkJc3Rh
cnRudW0gKys7CiAJCQllbmRudW0gKys7CiAJCX0KLQkJZWxzZQorCQllbHNlIHsKIAkJCWxhc3Ri
bG9jayA9IDE7CisJCX0KIAl9Ci0JdWRmX3JlbGVhc2VfZGF0YShjYmgpOwotCXVkZl9yZWxlYXNl
X2RhdGEobmJoKTsKIAogCS8qIGlmIHRoZSBjdXJyZW50IGV4dGVudCBpcyBub3QgcmVjb3JkZWQg
YnV0IGFsbG9jYXRlZCwgZ2V0IHRoZQogCQlibG9jayBpbiB0aGUgZXh0ZW50IGNvcnJlc3BvbmRp
bmcgdG8gdGhlIHJlcXVlc3RlZCBibG9jayAqLwpAQCAtNTA4LDcgKzY0Nyw3IEBACiAJCWlmICgh
KG5ld2Jsb2NrbnVtID0gdWRmX25ld19ibG9jayhpbm9kZS0+aV9zYiwgaW5vZGUsCiAJCQlVREZf
SV9MT0NBVElPTihpbm9kZSkucGFydGl0aW9uUmVmZXJlbmNlTnVtLCBnb2FsLCBlcnIpKSkKIAkJ
ewotCQkJdWRmX3JlbGVhc2VfZGF0YShwYmgpOworCQkJYnJlbHNlKHByZXZfZXBvcy5iaCk7CiAJ
CQkqZXJyID0gLUVOT1NQQzsKIAkJCXJldHVybiBOVUxMOwogCQl9CkBAIC01MjksMTEgKzY2OCwx
MSBAQAogCXVkZl9tZXJnZV9leHRlbnRzKGlub2RlLCBsYWFyciwgJmVuZG51bSk7CiAKIAkvKiB3
cml0ZSBiYWNrIHRoZSBuZXcgZXh0ZW50cywgaW5zZXJ0aW5nIG5ldyBleHRlbnRzIGlmIHRoZSBu
ZXcgbnVtYmVyCi0gICAgICAgb2YgZXh0ZW50cyBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZCBudW1i
ZXIsIGFuZCBkZWxldGluZyBleHRlbnRzIGlmCi0gICAgICAgdGhlIG5ldyBudW1iZXIgb2YgZXh0
ZW50cyBpcyBsZXNzIHRoYW4gdGhlIG9sZCBudW1iZXIgKi8KLQl1ZGZfdXBkYXRlX2V4dGVudHMo
aW5vZGUsIGxhYXJyLCBzdGFydG51bSwgZW5kbnVtLCBwYmxvYywgcGV4dG9mZnNldCwgJnBiaCk7
CisJb2YgZXh0ZW50cyBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZCBudW1iZXIsIGFuZCBkZWxldGlu
ZyBleHRlbnRzIGlmCisJdGhlIG5ldyBudW1iZXIgb2YgZXh0ZW50cyBpcyBsZXNzIHRoYW4gdGhl
IG9sZCBudW1iZXIgKi8KKwl1ZGZfdXBkYXRlX2V4dGVudHMoaW5vZGUsIGxhYXJyLCBzdGFydG51
bSwgZW5kbnVtLCAmcHJldl9lcG9zKTsKIAotCXVkZl9yZWxlYXNlX2RhdGEocGJoKTsKKwlicmVs
c2UocHJldl9lcG9zLmJoKTsKIAogCWlmICghKG5ld2Jsb2NrID0gdWRmX2dldF9wYmxvY2soaW5v
ZGUtPmlfc2IsIG5ld2Jsb2NrbnVtLAogCQlVREZfSV9MT0NBVElPTihpbm9kZSkucGFydGl0aW9u
UmVmZXJlbmNlTnVtLCAwKSkpCkBAIC03OTUsNyArOTM0LDcgQEAKIAogc3RhdGljIHZvaWQgdWRm
X3VwZGF0ZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJa2VybmVsX2xvbmdfYWQgbGFh
cnJbRVhURU5UX01FUkdFX1NJWkVdLCBpbnQgc3RhcnRudW0sIGludCBlbmRudW0sCi0Ja2VybmVs
X2xiX2FkZHIgcGJsb2MsIHVpbnQzMl90IHBleHRvZmZzZXQsIHN0cnVjdCBidWZmZXJfaGVhZCAq
KnBiaCkKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICplcG9zKQogewogCWludCBzdGFydCA9IDAs
IGk7CiAJa2VybmVsX2xiX2FkZHIgdG1wbG9jOwpAQCAtODA0LDI4ICs5NDMsMjYgQEAKIAlpZiAo
c3RhcnRudW0gPiBlbmRudW0pCiAJewogCQlmb3IgKGk9MDsgaTwoc3RhcnRudW0tZW5kbnVtKTsg
aSsrKQotCQl7Ci0JCQl1ZGZfZGVsZXRlX2FleHQoaW5vZGUsIHBibG9jLCBwZXh0b2Zmc2V0LCBs
YWFycltpXS5leHRMb2NhdGlvbiwKLQkJCQlsYWFycltpXS5leHRMZW5ndGgsICpwYmgpOwotCQl9
CisJCQl1ZGZfZGVsZXRlX2FleHQoaW5vZGUsICplcG9zLCBsYWFycltpXS5leHRMb2NhdGlvbiwK
KwkJCQlsYWFycltpXS5leHRMZW5ndGgpOwogCX0KIAllbHNlIGlmIChzdGFydG51bSA8IGVuZG51
bSkKIAl7CiAJCWZvciAoaT0wOyBpPChlbmRudW0tc3RhcnRudW0pOyBpKyspCiAJCXsKLQkJCXVk
Zl9pbnNlcnRfYWV4dChpbm9kZSwgcGJsb2MsIHBleHRvZmZzZXQsIGxhYXJyW2ldLmV4dExvY2F0
aW9uLAotCQkJCWxhYXJyW2ldLmV4dExlbmd0aCwgKnBiaCk7Ci0JCQl1ZGZfbmV4dF9hZXh0KGlu
b2RlLCAmcGJsb2MsICZwZXh0b2Zmc2V0LCAmbGFhcnJbaV0uZXh0TG9jYXRpb24sCi0JCQkJJmxh
YXJyW2ldLmV4dExlbmd0aCwgcGJoLCAxKTsKKwkJCXVkZl9pbnNlcnRfYWV4dChpbm9kZSwgKmVw
b3MsIGxhYXJyW2ldLmV4dExvY2F0aW9uLAorCQkJCWxhYXJyW2ldLmV4dExlbmd0aCk7CisJCQl1
ZGZfbmV4dF9hZXh0KGlub2RlLCBlcG9zLCAmbGFhcnJbaV0uZXh0TG9jYXRpb24sCisJCQkJJmxh
YXJyW2ldLmV4dExlbmd0aCwgMSk7CiAJCQlzdGFydCArKzsKIAkJfQogCX0KIAogCWZvciAoaT1z
dGFydDsgaTxlbmRudW07IGkrKykKIAl7Ci0JCXVkZl9uZXh0X2FleHQoaW5vZGUsICZwYmxvYywg
JnBleHRvZmZzZXQsICZ0bXBsb2MsICZ0bXBsZW4sIHBiaCwgMCk7Ci0JCXVkZl93cml0ZV9hZXh0
KGlub2RlLCBwYmxvYywgJnBleHRvZmZzZXQsIGxhYXJyW2ldLmV4dExvY2F0aW9uLAotCQkJbGFh
cnJbaV0uZXh0TGVuZ3RoLCAqcGJoLCAxKTsKKwkJdWRmX25leHRfYWV4dChpbm9kZSwgZXBvcywg
JnRtcGxvYywgJnRtcGxlbiwgMCk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBsYWFy
cltpXS5leHRMb2NhdGlvbiwKKwkJCWxhYXJyW2ldLmV4dExlbmd0aCwgMSk7CiAJfQogfQogCkBA
IC05MTYsOCArMTA1Myw2IEBACiAJICogICAgICBpX25saW5rID0gMQogCSAqICAgICAgaV9vcCA9
IE5VTEw7CiAJICovCi0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfU0laRTsKLQogCWJoID0gdWRm
X3JlYWRfcHRhZ2dlZChpbm9kZS0+aV9zYiwgVURGX0lfTE9DQVRJT04oaW5vZGUpLCAwLCAmaWRl
bnQpOwogCiAJaWYgKCFiaCkKQEAgLTkzMyw3ICsxMDY4LDcgQEAKIAl7CiAJCXByaW50ayhLRVJO
X0VSUiAidWRmOiB1ZGZfcmVhZF9pbm9kZShpbm8gJWxkKSBmYWlsZWQgaWRlbnQ9JWRcbiIsCiAJ
CQlpbm9kZS0+aV9pbm8sIGlkZW50KTsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxz
ZShiaCk7CiAJCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTk2Miwz
NSArMTA5NywzNiBAQAogCQkJCQkJaWRlbnQgPT0gVEFHX0lERU5UX0VGRSkKIAkJCQkJewogCQkJ
CQkJbWVtY3B5KCZVREZfSV9MT0NBVElPTihpbm9kZSksICZsb2MsIHNpemVvZihrZXJuZWxfbGJf
YWRkcikpOwotCQkJCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9k
YXRhKGliaCk7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKG5iaCk7CisJCQkJCQlicmVsc2UoYmgp
OworCQkJCQkJYnJlbHNlKGliaCk7CisJCQkJCQlicmVsc2UobmJoKTsKIAkJCQkJCV9fdWRmX3Jl
YWRfaW5vZGUoaW5vZGUpOwogCQkJCQkJcmV0dXJuOwogCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJ
ewotCQkJCQkJdWRmX3JlbGVhc2VfZGF0YShuYmgpOwotCQkJCQkJdWRmX3JlbGVhc2VfZGF0YShp
YmgpOworCQkJCQkJYnJlbHNlKG5iaCk7CisJCQkJCQlicmVsc2UoaWJoKTsKIAkJCQkJfQogCQkJ
CX0KIAkJCQllbHNlCi0JCQkJCXVkZl9yZWxlYXNlX2RhdGEoaWJoKTsKKwkJCQkJYnJlbHNlKGli
aCk7CiAJCQl9CiAJCX0KIAkJZWxzZQotCQkJdWRmX3JlbGVhc2VfZGF0YShpYmgpOworCQkJYnJl
bHNlKGliaCk7CiAJfQogCWVsc2UgaWYgKGxlMTZfdG9fY3B1KGZlLT5pY2JUYWcuc3RyYXRlZ3lU
eXBlKSAhPSA0KQogCXsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1ZGY6IHVuc3VwcG9ydGVkIHN0cmF0
ZWd5IHR5cGU6ICVkXG4iLAogCQkJbGUxNl90b19jcHUoZmUtPmljYlRhZy5zdHJhdGVneVR5cGUp
KTsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShiaCk7CiAJCW1ha2VfYmFkX2lu
b2RlKGlub2RlKTsKIAkJcmV0dXJuOwogCX0KIAl1ZGZfZmlsbF9pbm9kZShpbm9kZSwgYmgpOwot
CXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCisJYnJlbHNlKGJoKTsKIH0KIAogc3RhdGljIHZvaWQg
dWRmX2ZpbGxfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpi
aCkKQEAgLTEzMzMsNyArMTQ2OSw3IEBACiAJCQkJdXNlLT5kZXNjVGFnLnRhZ0NoZWNrc3VtICs9
ICgodWludDhfdCAqKSYodXNlLT5kZXNjVGFnKSlbaV07CiAKIAkJbWFya19idWZmZXJfZGlydHko
YmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIGVy
cjsKIAl9CiAKQEAgLTE1MjIsNyArMTY1OCw3IEBACiAJCQllcnIgPSAtRUlPOwogCQl9CiAJfQot
CXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShiaCk7CiAJcmV0dXJuIGVycjsKIH0KIApA
QCAtMTU1OCw4ICsxNjk0LDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50OF90IHVkZl9hZGRf
YWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrZXJuZWxfbGJfYWRkciAqYmxvYywgaW50ICpleHRv
ZmZzZXQsCi0Ja2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbiwgc3RydWN0IGJ1ZmZl
cl9oZWFkICoqYmgsIGludCBpbmMpCitpbnQ4X3QgdWRmX2FkZF9hZXh0KHN0cnVjdCBpbm9kZSAq
aW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCisJa2VybmVsX2xiX2FkZHIgZWxv
YywgdWludDMyX3QgZWxlbiwgaW50IGluYykKIHsKIAlpbnQgYWRzaXplOwogCXNob3J0X2FkICpz
YWQgPSBOVUxMOwpAQCAtMTU2OCwxMCArMTcwNCwxMCBAQAogCWludDhfdCBldHlwZTsKIAl1aW50
OF90ICpwdHI7CiAKLQlpZiAoISpiaCkKLQkJcHRyID0gVURGX0lfREFUQShpbm9kZSkgKyAqZXh0
b2Zmc2V0IC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSArIFVERl9JX0xFTkVB
VFRSKGlub2RlKTsKKwlpZiAoIWVwb3MtPmJoKQorCQlwdHIgPSBVREZfSV9EQVRBKGlub2RlKSAr
IGVwb3MtPm9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkgKyBVREZf
SV9MRU5FQVRUUihpbm9kZSk7CiAJZWxzZQotCQlwdHIgPSAoKmJoKS0+Yl9kYXRhICsgKmV4dG9m
ZnNldDsKKwkJcHRyID0gZXBvcy0+YmgtPmJfZGF0YSArIGVwb3MtPm9mZnNldDsKIAogCWlmIChV
REZfSV9BTExPQ1RZUEUoaW5vZGUpID09IElDQlRBR19GTEFHX0FEX1NIT1JUKQogCQlhZHNpemUg
PSBzaXplb2Yoc2hvcnRfYWQpOwpAQCAtMTU4MCwyMCArMTcxNiwyMCBAQAogCWVsc2UKIAkJcmV0
dXJuIC0xOwogCi0JaWYgKCpleHRvZmZzZXQgKyAoMiAqIGFkc2l6ZSkgPiBpbm9kZS0+aV9zYi0+
c19ibG9ja3NpemUpCisJaWYgKGVwb3MtPm9mZnNldCArICgyICogYWRzaXplKSA+IGlub2RlLT5p
X3NiLT5zX2Jsb2Nrc2l6ZSkKIAl7CiAJCWNoYXIgKnNwdHIsICpkcHRyOwogCQlzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKm5iaDsKIAkJaW50IGVyciwgbG9mZnNldDsKLQkJa2VybmVsX2xiX2FkZHIgb2Js
b2MgPSAqYmxvYzsKKwkJa2VybmVsX2xiX2FkZHIgb2Jsb2MgPSBlcG9zLT5ibG9jazsKIAotCQlp
ZiAoIShibG9jLT5sb2dpY2FsQmxvY2tOdW0gPSB1ZGZfbmV3X2Jsb2NrKGlub2RlLT5pX3NiLCBO
VUxMLAorCQlpZiAoIShlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0gPSB1ZGZfbmV3X2Jsb2Nr
KGlub2RlLT5pX3NiLCBOVUxMLAogCQkJb2Jsb2MucGFydGl0aW9uUmVmZXJlbmNlTnVtLCBvYmxv
Yy5sb2dpY2FsQmxvY2tOdW0sICZlcnIpKSkKIAkJewogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlm
ICghKG5iaCA9IHVkZl90Z2V0YmxrKGlub2RlLT5pX3NiLCB1ZGZfZ2V0X2xiX3BibG9jayhpbm9k
ZS0+aV9zYiwKLQkJCSpibG9jLCAwKSkpKQorCQkJZXBvcy0+YmxvY2ssIDApKSkpCiAJCXsKIAkJ
CXJldHVybiAtMTsKIAkJfQpAQCAtMTYwNiwyNSArMTc0MiwyNSBAQAogCQlhZWQgPSAoc3RydWN0
IGFsbG9jRXh0RGVzYyAqKShuYmgtPmJfZGF0YSk7CiAJCWlmICghVURGX1FVRVJZX0ZMQUcoaW5v
ZGUtPmlfc2IsIFVERl9GTEFHX1NUUklDVCkpCiAJCQlhZWQtPnByZXZpb3VzQWxsb2NFeHRMb2Nh
dGlvbiA9IGNwdV90b19sZTMyKG9ibG9jLmxvZ2ljYWxCbG9ja051bSk7Ci0JCWlmICgqZXh0b2Zm
c2V0ICsgYWRzaXplID4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKQorCQlpZiAoZXBvcy0+b2Zm
c2V0ICsgYWRzaXplID4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKQogCQl7Ci0JCQlsb2Zmc2V0
ID0gKmV4dG9mZnNldDsKKwkJCWxvZmZzZXQgPSBlcG9zLT5vZmZzZXQ7CiAJCQlhZWQtPmxlbmd0
aEFsbG9jRGVzY3MgPSBjcHVfdG9fbGUzMihhZHNpemUpOwogCQkJc3B0ciA9IHB0ciAtIGFkc2l6
ZTsKIAkJCWRwdHIgPSBuYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsK
IAkJCW1lbWNweShkcHRyLCBzcHRyLCBhZHNpemUpOwotCQkJKmV4dG9mZnNldCA9IHNpemVvZihz
dHJ1Y3QgYWxsb2NFeHREZXNjKSArIGFkc2l6ZTsKKwkJCWVwb3MtPm9mZnNldCA9IHNpemVvZihz
dHJ1Y3QgYWxsb2NFeHREZXNjKSArIGFkc2l6ZTsKIAkJfQogCQllbHNlCiAJCXsKLQkJCWxvZmZz
ZXQgPSAqZXh0b2Zmc2V0ICsgYWRzaXplOworCQkJbG9mZnNldCA9IGVwb3MtPm9mZnNldCArIGFk
c2l6ZTsKIAkJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9IGNwdV90b19sZTMyKDApOwogCQkJc3B0
ciA9IHB0cjsKLQkJCSpleHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CisJ
CQllcG9zLT5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CiAKLQkJCWlmICgq
YmgpCisJCQlpZiAoZXBvcy0+YmgpCiAJCQl7Ci0JCQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERl
c2MgKikoKmJoKS0+Yl9kYXRhOworCQkJCWFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopZXBv
cy0+YmgtPmJfZGF0YTsKIAkJCQlhZWQtPmxlbmd0aEFsbG9jRGVzY3MgPQogCQkJCQljcHVfdG9f
bGUzMihsZTMyX3RvX2NwdShhZWQtPmxlbmd0aEFsbG9jRGVzY3MpICsgYWRzaXplKTsKIAkJCX0K
QEAgLTE2MzYsMTAgKzE3NzIsMTAgQEAKIAkJfQogCQlpZiAoVURGX1NCX1VERlJFVihpbm9kZS0+
aV9zYikgPj0gMHgwMjAwKQogCQkJdWRmX25ld190YWcobmJoLT5iX2RhdGEsIFRBR19JREVOVF9B
RUQsIDMsIDEsCi0JCQkJYmxvYy0+bG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CisJCQkJ
ZXBvcy0+YmxvY2subG9naWNhbEJsb2NrTnVtLCBzaXplb2YodGFnKSk7CiAJCWVsc2UKIAkJCXVk
Zl9uZXdfdGFnKG5iaC0+Yl9kYXRhLCBUQUdfSURFTlRfQUVELCAyLCAxLAotCQkJCWJsb2MtPmxv
Z2ljYWxCbG9ja051bSwgc2l6ZW9mKHRhZykpOworCQkJCWVwb3MtPmJsb2NrLmxvZ2ljYWxCbG9j
a051bSwgc2l6ZW9mKHRhZykpOwogCQlzd2l0Y2ggKFVERl9JX0FMTE9DVFlQRShpbm9kZSkpCiAJ
CXsKIAkJCWNhc2UgSUNCVEFHX0ZMQUdfQURfU0hPUlQ6CkBAIC0xNjQ4LDcgKzE3ODQsNyBAQAog
CQkJCXNhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoCiAJCQkJCUVYVF9ORVhUX0VYVEVOVF9B
TExPQ0RFQ1MgfAogCQkJCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwotCQkJCXNhZC0+ZXh0
UG9zaXRpb24gPSBjcHVfdG9fbGUzMihibG9jLT5sb2dpY2FsQmxvY2tOdW0pOworCQkJCXNhZC0+
ZXh0UG9zaXRpb24gPSBjcHVfdG9fbGUzMihlcG9zLT5ibG9jay5sb2dpY2FsQmxvY2tOdW0pOwog
CQkJCWJyZWFrOwogCQkJfQogCQkJY2FzZSBJQ0JUQUdfRkxBR19BRF9MT05HOgpAQCAtMTY1Nyw2
MCArMTc5Myw1NyBAQAogCQkJCWxhZC0+ZXh0TGVuZ3RoID0gY3B1X3RvX2xlMzIoCiAJCQkJCUVY
VF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgfAogCQkJCQlpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUp
OwotCQkJCWxhZC0+ZXh0TG9jYXRpb24gPSBjcHVfdG9fbGVsYigqYmxvYyk7CisJCQkJbGFkLT5l
eHRMb2NhdGlvbiA9IGNwdV90b19sZWxiKGVwb3MtPmJsb2NrKTsKIAkJCQltZW1zZXQobGFkLT5p
bXBVc2UsIDB4MDAsIHNpemVvZihsYWQtPmltcFVzZSkpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9
Ci0JCWlmICgqYmgpCisJCWlmIChlcG9zLT5iaCkKIAkJewogCQkJaWYgKCFVREZfUVVFUllfRkxB
Ryhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKGlub2RlLT5p
X3NiKSA+PSAweDAyMDEpCi0JCQkJdWRmX3VwZGF0ZV90YWcoKCpiaCktPmJfZGF0YSwgbG9mZnNl
dCk7CisJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy0+YmgtPmJfZGF0YSwgbG9mZnNldCk7CiAJCQll
bHNlCi0JCQkJdWRmX3VwZGF0ZV90YWcoKCpiaCktPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxv
Y0V4dERlc2MpKTsKLQkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCpiaCwgaW5vZGUpOwotCQkJ
dWRmX3JlbGVhc2VfZGF0YSgqYmgpOworCQkJCXVkZl91cGRhdGVfdGFnKGVwb3MtPmJoLT5iX2Rh
dGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eV9p
bm9kZShlcG9zLT5iaCwgaW5vZGUpOworCQkJYnJlbHNlKGVwb3MtPmJoKTsKIAkJfQogCQllbHNl
CiAJCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJKmJoID0gbmJoOworCQllcG9zLT5iaCA9
IG5iaDsKIAl9CiAKLQlldHlwZSA9IHVkZl93cml0ZV9hZXh0KGlub2RlLCAqYmxvYywgZXh0b2Zm
c2V0LCBlbG9jLCBlbGVuLCAqYmgsIGluYyk7CisJZXR5cGUgPSB1ZGZfd3JpdGVfYWV4dChpbm9k
ZSwgZXBvcywgZWxvYywgZWxlbiwgaW5jKTsKIAotCWlmICghKmJoKQorCWlmICghZXBvcy0+Ymgp
CiAJewogCQlVREZfSV9MRU5BTExPQyhpbm9kZSkgKz0gYWRzaXplOwogCQltYXJrX2lub2RlX2Rp
cnR5KGlub2RlKTsKIAl9CiAJZWxzZQogCXsKLQkJYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2Mg
KikoKmJoKS0+Yl9kYXRhOworCQlhZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAqKWVwb3MtPmJo
LT5iX2RhdGE7CiAJCWFlZC0+bGVuZ3RoQWxsb2NEZXNjcyA9CiAJCQljcHVfdG9fbGUzMihsZTMy
X3RvX2NwdShhZWQtPmxlbmd0aEFsbG9jRGVzY3MpICsgYWRzaXplKTsKIAkJaWYgKCFVREZfUVVF
UllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKGlu
b2RlLT5pX3NiKSA+PSAweDAyMDEpCi0JCQl1ZGZfdXBkYXRlX3RhZygoKmJoKS0+Yl9kYXRhLCAq
ZXh0b2Zmc2V0ICsgKGluYyA/IDAgOiBhZHNpemUpKTsKKwkJCXVkZl91cGRhdGVfdGFnKGVwb3Mt
PmJoLT5iX2RhdGEsIGVwb3MtPm9mZnNldCArIChpbmMgPyAwIDogYWRzaXplKSk7CiAJCWVsc2UK
LQkJCXVkZl91cGRhdGVfdGFnKCgqYmgpLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHRE
ZXNjKSk7Ci0JCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKCpiaCwgaW5vZGUpOworCQkJdWRmX3Vw
ZGF0ZV90YWcoZXBvcy0+YmgtPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsK
KwkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoZXBvcy0+YmgsIGlub2RlKTsKIAl9CiAKIAlyZXR1
cm4gZXR5cGU7CiB9CiAKLWludDhfdCB1ZGZfd3JpdGVfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2Rl
LCBrZXJuZWxfbGJfYWRkciBibG9jLCBpbnQgKmV4dG9mZnNldCwKLSAgICBrZXJuZWxfbGJfYWRk
ciBlbG9jLCB1aW50MzJfdCBlbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgaW5jKQor
aW50OF90IHVkZl93cml0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRf
cG9zaXRpb24gKmVwb3MsCisgICAga2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbiwg
aW50IGluYykKIHsKIAlpbnQgYWRzaXplOwogCXVpbnQ4X3QgKnB0cjsKIAotCWlmICghYmgpCi0J
CXB0ciA9IFVERl9JX0RBVEEoaW5vZGUpICsgKmV4dG9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2Fs
bG9jX29mZnNldChpbm9kZSkgKyBVREZfSV9MRU5FQVRUUihpbm9kZSk7CisJaWYgKCFlcG9zLT5i
aCkKKwkJcHRyID0gVURGX0lfREFUQShpbm9kZSkgKyBlcG9zLT5vZmZzZXQgLSB1ZGZfZmlsZV9l
bnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpICsgVURGX0lfTEVORUFUVFIoaW5vZGUpOwogCWVsc2UK
LQl7Ci0JCXB0ciA9IGJoLT5iX2RhdGEgKyAqZXh0b2Zmc2V0OwotCQlhdG9taWNfaW5jKCZiaC0+
Yl9jb3VudCk7Ci0JfQorCQlwdHIgPSBlcG9zLT5iaC0+Yl9kYXRhICsgZXBvcy0+b2Zmc2V0Owog
CiAJc3dpdGNoIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpKQogCXsKQEAgLTE3MzUsNDAgKzE4Njgs
MzkgQEAKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoYmgpCisJaWYgKGVwb3MtPmJoKQogCXsK
IAkJaWYgKCFVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBV
REZfU0JfVURGUkVWKGlub2RlLT5pX3NiKSA+PSAweDAyMDEpCiAJCXsKLQkJCXN0cnVjdCBhbGxv
Y0V4dERlc2MgKmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGJoKS0+Yl9kYXRhOwotCQkJ
dWRmX3VwZGF0ZV90YWcoKGJoKS0+Yl9kYXRhLAorCQkJc3RydWN0IGFsbG9jRXh0RGVzYyAqYWVk
ID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKillcG9zLT5iaC0+Yl9kYXRhOworCQkJdWRmX3VwZGF0
ZV90YWcoZXBvcy0+YmgtPmJfZGF0YSwKIAkJCQlsZTMyX3RvX2NwdShhZWQtPmxlbmd0aEFsbG9j
RGVzY3MpICsgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKIAkJfQotCQltYXJrX2J1ZmZl
cl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJbWFy
a19idWZmZXJfZGlydHlfaW5vZGUoZXBvcy0+YmgsIGlub2RlKTsKIAl9CiAJZWxzZQogCQltYXJr
X2lub2RlX2RpcnR5KGlub2RlKTsKIAogCWlmIChpbmMpCi0JCSpleHRvZmZzZXQgKz0gYWRzaXpl
OworCQllcG9zLT5vZmZzZXQgKz0gYWRzaXplOwogCXJldHVybiAoZWxlbiA+PiAzMCk7CiB9CiAK
LWludDhfdCB1ZGZfbmV4dF9hZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtlcm5lbF9sYl9hZGRy
ICpibG9jLCBpbnQgKmV4dG9mZnNldCwKLQlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3Qg
KmVsZW4sIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLCBpbnQgaW5jKQoraW50OF90IHVkZl9uZXh0
X2FleHQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywK
KwlrZXJuZWxfbGJfYWRkciAqZWxvYywgdWludDMyX3QgKmVsZW4sIGludCBpbmMpCiB7CiAJaW50
OF90IGV0eXBlOwogCi0Jd2hpbGUgKChldHlwZSA9IHVkZl9jdXJyZW50X2FleHQoaW5vZGUsIGJs
b2MsIGV4dG9mZnNldCwgZWxvYywgZWxlbiwgYmgsIGluYykpID09CisJd2hpbGUgKChldHlwZSA9
IHVkZl9jdXJyZW50X2FleHQoaW5vZGUsIGVwb3MsIGVsb2MsIGVsZW4sIGluYykpID09CiAJCShF
WFRfTkVYVF9FWFRFTlRfQUxMT0NERUNTID4+IDMwKSkKIAl7Ci0JCSpibG9jID0gKmVsb2M7Ci0J
CSpleHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7Ci0JCXVkZl9yZWxlYXNl
X2RhdGEoKmJoKTsKLQkJaWYgKCEoKmJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCB1ZGZfZ2V0
X2xiX3BibG9jayhpbm9kZS0+aV9zYiwgKmJsb2MsIDApKSkpCisJCWVwb3MtPmJsb2NrID0gKmVs
b2M7CisJCWVwb3MtPm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKKwkJYnJl
bHNlKGVwb3MtPmJoKTsKKwkJaWYgKCEoZXBvcy0+YmggPSB1ZGZfdHJlYWQoaW5vZGUtPmlfc2Is
IHVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCBlcG9zLT5ibG9jaywgMCkpKSkKIAkJewog
CQkJdWRmX2RlYnVnKCJyZWFkaW5nIGJsb2NrICVkIGZhaWxlZCFcbiIsCi0JCQkJdWRmX2dldF9s
Yl9wYmxvY2soaW5vZGUtPmlfc2IsICpibG9jLCAwKSk7CisJCQkJdWRmX2dldF9sYl9wYmxvY2so
aW5vZGUtPmlfc2IsIGVwb3MtPmJsb2NrLCAwKSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBA
IC0xNzc2LDI2ICsxOTA4LDI2IEBACiAJcmV0dXJuIGV0eXBlOwogfQogCi1pbnQ4X3QgdWRmX2N1
cnJlbnRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrZXJuZWxfbGJfYWRkciAqYmxvYywgaW50
ICpleHRvZmZzZXQsCi0Ja2VybmVsX2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBzdHJ1
Y3QgYnVmZmVyX2hlYWQgKipiaCwgaW50IGluYykKK2ludDhfdCB1ZGZfY3VycmVudF9hZXh0KHN0
cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gKmVwb3MsCisJa2VybmVs
X2xiX2FkZHIgKmVsb2MsIHVpbnQzMl90ICplbGVuLCBpbnQgaW5jKQogewogCWludCBhbGVuOwog
CWludDhfdCBldHlwZTsKIAl1aW50OF90ICpwdHI7CiAKLQlpZiAoISpiaCkKKwlpZiAoIWVwb3Mt
PmJoKQogCXsKLQkJaWYgKCEoKmV4dG9mZnNldCkpCi0JCQkqZXh0b2Zmc2V0ID0gdWRmX2ZpbGVf
ZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQkJcHRyID0gVURGX0lfREFUQShpbm9kZSkgKyAq
ZXh0b2Zmc2V0IC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSArIFVERl9JX0xF
TkVBVFRSKGlub2RlKTsKKwkJaWYgKCFlcG9zLT5vZmZzZXQpCisJCQllcG9zLT5vZmZzZXQgPSB1
ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOworCQlwdHIgPSBVREZfSV9EQVRBKGlu
b2RlKSArIGVwb3MtPm9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkg
KyBVREZfSV9MRU5FQVRUUihpbm9kZSk7CiAJCWFsZW4gPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19v
ZmZzZXQoaW5vZGUpICsgVURGX0lfTEVOQUxMT0MoaW5vZGUpOwogCX0KIAllbHNlCiAJewotCQlp
ZiAoISgqZXh0b2Zmc2V0KSkKLQkJCSpleHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0
RGVzYyk7Ci0JCXB0ciA9ICgqYmgpLT5iX2RhdGEgKyAqZXh0b2Zmc2V0OwotCQlhbGVuID0gc2l6
ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpICsgbGUzMl90b19jcHUoKChzdHJ1Y3QgYWxsb2NFeHRE
ZXNjICopKCpiaCktPmJfZGF0YSktPmxlbmd0aEFsbG9jRGVzY3MpOworCQlpZiAoIWVwb3MtPm9m
ZnNldCkKKwkJCWVwb3MtPm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKKwkJ
cHRyID0gZXBvcy0+YmgtPmJfZGF0YSArIGVwb3MtPm9mZnNldDsKKwkJYWxlbiA9IHNpemVvZihz
dHJ1Y3QgYWxsb2NFeHREZXNjKSArIGxlMzJfdG9fY3B1KCgoc3RydWN0IGFsbG9jRXh0RGVzYyAq
KWVwb3MtPmJoLT5iX2RhdGEpLT5sZW5ndGhBbGxvY0Rlc2NzKTsKIAl9CiAKIAlzd2l0Y2ggKFVE
Rl9JX0FMTE9DVFlQRShpbm9kZSkpCkBAIC0xODA0LDcgKzE5MzYsNyBAQAogCQl7CiAJCQlzaG9y
dF9hZCAqc2FkOwogCi0JCQlpZiAoIShzYWQgPSB1ZGZfZ2V0X2ZpbGVzaG9ydGFkKHB0ciwgYWxl
biwgZXh0b2Zmc2V0LCBpbmMpKSkKKwkJCWlmICghKHNhZCA9IHVkZl9nZXRfZmlsZXNob3J0YWQo
cHRyLCBhbGVuLCAmZXBvcy0+b2Zmc2V0LCBpbmMpKSkKIAkJCQlyZXR1cm4gLTE7CiAKIAkJCWV0
eXBlID0gbGUzMl90b19jcHUoc2FkLT5leHRMZW5ndGgpID4+IDMwOwpAQCAtMTgxNyw3ICsxOTQ5
LDcgQEAKIAkJewogCQkJbG9uZ19hZCAqbGFkOwogCi0JCQlpZiAoIShsYWQgPSB1ZGZfZ2V0X2Zp
bGVsb25nYWQocHRyLCBhbGVuLCBleHRvZmZzZXQsIGluYykpKQorCQkJaWYgKCEobGFkID0gdWRm
X2dldF9maWxlbG9uZ2FkKHB0ciwgYWxlbiwgJmVwb3MtPm9mZnNldCwgaW5jKSkpCiAJCQkJcmV0
dXJuIC0xOwogCiAJCQlldHlwZSA9IGxlMzJfdG9fY3B1KGxhZC0+ZXh0TGVuZ3RoKSA+PiAzMDsK
QEAgLTE4MzYsNDEgKzE5NjgsNDAgQEAKIH0KIAogc3RhdGljIGludDhfdAotdWRmX2luc2VydF9h
ZXh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtlcm5lbF9sYl9hZGRyIGJsb2MsIGludCBleHRvZmZz
ZXQsCi0JCWtlcm5lbF9sYl9hZGRyIG5lbG9jLCB1aW50MzJfdCBuZWxlbiwgc3RydWN0IGJ1ZmZl
cl9oZWFkICpiaCkKK3VkZl9pbnNlcnRfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qg
ZXh0ZW50X3Bvc2l0aW9uIGVwb3MsCisJCWtlcm5lbF9sYl9hZGRyIG5lbG9jLCB1aW50MzJfdCBu
ZWxlbikKIHsKIAlrZXJuZWxfbGJfYWRkciBvZWxvYzsKIAl1aW50MzJfdCBvZWxlbjsKIAlpbnQ4
X3QgZXR5cGU7CiAKLQlpZiAoYmgpCi0JCWF0b21pY19pbmMoJmJoLT5iX2NvdW50KTsKKwlpZiAo
ZXBvcy5iaCkKKwkJZ2V0X2JoKGVwb3MuYmgpOwogCi0Jd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0
X2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCAmb2Vsb2MsICZvZWxlbiwgJmJoLCAwKSkg
IT0gLTEpCisJd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmb2Vs
b2MsICZvZWxlbiwgMCkpICE9IC0xKQogCXsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGJsb2Ms
ICZleHRvZmZzZXQsIG5lbG9jLCBuZWxlbiwgYmgsIDEpOworCQl1ZGZfd3JpdGVfYWV4dChpbm9k
ZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMSk7CiAKIAkJbmVsb2MgPSBvZWxvYzsKIAkJbmVsZW4g
PSAoZXR5cGUgPDwgMzApIHwgb2VsZW47CiAJfQotCXVkZl9hZGRfYWV4dChpbm9kZSwgJmJsb2Ms
ICZleHRvZmZzZXQsIG5lbG9jLCBuZWxlbiwgJmJoLCAxKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGJo
KTsKKwl1ZGZfYWRkX2FleHQoaW5vZGUsICZlcG9zLCBuZWxvYywgbmVsZW4sIDEpOworCWJyZWxz
ZShlcG9zLmJoKTsKIAlyZXR1cm4gKG5lbGVuID4+IDMwKTsKIH0KIAotaW50OF90IHVkZl9kZWxl
dGVfYWV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrZXJuZWxfbGJfYWRkciBuYmxvYywgaW50IG5l
eHRvZmZzZXQsCi0Ja2VybmVsX2xiX2FkZHIgZWxvYywgdWludDMyX3QgZWxlbiwgc3RydWN0IGJ1
ZmZlcl9oZWFkICpuYmgpCitpbnQ4X3QgdWRmX2RlbGV0ZV9hZXh0KHN0cnVjdCBpbm9kZSAqaW5v
ZGUsIHN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcywKKwlrZXJuZWxfbGJfYWRkciBlbG9jLCB1
aW50MzJfdCBlbGVuKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqb2JoOwotCWtlcm5lbF9sYl9h
ZGRyIG9ibG9jOwotCWludCBvZXh0b2Zmc2V0LCBhZHNpemU7CisJc3RydWN0IGV4dGVudF9wb3Np
dGlvbiBvZXBvczsKKwlpbnQgYWRzaXplOwogCWludDhfdCBldHlwZTsKIAlzdHJ1Y3QgYWxsb2NF
eHREZXNjICphZWQ7CiAKLQlpZiAobmJoKQorCWlmIChlcG9zLmJoKQogCXsKLQkJYXRvbWljX2lu
YygmbmJoLT5iX2NvdW50KTsKLQkJYXRvbWljX2luYygmbmJoLT5iX2NvdW50KTsKKwkJZ2V0X2Jo
KGVwb3MuYmgpOworCQlnZXRfYmgoZXBvcy5iaCk7CiAJfQogCiAJaWYgKFVERl9JX0FMTE9DVFlQ
RShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCkBAIC0xODgwLDgwICsyMDExLDc3IEBA
CiAJZWxzZQogCQlhZHNpemUgPSAwOwogCi0Jb2JoID0gbmJoOwotCW9ibG9jID0gbmJsb2M7Ci0J
b2V4dG9mZnNldCA9IG5leHRvZmZzZXQ7Ci0KLQlpZiAodWRmX25leHRfYWV4dChpbm9kZSwgJm5i
bG9jLCAmbmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmbmJoLCAxKSA9PSAtMSkKKwlvZXBvcyA9
IGVwb3M7CisJaWYgKHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEp
ID09IC0xKQogCQlyZXR1cm4gLTE7CiAKLQl3aGlsZSAoKGV0eXBlID0gdWRmX25leHRfYWV4dChp
bm9kZSwgJm5ibG9jLCAmbmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmbmJoLCAxKSkgIT0gLTEp
CisJd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVs
ZW4sIDEpKSAhPSAtMSkKIAl7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCBvYmxvYywgJm9leHRv
ZmZzZXQsIGVsb2MsIChldHlwZSA8PCAzMCkgfCBlbGVuLCBvYmgsIDEpOwotCQlpZiAob2JoICE9
IG5iaCkKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgZWxvYywgKGV0eXBlIDw8IDMw
KSB8IGVsZW4sIDEpOworCQlpZiAob2Vwb3MuYmggIT0gZXBvcy5iaCkKIAkJewotCQkJb2Jsb2Mg
PSBuYmxvYzsKLQkJCXVkZl9yZWxlYXNlX2RhdGEob2JoKTsKLQkJCWF0b21pY19pbmMoJm5iaC0+
Yl9jb3VudCk7Ci0JCQlvYmggPSBuYmg7Ci0JCQlvZXh0b2Zmc2V0ID0gbmV4dG9mZnNldCAtIGFk
c2l6ZTsKKwkJCW9lcG9zLmJsb2NrID0gZXBvcy5ibG9jazsKKwkJCWJyZWxzZShvZXBvcy5iaCk7
CisJCQlnZXRfYmgoZXBvcy5iaCk7CisJCQlvZXBvcy5iaCA9IGVwb3MuYmg7CisJCQlvZXBvcy5v
ZmZzZXQgPSBlcG9zLm9mZnNldCAtIGFkc2l6ZTsKIAkJfQogCX0KIAltZW1zZXQoJmVsb2MsIDB4
MDAsIHNpemVvZihrZXJuZWxfbGJfYWRkcikpOwogCWVsZW4gPSAwOwogCi0JaWYgKG5iaCAhPSBv
YmgpCisJaWYgKGVwb3MuYmggIT0gb2Vwb3MuYmgpCiAJewotCQl1ZGZfZnJlZV9ibG9ja3MoaW5v
ZGUtPmlfc2IsIGlub2RlLCBuYmxvYywgMCwgMSk7Ci0JCXVkZl93cml0ZV9hZXh0KGlub2RlLCBv
YmxvYywgJm9leHRvZmZzZXQsIGVsb2MsIGVsZW4sIG9iaCwgMSk7Ci0JCXVkZl93cml0ZV9hZXh0
KGlub2RlLCBvYmxvYywgJm9leHRvZmZzZXQsIGVsb2MsIGVsZW4sIG9iaCwgMSk7Ci0JCWlmICgh
b2JoKQorCQl1ZGZfZnJlZV9ibG9ja3MoaW5vZGUtPmlfc2IsIGlub2RlLCBlcG9zLmJsb2NrLCAw
LCAxKTsKKwkJdWRmX3dyaXRlX2FleHQoaW5vZGUsICZvZXBvcywgZWxvYywgZWxlbiwgMSk7CisJ
CXVkZl93cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsIGVsb2MsIGVsZW4sIDEpOworCQlpZiAoIW9l
cG9zLmJoKQogCQl7CiAJCQlVREZfSV9MRU5BTExPQyhpbm9kZSkgLT0gKGFkc2l6ZSAqIDIpOwog
CQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlhZWQgPSAo
c3RydWN0IGFsbG9jRXh0RGVzYyAqKShvYmgpLT5iX2RhdGE7CisJCQlhZWQgPSAoc3RydWN0IGFs
bG9jRXh0RGVzYyAqKW9lcG9zLmJoLT5iX2RhdGE7CiAJCQlhZWQtPmxlbmd0aEFsbG9jRGVzY3Mg
PQogCQkJCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGFlZC0+bGVuZ3RoQWxsb2NEZXNjcykgLSAo
MiphZHNpemUpKTsKIAkJCWlmICghVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFH
X1NUUklDVCkgfHwgVURGX1NCX1VERlJFVihpbm9kZS0+aV9zYikgPj0gMHgwMjAxKQotCQkJCXVk
Zl91cGRhdGVfdGFnKChvYmgpLT5iX2RhdGEsIG9leHRvZmZzZXQgLSAoMiphZHNpemUpKTsKKwkJ
CQl1ZGZfdXBkYXRlX3RhZyhvZXBvcy5iaC0+Yl9kYXRhLCBvZXBvcy5vZmZzZXQgLSAoMiphZHNp
emUpKTsKIAkJCWVsc2UKLQkJCQl1ZGZfdXBkYXRlX3RhZygob2JoKS0+Yl9kYXRhLCBzaXplb2Yo
c3RydWN0IGFsbG9jRXh0RGVzYykpOwotCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUob2JoLCBp
bm9kZSk7CisJCQkJdWRmX3VwZGF0ZV90YWcob2Vwb3MuYmgtPmJfZGF0YSwgc2l6ZW9mKHN0cnVj
dCBhbGxvY0V4dERlc2MpKTsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKG9lcG9zLmJoLCBp
bm9kZSk7CiAJCX0KIAl9CiAJZWxzZQogCXsKLQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIG9ibG9j
LCAmb2V4dG9mZnNldCwgZWxvYywgZWxlbiwgb2JoLCAxKTsKLQkJaWYgKCFvYmgpCisJCXVkZl93
cml0ZV9hZXh0KGlub2RlLCAmb2Vwb3MsIGVsb2MsIGVsZW4sIDEpOworCQlpZiAoIW9lcG9zLmJo
KQogCQl7CiAJCQlVREZfSV9MRU5BTExPQyhpbm9kZSkgLT0gYWRzaXplOwogCQkJbWFya19pbm9k
ZV9kaXJ0eShpbm9kZSk7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlhZWQgPSAoc3RydWN0IGFsbG9j
RXh0RGVzYyAqKShvYmgpLT5iX2RhdGE7CisJCQlhZWQgPSAoc3RydWN0IGFsbG9jRXh0RGVzYyAq
KW9lcG9zLmJoLT5iX2RhdGE7CiAJCQlhZWQtPmxlbmd0aEFsbG9jRGVzY3MgPQogCQkJCWNwdV90
b19sZTMyKGxlMzJfdG9fY3B1KGFlZC0+bGVuZ3RoQWxsb2NEZXNjcykgLSBhZHNpemUpOwogCQkJ
aWYgKCFVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZf
U0JfVURGUkVWKGlub2RlLT5pX3NiKSA+PSAweDAyMDEpCi0JCQkJdWRmX3VwZGF0ZV90YWcoKG9i
aCktPmJfZGF0YSwgb2V4dG9mZnNldCAtIGFkc2l6ZSk7CisJCQkJdWRmX3VwZGF0ZV90YWcob2Vw
b3MuYmgtPmJfZGF0YSwgZXBvcy5vZmZzZXQgLSBhZHNpemUpOwogCQkJZWxzZQotCQkJCXVkZl91
cGRhdGVfdGFnKChvYmgpLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7Ci0J
CQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShvYmgsIGlub2RlKTsKKwkJCQl1ZGZfdXBkYXRlX3Rh
ZyhvZXBvcy5iaC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOworCQkJbWFy
a19idWZmZXJfZGlydHlfaW5vZGUob2Vwb3MuYmgsIGlub2RlKTsKIAkJfQogCX0KIAkKLQl1ZGZf
cmVsZWFzZV9kYXRhKG5iaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShvYmgpOworCWJyZWxzZShlcG9z
LmJoKTsKKwlicmVsc2Uob2Vwb3MuYmgpOwogCXJldHVybiAoZWxlbiA+PiAzMCk7CiB9CiAKLWlu
dDhfdCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9jaywga2VybmVsX2xi
X2FkZHIgKmJsb2MsIHVpbnQzMl90ICpleHRvZmZzZXQsCi0Ja2VybmVsX2xiX2FkZHIgKmVsb2Ms
IHVpbnQzMl90ICplbGVuLCB1aW50MzJfdCAqb2Zmc2V0LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipi
aCkKK2ludDhfdCBpbm9kZV9ibWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2Nr
LCBzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICpwb3MsCisJa2VybmVsX2xiX2FkZHIgKmVsb2MsIHVp
bnQzMl90ICplbGVuLCBzZWN0b3JfdCAqb2Zmc2V0KQogewotCXVpbnQ2NF90IGxiY291bnQgPSAw
LCBiY291bnQgPSAodWludDY0X3QpYmxvY2sgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2Jp
dHM7CisJbG9mZl90IGxiY291bnQgPSAwLCBiY291bnQgPSAobG9mZl90KWJsb2NrIDw8IGlub2Rl
LT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCWludDhfdCBldHlwZTsKIAogCWlmIChibG9jayA8
IDApCkBAIC0xOTYyLDQyICsyMDkwLDQ0IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQkqZXh0b2Zm
c2V0ID0gMDsKKwlwb3MtPm9mZnNldCA9IDA7CisJcG9zLT5ibG9jayA9IFVERl9JX0xPQ0FUSU9O
KGlub2RlKTsKKwlwb3MtPmJoID0gTlVMTDsKIAkqZWxlbiA9IDA7Ci0JKmJsb2MgPSBVREZfSV9M
T0NBVElPTihpbm9kZSk7CiAKIAlkbwogCXsKLQkJaWYgKChldHlwZSA9IHVkZl9uZXh0X2FleHQo
aW5vZGUsIGJsb2MsIGV4dG9mZnNldCwgZWxvYywgZWxlbiwgYmgsIDEpKSA9PSAtMSkKKwkJaWYg
KChldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsIHBvcywgZWxvYywgZWxlbiwgMSkpID09IC0x
KQogCQl7Ci0JCQkqb2Zmc2V0ID0gYmNvdW50IC0gbGJjb3VudDsKKwkJCSpvZmZzZXQgPSAoYmNv
dW50IC0gbGJjb3VudCkgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJCQlVREZf
SV9MRU5FWFRFTlRTKGlub2RlKSA9IGxiY291bnQ7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJbGJj
b3VudCArPSAqZWxlbjsKIAl9IHdoaWxlIChsYmNvdW50IDw9IGJjb3VudCk7CiAKLQkqb2Zmc2V0
ID0gYmNvdW50ICsgKmVsZW4gLSBsYmNvdW50OworCSpvZmZzZXQgPSAoYmNvdW50ICsgKmVsZW4g
LSBsYmNvdW50KSA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAogCXJldHVybiBl
dHlwZTsKIH0KIAotbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcg
YmxvY2spCitsb25nIHVkZl9ibG9ja19tYXAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3Qg
YmxvY2spCiB7Ci0Ja2VybmVsX2xiX2FkZHIgZWxvYywgYmxvYzsKLQl1aW50MzJfdCBvZmZzZXQs
IGV4dG9mZnNldCwgZWxlbjsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlrZXJu
ZWxfbGJfYWRkciBlbG9jOworCXVpbnQzMl90IGVsZW47CisJc2VjdG9yX3Qgb2Zmc2V0OworCXN0
cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHsgTlVMTCwgMCwgeyAwLCAwfX07CiAJaW50IHJl
dDsKIAogCWxvY2tfa2VybmVsKCk7CiAKLQlpZiAoaW5vZGVfYm1hcChpbm9kZSwgYmxvY2ssICZi
bG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCkgPT0gKEVYVF9SRUNP
UkRFRF9BTExPQ0FURUQgPj4gMzApKQotCQlyZXQgPSB1ZGZfZ2V0X2xiX3BibG9jayhpbm9kZS0+
aV9zYiwgZWxvYywgb2Zmc2V0ID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlp
ZiAoaW5vZGVfYm1hcChpbm9kZSwgYmxvY2ssICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQp
ID09IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKKwkJcmV0ID0gdWRmX2dldF9sYl9w
YmxvY2soaW5vZGUtPmlfc2IsIGVsb2MsIG9mZnNldCk7CiAJZWxzZQogCQlyZXQgPSAwOwogCiAJ
dW5sb2NrX2tlcm5lbCgpOwotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJo
KTsKIAogCWlmIChVREZfUVVFUllfRkxBRyhpbm9kZS0+aV9zYiwgVURGX0ZMQUdfVkFSQ09OVikp
CiAJCXJldHVybiB1ZGZfZml4ZWRfdG9fdmFyaWFibGUocmV0KTsKZGlmZiAtdXJOIGtlcm5lbC1z
b3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL21pc2MuYyBrZXJuZWwtc291cmNlLTIuNi4xOC9mcy91
ZGYvbWlzYy5jCi0tLSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi9taXNjLmMJMjAw
Ni0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL21p
c2MuYwkyMDA3LTA4LTE0IDAzOjI2OjA4ICswMzAwCkBAIC0yNzQsMTIgKzI3NCw2IEBACiAJCWxv
Yy5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQsIGlkZW50KTsKIH0KIAotdm9pZCB1ZGZfcmVsZWFz
ZV9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCi17Ci0JaWYgKGJoKQotCQlicmVsc2UoYmgp
OwotfQotCiB2b2lkIHVkZl91cGRhdGVfdGFnKGNoYXIgKmRhdGEsIGludCBsZW5ndGgpCiB7CiAJ
dGFnICp0cHRyID0gKHRhZyAqKWRhdGE7CmRpZmYgLXVyTiBrZXJuZWwtc291cmNlLTIuNi4xOC5v
cmlnL2ZzL3VkZi9uYW1laS5jIGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi9uYW1laS5jCi0t
LSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi9uYW1laS5jCTIwMDYtMDktMjAgMDY6
NDI6MDYgKzAzMDAKKysrIGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi9uYW1laS5jCTIwMDct
MDgtMTQgMDM6MjY6MDggKzAzMDAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9x
dW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgv
YnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiBzdGF0aWMgaW5saW5l
IGludCB1ZGZfbWF0Y2goaW50IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMiwgY29u
c3QgY2hhciAqbmFtZTIpCiB7CkBAIC0xNTUsOSArMTU2LDEwIEBACiAJdWludDhfdCBsZmk7CiAJ
dWludDE2X3QgbGl1OwogCWxvZmZfdCBzaXplOwotCWtlcm5lbF9sYl9hZGRyIGJsb2MsIGVsb2M7
Ci0JdWludDMyX3QgZXh0b2Zmc2V0LCBlbGVuLCBvZmZzZXQ7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFk
ICpiaCA9IE5VTEw7CisJa2VybmVsX2xiX2FkZHIgZWxvYzsKKwl1aW50MzJfdCBlbGVuOworCXNl
Y3Rvcl90IG9mZnNldDsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7IE5VTEwsIDAs
IHsgMCwgMH19OwogCiAJc2l6ZSA9ICh1ZGZfZXh0MF9vZmZzZXQoZGlyKSArIGRpci0+aV9zaXpl
KSA+PiAyOwogCWZfcG9zID0gKHVkZl9leHQwX29mZnNldChkaXIpID4+IDIpOwpAQCAtMTY2LDQy
ICsxNjgsNDEgQEAKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURf
SU5fSUNCKQogCQlmaWJoLT5zYmggPSBmaWJoLT5lYmggPSBOVUxMOwogCWVsc2UgaWYgKGlub2Rl
X2JtYXAoZGlyLCBmX3BvcyA+PiAoZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gMiksCi0J
CSZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCkgPT0gKEVYVF9S
RUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQorCQkmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0
KSA9PSAoRVhUX1JFQ09SREVEX0FMTE9DQVRFRCA+PiAzMCkpCiAJewotCQlvZmZzZXQgPj49IGRp
ci0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKIAkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhk
aXItPmlfc2IsIGVsb2MsIG9mZnNldCk7CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5z
X2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4pCiAJCXsKIAkJCWlmIChVREZfSV9BTExPQ1RZUEUoZGly
KSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKLQkJCQlleHRvZmZzZXQgLT0gc2l6ZW9mKHNob3J0
X2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2Yoc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAo
VURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQlleHRvZmZz
ZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOworCQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2Fk
KTsKIAkJfQogCQllbHNlCiAJCQlvZmZzZXQgPSAwOwogCiAJCWlmICghKGZpYmgtPnNiaCA9IGZp
YmgtPmViaCA9IHVkZl90cmVhZChkaXItPmlfc2IsIGJsb2NrKSkpCiAJCXsKLQkJCXVkZl9yZWxl
YXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0K
IAl9CiAJZWxzZQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShlcG9zLmJo
KTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJd2hpbGUgKCAoZl9wb3MgPCBzaXplKSApCiAJewot
CQlmaSA9IHVkZl9maWxlaWRlbnRfcmVhZChkaXIsICZmX3BvcywgZmliaCwgY2ZpLCAmYmxvYywg
JmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmb2Zmc2V0LCAmYmgpOworCQlmaSA9IHVkZl9maWxl
aWRlbnRfcmVhZChkaXIsICZmX3BvcywgZmliaCwgY2ZpLCAmZXBvcywgJmVsb2MsICZlbGVuLCAm
b2Zmc2V0KTsKIAogCQlpZiAoIWZpKQogCQl7CiAJCQlpZiAoZmliaC0+c2JoICE9IGZpYmgtPmVi
aCkKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPmViaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRh
KGZpYmgtPnNiaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoZmliaC0+
ZWJoKTsKKwkJCWJyZWxzZShmaWJoLT5zYmgpOworCQkJYnJlbHNlKGVwb3MuYmgpOwogCQkJcmV0
dXJuIE5VTEw7CiAJCX0KIApAQCAtMjQ3LDE1ICsyNDgsMTUgQEAKIAkJewogCQkJaWYgKHVkZl9t
YXRjaChmbGVuLCBmbmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1l
KSkKIAkJCXsKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoZXBvcy5iaCk7
CiAJCQkJcmV0dXJuIGZpOwogCQkJfQogCQl9CiAJfQogCWlmIChmaWJoLT5zYmggIT0gZmliaC0+
ZWJoKQotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShm
aWJoLT5zYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQlicmVsc2UoZmliaC0+ZWJoKTsK
KwlicmVsc2UoZmliaC0+c2JoKTsKKwlicmVsc2UoZXBvcy5iaCk7CiAJcmV0dXJuIE5VTEw7CiB9
CiAKQEAgLTMyMSw4ICszMjIsOCBAQAogCWlmICh1ZGZfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwg
JmZpYmgsICZjZmkpKQogCXsKIAkJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQotCQkJdWRmX3Jl
bGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOworCQkJ
YnJlbHNlKGZpYmguZWJoKTsKKwkJYnJlbHNlKGZpYmguc2JoKTsKIAogCQlpbm9kZSA9IHVkZl9p
Z2V0KGRpci0+aV9zYiwgbGVsYl90b19jcHUoY2ZpLmljYi5leHRMb2NhdGlvbikpOwogCQlpZiAo
ICFpbm9kZSApCkBAIC0zNTMsOSArMzU0LDEwIEBACiAJdWludDhfdCBsZmk7CiAJdWludDE2X3Qg
bGl1OwogCWludCBibG9jazsKLQlrZXJuZWxfbGJfYWRkciBibG9jLCBlbG9jOwotCXVpbnQzMl90
IGV4dG9mZnNldCwgZWxlbiwgb2Zmc2V0OwotCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxM
OworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJdWludDMyX3QgZWxlbjsKKwlzZWN0b3JfdCBvZmZz
ZXQ7CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBOVUxMLCAwLCB7IDAsIDAgfX07
CiAKIAlzYiA9IGRpci0+aV9zYjsKIApAQCAtMzg0LDIzICszODYsMjIgQEAKIAlpZiAoVURGX0lf
QUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKQogCQlmaWJoLT5zYmggPSBm
aWJoLT5lYmggPSBOVUxMOwogCWVsc2UgaWYgKGlub2RlX2JtYXAoZGlyLCBmX3BvcyA+PiAoZGly
LT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gMiksCi0JCSZibG9jLCAmZXh0b2Zmc2V0LCAmZWxv
YywgJmVsZW4sICZvZmZzZXQsICZiaCkgPT0gKEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzAp
KQorCQkmZXBvcywgJmVsb2MsICZlbGVuLCAmb2Zmc2V0KSA9PSAoRVhUX1JFQ09SREVEX0FMTE9D
QVRFRCA+PiAzMCkpCiAJewotCQlvZmZzZXQgPj49IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0
czsKIAkJYmxvY2sgPSB1ZGZfZ2V0X2xiX3BibG9jayhkaXItPmlfc2IsIGVsb2MsIG9mZnNldCk7
CiAJCWlmICgoKytvZmZzZXQgPDwgZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSA8IGVsZW4p
CiAJCXsKIAkJCWlmIChVREZfSV9BTExPQ1RZUEUoZGlyKSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9S
VCkKLQkJCQlleHRvZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKKwkJCQllcG9zLm9mZnNldCAt
PSBzaXplb2Yoc2hvcnRfYWQpOwogCQkJZWxzZSBpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0g
SUNCVEFHX0ZMQUdfQURfTE9ORykKLQkJCQlleHRvZmZzZXQgLT0gc2l6ZW9mKGxvbmdfYWQpOwor
CQkJCWVwb3Mub2Zmc2V0IC09IHNpemVvZihsb25nX2FkKTsKIAkJfQogCQllbHNlCiAJCQlvZmZz
ZXQgPSAwOwogCiAJCWlmICghKGZpYmgtPnNiaCA9IGZpYmgtPmViaCA9IHVkZl90cmVhZChkaXIt
Pmlfc2IsIGJsb2NrKSkpCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNl
KGVwb3MuYmgpOwogCQkJKmVyciA9IC1FSU87CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQpAQCAtNDE4
LDE0ICs0MTksMTQgQEAKIAogCXdoaWxlICggKGZfcG9zIDwgc2l6ZSkgKQogCXsKLQkJZmkgPSB1
ZGZfZmlsZWlkZW50X3JlYWQoZGlyLCAmZl9wb3MsIGZpYmgsIGNmaSwgJmJsb2MsICZleHRvZmZz
ZXQsICZlbG9jLCAmZWxlbiwgJm9mZnNldCwgJmJoKTsKKwkJZmkgPSB1ZGZfZmlsZWlkZW50X3Jl
YWQoZGlyLCAmZl9wb3MsIGZpYmgsIGNmaSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCk7
CiAKIAkJaWYgKCFmaSkKIAkJewogCQkJaWYgKGZpYmgtPnNiaCAhPSBmaWJoLT5lYmgpCi0JCQkJ
dWRmX3JlbGVhc2VfZGF0YShmaWJoLT5lYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5z
YmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGZpYmgtPmViaCk7CisJ
CQlicmVsc2UoZmliaC0+c2JoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCSplcnIgPSAtRUlP
OwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTQ1NSw3ICs0NTYsNyBAQAogCQl7CiAJCQlpZiAo
KChzaXplb2Yoc3RydWN0IGZpbGVJZGVudERlc2MpICsgbGl1ICsgbGZpICsgMykgJiB+MykgPT0g
bmZpZGxlbikKIAkJCXsKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoZXBv
cy5iaCk7CiAJCQkJY2ZpLT5kZXNjVGFnLnRhZ1NlcmlhbE51bSA9IGNwdV90b19sZTE2KDEpOwog
CQkJCWNmaS0+ZmlsZVZlcnNpb25OdW0gPSBjcHVfdG9fbGUxNigxKTsKIAkJCQljZmktPmZpbGVD
aGFyYWN0ZXJpc3RpY3MgPSAwOwpAQCAtNDc4LDkgKzQ3OSw5IEBACiAJCQl1ZGZfbWF0Y2goZmxl
biwgZm5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSkpCiAJCXsK
IAkJCWlmIChmaWJoLT5zYmggIT0gZmliaC0+ZWJoKQotCQkJCXVkZl9yZWxlYXNlX2RhdGEoZmli
aC0+ZWJoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC0+c2JoKTsKLQkJCXVkZl9yZWxlYXNl
X2RhdGEoYmgpOworCQkJCWJyZWxzZShmaWJoLT5lYmgpOworCQkJYnJlbHNlKGZpYmgtPnNiaCk7
CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJCQkqZXJyID0gLUVFWElTVDsKIAkJCXJldHVybiBOVUxM
OwogCQl9CkBAIC00OTIsMjUgKzQ5MywyNSBAQAogCWlmIChVREZfSV9BTExPQ1RZUEUoZGlyKSA9
PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IgJiYKIAkJc2ItPnNfYmxvY2tzaXplIC0gZmliaC0+ZW9m
ZnNldCA8IG5maWRsZW4pCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKLQkJYmggPSBOVUxM
OworCQlicmVsc2UoZXBvcy5iaCk7CisJCWVwb3MuYmggPSBOVUxMOwogCQlmaWJoLT5zb2Zmc2V0
IC09IHVkZl9leHQwX29mZnNldChkaXIpOwogCQlmaWJoLT5lb2Zmc2V0IC09IHVkZl9leHQwX29m
ZnNldChkaXIpOwogCQlmX3BvcyAtPSAodWRmX2V4dDBfb2Zmc2V0KGRpcikgPj4gMik7CiAJCWlm
IChmaWJoLT5zYmggIT0gZmliaC0+ZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5lYmgp
OwotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7CisJCQlicmVsc2UoZmliaC0+ZWJoKTsK
KwkJYnJlbHNlKGZpYmgtPnNiaCk7CiAJCWlmICghKGZpYmgtPnNiaCA9IGZpYmgtPmViaCA9IHVk
Zl9leHBhbmRfZGlyX2FkaW5pY2IoZGlyLCAmYmxvY2ssIGVycikpKQogCQkJcmV0dXJuIE5VTEw7
Ci0JCWJsb2MgPSBVREZfSV9MT0NBVElPTihkaXIpOworCQllcG9zLmJsb2NrID0gVURGX0lfTE9D
QVRJT04oZGlyKTsKIAkJZWxvYy5sb2dpY2FsQmxvY2tOdW0gPSBibG9jazsKIAkJZWxvYy5wYXJ0
aXRpb25SZWZlcmVuY2VOdW0gPSBVREZfSV9MT0NBVElPTihkaXIpLnBhcnRpdGlvblJlZmVyZW5j
ZU51bTsKIAkJZWxlbiA9IGRpci0+aV9zYi0+c19ibG9ja3NpemU7Ci0JCWV4dG9mZnNldCA9IHVk
Zl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChkaXIpOworCQllcG9zLm9mZnNldCA9IHVkZl9maWxl
X2VudHJ5X2FsbG9jX29mZnNldChkaXIpOwogCQlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0g
SUNCVEFHX0ZMQUdfQURfU0hPUlQpCi0JCQlleHRvZmZzZXQgKz0gc2l6ZW9mKHNob3J0X2FkKTsK
KwkJCWVwb3Mub2Zmc2V0ICs9IHNpemVvZihzaG9ydF9hZCk7CiAJCWVsc2UgaWYgKFVERl9JX0FM
TE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQlleHRvZmZzZXQgKz0gc2l6
ZW9mKGxvbmdfYWQpOworCQkJZXBvcy5vZmZzZXQgKz0gc2l6ZW9mKGxvbmdfYWQpOwogCX0KIAog
CWlmIChzYi0+c19ibG9ja3NpemUgLSBmaWJoLT5lb2Zmc2V0ID49IG5maWRsZW4pCkBAIC01MTks
NyArNTIwLDcgQEAKIAkJZmliaC0+ZW9mZnNldCArPSBuZmlkbGVuOwogCQlpZiAoZmliaC0+c2Jo
ICE9IGZpYmgtPmViaCkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLT5zYmgpOworCQkJ
YnJlbHNlKGZpYmgtPnNiaCk7CiAJCQlmaWJoLT5zYmggPSBmaWJoLT5lYmg7CiAJCX0KIApAQCAt
NTQxLDcgKzU0Miw3IEBACiAJCWZpYmgtPmVvZmZzZXQgKz0gbmZpZGxlbiAtIHNiLT5zX2Jsb2Nr
c2l6ZTsKIAkJaWYgKGZpYmgtPnNiaCAhPSBmaWJoLT5lYmgpCiAJCXsKLQkJCXVkZl9yZWxlYXNl
X2RhdGEoZmliaC0+c2JoKTsKKwkJCWJyZWxzZShmaWJoLT5zYmgpOwogCQkJZmliaC0+c2JoID0g
ZmliaC0+ZWJoOwogCQl9CiAKQEAgLTU1MCwxNCArNTUxLDE0IEBACiAKIAkJaWYgKCEoZmliaC0+
ZWJoID0gdWRmX2JyZWFkKGRpciwgZl9wb3MgPj4gKGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0
cyAtIDIpLCAxLCBlcnIpKSkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7Ci0JCQl1ZGZf
cmVsZWFzZV9kYXRhKGZpYmgtPnNiaCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CisJCQlicmVsc2Uo
ZmliaC0+c2JoKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKIAkJaWYgKCEoZmliaC0+c29mZnNl
dCkpCiAJCXsKLQkJCWlmICh1ZGZfbmV4dF9hZXh0KGRpciwgJmJsb2MsICZleHRvZmZzZXQsICZl
bG9jLCAmZWxlbiwgJmJoLCAxKSA9PQorCQkJaWYgKHVkZl9uZXh0X2FleHQoZGlyLCAmZXBvcywg
JmVsb2MsICZlbGVuLCAxKSA9PQogCQkJCShFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkK
IAkJCXsKIAkJCQlibG9jayA9IGVsb2MubG9naWNhbEJsb2NrTnVtICsgKChlbGVuIC0gMSkgPj4K
QEAgLTU2Niw3ICs1NjcsNyBAQAogCQkJZWxzZQogCQkJCWJsb2NrICsrOwogCi0JCQl1ZGZfcmVs
ZWFzZV9kYXRhKGZpYmgtPnNiaCk7CisJCQlicmVsc2UoZmliaC0+c2JoKTsKIAkJCWZpYmgtPnNi
aCA9IGZpYmgtPmViaDsKIAkJCWZpID0gKHN0cnVjdCBmaWxlSWRlbnREZXNjICopKGZpYmgtPnNi
aC0+Yl9kYXRhKTsKIAkJfQpAQCAtNTg3LDcgKzU4OCw3IEBACiAJY2ZpLT5sZW5ndGhPZkltcFVz
ZSA9IGNwdV90b19sZTE2KDApOwogCWlmICghdWRmX3dyaXRlX2ZpKGRpciwgY2ZpLCBmaSwgZmli
aCwgTlVMTCwgbmFtZSkpCiAJewotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGVw
b3MuYmgpOwogCQlkaXItPmlfc2l6ZSArPSBuZmlkbGVuOwogCQlpZiAoVURGX0lfQUxMT0NUWVBF
KGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCKQogCQkJVURGX0lfTEVOQUxMT0MoZGlyKSAr
PSBuZmlkbGVuOwpAQCAtNTk2LDEwICs1OTcsMTAgQEAKIAl9CiAJZWxzZQogCXsKLQkJdWRmX3Jl
bGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShlcG9zLmJoKTsKIAkJaWYgKGZpYmgtPnNiaCAhPSBm
aWJoLT5lYmgpCi0JCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmgtPmViaCk7Ci0JCXVkZl9yZWxlYXNl
X2RhdGEoZmliaC0+c2JoKTsKKwkJCWJyZWxzZShmaWJoLT5lYmgpOworCQlicmVsc2UoZmliaC0+
c2JoKTsKIAkJKmVyciA9IC1FSU87CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTY1Niw4ICs2NTcs
OCBAQAogCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJfQogCWlmIChmaWJoLnNiaCAhPSBmaWJo
LmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShm
aWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIAl1bmxv
Y2tfa2VybmVsKCk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gMDsK
QEAgLTcwMSw4ICs3MDIsOCBAQAogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCiAJaWYgKGZp
Ymguc2JoICE9IGZpYmguZWJoKQotCQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQl1ZGZf
cmVsZWFzZV9kYXRhKGZpYmguc2JoKTsKKwkJYnJlbHNlKGZpYmguZWJoKTsKKwlicmVsc2UoZmli
aC5zYmgpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJZXJyID0gMDsKIG91dDoK
QEAgLTc0Myw3ICs3NDQsNyBAQAogCQljcHVfdG9fbGUzMihVREZfSV9VTklRVUUoZGlyKSAmIDB4
MDAwMDAwMDBGRkZGRkZGRlVMKTsKIAljZmkuZmlsZUNoYXJhY3RlcmlzdGljcyA9IEZJRF9GSUxF
X0NIQVJfRElSRUNUT1JZIHwgRklEX0ZJTEVfQ0hBUl9QQVJFTlQ7CiAJdWRmX3dyaXRlX2ZpKGlu
b2RlLCAmY2ZpLCBmaSwgJmZpYmgsIE5VTEwsIE5VTEwpOwotCXVkZl9yZWxlYXNlX2RhdGEoZmli
aC5zYmgpOworCWJyZWxzZShmaWJoLnNiaCk7CiAJaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBt
b2RlOwogCWlmIChkaXItPmlfbW9kZSAmIFNfSVNHSUQpCiAJCWlub2RlLT5pX21vZGUgfD0gU19J
U0dJRDsKQEAgLTc2Niw4ICs3NjcsOCBAQAogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIAlkX2lu
c3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJ
dWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7
CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIAllcnIgPSAwOwogb3V0
OgogCXVubG9ja19rZXJuZWwoKTsKQEAgLTc4MSw5ICs3ODIsMTAgQEAKIAlsb2ZmX3QgZl9wb3M7
CiAJbG9mZl90IHNpemUgPSAodWRmX2V4dDBfb2Zmc2V0KGRpcikgKyBkaXItPmlfc2l6ZSkgPj4g
MjsKIAlpbnQgYmxvY2s7Ci0Ja2VybmVsX2xiX2FkZHIgYmxvYywgZWxvYzsKLQl1aW50MzJfdCBl
eHRvZmZzZXQsIGVsZW4sIG9mZnNldDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsK
KwlrZXJuZWxfbGJfYWRkciBlbG9jOworCXVpbnQzMl90IGVsZW47CisJc2VjdG9yX3Qgb2Zmc2V0
OworCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHsgTlVMTCwgMCwgeyAwLCAwfX07CiAK
IAlmX3BvcyA9ICh1ZGZfZXh0MF9vZmZzZXQoZGlyKSA+PiAyKTsKIApAQCAtNzkyLDU5ICs3OTQs
NTggQEAKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNC
KQogCQlmaWJoLnNiaCA9IGZpYmguZWJoID0gTlVMTDsKIAllbHNlIGlmIChpbm9kZV9ibWFwKGRp
ciwgZl9wb3MgPj4gKGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0cyAtIDIpLAotCQkmYmxvYywg
JmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmb2Zmc2V0LCAmYmgpID09IChFWFRfUkVDT1JERURf
QUxMT0NBVEVEID4+IDMwKSkKKwkJJmVwb3MsICZlbG9jLCAmZWxlbiwgJm9mZnNldCkgPT0gKEVY
VF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQogCXsKLQkJb2Zmc2V0ID4+PSBkaXItPmlfc2It
PnNfYmxvY2tzaXplX2JpdHM7CiAJCWJsb2NrID0gdWRmX2dldF9sYl9wYmxvY2soZGlyLT5pX3Ni
LCBlbG9jLCBvZmZzZXQpOwogCQlpZiAoKCsrb2Zmc2V0IDw8IGRpci0+aV9zYi0+c19ibG9ja3Np
emVfYml0cykgPCBlbGVuKQogCQl7CiAJCQlpZiAoVURGX0lfQUxMT0NUWVBFKGRpcikgPT0gSUNC
VEFHX0ZMQUdfQURfU0hPUlQpCi0JCQkJZXh0b2Zmc2V0IC09IHNpemVvZihzaG9ydF9hZCk7CisJ
CQkJZXBvcy5vZmZzZXQgLT0gc2l6ZW9mKHNob3J0X2FkKTsKIAkJCWVsc2UgaWYgKFVERl9JX0FM
TE9DVFlQRShkaXIpID09IElDQlRBR19GTEFHX0FEX0xPTkcpCi0JCQkJZXh0b2Zmc2V0IC09IHNp
emVvZihsb25nX2FkKTsKKwkJCQllcG9zLm9mZnNldCAtPSBzaXplb2YobG9uZ19hZCk7CiAJCX0K
IAkJZWxzZQogCQkJb2Zmc2V0ID0gMDsKIAogCQlpZiAoIShmaWJoLnNiaCA9IGZpYmguZWJoID0g
dWRmX3RyZWFkKGRpci0+aV9zYiwgYmxvY2spKSkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0YShi
aCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAllbHNlCiAJ
ewotCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJYnJlbHNlKGVwb3MuYmgpOwogCQlyZXR1cm4g
MDsKIAl9CiAKIAogCXdoaWxlICggKGZfcG9zIDwgc2l6ZSkgKQogCXsKLQkJZmkgPSB1ZGZfZmls
ZWlkZW50X3JlYWQoZGlyLCAmZl9wb3MsICZmaWJoLCAmY2ZpLCAmYmxvYywgJmV4dG9mZnNldCwg
JmVsb2MsICZlbGVuLCAmb2Zmc2V0LCAmYmgpOworCQlmaSA9IHVkZl9maWxlaWRlbnRfcmVhZChk
aXIsICZmX3BvcywgJmZpYmgsICZjZmksICZlcG9zLCAmZWxvYywgJmVsZW4sICZvZmZzZXQpOwog
CiAJCWlmICghZmkpCiAJCXsKIAkJCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJCQl1ZGZf
cmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5zYmgpOwot
CQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJYnJlbHNlKGZpYmguZWJoKTsKKwkJCWJyZWxz
ZShmaWJoLnNiaCk7CisJCQlicmVsc2UoZXBvcy5iaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJ
CWlmIChjZmkubGVuZ3RoRmlsZUlkZW50ICYmIChjZmkuZmlsZUNoYXJhY3RlcmlzdGljcyAmIEZJ
RF9GSUxFX0NIQVJfREVMRVRFRCkgPT0gMCkKIAkJewogCQkJaWYgKGZpYmguc2JoICE9IGZpYmgu
ZWJoKQotCQkJCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCQkJdWRmX3JlbGVhc2VfZGF0
YShmaWJoLnNiaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoZmliaC5l
YmgpOworCQkJYnJlbHNlKGZpYmguc2JoKTsKKwkJCWJyZWxzZShlcG9zLmJoKTsKIAkJCXJldHVy
biAwOwogCQl9CiAJfQogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2Vf
ZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7Ci0JdWRmX3JlbGVh
c2VfZGF0YShiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsKKwli
cmVsc2UoZXBvcy5iaCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTg3OCwxNSArODc5LDE0IEBACiAJ
CQlpbm9kZS0+aV9ubGluayk7CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwogCWlub2RlLT5pX3NpemUg
PSAwOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCWRpci0+aV9ubGluayAtLTsKKwlpbm9k
ZV9kZWNfbGlua19jb3VudChkaXIpOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0g
ZGlyLT5pX210aW1lID0gY3VycmVudF9mc190aW1lKGRpci0+aV9zYik7CiAJbWFya19pbm9kZV9k
aXJ0eShkaXIpOwogCiBlbmRfcm1kaXI6CiAJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQotCQl1
ZGZfcmVsZWFzZV9kYXRhKGZpYmguZWJoKTsKLQl1ZGZfcmVsZWFzZV9kYXRhKGZpYmguc2JoKTsK
KwkJYnJlbHNlKGZpYmguZWJoKTsKKwlicmVsc2UoZmliaC5zYmgpOwogb3V0OgogCXVubG9ja19r
ZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtOTIzLDE1ICs5MjMsMTQgQEAKIAkJZ290byBl
bmRfdW5saW5rOwogCWRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGlt
ZShkaXItPmlfc2IpOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKLQlpbm9kZS0+aV9ubGluay0t
OwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2Rl
KTsKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKIAlyZXR2YWwgPSAwOwogCiBlbmRf
dW5saW5rOgogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShm
aWJoLmViaCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmVi
aCk7CisJYnJlbHNlKGZpYmguc2JoKTsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJu
IHJldHZhbDsKQEAgLTk0Myw3ICs5NDIsNyBAQAogCXN0cnVjdCBwYXRoQ29tcG9uZW50ICpwYzsK
IAljaGFyICpjb21wc3RhcnQ7CiAJc3RydWN0IHVkZl9maWxlaWRlbnRfYmggZmliaDsKLQlzdHJ1
Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3Mg
PSB7IE5VTEwsICAwLCB7MCwgMH19OwogCWludCBlb2Zmc2V0LCBlbGVuID0gMDsKIAlzdHJ1Y3Qg
ZmlsZUlkZW50RGVzYyAqZmk7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwpAQCAtOTYzLDMz
ICs5NjIsMzMgQEAKIAogCWlmIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpICE9IElDQlRBR19GTEFH
X0FEX0lOX0lDQikKIAl7Ci0JCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCQlrZXJu
ZWxfbGJfYWRkciBibG9jLCBlbG9jOwotCQl1aW50MzJfdCBlbGVuLCBleHRvZmZzZXQ7CisJCWtl
cm5lbF9sYl9hZGRyIGVsb2M7CisJCXVpbnQzMl90IGVsZW47CiAKIAkJYmxvY2sgPSB1ZGZfbmV3
X2Jsb2NrKGlub2RlLT5pX3NiLCBpbm9kZSwKIAkJCVVERl9JX0xPQ0FUSU9OKGlub2RlKS5wYXJ0
aXRpb25SZWZlcmVuY2VOdW0sCiAJCQlVREZfSV9MT0NBVElPTihpbm9kZSkubG9naWNhbEJsb2Nr
TnVtLCAmZXJyKTsKIAkJaWYgKCFibG9jaykKIAkJCWdvdG8gb3V0X25vX2VudHJ5OwotCQlibG9j
ID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCQllcG9zLmJsb2NrID0gVURGX0lfTE9DQVRJT04o
aW5vZGUpOworCQllcG9zLm9mZnNldCA9IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9k
ZSk7CisJCWVwb3MuYmggPSBOVUxMOwogCQllbG9jLmxvZ2ljYWxCbG9ja051bSA9IGJsb2NrOwog
CQllbG9jLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9IFVERl9JX0xPQ0FUSU9OKGlub2RlKS5wYXJ0
aXRpb25SZWZlcmVuY2VOdW07CiAJCWVsZW4gPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CiAJ
CVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gZWxlbjsKLQkJZXh0b2Zmc2V0ID0gdWRmX2ZpbGVf
ZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKTsKLQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywg
JmV4dG9mZnNldCwgZWxvYywgZWxlbiwgJmJoLCAwKTsKLQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7
CisJCXVkZl9hZGRfYWV4dChpbm9kZSwgJmVwb3MsIGVsb2MsIGVsZW4sIDApOworCQlicmVsc2Uo
ZXBvcy5iaCk7CiAKIAkJYmxvY2sgPSB1ZGZfZ2V0X3BibG9jayhpbm9kZS0+aV9zYiwgYmxvY2ss
CiAJCQlVREZfSV9MT0NBVElPTihpbm9kZSkucGFydGl0aW9uUmVmZXJlbmNlTnVtLCAwKTsKLQkJ
YmggPSB1ZGZfdHJlYWQoaW5vZGUtPmlfc2IsIGJsb2NrKTsKLQkJbG9ja19idWZmZXIoYmgpOwot
CQltZW1zZXQoYmgtPmJfZGF0YSwgMHgwMCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKLQkJ
c2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7Ci0JCXVubG9ja19idWZmZXIoYmgpOwotCQltYXJrX2J1
ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwotCQllYSA9IGJoLT5iX2RhdGEgKyB1ZGZfZXh0
MF9vZmZzZXQoaW5vZGUpOworCQllcG9zLmJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCBibG9j
ayk7CisJCWxvY2tfYnVmZmVyKGVwb3MuYmgpOworCQltZW1zZXQoZXBvcy5iaC0+Yl9kYXRhLCAw
eDAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOworCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGVw
b3MuYmgpOworCQl1bmxvY2tfYnVmZmVyKGVwb3MuYmgpOworCQltYXJrX2J1ZmZlcl9kaXJ0eV9p
bm9kZShlcG9zLmJoLCBpbm9kZSk7CisJCWVhID0gZXBvcy5iaC0+Yl9kYXRhICsgdWRmX2V4dDBf
b2Zmc2V0KGlub2RlKTsKIAl9CiAJZWxzZQogCQllYSA9IFVERl9JX0RBVEEoaW5vZGUpICsgVURG
X0lfTEVORUFUVFIoaW5vZGUpOwpAQCAtMTA2Miw3ICsxMDYxLDcgQEAKIAkJfQogCX0KIAotCXVk
Zl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIAlpbm9kZS0+aV9zaXplID0g
ZWxlbjsKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9J
Q0IpCiAJCVVERl9JX0xFTkFMTE9DKGlub2RlKSA9IGlub2RlLT5pX3NpemU7CkBAIC0xMDkxLDgg
KzEwOTAsOCBAQAogCQltYXJrX2lub2RlX2RpcnR5KGRpcik7CiAJfQogCWlmIChmaWJoLnNiaCAh
PSBmaWJoLmViaCkKLQkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7Ci0JdWRmX3JlbGVhc2Vf
ZGF0YShmaWJoLnNiaCk7CisJCWJyZWxzZShmaWJoLmViaCk7CisJYnJlbHNlKGZpYmguc2JoKTsK
IAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWVyciA9IDA7CiAKQEAgLTExMDEsOCAr
MTEwMCw3IEBACiAJcmV0dXJuIGVycjsKIAogb3V0X25vX2VudHJ5OgotCWlub2RlLT5pX25saW5r
LS07Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5v
ZGUpOwogCWlwdXQoaW5vZGUpOwogCWdvdG8gb3V0OwogfQpAQCAtMTE0OCw4ICsxMTQ2LDggQEAK
IAkJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCX0KIAlpZiAoZmliaC5zYmggIT0gZmliaC5lYmgp
Ci0JCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5lYmgpOwotCXVkZl9yZWxlYXNlX2RhdGEoZmliaC5z
YmgpOworCQlicmVsc2UoZmliaC5lYmgpOworCWJyZWxzZShmaWJoLnNiaCk7CiAJaW5vZGUtPmlf
bmxpbmsgKys7CiAJaW5vZGUtPmlfY3RpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2Ip
OwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtMTE3Nyw4ICsxMTc1LDggQEAKIAlpZiAo
KG9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsIG9sZF9kZW50cnksICZvZmliaCwgJm9jZmkp
KSkKIAl7CiAJCWlmIChvZmliaC5zYmggIT0gb2ZpYmguZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0
YShvZmliaC5lYmgpOwotCQl1ZGZfcmVsZWFzZV9kYXRhKG9maWJoLnNiaCk7CisJCQlicmVsc2Uo
b2ZpYmguZWJoKTsKKwkJYnJlbHNlKG9maWJoLnNiaCk7CiAJfQogCXRsb2MgPSBsZWxiX3RvX2Nw
dShvY2ZpLmljYi5leHRMb2NhdGlvbik7CiAJaWYgKCFvZmkgfHwgdWRmX2dldF9sYl9wYmxvY2so
b2xkX2Rpci0+aV9zYiwgdGxvYywgMCkKQEAgLTExOTEsOCArMTE4OSw4IEBACiAJCWlmICghbmV3
X2lub2RlKQogCQl7CiAJCQlpZiAobmZpYmguc2JoICE9IG5maWJoLmViaCkKLQkJCQl1ZGZfcmVs
ZWFzZV9kYXRhKG5maWJoLmViaCk7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKG5maWJoLnNiaCk7CisJ
CQkJYnJlbHNlKG5maWJoLmViaCk7CisJCQlicmVsc2UobmZpYmguc2JoKTsKIAkJCW5maSA9IE5V
TEw7CiAJCX0KIAl9CkBAIC0xMjYxLDkgKzEyNTksOCBAQAogCiAJaWYgKG5ld19pbm9kZSkKIAl7
Ci0JCW5ld19pbm9kZS0+aV9ubGluay0tOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBjdXJyZW50
X2ZzX3RpbWUobmV3X2lub2RlLT5pX3NiKTsKLQkJbWFya19pbm9kZV9kaXJ0eShuZXdfaW5vZGUp
OworCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwogCX0KIAlvbGRfZGlyLT5pX2N0
aW1lID0gb2xkX2Rpci0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShvbGRfZGlyLT5pX3NiKTsK
IAltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwpAQCAtMTI3OSwxMiArMTI3NiwxMCBAQAogCQl9
CiAJCWVsc2UKIAkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGRpcl9iaCwgb2xkX2lub2RlKTsK
LQkJb2xkX2Rpci0+aV9ubGluayAtLTsKLQkJbWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTsKKwkJ
aW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2Rpcik7CiAJCWlmIChuZXdfaW5vZGUpCiAJCXsKLQkJ
CW5ld19pbm9kZS0+aV9ubGluayAtLTsKLQkJCW1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTsK
KwkJCWlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7CiAJCX0KIAkJZWxzZQogCQl7CkBA
IC0xMjk2LDI1ICsxMjkxLDI1IEBACiAJaWYgKG9maSkKIAl7CiAJCWlmIChvZmliaC5zYmggIT0g
b2ZpYmguZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShvZmliaC5lYmgpOwotCQl1ZGZfcmVsZWFz
ZV9kYXRhKG9maWJoLnNiaCk7CisJCQlicmVsc2Uob2ZpYmguZWJoKTsKKwkJYnJlbHNlKG9maWJo
LnNiaCk7CiAJfQogCiAJcmV0dmFsID0gMDsKIAogZW5kX3JlbmFtZToKLQl1ZGZfcmVsZWFzZV9k
YXRhKGRpcl9iaCk7CisJYnJlbHNlKGRpcl9iaCk7CiAJaWYgKG5maSkKIAl7CiAJCWlmIChuZmli
aC5zYmggIT0gbmZpYmguZWJoKQotCQkJdWRmX3JlbGVhc2VfZGF0YShuZmliaC5lYmgpOwotCQl1
ZGZfcmVsZWFzZV9kYXRhKG5maWJoLnNiaCk7CisJCQlicmVsc2UobmZpYmguZWJoKTsKKwkJYnJl
bHNlKG5maWJoLnNiaCk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwog
fQogCi1zdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZGZfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7
Citjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZGZfZGlyX2lub2RlX29wZXJhdGlvbnMg
PSB7CiAJLmxvb2t1cAkJCQk9IHVkZl9sb29rdXAsCiAJLmNyZWF0ZQkJCQk9IHVkZl9jcmVhdGUs
CiAJLmxpbmsJCQkJPSB1ZGZfbGluaywKZGlmZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9y
aWcvZnMvdWRmL3BhcnRpdGlvbi5jIGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi9wYXJ0aXRp
b24uYwotLS0ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9mcy91ZGYvcGFydGl0aW9uLmMJMjAw
Ni0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgvZnMvdWRmL3Bh
cnRpdGlvbi5jCTIwMDctMDgtMTQgMDM6MjY6MDggKzAzMDAKQEAgLTgxLDcgKzgxLDcgQEAKIAog
CWxvYyA9IGxlMzJfdG9fY3B1KCgoX19sZTMyICopYmgtPmJfZGF0YSlbaW5kZXhdKTsKIAotCXVk
Zl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShiaCk7CiAKIAlpZiAoVURGX0lfTE9DQVRJT04o
VURGX1NCX1ZBVChzYikpLnBhcnRpdGlvblJlZmVyZW5jZU51bSA9PSBwYXJ0aXRpb24pCiAJewpk
aWZmIC11ck4ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9mcy91ZGYvc3VwZXIuYyBrZXJuZWwt
c291cmNlLTIuNi4xOC9mcy91ZGYvc3VwZXIuYwotLS0ga2VybmVsLXNvdXJjZS0yLjYuMTgub3Jp
Zy9mcy91ZGYvc3VwZXIuYwkyMDA2LTA5LTIwIDA2OjQyOjA2ICswMzAwCisrKyBrZXJuZWwtc291
cmNlLTIuNi4xOC9mcy91ZGYvc3VwZXIuYwkyMDA3LTA4LTE0IDAzOjI2OjA4ICswMzAwCkBAIC0x
MDcsMTIgKzEwNywxMiBAQAogCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKIH07CiAKLXN0
YXRpYyBrbWVtX2NhY2hlX3QgKiB1ZGZfaW5vZGVfY2FjaGVwOworc3RhdGljIHN0cnVjdCBrbWVt
X2NhY2hlICogdWRmX2lub2RlX2NhY2hlcDsKIAogc3RhdGljIHN0cnVjdCBpbm9kZSAqdWRmX2Fs
bG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IHVkZl9pbm9kZV9p
bmZvICplaTsKLQllaSA9IChzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKilrbWVtX2NhY2hlX2FsbG9j
KHVkZl9pbm9kZV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKKwllaSA9IChzdHJ1Y3QgdWRmX2lub2Rl
X2luZm8gKilrbWVtX2NhY2hlX2FsbG9jKHVkZl9pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpOwog
CWlmICghZWkpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xMzAsMTYgKzEzMCwxMiBAQAogCWttZW1f
Y2FjaGVfZnJlZSh1ZGZfaW5vZGVfY2FjaGVwLCBVREZfSShpbm9kZSkpOwogfQogCi1zdGF0aWMg
dm9pZCBpbml0X29uY2Uodm9pZCAqIGZvbywga21lbV9jYWNoZV90ICogY2FjaGVwLCB1bnNpZ25l
ZCBsb25nIGZsYWdzKQorc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKiBmb28sIHN0cnVjdCBr
bWVtX2NhY2hlICogY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewogCXN0cnVjdCB1ZGZf
aW5vZGVfaW5mbyAqZWkgPSAoc3RydWN0IHVkZl9pbm9kZV9pbmZvICopIGZvbzsKIAotCWlmICgo
ZmxhZ3MgJiAoU0xBQl9DVE9SX1ZFUklGWXxTTEFCX0NUT1JfQ09OU1RSVUNUT1IpKSA9PQotCSAg
ICBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpCi0JewotCQllaS0+aV9leHQuaV9kYXRhID0gTlVMTDsK
LQkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKLQl9CisJZWktPmlfZXh0LmlfZGF0
YSA9IE5VTEw7CisJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIAogc3RhdGlj
IGludCBpbml0X2lub2RlY2FjaGUodm9pZCkKQEAgLTE1NiwxMiArMTUyLDExIEBACiAKIHN0YXRp
YyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ry
b3kodWRmX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gInVkZl9pbm9kZV9jYWNo
ZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJv
eSh1ZGZfaW5vZGVfY2FjaGVwKTsKIH0KIAogLyogU3VwZXJibG9jayBvcGVyYXRpb25zICovCi1z
dGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgdWRmX3NiX29wcyA9IHsKK3N0YXRpYyBjb25z
dCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyB1ZGZfc2Jfb3BzID0gewogCS5hbGxvY19pbm9kZQkJ
PSB1ZGZfYWxsb2NfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJCT0gdWRmX2Rlc3Ryb3lfaW5vZGUs
CiAJLndyaXRlX2lub2RlCQk9IHVkZl93cml0ZV9pbm9kZSwKQEAgLTU2Niw3ICs1NjEsNyBAQAog
CiAJCWlmICh2c2QtPnN0ZElkZW50WzBdID09IDApCiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEo
YmgpOworCQkJYnJlbHNlKGJoKTsKIAkJCWJyZWFrOwogCQl9CiAJCWVsc2UgaWYgKCFzdHJuY21w
KHZzZC0+c3RkSWRlbnQsIFZTRF9TVERfSURfQ0QwMDEsIFZTRF9TVERfSURfTEVOKSkKQEAgLTU5
OSw3ICs1OTQsNyBAQAogCQl9CiAJCWVsc2UgaWYgKCFzdHJuY21wKHZzZC0+c3RkSWRlbnQsIFZT
RF9TVERfSURfVEVBMDEsIFZTRF9TVERfSURfTEVOKSkKIAkJewotCQkJdWRmX3JlbGVhc2VfZGF0
YShiaCk7CisJCQlicmVsc2UoYmgpOwogCQkJYnJlYWs7CiAJCX0KIAkJZWxzZSBpZiAoIXN0cm5j
bXAodnNkLT5zdGRJZGVudCwgVlNEX1NURF9JRF9OU1IwMiwgVlNEX1NURF9JRF9MRU4pKQpAQCAt
NjEwLDcgKzYwNSw3IEBACiAJCXsKIAkJCW5zcjAzID0gc2VjdG9yOwogCQl9Ci0JCXVkZl9yZWxl
YXNlX2RhdGEoYmgpOworCQlicmVsc2UoYmgpOwogCX0KIAogCWlmIChuc3IwMykKQEAgLTY3Niw3
ICs2NzEsNyBAQAogCQkJewogCQkJCWlkZW50ID0gbGUxNl90b19jcHUoKCh0YWcgKiliaC0+Yl9k
YXRhKS0+dGFnSWRlbnQpOwogCQkJCWxvY2F0aW9uID0gbGUzMl90b19jcHUoKCh0YWcgKiliaC0+
Yl9kYXRhKS0+dGFnTG9jYXRpb24pOwotCQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJCWJy
ZWxzZShiaCk7CiAJCQl9CiAKIAkJCWlmIChpZGVudCA9PSBUQUdfSURFTlRfQVZEUCkKQEAgLTcx
MSw3ICs3MDYsNyBAQAogCQkJCXsKIAkJCQkJaWRlbnQgPSBsZTE2X3RvX2NwdSgoKHRhZyAqKWJo
LT5iX2RhdGEpLT50YWdJZGVudCk7CiAJCQkJCWxvY2F0aW9uID0gbGUzMl90b19jcHUoKCh0YWcg
KiliaC0+Yl9kYXRhKS0+dGFnTG9jYXRpb24pOwotCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsK
KwkJCQkJYnJlbHNlKGJoKTsKIAkJCQl9CiAJCiAJCQkJaWYgKGlkZW50ID09IFRBR19JREVOVF9B
VkRQICYmCkBAIC03MzAsNyArNzI1LDcgQEAKIAkJCQkJewogCQkJCQkJaWRlbnQgPSBsZTE2X3Rv
X2NwdSgoKHRhZyAqKWJoLT5iX2RhdGEpLT50YWdJZGVudCk7CiAJCQkJCQlsb2NhdGlvbiA9IGxl
MzJfdG9fY3B1KCgodGFnICopYmgtPmJfZGF0YSktPnRhZ0xvY2F0aW9uKTsKLQkJCQkJCXVkZl9y
ZWxlYXNlX2RhdGEoYmgpOworCQkJCQkJYnJlbHNlKGJoKTsKIAkJCQkJfQogCQogCQkJCQlpZiAo
aWRlbnQgPT0gVEFHX0lERU5UX0FWRFAgJiYKQEAgLTc1Miw3ICs3NDcsNyBAQAogCQl7CiAJCQlp
ZGVudCA9IGxlMTZfdG9fY3B1KCgodGFnICopYmgtPmJfZGF0YSktPnRhZ0lkZW50KTsKIAkJCWxv
Y2F0aW9uID0gbGUzMl90b19jcHUoKCh0YWcgKiliaC0+Yl9kYXRhKS0+dGFnTG9jYXRpb24pOwot
CQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCiAJCQlpZiAoaWRlbnQg
PT0gVEFHX0lERU5UX0FWRFAgJiYgbG9jYXRpb24gPT0gMjU2KQogCQkJCVVERl9TRVRfRkxBRyhz
YiwgVURGX0ZMQUdfVkFSQ09OVik7CkBAIC03NjksNyArNzY0LDcgQEAKIAkJCX0KIAkJCWVsc2UK
IAkJCXsKLQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQlicmVsc2UoYmgpOwogCQkJCWlm
ICgoaWRlbnQgIT0gVEFHX0lERU5UX0FWRFApICYmIChpIHx8CiAJCQkJCShpZGVudCAhPSBUQUdf
SURFTlRfRkUgJiYgaWRlbnQgIT0gVEFHX0lERU5UX0VGRSkpKQogCQkJCXsKQEAgLTc5OCw3ICs3
OTMsNyBAQAogCQkJcmV0dXJuIDE7CiAJCWVsc2UgaWYgKGlkZW50ICE9IFRBR19JREVOVF9GU0Qp
CiAJCXsKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVy
biAxOwogCQl9CiAJCQkKQEAgLTgzNyw3ICs4MzIsNyBAQAogCQkJCQkJbmV3ZmlsZXNldC5sb2dp
Y2FsQmxvY2tOdW0gKz0gMSArCiAJCQkJCQkJKChsZTMyX3RvX2NwdShzcC0+bnVtT2ZCeXRlcykg
KyBzaXplb2Yoc3RydWN0IHNwYWNlQml0bWFwRGVzYykgLSAxKQogCQkJCQkJCQk+PiBzYi0+c19i
bG9ja3NpemVfYml0cyk7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQkJCWJyZWxz
ZShiaCk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCQljYXNlIFRBR19JREVOVF9GU0Q6CkBA
IC04NDgsNyArODQzLDcgQEAKIAkJCQkJZGVmYXVsdDoKIAkJCQkJewogCQkJCQkJbmV3ZmlsZXNl
dC5sb2dpY2FsQmxvY2tOdW0gKys7Ci0JCQkJCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCQkJ
CWJyZWxzZShiaCk7CiAJCQkJCQliaCA9IE5VTEw7CiAJCQkJCQlicmVhazsKIAkJCQkJfQpAQCAt
ODY4LDcgKzg2Myw3IEBACiAKIAkJVURGX1NCX1BBUlRJVElPTihzYikgPSBmaWxlc2V0LT5wYXJ0
aXRpb25SZWZlcmVuY2VOdW07CiAJCXVkZl9sb2FkX2ZpbGVzZXQoc2IsIGJoLCByb290KTsKLQkJ
dWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCWJyZWxzZShiaCk7CiAJCXJldHVybiAwOwogCX0KIAly
ZXR1cm4gMTsKQEAgLTEwODYsNyArMTA4MSw3IEBACiAJCQkJCQlpZiAoaWRlbnQgIT0gMCB8fAog
CQkJCQkJCXN0cm5jbXAoc3QtPnNwYXJpbmdJZGVudC5pZGVudCwgVURGX0lEX1NQQVJJTkcsIHN0
cmxlbihVREZfSURfU1BBUklORykpKQogCQkJCQkJewotCQkJCQkJCXVkZl9yZWxlYXNlX2RhdGEo
VURGX1NCX1RZUEVTUEFSKHNiLGkpLnNfc3Bhcl9tYXBbal0pOworCQkJCQkJCWJyZWxzZShVREZf
U0JfVFlQRVNQQVIoc2IsaSkuc19zcGFyX21hcFtqXSk7CiAJCQkJCQkJVURGX1NCX1RZUEVTUEFS
KHNiLGkpLnNfc3Bhcl9tYXBbal0gPSBOVUxMOwogCQkJCQkJfQogCQkJCQl9CkBAIC0xMTQwLDEy
ICsxMTM1LDEyIEBACiAJCQl1ZGZfbG9hZF9sb2dpY2Fsdm9saW50KHNiLCBsZWVhX3RvX2NwdShV
REZfU0JfTFZJRChzYiktPm5leHRJbnRlZ3JpdHlFeHQpKTsKIAkJCiAJCWlmIChVREZfU0JfTFZJ
REJIKHNiKSAhPSBiaCkKLQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQkJYnJlbHNlKGJoKTsK
IAkJbG9jLmV4dExlbmd0aCAtPSBzYi0+c19ibG9ja3NpemU7CiAJCWxvYy5leHRMb2NhdGlvbiAr
KzsKIAl9CiAJaWYgKFVERl9TQl9MVklEQkgoc2IpICE9IGJoKQotCQl1ZGZfcmVsZWFzZV9kYXRh
KGJoKTsKKwkJYnJlbHNlKGJoKTsKIH0KIAogLyoKQEAgLTEyNDgsNyArMTI0Myw3IEBACiAJCQkJ
CWRvbmUgPSAxOwogCQkJCWJyZWFrOwogCQl9Ci0JCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCQli
cmVsc2UoYmgpOwogCX0KIAlmb3IgKGk9MDsgaTxWRFNfUE9TX0xFTkdUSDsgaSsrKQogCXsKQEAg
LTEyNzAsMTAgKzEyNjUsMTAgQEAKIAkJCQkJZ2QgPSAoc3RydWN0IGdlbmVyaWNfZGVzYyAqKWJo
Mi0+Yl9kYXRhOwogCQkJCQlpZiAoaWRlbnQgPT0gVEFHX0lERU5UX1BEKQogCQkJCQkJdWRmX2xv
YWRfcGFydGRlc2Moc2IsIGJoMik7Ci0JCQkJCXVkZl9yZWxlYXNlX2RhdGEoYmgyKTsKKwkJCQkJ
YnJlbHNlKGJoMik7CiAJCQkJfQogCQkJfQotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQli
cmVsc2UoYmgpOwogCQl9CiAJfQogCkBAIC0xMzM2LDcgKzEzMzEsNyBAQAogCQkJcmVzZXJ2ZV9l
ID0gcmVzZXJ2ZV9lID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCQkJcmVzZXJ2ZV9lICs9IHJl
c2VydmVfczsKIAotCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQlicmVsc2UoYmgpOwogCiAJ
CQkvKiBQcm9jZXNzIHRoZSBtYWluICYgcmVzZXJ2ZSBzZXF1ZW5jZXMgKi8KIAkJCS8qIHJlc3Bv
bnNpYmxlIGZvciBmaW5kaW5nIHRoZSBQYXJ0aXRpb25EZXNjKHMpICovCkBAIC0xMzU2LDcgKzEz
NTEsNyBAQAogCiAJZm9yIChpPTA7IGk8VURGX1NCX05VTVBBUlRTKHNiKTsgaSsrKQogCXsKLQkJ
c3dpdGNoIFVERl9TQl9QQVJUVFlQRShzYiwgaSkKKwkJc3dpdGNoIChVREZfU0JfUEFSVFRZUEUo
c2IsIGkpKQogCQl7CiAJCQljYXNlIFVERl9WSVJUVUFMX01BUDE1OgogCQkJY2FzZSBVREZfVklS
VFVBTF9NQVAyMDoKQEAgLTE0MDYsMTIgKzE0MDEsMTQgQEAKIAogCQkJCQlwb3MgPSB1ZGZfYmxv
Y2tfbWFwKFVERl9TQl9WQVQoc2IpLCAwKTsKIAkJCQkJYmggPSBzYl9icmVhZChzYiwgcG9zKTsK
KwkJCQkJaWYgKCFiaCkKKwkJCQkJCXJldHVybiAxOwogCQkJCQlVREZfU0JfVFlQRVZJUlQoc2Is
aSkuc19zdGFydF9vZmZzZXQgPQogCQkJCQkJbGUxNl90b19jcHUoKChzdHJ1Y3QgdmlydHVhbEFs
bG9jYXRpb25UYWJsZTIwICopYmgtPmJfZGF0YSArIHVkZl9leHQwX29mZnNldChVREZfU0JfVkFU
KHNiKSkpLT5sZW5ndGhIZWFkZXIpICsKIAkJCQkJCQl1ZGZfZXh0MF9vZmZzZXQoVURGX1NCX1ZB
VChzYikpOwogCQkJCQlVREZfU0JfVFlQRVZJUlQoc2IsaSkuc19udW1fZW50cmllcyA9IChVREZf
U0JfVkFUKHNiKS0+aV9zaXplIC0KIAkJCQkJCVVERl9TQl9UWVBFVklSVChzYixpKS5zX3N0YXJ0
X29mZnNldCkgPj4gMjsKLQkJCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7CisJCQkJCWJyZWxzZShi
aCk7CiAJCQkJfQogCQkJCVVERl9TQl9QQVJUUk9PVChzYixpKSA9IHVkZl9nZXRfcGJsb2NrKHNi
LCAwLCBpLCAwKTsKIAkJCQlVREZfU0JfUEFSVExFTihzYixpKSA9IFVERl9TQl9QQVJUTEVOKHNi
LGluby5wYXJ0aXRpb25SZWZlcmVuY2VOdW0pOwpAQCAtMTYyMiw2ICsxNjE5LDExIEBACiAJCWdv
dG8gZXJyb3Jfb3V0OwogCX0KIAorCWlmIChVREZfU0JfUEFSVEZMQUdTKHNiLCBVREZfU0JfUEFS
VElUSU9OKHNiKSkgJiBVREZfUEFSVF9GTEFHX1JFQURfT05MWSkgeworCQlwcmludGsoIlVERi1m
czogUGFydGl0aW9uIG1hcmtlZCByZWFkb25seTsgZm9yY2luZyByZWFkb25seSBtb3VudFxuIik7
CisJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKKwl9CisKIAlpZiAoIHVkZl9maW5kX2ZpbGVz
ZXQoc2IsICZmaWxlc2V0LCAmcm9vdGRpcikgKQogCXsKIAkJcHJpbnRrKCJVREYtZnM6IE5vIGZp
bGVzZXQgZm91bmRcbiIpOwpAQCAtMTY1OSw3ICsxNjYxLDcgQEAKIAkJaXB1dChpbm9kZSk7CiAJ
CWdvdG8gZXJyb3Jfb3V0OwogCX0KLQlzYi0+c19tYXhieXRlcyA9IDE8PDMwOworCXNiLT5zX21h
eGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTsKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0OgpAQCAt
MTY3OCw3ICsxNjgwLDcgQEAKIAkJaWYgKFVERl9TQl9QQVJUVFlQRShzYiwgVURGX1NCX1BBUlRJ
VElPTihzYikpID09IFVERl9TUEFSQUJMRV9NQVAxNSkKIAkJewogCQkJZm9yIChpPTA7IGk8NDsg
aSsrKQotCQkJCXVkZl9yZWxlYXNlX2RhdGEoVURGX1NCX1RZUEVTUEFSKHNiLCBVREZfU0JfUEFS
VElUSU9OKHNiKSkuc19zcGFyX21hcFtpXSk7CisJCQkJYnJlbHNlKFVERl9TQl9UWVBFU1BBUihz
YiwgVURGX1NCX1BBUlRJVElPTihzYikpLnNfc3Bhcl9tYXBbaV0pOwogCQl9CiAJfQogI2lmZGVm
IENPTkZJR19VREZfTkxTCkBAIC0xNjg3LDcgKzE2ODksNyBAQAogI2VuZGlmCiAJaWYgKCEoc2It
PnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQl1ZGZfY2xvc2VfbHZpZChzYik7Ci0JdWRmX3JlbGVh
c2VfZGF0YShVREZfU0JfTFZJREJIKHNiKSk7CisJYnJlbHNlKFVERl9TQl9MVklEQkgoc2IpKTsK
IAlVREZfU0JfRlJFRShzYik7CiAJa2ZyZWUoc2JpKTsKIAlzYi0+c19mc19pbmZvID0gTlVMTDsK
QEAgLTE3MDUsNyArMTcwNyw3IEBACiAJCXNiLT5zX2RpcnQgPSAxOwogCX0KIAl2YV9zdGFydChh
cmdzLCBmbXQpOwotCXZzcHJpbnRmKGVycm9yX2J1ZiwgZm10LCBhcmdzKTsKKwl2c25wcmludGYo
ZXJyb3JfYnVmLCBzaXplb2YoZXJyb3JfYnVmKSwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7
CiAJcHJpbnRrIChLRVJOX0NSSVQgIlVERi1mcyBlcnJvciAoZGV2aWNlICVzKTogJXM6ICVzXG4i
LAogCQlzYi0+c19pZCwgZnVuY3Rpb24sIGVycm9yX2J1Zik7CkBAIC0xNzE3LDcgKzE3MTksNyBA
QAogCXZhX2xpc3QgYXJnczsKIAogCXZhX3N0YXJ0IChhcmdzLCBmbXQpOwotCXZzcHJpbnRmKGVy
cm9yX2J1ZiwgZm10LCBhcmdzKTsKKwl2c25wcmludGYoZXJyb3JfYnVmLCBzaXplb2YoZXJyb3Jf
YnVmKSwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAi
VURGLWZzIHdhcm5pbmcgKGRldmljZSAlcyk6ICVzOiAlc1xuIiwKIAkJc2ItPnNfaWQsIGZ1bmN0
aW9uLCBlcnJvcl9idWYpOwpAQCAtMTc1Niw3ICsxNzU4LDcgQEAKIAkJaWYgKFVERl9TQl9QQVJU
VFlQRShzYiwgVURGX1NCX1BBUlRJVElPTihzYikpID09IFVERl9TUEFSQUJMRV9NQVAxNSkKIAkJ
ewogCQkJZm9yIChpPTA7IGk8NDsgaSsrKQotCQkJCXVkZl9yZWxlYXNlX2RhdGEoVURGX1NCX1RZ
UEVTUEFSKHNiLCBVREZfU0JfUEFSVElUSU9OKHNiKSkuc19zcGFyX21hcFtpXSk7CisJCQkJYnJl
bHNlKFVERl9TQl9UWVBFU1BBUihzYiwgVURGX1NCX1BBUlRJVElPTihzYikpLnNfc3Bhcl9tYXBb
aV0pOwogCQl9CiAJfQogI2lmZGVmIENPTkZJR19VREZfTkxTCkBAIC0xNzY1LDcgKzE3NjcsNyBA
QAogI2VuZGlmCiAJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQl1ZGZfY2xvc2Vf
bHZpZChzYik7Ci0JdWRmX3JlbGVhc2VfZGF0YShVREZfU0JfTFZJREJIKHNiKSk7CisJYnJlbHNl
KFVERl9TQl9MVklEQkgoc2IpKTsKIAlVREZfU0JfRlJFRShzYik7CiAJa2ZyZWUoc2ItPnNfZnNf
aW5mbyk7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CkBAIC0xODM1LDcgKzE4MzcsNyBAQAogCX0K
IAllbHNlIGlmIChpZGVudCAhPSBUQUdfSURFTlRfU0JEKQogCXsKLQkJdWRmX3JlbGVhc2VfZGF0
YShiaCk7CisJCWJyZWxzZShiaCk7CiAJCXByaW50ayhLRVJOX0VSUiAidWRmOiB1ZGZfY291bnRf
ZnJlZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODU3LDcgKzE4NTksNyBAQAog
CQl9CiAJCWlmICggYnl0ZXMgKQogCQl7Ci0JCQl1ZGZfcmVsZWFzZV9kYXRhKGJoKTsKKwkJCWJy
ZWxzZShiaCk7CiAJCQluZXdibG9jayA9IHVkZl9nZXRfbGJfcGJsb2NrKHNiLCBsb2MsICsrYmxv
Y2spOwogCQkJYmggPSB1ZGZfdHJlYWQoc2IsIG5ld2Jsb2NrKTsKIAkJCWlmICghYmgpCkBAIC0x
ODY5LDcgKzE4NzEsNyBAQAogCQkJcHRyID0gKHVpbnQ4X3QgKiliaC0+Yl9kYXRhOwogCQl9CiAJ
fQotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShiaCk7CiAKIG91dDoKIAl1bmxvY2tf
a2VybmVsKCk7CkBAIC0xODgxLDIxICsxODgzLDIwIEBACiB1ZGZfY291bnRfZnJlZV90YWJsZShz
dHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKiB0YWJsZSkKIHsKIAl1bnNpZ25l
ZCBpbnQgYWNjdW0gPSAwOwotCXVpbnQzMl90IGV4dG9mZnNldCwgZWxlbjsKLQlrZXJuZWxfbGJf
YWRkciBibG9jLCBlbG9jOworCXVpbnQzMl90IGVsZW47CisJa2VybmVsX2xiX2FkZHIgZWxvYzsK
IAlpbnQ4X3QgZXR5cGU7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CisJc3RydWN0
IGV4dGVudF9wb3NpdGlvbiBlcG9zOwogCiAJbG9ja19rZXJuZWwoKTsKIAotCWJsb2MgPSBVREZf
SV9MT0NBVElPTih0YWJsZSk7Ci0JZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3Bh
Y2VFbnRyeSk7CisJZXBvcy5ibG9jayA9IFVERl9JX0xPQ0FUSU9OKHRhYmxlKTsKKwllcG9zLm9m
ZnNldCA9IHNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpOworCWVwb3MuYmggPSBOVUxM
OwogCi0Jd2hpbGUgKChldHlwZSA9IHVkZl9uZXh0X2FleHQodGFibGUsICZibG9jLCAmZXh0b2Zm
c2V0LCAmZWxvYywgJmVsZW4sICZiaCwgMSkpICE9IC0xKQotCXsKKwl3aGlsZSAoKGV0eXBlID0g
dWRmX25leHRfYWV4dCh0YWJsZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMSkpICE9IC0xKQogCQlh
Y2N1bSArPSAoZWxlbiA+PiB0YWJsZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JfQotCXVk
Zl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIAogCXVubG9ja19rZXJuZWwo
KTsKIApkaWZmIC11ck4ga2VybmVsLXNvdXJjZS0yLjYuMTgub3JpZy9mcy91ZGYvc3ltbGluay5j
IGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi9zeW1saW5rLmMKLS0tIGtlcm5lbC1zb3VyY2Ut
Mi42LjE4Lm9yaWcvZnMvdWRmL3N5bWxpbmsuYwkyMDA2LTA5LTIwIDA2OjQyOjA2ICswMzAwCisr
KyBrZXJuZWwtc291cmNlLTIuNi4xOC9mcy91ZGYvc3ltbGluay5jCTIwMDctMDgtMTQgMDM6MjY6
MDggKzAzMDAKQEAgLTk1LDcgKzk1LDcgQEAKIAl9CiAKIAl1ZGZfcGNfdG9fY2hhcihpbm9kZS0+
aV9zYiwgc3ltbGluaywgaW5vZGUtPmlfc2l6ZSwgcCk7Ci0JdWRmX3JlbGVhc2VfZGF0YShiaCk7
CisJYnJlbHNlKGJoKTsKIAogCXVubG9ja19rZXJuZWwoKTsKIAlTZXRQYWdlVXB0b2RhdGUocGFn
ZSk7CmRpZmYgLXVyTiBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi90cnVuY2F0ZS5j
IGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi90cnVuY2F0ZS5jCi0tLSBrZXJuZWwtc291cmNl
LTIuNi4xOC5vcmlnL2ZzL3VkZi90cnVuY2F0ZS5jCTIwMDYtMDktMjAgMDY6NDI6MDYgKzAzMDAK
KysrIGtlcm5lbC1zb3VyY2UtMi42LjE4L2ZzL3VkZi90cnVuY2F0ZS5jCTIwMDctMDgtMTQgMDM6
MjY6MDggKzAzMDAKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJ1ZGZfaS5oIgogI2luY2x1
ZGUgInVkZl9zYi5oIgogCi1zdGF0aWMgdm9pZCBleHRlbnRfdHJ1bmMoc3RydWN0IGlub2RlICog
aW5vZGUsIGtlcm5lbF9sYl9hZGRyIGJsb2MsIGludCBleHRvZmZzZXQsCi0Ja2VybmVsX2xiX2Fk
ZHIgZWxvYywgaW50OF90IGV0eXBlLCB1aW50MzJfdCBlbGVuLCBzdHJ1Y3QgYnVmZmVyX2hlYWQg
KmJoLCB1aW50MzJfdCBuZWxlbikKK3N0YXRpYyB2b2lkIGV4dGVudF90cnVuYyhzdHJ1Y3QgaW5v
ZGUgKiBpbm9kZSwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqZXBvcywKKwlrZXJuZWxfbGJfYWRk
ciBlbG9jLCBpbnQ4X3QgZXR5cGUsIHVpbnQzMl90IGVsZW4sIHVpbnQzMl90IG5lbGVuKQogewog
CWtlcm5lbF9sYl9hZGRyIG5lbG9jID0geyAwLCAwIH07CiAJaW50IGxhc3RfYmxvY2sgPSAoZWxl
biArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nr
c2l6ZV9iaXRzOwpAQCAtNDksNyArNDksNyBAQAogCiAJaWYgKGVsZW4gIT0gbmVsZW4pCiAJewot
CQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgYmxvYywgJmV4dG9mZnNldCwgbmVsb2MsIG5lbGVuLCBi
aCwgMCk7CisJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBlcG9zLCBuZWxvYywgbmVsZW4sIDApOwog
CQlpZiAobGFzdF9ibG9jayAtIGZpcnN0X2Jsb2NrID4gMCkKIAkJewogCQkJaWYgKGV0eXBlID09
IChFWFRfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKQEAgLTYxLDc0ICs2MSwxMjUgQEAKIAl9
CiB9CiAKLXZvaWQgdWRmX2Rpc2NhcmRfcHJlYWxsb2Moc3RydWN0IGlub2RlICogaW5vZGUpCisv
KgorICogVHJ1bmNhdGUgdGhlIGxhc3QgZXh0ZW50IHRvIG1hdGNoIGlfc2l6ZS4gVGhpcyBmdW5j
dGlvbiBhc3N1bWVzCisgKiB0aGF0IHByZWFsbG9jYXRpb24gZXh0ZW50IGlzIGFscmVhZHkgdHJ1
bmNhdGVkLgorICovCit2b2lkIHVkZl90cnVuY2F0ZV90YWlsX2V4dGVudChzdHJ1Y3QgaW5vZGUg
Kmlub2RlKQogewotCWtlcm5lbF9sYl9hZGRyIGJsb2MsIGVsb2M7Ci0JdWludDMyX3QgZXh0b2Zm
c2V0ID0gMCwgZWxlbiwgbmVsZW47CisJc3RydWN0IGV4dGVudF9wb3NpdGlvbiBlcG9zID0geyBO
VUxMLCAwLCB7MCwgMH19OworCWtlcm5lbF9sYl9hZGRyIGVsb2M7CisJdWludDMyX3QgZWxlbiwg
bmVsZW47CiAJdWludDY0X3QgbGJjb3VudCA9IDA7CiAJaW50OF90IGV0eXBlID0gLTEsIG5ldHlw
ZTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgYWRzaXplOwogCiAJaWYg
KFVERl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCIHx8Ci0JCWlu
b2RlLT5pX3NpemUgPT0gVURGX0lfTEVORVhURU5UUyhpbm9kZSkpCi0JeworCSAgICBpbm9kZS0+
aV9zaXplID09IFVERl9JX0xFTkVYVEVOVFMoaW5vZGUpKQorCQlyZXR1cm47CisJLyogQXJlIHdl
IGdvaW5nIHRvIGRlbGV0ZSB0aGUgZmlsZSBhbnl3YXk/ICovCisJaWYgKGlub2RlLT5pX25saW5r
ID09IDApCiAJCXJldHVybjsKLQl9CiAKIAlpZiAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJ
Q0JUQUdfRkxBR19BRF9TSE9SVCkKIAkJYWRzaXplID0gc2l6ZW9mKHNob3J0X2FkKTsKIAllbHNl
IGlmIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpID09IElDQlRBR19GTEFHX0FEX0xPTkcpCiAJCWFk
c2l6ZSA9IHNpemVvZihsb25nX2FkKTsKIAllbHNlCi0JCWFkc2l6ZSA9IDA7Ci0KLQlibG9jID0g
VURGX0lfTE9DQVRJT04oaW5vZGUpOworCQlCVUcoKTsKIAotCXdoaWxlICgobmV0eXBlID0gdWRm
X25leHRfYWV4dChpbm9kZSwgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJmJoLCAx
KSkgIT0gLTEpCisJLyogRmluZCB0aGUgbGFzdCBleHRlbnQgaW4gdGhlIGZpbGUgKi8KKwl3aGls
ZSAoKG5ldHlwZSA9IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEp
KSAhPSAtMSkKIAl7CiAJCWV0eXBlID0gbmV0eXBlOwogCQlsYmNvdW50ICs9IGVsZW47Ci0JCWlm
IChsYmNvdW50ID4gaW5vZGUtPmlfc2l6ZSAmJiBsYmNvdW50IC0gaW5vZGUtPmlfc2l6ZSA8IGlu
b2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKLQkJeworCQlpZiAobGJjb3VudCA+IGlub2RlLT5pX3Np
emUpIHsKKwkJCWlmIChsYmNvdW50IC0gaW5vZGUtPmlfc2l6ZSA+PSBpbm9kZS0+aV9zYi0+c19i
bG9ja3NpemUpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAidWRmX3RydW5j
YXRlX3RhaWxfZXh0ZW50KCk6IFRvbyBsb25nICIKKwkJCQkgICAgICAgImV4dGVudCBhZnRlciBF
T0YgaW4gaW5vZGUgJXU6IGlfc2l6ZTogIgorCQkJCSAgICAgICAiJUxkIGxiY291bnQ6ICVMZCBl
eHRlbnQgJXUrJXVcbiIsCisJCQkJICAgICAgICh1bnNpZ25lZClpbm9kZS0+aV9pbm8sCisJCQkJ
ICAgICAgIChsb25nIGxvbmcpaW5vZGUtPmlfc2l6ZSwKKwkJCQkgICAgICAgKGxvbmcgbG9uZyls
YmNvdW50LAorCQkJCSAgICAgICAodW5zaWduZWQpZWxvYy5sb2dpY2FsQmxvY2tOdW0sCisJCQkJ
ICAgICAgICh1bnNpZ25lZCllbGVuKTsKIAkJCW5lbGVuID0gZWxlbiAtIChsYmNvdW50IC0gaW5v
ZGUtPmlfc2l6ZSk7Ci0JCQlleHRlbnRfdHJ1bmMoaW5vZGUsIGJsb2MsIGV4dG9mZnNldC1hZHNp
emUsIGVsb2MsIGV0eXBlLCBlbGVuLCBiaCwgbmVsZW4pOwotCQkJbGJjb3VudCA9IGlub2RlLT5p
X3NpemU7CisJCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CisJCQlleHRlbnRfdHJ1bmMoaW5vZGUs
ICZlcG9zLCBlbG9jLCBldHlwZSwgZWxlbiwgbmVsZW4pOworCQkJZXBvcy5vZmZzZXQgKz0gYWRz
aXplOworCQkJaWYgKHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEp
ICE9IC0xKQorCQkJCXByaW50ayhLRVJOX0VSUiAidWRmX3RydW5jYXRlX3RhaWxfZXh0ZW50KCk6
ICIKKwkJCQkgICAgICAgIkV4dGVudCBhZnRlciBFT0YgaW4gaW5vZGUgJXUuXG4iLAorCQkJCSAg
ICAgICAodW5zaWduZWQpaW5vZGUtPmlfaW5vKTsKKwkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChl
dHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQotCXsKLQkJZXh0b2Zm
c2V0IC09IGFkc2l6ZTsKKwkvKiBUaGlzIGlub2RlIGVudHJ5IGlzIGluLW1lbW9yeSBvbmx5IGFu
ZCB0aHVzIHdlIGRvbid0IGhhdmUgdG8gbWFyaworCSAqIHRoZSBpbm9kZSBkaXJ0eSAqLworCVVE
Rl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gaW5vZGUtPmlfc2l6ZTsKKwlicmVsc2UoZXBvcy5iaCk7
Cit9CisKK3ZvaWQgdWRmX2Rpc2NhcmRfcHJlYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKK3sK
KwlzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIGVwb3MgPSB7IE5VTEwsIDAsIHswLCAwfX07CisJa2Vy
bmVsX2xiX2FkZHIgZWxvYzsKKwl1aW50MzJfdCBlbGVuOworCXVpbnQ2NF90IGxiY291bnQgPSAw
OworCWludDhfdCBldHlwZSA9IC0xLCBuZXR5cGU7CisJaW50IGFkc2l6ZTsKKworCWlmIChVREZf
SV9BTExPQ1RZUEUoaW5vZGUpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQiB8fAorCQlpbm9kZS0+
aV9zaXplID09IFVERl9JX0xFTkVYVEVOVFMoaW5vZGUpKQorCQlyZXR1cm47CisKKwlpZiAoVURG
X0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdfRkxBR19BRF9TSE9SVCkKKwkJYWRzaXplID0g
c2l6ZW9mKHNob3J0X2FkKTsKKwllbHNlIGlmIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpID09IElD
QlRBR19GTEFHX0FEX0xPTkcpCisJCWFkc2l6ZSA9IHNpemVvZihsb25nX2FkKTsKKwllbHNlCisJ
CWFkc2l6ZSA9IDA7CisKKwllcG9zLmJsb2NrID0gVURGX0lfTE9DQVRJT04oaW5vZGUpOworCisJ
LyogRmluZCB0aGUgbGFzdCBleHRlbnQgaW4gdGhlIGZpbGUgKi8KKwl3aGlsZSAoKG5ldHlwZSA9
IHVkZl9uZXh0X2FleHQoaW5vZGUsICZlcG9zLCAmZWxvYywgJmVsZW4sIDEpKSAhPSAtMSkgewor
CQlldHlwZSA9IG5ldHlwZTsKKwkJbGJjb3VudCArPSBlbGVuOworCX0KKwlpZiAoZXR5cGUgPT0g
KEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkgeworCQllcG9zLm9mZnNldCAtPSBh
ZHNpemU7CiAJCWxiY291bnQgLT0gZWxlbjsKLQkJZXh0ZW50X3RydW5jKGlub2RlLCBibG9jLCBl
eHRvZmZzZXQsIGVsb2MsIGV0eXBlLCBlbGVuLCBiaCwgMCk7Ci0JCWlmICghYmgpCi0JCXsKLQkJ
CVVERl9JX0xFTkFMTE9DKGlub2RlKSA9IGV4dG9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2FsbG9j
X29mZnNldChpbm9kZSk7CisJCWV4dGVudF90cnVuYyhpbm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBl
LCBlbGVuLCAwKTsKKwkJaWYgKCFlcG9zLmJoKSB7CisJCQlVREZfSV9MRU5BTExPQyhpbm9kZSkg
PSBlcG9zLm9mZnNldCAtIHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSk7CiAJCQlt
YXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCXN0cnVjdCBhbGxv
Y0V4dERlc2MgKmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGJoLT5iX2RhdGEpOwotCQkJ
YWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIoZXh0b2Zmc2V0IC0gc2l6ZW9mKHN0
cnVjdCBhbGxvY0V4dERlc2MpKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBhbGxvY0V4dERlc2Mg
KmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGVwb3MuYmgtPmJfZGF0YSk7CisJCQlhZWQt
Pmxlbmd0aEFsbG9jRGVzY3MgPSBjcHVfdG9fbGUzMihlcG9zLm9mZnNldCAtIHNpemVvZihzdHJ1
Y3QgYWxsb2NFeHREZXNjKSk7CiAJCQlpZiAoIVVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBV
REZfRkxBR19TVFJJQ1QpIHx8IFVERl9TQl9VREZSRVYoaW5vZGUtPmlfc2IpID49IDB4MDIwMSkK
LQkJCQl1ZGZfdXBkYXRlX3RhZyhiaC0+Yl9kYXRhLCBleHRvZmZzZXQpOworCQkJCXVkZl91cGRh
dGVfdGFnKGVwb3MuYmgtPmJfZGF0YSwgZXBvcy5vZmZzZXQpOwogCQkJZWxzZQotCQkJCXVkZl91
cGRhdGVfdGFnKGJoLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7Ci0JCQlt
YXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOworCQkJCXVkZl91cGRhdGVfdGFnKGVw
b3MuYmgtPmJfZGF0YSwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKKwkJCW1hcmtfYnVm
ZmVyX2RpcnR5X2lub2RlKGVwb3MuYmgsIGlub2RlKTsKIAkJfQogCX0KKwkvKiBUaGlzIGlub2Rl
IGVudHJ5IGlzIGluLW1lbW9yeSBvbmx5IGFuZCB0aHVzIHdlIGRvbid0IGhhdmUgdG8gbWFyawor
CSAqIHRoZSBpbm9kZSBkaXJ0eSAqLwogCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gbGJjb3Vu
dDsKLQotCXVkZl9yZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIH0KIAogdm9p
ZCB1ZGZfdHJ1bmNhdGVfZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKLQlrZXJuZWxf
bGJfYWRkciBibG9jLCBlbG9jLCBuZWxvYyA9IHsgMCwgMCB9OwotCXVpbnQzMl90IGV4dG9mZnNl
dCwgZWxlbiwgb2Zmc2V0LCBuZWxlbiA9IDAsIGxlbGVuID0gMCwgbGVuYWxsb2M7CisJc3RydWN0
IGV4dGVudF9wb3NpdGlvbiBlcG9zOworCWtlcm5lbF9sYl9hZGRyIGVsb2MsIG5lbG9jID0geyAw
LCAwIH07CisJdWludDMyX3QgZWxlbiwgbmVsZW4gPSAwLCBpbmRpcmVjdF9leHRfbGVuID0gMCwg
bGVuYWxsb2M7CiAJaW50OF90IGV0eXBlOwotCWludCBmaXJzdF9ibG9jayA9IGlub2RlLT5pX3Np
emUgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFk
ICpiaCA9IE5VTEw7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXNl
Y3Rvcl90IGZpcnN0X2Jsb2NrID0gaW5vZGUtPmlfc2l6ZSA+PiBzYi0+c19ibG9ja3NpemVfYml0
cywgb2Zmc2V0OworCWxvZmZfdCBieXRlX29mZnNldDsKIAlpbnQgYWRzaXplOwogCiAJaWYgKFVE
Rl9JX0FMTE9DVFlQRShpbm9kZSkgPT0gSUNCVEFHX0ZMQUdfQURfU0hPUlQpCkBAIC0xMzYsMTU4
ICsxODcsMTMwIEBACiAJZWxzZSBpZiAoVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9PSBJQ0JUQUdf
RkxBR19BRF9MT05HKQogCQlhZHNpemUgPSBzaXplb2YobG9uZ19hZCk7CiAJZWxzZQotCQlhZHNp
emUgPSAwOworCQlCVUcoKTsKIAotCWV0eXBlID0gaW5vZGVfYm1hcChpbm9kZSwgZmlyc3RfYmxv
Y2ssICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywgJmVsZW4sICZvZmZzZXQsICZiaCk7Ci0Jb2Zm
c2V0ICs9IChpbm9kZS0+aV9zaXplICYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsK
KwlldHlwZSA9IGlub2RlX2JtYXAoaW5vZGUsIGZpcnN0X2Jsb2NrLCAmZXBvcywgJmVsb2MsICZl
bGVuLCAmb2Zmc2V0KTsKKwlieXRlX29mZnNldCA9IChvZmZzZXQgPDwgc2ItPnNfYmxvY2tzaXpl
X2JpdHMpICsgKGlub2RlLT5pX3NpemUgJiAoc2ItPnNfYmxvY2tzaXplLTEpKTsKIAlpZiAoZXR5
cGUgIT0gLTEpCiAJewotCQlleHRvZmZzZXQgLT0gYWRzaXplOwotCQlleHRlbnRfdHJ1bmMoaW5v
ZGUsIGJsb2MsIGV4dG9mZnNldCwgZWxvYywgZXR5cGUsIGVsZW4sIGJoLCBvZmZzZXQpOwotCQll
eHRvZmZzZXQgKz0gYWRzaXplOwotCi0JCWlmIChvZmZzZXQpCi0JCQlsZW5hbGxvYyA9IGV4dG9m
ZnNldDsKKwkJZXBvcy5vZmZzZXQgLT0gYWRzaXplOworCQlleHRlbnRfdHJ1bmMoaW5vZGUsICZl
cG9zLCBlbG9jLCBldHlwZSwgZWxlbiwgYnl0ZV9vZmZzZXQpOworCQllcG9zLm9mZnNldCArPSBh
ZHNpemU7CisJCWlmIChieXRlX29mZnNldCkKKwkJCWxlbmFsbG9jID0gZXBvcy5vZmZzZXQ7CiAJ
CWVsc2UKLQkJCWxlbmFsbG9jID0gZXh0b2Zmc2V0IC0gYWRzaXplOworCQkJbGVuYWxsb2MgPSBl
cG9zLm9mZnNldCAtIGFkc2l6ZTsKIAotCQlpZiAoIWJoKQorCQlpZiAoIWVwb3MuYmgpCiAJCQls
ZW5hbGxvYyAtPSB1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpOwogCQllbHNlCiAJ
CQlsZW5hbGxvYyAtPSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYyk7CiAKLQkJd2hpbGUgKChl
dHlwZSA9IHVkZl9jdXJyZW50X2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCAmZWxvYywg
JmVsZW4sICZiaCwgMCkpICE9IC0xKQorCQl3aGlsZSAoKGV0eXBlID0gdWRmX2N1cnJlbnRfYWV4
dChpbm9kZSwgJmVwb3MsICZlbG9jLCAmZWxlbiwgMCkpICE9IC0xKQogCQl7CiAJCQlpZiAoZXR5
cGUgPT0gKEVYVF9ORVhUX0VYVEVOVF9BTExPQ0RFQ1MgPj4gMzApKQogCQkJewotCQkJCXVkZl93
cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBuZWxvYywgbmVsZW4sIGJoLCAwKTsK
LQkJCQlleHRvZmZzZXQgPSAwOwotCQkJCWlmIChsZWxlbikKKwkJCQl1ZGZfd3JpdGVfYWV4dChp
bm9kZSwgJmVwb3MsIG5lbG9jLCBuZWxlbiwgMCk7CisJCQkJaWYgKGluZGlyZWN0X2V4dF9sZW4p
CiAJCQkJewotCQkJCQlpZiAoIWJoKQorCQkJCQkvKiBXZSBtYW5hZ2VkIHRvIGZyZWUgYWxsIGV4
dGVudHMgaW4gdGhlCisJCQkJCSAqIGluZGlyZWN0IGV4dGVudCAtIGZyZWUgaXQgdG9vICovCisJ
CQkJCWlmICghZXBvcy5iaCkKIAkJCQkJCUJVRygpOwotCQkJCQllbHNlCi0JCQkJCQltZW1zZXQo
YmgtPmJfZGF0YSwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKLQkJCQkJdWRm
X2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgYmxvYywgMCwgbGVsZW4pOworCQkJCQl1
ZGZfZnJlZV9ibG9ja3Moc2IsIGlub2RlLCBlcG9zLmJsb2NrLCAwLCBpbmRpcmVjdF9leHRfbGVu
KTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJaWYgKCFiaCkKKwkJCQkJaWYgKCFlcG9z
LmJoKQogCQkJCQl7CiAJCQkJCQlVREZfSV9MRU5BTExPQyhpbm9kZSkgPSBsZW5hbGxvYzsKIAkJ
CQkJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJCQl9CiAJCQkJCWVsc2UKIAkJCQkJewot
CQkJCQkJc3RydWN0IGFsbG9jRXh0RGVzYyAqYWVkID0gKHN0cnVjdCBhbGxvY0V4dERlc2MgKiko
YmgtPmJfZGF0YSk7CisJCQkJCQlzdHJ1Y3QgYWxsb2NFeHREZXNjICphZWQgPSAoc3RydWN0IGFs
bG9jRXh0RGVzYyAqKShlcG9zLmJoLT5iX2RhdGEpOwogCQkJCQkJYWVkLT5sZW5ndGhBbGxvY0Rl
c2NzID0gY3B1X3RvX2xlMzIobGVuYWxsb2MpOwotCQkJCQkJaWYgKCFVREZfUVVFUllfRkxBRyhp
bm9kZS0+aV9zYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKGlub2RlLT5pX3Ni
KSA+PSAweDAyMDEpCi0JCQkJCQkJdWRmX3VwZGF0ZV90YWcoYmgtPmJfZGF0YSwgbGVuYWxsb2Mg
KworCQkJCQkJaWYgKCFVREZfUVVFUllfRkxBRyhzYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZf
U0JfVURGUkVWKHNiKSA+PSAweDAyMDEpCisJCQkJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5iaC0+
Yl9kYXRhLCBsZW5hbGxvYyArCiAJCQkJCQkJCXNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7
CiAJCQkJCQllbHNlCi0JCQkJCQkJdWRmX3VwZGF0ZV90YWcoYmgtPmJfZGF0YSwgc2l6ZW9mKHN0
cnVjdCBhbGxvY0V4dERlc2MpKTsKLQkJCQkJCW1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKGJoLCBp
bm9kZSk7CisJCQkJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5iaC0+Yl9kYXRhLCBzaXplb2Yoc3Ry
dWN0IGFsbG9jRXh0RGVzYykpOworCQkJCQkJbWFya19idWZmZXJfZGlydHlfaW5vZGUoZXBvcy5i
aCwgaW5vZGUpOwogCQkJCQl9CiAJCQkJfQotCi0JCQkJdWRmX3JlbGVhc2VfZGF0YShiaCk7Ci0J
CQkJZXh0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpOwotCQkJCWJsb2MgPSBl
bG9jOwotCQkJCWJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLCB1ZGZfZ2V0X2xiX3BibG9jayhp
bm9kZS0+aV9zYiwgYmxvYywgMCkpOworCQkJCWJyZWxzZShlcG9zLmJoKTsKKwkJCQllcG9zLm9m
ZnNldCA9IHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKTsKKwkJCQllcG9zLmJsb2NrID0gZWxv
YzsKKwkJCQllcG9zLmJoID0gdWRmX3RyZWFkKHNiLCB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgZWxv
YywgMCkpOwogCQkJCWlmIChlbGVuKQotCQkJCQlsZWxlbiA9IChlbGVuICsgaW5vZGUtPmlfc2It
PnNfYmxvY2tzaXplIC0gMSkgPj4KLQkJCQkJCWlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRz
OworCQkJCQlpbmRpcmVjdF9leHRfbGVuID0gKGVsZW4gKworCQkJCQkJc2ItPnNfYmxvY2tzaXpl
IC0gMSkgPj4KKwkJCQkJCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCQkJCWVsc2UKLQkJCQkJbGVs
ZW4gPSAxOworCQkJCQlpbmRpcmVjdF9leHRfbGVuID0gMTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsK
LQkJCQlleHRlbnRfdHJ1bmMoaW5vZGUsIGJsb2MsIGV4dG9mZnNldCwgZWxvYywgZXR5cGUsIGVs
ZW4sIGJoLCAwKTsKLQkJCQlleHRvZmZzZXQgKz0gYWRzaXplOworCQkJCWV4dGVudF90cnVuYyhp
bm9kZSwgJmVwb3MsIGVsb2MsIGV0eXBlLCBlbGVuLCAwKTsKKwkJCQllcG9zLm9mZnNldCArPSBh
ZHNpemU7CiAJCQl9CiAJCX0KIAotCQlpZiAobGVsZW4pCisJCWlmIChpbmRpcmVjdF9leHRfbGVu
KQogCQl7Ci0JCQlpZiAoIWJoKQorCQkJaWYgKCFlcG9zLmJoKQogCQkJCUJVRygpOwotCQkJZWxz
ZQotCQkJCW1lbXNldChiaC0+Yl9kYXRhLCAweDAwLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVz
YykpOwotCQkJdWRmX2ZyZWVfYmxvY2tzKGlub2RlLT5pX3NiLCBpbm9kZSwgYmxvYywgMCwgbGVs
ZW4pOworCQkJdWRmX2ZyZWVfYmxvY2tzKHNiLCBpbm9kZSwgZXBvcy5ibG9jaywgMCwgaW5kaXJl
Y3RfZXh0X2xlbik7CiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlpZiAoIWJoKQorCQkJaWYgKCFlcG9z
LmJoKQogCQkJewogCQkJCVVERl9JX0xFTkFMTE9DKGlub2RlKSA9IGxlbmFsbG9jOwogCQkJCW1h
cmtfaW5vZGVfZGlydHkoaW5vZGUpOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCXN0cnVjdCBh
bGxvY0V4dERlc2MgKmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGJoLT5iX2RhdGEpOwor
CQkJCXN0cnVjdCBhbGxvY0V4dERlc2MgKmFlZCA9IChzdHJ1Y3QgYWxsb2NFeHREZXNjICopKGVw
b3MuYmgtPmJfZGF0YSk7CiAJCQkJYWVkLT5sZW5ndGhBbGxvY0Rlc2NzID0gY3B1X3RvX2xlMzIo
bGVuYWxsb2MpOwotCQkJCWlmICghVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFH
X1NUUklDVCkgfHwgVURGX1NCX1VERlJFVihpbm9kZS0+aV9zYikgPj0gMHgwMjAxKQotCQkJCQl1
ZGZfdXBkYXRlX3RhZyhiaC0+Yl9kYXRhLCBsZW5hbGxvYyArCisJCQkJaWYgKCFVREZfUVVFUllf
RkxBRyhzYiwgVURGX0ZMQUdfU1RSSUNUKSB8fCBVREZfU0JfVURGUkVWKHNiKSA+PSAweDAyMDEp
CisJCQkJCXVkZl91cGRhdGVfdGFnKGVwb3MuYmgtPmJfZGF0YSwgbGVuYWxsb2MgKwogCQkJCQkJ
c2l6ZW9mKHN0cnVjdCBhbGxvY0V4dERlc2MpKTsKIAkJCQllbHNlCi0JCQkJCXVkZl91cGRhdGVf
dGFnKGJoLT5iX2RhdGEsIHNpemVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSk7Ci0JCQkJbWFya19i
dWZmZXJfZGlydHlfaW5vZGUoYmgsIGlub2RlKTsKKwkJCQkJdWRmX3VwZGF0ZV90YWcoZXBvcy5i
aC0+Yl9kYXRhLCBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpOworCQkJCW1hcmtfYnVmZmVy
X2RpcnR5X2lub2RlKGVwb3MuYmgsIGlub2RlKTsKIAkJCX0KIAkJfQogCX0KIAllbHNlIGlmIChp
bm9kZS0+aV9zaXplKQogCXsKLQkJaWYgKG9mZnNldCkKKwkJaWYgKGJ5dGVfb2Zmc2V0KQogCQl7
CisJCQlrZXJuZWxfbG9uZ19hZCBleHRlbnQ7CisKIAkJCS8qCiAJCQkgKiAgT0ssIHRoZXJlIGlz
IG5vdCBleHRlbnQgY292ZXJpbmcgaW5vZGUtPmlfc2l6ZSBhbmQKIAkJCSAqICBubyBleHRlbnQg
YWJvdmUgaW5vZGUtPmlfc2l6ZSA9PiB0cnVuY2F0ZSBpcwotCQkJICogIGV4dGVuZGluZyB0aGUg
ZmlsZSBieSAnb2Zmc2V0Jy4KKwkJCSAqICBleHRlbmRpbmcgdGhlIGZpbGUgYnkgJ29mZnNldCcg
YmxvY2tzLgogCQkJICovCi0JCQlpZiAoKCFiaCAmJiBleHRvZmZzZXQgPT0gdWRmX2ZpbGVfZW50
cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSkgfHwKLQkJCSAgICAoYmggJiYgZXh0b2Zmc2V0ID09IHNp
emVvZihzdHJ1Y3QgYWxsb2NFeHREZXNjKSkpIHsKLQkJCQkvKiBGaWxlIGhhcyBubyBleHRlbnRz
IGF0IGFsbCEgKi8KLQkJCQltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihrZXJuZWxfbGJfYWRk
cikpOwotCQkJCWVsZW4gPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfCBvZmZzZXQ7
Ci0JCQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwg
JmJoLCAxKTsKKwkJCWlmICgoIWVwb3MuYmggJiYgZXBvcy5vZmZzZXQgPT0gdWRmX2ZpbGVfZW50
cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSkgfHwKKwkJCSAgICAoZXBvcy5iaCAmJiBlcG9zLm9mZnNl
dCA9PSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpKSB7CisJCQkJLyogRmlsZSBoYXMgbm8g
ZXh0ZW50cyBhdCBhbGwgb3IgaGFzIGVtcHR5IGxhc3QKKwkJCQkgKiBpbmRpcmVjdCBleHRlbnQh
IENyZWF0ZSBhIGZha2UgZXh0ZW50Li4uICovCisJCQkJZXh0ZW50LmV4dExvY2F0aW9uLmxvZ2lj
YWxCbG9ja051bSA9IDA7CisJCQkJZXh0ZW50LmV4dExvY2F0aW9uLnBhcnRpdGlvblJlZmVyZW5j
ZU51bSA9IDA7CisJCQkJZXh0ZW50LmV4dExlbmd0aCA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FM
TE9DQVRFRDsKIAkJCX0KIAkJCWVsc2UgewotCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJ
ZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZl
bGVuLCAmYmgsIDEpOwotCQkJCWlmIChldHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxM
T0NBVEVEID4+IDMwKSkKLQkJCQl7Ci0JCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJCWVs
ZW4gPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfCAoZWxlbiArIG9mZnNldCk7Ci0J
CQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBi
aCwgMCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGV0eXBlID09IChFWFRfTk9UX1JFQ09SREVEX0FM
TE9DQVRFRCA+PiAzMCkpCi0JCQkJewotCQkJCQlrZXJuZWxfbGJfYWRkciBuZWxvYyA9IHsgMCwg
MCB9OwotCQkJCQlleHRvZmZzZXQgLT0gYWRzaXplOwotCQkJCQluZWxlbiA9IEVYVF9OT1RfUkVD
T1JERURfTk9UX0FMTE9DQVRFRCB8Ci0JCQkJCQkoKGVsZW4gKyBvZmZzZXQgKyBpbm9kZS0+aV9z
Yi0+c19ibG9ja3NpemUgLSAxKSAmCi0JCQkJCQl+KGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAt
IDEpKTsKLQkJCQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGJsb2MsICZleHRvZmZzZXQsIG5lbG9j
LCBuZWxlbiwgYmgsIDEpOwotCQkJCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zm
c2V0LCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgJmJoLCAxKTsKLQkJCQl9Ci0JCQkJZWxz
ZQotCQkJCXsKLQkJCQkJaWYgKGVsZW4gJiAoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkp
Ci0JCQkJCXsKLQkJCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJCQllbGVuID0gRVhUX1JF
Q09SREVEX0FMTE9DQVRFRCB8Ci0JCQkJCQkJKChlbGVuICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tz
aXplIC0gMSkgJgotCQkJCQkJCX4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJ
CQkJdWRmX3dyaXRlX2FleHQoaW5vZGUsIGJsb2MsICZleHRvZmZzZXQsIGVsb2MsIGVsZW4sIGJo
LCAxKTsKLQkJCQkJfQotCQkJCQltZW1zZXQoJmVsb2MsIDB4MDAsIHNpemVvZihrZXJuZWxfbGJf
YWRkcikpOwotCQkJCQllbGVuID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwgb2Zm
c2V0OwotCQkJCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCBl
bGVuLCAmYmgsIDEpOwotCQkJCX0KKwkJCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CisJCQkJZXR5
cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmZXBvcywKKwkJCQkJJmV4dGVudC5leHRMb2NhdGlv
biwgJmV4dGVudC5leHRMZW5ndGgsIDApOworCQkJCWV4dGVudC5leHRMZW5ndGggfD0gZXR5cGUg
PDwgMzA7CiAJCQl9CisJCQl1ZGZfZXh0ZW5kX2ZpbGUoaW5vZGUsICZlcG9zLCAmZXh0ZW50LCBv
ZmZzZXQrKChpbm9kZS0+aV9zaXplICYgKHNiLT5zX2Jsb2Nrc2l6ZS0xKSkgIT0gMCkpOwogCQl9
CiAJfQogCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gaW5vZGUtPmlfc2l6ZTsKIAotCXVkZl9y
ZWxlYXNlX2RhdGEoYmgpOworCWJyZWxzZShlcG9zLmJoKTsKIH0KZGlmZiAtdXJOIGtlcm5lbC1z
b3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL3VkZmRlY2wuaCBrZXJuZWwtc291cmNlLTIuNi4xOC9m
cy91ZGYvdWRmZGVjbC5oCi0tLSBrZXJuZWwtc291cmNlLTIuNi4xOC5vcmlnL2ZzL3VkZi91ZGZk
ZWNsLmgJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNvdXJjZS0yLjYuMTgv
ZnMvdWRmL3VkZmRlY2wuaAkyMDA3LTA4LTE0IDAzOjI2OjA4ICswMzAwCkBAIC00Miw5ICs0Miw5
IEBACiBzdHJ1Y3QgYnVmZmVyX2hlYWQ7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2s7CiAKLWV4dGVybiBz
dHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZGZfZGlyX2lub2RlX29wZXJhdGlvbnM7CitleHRlcm4g
Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWRmX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwog
ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2Rpcl9vcGVyYXRpb25zOwot
ZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVkZl9maWxlX2lub2RlX29wZXJhdGlvbnM7
CitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWRmX2ZpbGVfaW5vZGVfb3Bl
cmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVkZl9maWxlX29w
ZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB1
ZGZfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVk
Zl9hZGluaWNiX2FvcHM7CkBAIC03Nyw2ICs3NywxMyBAQAogCXVpbnQ4X3QgdV9sZW47CiB9Owog
CitzdHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uIHsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXVp
bnQzMl90IG9mZnNldDsKKwlrZXJuZWxfbGJfYWRkciBibG9jazsKK307CisKKwogLyogc3VwZXIu
YyAqLwogZXh0ZXJuIHZvaWQgdWRmX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBj
aGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIGV4dGVybiB2b2lkIHVkZl93YXJuaW5nKHN0cnVj
dCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKQEAgLTk4
LDEzICsxMDUsMTQgQEAKIGV4dGVybiB2b2lkIHVkZl9kZWxldGVfaW5vZGUoc3RydWN0IGlub2Rl
ICopOwogZXh0ZXJuIHZvaWQgdWRmX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVy
biBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotZXh0ZXJuIGxvbmcg
dWRmX2Jsb2NrX21hcChzdHJ1Y3QgaW5vZGUgKiwgbG9uZyk7Ci1leHRlcm4gaW50OF90IGlub2Rl
X2JtYXAoc3RydWN0IGlub2RlICosIGludCwga2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwg
a2VybmVsX2xiX2FkZHIgKiwgdWludDMyX3QgKiwgdWludDMyX3QgKiwgc3RydWN0IGJ1ZmZlcl9o
ZWFkICoqKTsKLWV4dGVybiBpbnQ4X3QgdWRmX2FkZF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBrZXJu
ZWxfbGJfYWRkciAqLCBpbnQgKiwga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCBzdHJ1Y3QgYnVm
ZmVyX2hlYWQgKiosIGludCk7Ci1leHRlcm4gaW50OF90IHVkZl93cml0ZV9hZXh0KHN0cnVjdCBp
bm9kZSAqLCBrZXJuZWxfbGJfYWRkciwgaW50ICosIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwg
c3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7Ci1leHRlcm4gaW50OF90IHVkZl9kZWxldGVfYWV4
dChzdHJ1Y3QgaW5vZGUgKiwga2VybmVsX2xiX2FkZHIsIGludCwga2VybmVsX2xiX2FkZHIsIHVp
bnQzMl90LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7Ci1leHRlcm4gaW50OF90IHVkZl9uZXh0X2Fl
eHQoc3RydWN0IGlub2RlICosIGtlcm5lbF9sYl9hZGRyICosIGludCAqLCBrZXJuZWxfbGJfYWRk
ciAqLCB1aW50MzJfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiosIGludCk7Ci1leHRlcm4gaW50
OF90IHVkZl9jdXJyZW50X2FleHQoc3RydWN0IGlub2RlICosIGtlcm5lbF9sYl9hZGRyICosIGlu
dCAqLCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKios
IGludCk7CitleHRlcm4gbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3Jf
dCk7CitleHRlcm4gaW50IHVkZl9leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4
dGVudF9wb3NpdGlvbiAqLCBrZXJuZWxfbG9uZ19hZCAqLCBzZWN0b3JfdCk7CitleHRlcm4gaW50
OF90IGlub2RlX2JtYXAoc3RydWN0IGlub2RlICosIHNlY3Rvcl90LCBzdHJ1Y3QgZXh0ZW50X3Bv
c2l0aW9uICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHNlY3Rvcl90ICopOworZXh0
ZXJuIGludDhfdCB1ZGZfYWRkX2FleHQoc3RydWN0IGlub2RlICosIHN0cnVjdCBleHRlbnRfcG9z
aXRpb24gKiwga2VybmVsX2xiX2FkZHIsIHVpbnQzMl90LCBpbnQpOworZXh0ZXJuIGludDhfdCB1
ZGZfd3JpdGVfYWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLCBr
ZXJuZWxfbGJfYWRkciwgdWludDMyX3QsIGludCk7CitleHRlcm4gaW50OF90IHVkZl9kZWxldGVf
YWV4dChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiwga2VybmVsX2xiX2Fk
ZHIsIHVpbnQzMl90KTsKK2V4dGVybiBpbnQ4X3QgdWRmX25leHRfYWV4dChzdHJ1Y3QgaW5vZGUg
Kiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLCBrZXJuZWxfbGJfYWRkciAqLCB1aW50MzJfdCAq
LCBpbnQpOworZXh0ZXJuIGludDhfdCB1ZGZfY3VycmVudF9hZXh0KHN0cnVjdCBpbm9kZSAqLCBz
dHJ1Y3QgZXh0ZW50X3Bvc2l0aW9uICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIGlu
dCk7CiAKIC8qIG1pc2MuYyAqLwogZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqdWRmX3RnZXRi
bGsoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CkBAIC0xMTMsNyArMTIxLDYgQEAKIGV4dGVy
biBzdHJ1Y3QgZ2VuZXJpY0Zvcm1hdCAqdWRmX2dldF9leHRlbmRlZGF0dHIoc3RydWN0IGlub2Rl
ICosIHVpbnQzMl90LCB1aW50OF90KTsKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9y
ZWFkX3RhZ2dlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50
MTZfdCAqKTsKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVkZl9yZWFkX3B0YWdnZWQoc3Ry
dWN0IHN1cGVyX2Jsb2NrICosIGtlcm5lbF9sYl9hZGRyLCB1aW50MzJfdCwgdWludDE2X3QgKik7
Ci1leHRlcm4gdm9pZCB1ZGZfcmVsZWFzZV9kYXRhKHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKIGV4
dGVybiB2b2lkIHVkZl91cGRhdGVfdGFnKGNoYXIgKiwgaW50KTsKIGV4dGVybiB2b2lkIHVkZl9u
ZXdfdGFnKGNoYXIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDMyX3QsIGlu
dCk7CiAKQEAgLTEzOSw2ICsxNDYsNyBAQAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIHVkZl9uZXdf
aW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCAqKTsKIAogLyogdHJ1bmNhdGUuYyAqLwor
ZXh0ZXJuIHZvaWQgdWRmX3RydW5jYXRlX3RhaWxfZXh0ZW50KHN0cnVjdCBpbm9kZSAqKTsKIGV4
dGVybiB2b2lkIHVkZl9kaXNjYXJkX3ByZWFsbG9jKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2
b2lkIHVkZl90cnVuY2F0ZV9leHRlbnRzKHN0cnVjdCBpbm9kZSAqKTsKIApAQCAtMTUxLDcgKzE1
OSw3IEBACiBleHRlcm4gaW50IHVkZl9mc3luY19maWxlKHN0cnVjdCBmaWxlICosIHN0cnVjdCBk
ZW50cnkgKiwgaW50KTsKIAogLyogZGlyZWN0b3J5LmMgKi8KLWV4dGVybiBzdHJ1Y3QgZmlsZUlk
ZW50RGVzYyAqIHVkZl9maWxlaWRlbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90ICosIHN0
cnVjdCB1ZGZfZmlsZWlkZW50X2JoICosIHN0cnVjdCBmaWxlSWRlbnREZXNjICosIGtlcm5lbF9s
Yl9hZGRyICosIHVpbnQzMl90ICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHVpbnQz
Ml90ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CitleHRlcm4gc3RydWN0IGZpbGVJZGVudERl
c2MgKiB1ZGZfZmlsZWlkZW50X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCAqLCBzdHJ1Y3Qg
dWRmX2ZpbGVpZGVudF9iaCAqLCBzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqLCBzdHJ1Y3QgZXh0ZW50
X3Bvc2l0aW9uICosIGtlcm5lbF9sYl9hZGRyICosIHVpbnQzMl90ICosIHNlY3Rvcl90ICopOwog
ZXh0ZXJuIHN0cnVjdCBmaWxlSWRlbnREZXNjICogdWRmX2dldF9maWxlaWRlbnQodm9pZCAqIGJ1
ZmZlciwgaW50IGJ1ZnNpemUsIGludCAqIG9mZnNldCk7CiBleHRlcm4gbG9uZ19hZCAqIHVkZl9n
ZXRfZmlsZWxvbmdhZCh1aW50OF90ICosIGludCwgaW50ICosIGludCk7CiBleHRlcm4gc2hvcnRf
YWQgKiB1ZGZfZ2V0X2ZpbGVzaG9ydGFkKHVpbnQ4X3QgKiwgaW50LCBpbnQgKiwgaW50KTsKZGlm
ZiAtdXJOIGtlcm5lbC1zb3VyY2UtMi42LjE4Lm9yaWcvZnMvdWRmL3VkZl9zYi5oIGtlcm5lbC1z
b3VyY2UtMi42LjE4L2ZzL3VkZi91ZGZfc2IuaAotLS0ga2VybmVsLXNvdXJjZS0yLjYuMTgub3Jp
Zy9mcy91ZGYvdWRmX3NiLmgJMjAwNi0wOS0yMCAwNjo0MjowNiArMDMwMAorKysga2VybmVsLXNv
dXJjZS0yLjYuMTgvZnMvdWRmL3VkZl9zYi5oCTIwMDctMDgtMTQgMDM6MjY6MDggKzAzMDAKQEAg
LTkzLDcgKzkzLDcgQEAKIAlmb3IgKGk9MDsgaTxucl9ncm91cHM7IGkrKylcCiAJe1wKIAkJaWYg
KFVERl9TQl9CSVRNQVAoWCxZLFosaSkpXAotCQkJdWRmX3JlbGVhc2VfZGF0YShVREZfU0JfQklU
TUFQKFgsWSxaLGkpKTtcCisJCQlicmVsc2UoVURGX1NCX0JJVE1BUChYLFksWixpKSk7XAogCX1c
CiAJaWYgKHNpemUgPD0gUEFHRV9TSVpFKVwKIAkJa2ZyZWUoVURGX1NCX1BBUlRNQVBTKFgpW1ld
Llouc19iaXRtYXApO1wK
</data>

          </attachment>
      

    </bug>

</bugzilla>