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

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

    <bug>
          <bug_id>46359</bug_id>
          
          <creation_ts>2023-06-01 15:53:19 +0300</creation_ts>
          <short_desc>Обновление исходников до версии 4.9.0</short_desc>
          <delta_ts>2023-06-01 15:54:05 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>screen</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>patch</keywords>
          <priority>P5</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Danil Nazarov">idaniel959</reporter>
          <assigned_to name="Fr. Br. George">george</assigned_to>
          <cc>george</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>226875</commentid>
    <comment_count>0</comment_count>
      <attachid>13358</attachid>
    <who name="Danil Nazarov">idaniel959</who>
    <bug_when>2023-06-01 15:53:19 +0300</bug_when>
    <thetext>Created attachment 13358
4.8.0 -&gt; 4.9.0

Патч для обновления исходного кода screen до версии 4.9.0 и патч для обновления .spec-файла.

Исходники старой версии (Gear): https://git.altlinux.org/gears/s/screen.git?p=screen.git;a=tree;hb=dffd32c15b2a4b92cc5a02d5969ec50398779e7f

Исходники новой версии: https://git.savannah.gnu.org/cgit/screen.git</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226877</commentid>
    <comment_count>1</comment_count>
      <attachid>13359</attachid>
    <who name="Danil Nazarov">idaniel959</who>
    <bug_when>2023-06-01 15:54:05 +0300</bug_when>
    <thetext>Created attachment 13359
Патч для spec-файла (4.9.0)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13358</attachid>
            <date>2023-06-01 15:53:19 +0300</date>
            <delta_ts>2023-06-01 15:53:19 +0300</delta_ts>
            <desc>4.8.0 -&gt; 4.9.0</desc>
            <filename>screen-update.patch</filename>
            <type>text/plain</type>
            <size>237399</size>
            <attacher name="Danil Nazarov">idaniel959</attacher>
            
              <data encoding="base64">ZGlmZiAtdXIgc2NyZWVuLm9yaWcvYW5zaS5jIHNjcmVlbi9hbnNpLmMKLS0tIHNjcmVlbi5vcmln
L2Fuc2kuYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjIzMDY2NTAwNyArMDMwMAorKysgc2NyZWVuL2Fu
c2kuYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY2NjYxMTUwMyArMDMwMApAQCAtNzI3LDggKzcyNyw4
IEBACiAJCSAgYnJlYWs7CiAJCX0KICMgIGlmZGVmIERXX0NIQVJTCi0JICAgICAgaWYgKGN1cnIt
PndfZW5jb2RpbmcgPT0gVVRGOCAmJiB1dGY4X2lzZG91YmxlKGMpKQotCQljdXJyLT53X21iY3Mg
PSAweGZmOworCQlpZiAoY3Vyci0+d19lbmNvZGluZyA9PSBVVEY4ICYmIHV0ZjhfaXNkb3VibGUo
YykpCisJCSAgY3Vyci0+d19tYmNzID0gMHhmZjsKICMgIGVuZGlmCiAJICAgICAgZm9udCA9IGN1
cnItPndfcmVuZC5mb250OwogIyBlbmRpZgpAQCAtMzAyNyw3ICszMDI3LDcgQEAKIFdNc2cocCwg
ZXJyLCBzdHIpCiBzdHJ1Y3Qgd2luICpwOwogaW50IGVycjsKLWNvbnN0IGNoYXIgKnN0cjsKK2No
YXIgKnN0cjsKIHsKICAgZXh0ZXJuIHN0cnVjdCBsYXllciAqZmxheWVyOwogICBzdHJ1Y3QgbGF5
ZXIgKm9sZGZsYXllciA9IGZsYXllcjsKZGlmZiAtdXIgc2NyZWVuLm9yaWcvYXR0YWNoZXIuYyBz
Y3JlZW4vYXR0YWNoZXIuYwotLS0gc2NyZWVuLm9yaWcvYXR0YWNoZXIuYwkyMDIzLTA2LTAxIDE0
OjU4OjE3LjIzMTY2NTAwOSArMDMwMAorKysgc2NyZWVuL2F0dGFjaGVyLmMJMjAyMi0wMS0yOCAx
NzowNjowMi42NjY2MTE1MDMgKzAzMDAKQEAgLTMzLDE0ICszMyw5IEBACiAjaW5jbHVkZSA8c3lz
L2lvY3RsLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNs
dWRlIDxzeXNsb2cuaD4KICNpbmNsdWRlICJzY3JlZW4uaCIKICNpbmNsdWRlICJleHRlcm4uaCIK
IAotI2lmZGVmIFVTRV9QQU0KLSNpbmNsdWRlIDxzZWN1cml0eS9wYW1fdXNlcnBhc3MuaD4KLSNl
bmRpZgotCiAjaW5jbHVkZSA8cHdkLmg+CiAKIHN0YXRpYyBpbnQgV3JpdGVNZXNzYWdlIF9fUCgo
aW50LCBzdHJ1Y3QgbXNnICopKTsKQEAgLTU5LDcgKzU0LDcgQEAKICNlbmRpZgogc3RhdGljIHNp
Z3JldF90IEF0dGFjaFNpZ0NvbnQgX19QKFNJR1BST1RPQVJHKTsKIAotZXh0ZXJuIGludCByZWFs
X3VpZCwgcmVhbF9naWQsIGVmZl91aWQsIGVmZl9naWQsIGluaXRfZWZmX2dpZDsKK2V4dGVybiBp
bnQgcmVhbF91aWQsIHJlYWxfZ2lkLCBlZmZfdWlkLCBlZmZfZ2lkOwogZXh0ZXJuIGludCBTZXJ2
ZXJTb2NrZXQ7CiBleHRlcm4gc3RydWN0IGRpc3BsYXkgKmRpc3BsYXlzOwogZXh0ZXJuIGNoYXIg
KlNvY2tOYW1lLCAqU29ja01hdGNoLCBTb2NrUGF0aFtdOwpAQCAtNzA0LDcgKzY5OSw3IEBACiAv
KiBBRERFRCBieSBSYWluZXIgUHJ1eSAxMC8xNS84NyAqLwogLyogUE9MSVNIRUQgYnkgbWxzLiAw
My8xMC85MSAqLwogCi1zdGF0aWMgY29uc3QgY2hhciBMb2NrRW5kW10gPSAiV2VsY29tZSBiYWNr
IHRvIHNjcmVlbiAhIVxuIjsKK3N0YXRpYyBjaGFyIExvY2tFbmRbXSA9ICJXZWxjb21lIGJhY2sg
dG8gc2NyZWVuICEhXG4iOwogCiBzdGF0aWMgc2lncmV0X3QKIExvY2tIdXAgU0lHREVGQVJHCkBA
IC03NDEsNyArNzM2LDYgQEAKICAgICB7CiAgICAgICBzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7
CiAgICAgICBkZWJ1ZzEoImxvY2t0ZXJtaW5hbDogJyVzJyBzZWVtcyBleGVjdXRhYmxlLCBleGVj
bCBpdCFcbiIsIHByZyk7Ci0gICAgICBmZmx1c2goTlVMTCk7CiAgICAgICBpZiAoKHBpZCA9IGZv
cmsoKSkgPT0gMCkKICAgICAgICAgewogICAgICAgICAgIC8qIENoaWxkICovCkBAIC04MjEsNyAr
ODE1LDYgQEAKIAogI2lmZGVmIFVTRV9QQU0KIAotI2lmIDAKIC8qCiAgKiAgUEFNIHN1cHBvcnQg
YnkgUGFibG8gQXZlcmJ1aiA8cGFibG9AYXZlcmJ1ai5jb20+CiAgKi8KQEAgLTg3NiwxMyArODY5
LDggQEAKICAgICAmUEFNX2NvbnYsCiAgICAgTlVMTAogfTsKLSNlbmRpZgogCi1zdGF0aWMgcGFt
X3VzZXJwYXNzX3QgdXNlcnBhc3M7Ci1zdGF0aWMgc3RydWN0IHBhbV9jb252IGNvbnYgPSB7Ci0g
ICAgJnBhbV91c2VycGFzc19jb252LAotICAgICZ1c2VycGFzcwotfTsKKwogI2VuZGlmCiAKIC8q
IC0tIG9yaWdpbmFsIGNvcHlyaWdodCBieSBMdWlnaSBDYW5uZWxsb25pIDE5ODUgKGx1aWdpQGZh
dWk3MC5VVUNQKSAtLSAqLwpAQCAtODkxLDEwICs4NzksOSBAQAogewogICBjaGFyIGZ1bGxuYW1l
WzEwMF0sICpjcDEsIG1lc3NhZ2VbMTAwICsgMTAwXTsKICNpZmRlZiBVU0VfUEFNCi0gIGludCBz
dGF0dXM7Ci0gIHBhbV9oYW5kbGVfdCAqcGFtaCA9IE5VTEw7Ci0jZWxzZQotICBjaGFyICpwYXNz
LCBteXBhc3NbMTYgKyAxXSwgc2FsdFszXTsKKyAgcGFtX2hhbmRsZV90ICpwYW1oID0gMDsKKyAg
aW50IHBhbV9lcnJvcjsKKyAgY2hhciAqdHR5X25hbWU7CiAjZW5kaWYKICAgY2hhciAqcGFzcyA9
IDAsIG15cGFzc1sxNiArIDFdLCBzYWx0WzNdOwogICBpbnQgdXNpbmdfcGFtID0gMTsKQEAgLTk3
NiwzNSArOTYzLDIzIEBACiAgICAgICBpZiAodXNpbmdfcGFtKQogICAgICAgICB7CiAjaWZkZWYg
VVNFX1BBTQotICAgICAgdXNlcnBhc3MudXNlciA9IHBwcC0+cHdfbmFtZTsKLSAgICAgIHVzZXJw
YXNzLnBhc3MgPSBjcDE7Ci0KLSAgICAgIG9wZW5sb2coInNjcmVlbiIsIExPR19QSUQsIExPR19B
VVRIKTsKLSAgICAgIHN0YXR1cyA9IHBhbV9zdGFydCgic2NyZWVuIiwgcHBwLT5wd19uYW1lLCAm
Y29udiwgJnBhbWgpOwotCi0gICAgICBpZiAoc3RhdHVzID09IFBBTV9TVUNDRVNTKQotCXsKLQkg
IC8qIExldCB0aGUgUEFNIG1vZHVsZXMgbWFrZSB1c2Ugb2Ygb3VyIFNHSUQgcHJpdmlsZWdlcy4g
Ki8KLQkgIHhzZXRlZ2lkKGluaXRfZWZmX2dpZCk7Ci0JICBpZiAoKHN0YXR1cyA9IHBhbV9hdXRo
ZW50aWNhdGUocGFtaCwgMCkpICE9IFBBTV9TVUNDRVNTKQotICAgICAgICAgICAgewotCSAgICAg
ICB4c2V0ZWdpZChyZWFsX2dpZCk7Ci0JICAgICAgIHBhbV9lbmQocGFtaCwgc3RhdHVzKTsKLQkg
ICAgICAgY29udGludWU7Ci0JICAgIH0KLQkgIHhzZXRlZ2lkKHJlYWxfZ2lkKTsKKyAgICAgIFBB
TV9jb252ZXJzYXRpb24uYXBwZGF0YV9wdHIgPSBjcDE7CisgICAgICBwYW1fZXJyb3IgPSBwYW1f
c3RhcnQoInNjcmVlbiIsIHBwcC0+cHdfbmFtZSwgJlBBTV9jb252ZXJzYXRpb24sICZwYW1oKTsK
KyAgICAgIGlmIChwYW1fZXJyb3IgIT0gUEFNX1NVQ0NFU1MpCisJQXR0YWNoZXJGaW5pdChTSUdB
UkcpOwkJLyogZ29vZGJ5ZSAqLwogCi0JICBzdGF0dXMgPSBwYW1fZW5kKHBhbWgsIFBBTV9TVUND
RVNTKTsKLQkgIGlmIChzdGF0dXMgPT0gUEFNX1NVQ0NFU1MpCi0JICAgIHsKLQkgICAgICAgbWVt
c2V0KGNwMSwgMCwgc3RybGVuKGNwMSkpOwotCSAgICAgICB1c2VycGFzcy5wYXNzID0gTlVMTDsK
LQkgICAgICAgYnJlYWs7Ci0JICAgIH0KLQl9Ci0KLSNlbHNlCi0gICAgICBpZiAoIXN0cm5jbXAo
Y3J5cHQoY3AxLCBwYXNzKSwgcGFzcywgc3RybGVuKHBhc3MpKSkKKyAgICAgIGlmIChzdHJuY21w
KGF0dGFjaF90dHksICIvZGV2LyIsIDUpID09IDApCisJdHR5X25hbWUgPSBhdHRhY2hfdHR5ICsg
NTsKKyAgICAgIGVsc2UKKwl0dHlfbmFtZSA9IGF0dGFjaF90dHk7CisgICAgICBwYW1fZXJyb3Ig
PSBwYW1fc2V0X2l0ZW0ocGFtaCwgUEFNX1RUWSwgdHR5X25hbWUpOworICAgICAgaWYgKHBhbV9l
cnJvciAhPSBQQU1fU1VDQ0VTUykKKwlBdHRhY2hlckZpbml0KFNJR0FSRyk7CQkvKiBnb29kYnll
ICovCisKKyAgICAgIHBhbV9lcnJvciA9IHBhbV9hdXRoZW50aWNhdGUocGFtaCwgMCk7CisgICAg
ICBwYW1fZW5kKHBhbWgsIHBhbV9lcnJvcik7CisgICAgICBQQU1fY29udmVyc2F0aW9uLmFwcGRh
dGFfcHRyID0gMDsKKyAgICAgIGlmIChwYW1fZXJyb3IgPT0gUEFNX1NVQ0NFU1MpCiAJYnJlYWs7
CiAjZW5kaWYKICAgICAgICAgfQpkaWZmIC11ciBzY3JlZW4ub3JpZy9hdXRvZ2VuLnNoIHNjcmVl
bi9hdXRvZ2VuLnNoCi0tLSBzY3JlZW4ub3JpZy9hdXRvZ2VuLnNoCTIwMjMtMDYtMDEgMTQ6NTg6
MTcuMjMxNjY1MDA5ICswMzAwCisrKyBzY3JlZW4vYXV0b2dlbi5zaAkyMDIyLTAxLTI4IDE3OjA2
OjAyLjY2NjYxMTUwMyArMDMwMApAQCAtMSwyICsxLDIgQEAKICMhL2Jpbi9zaAotZXhlYyBhdXRv
cmVjb25mCithdXRvcmVjb25mIC1pCmRpZmYgLXVyIHNjcmVlbi5vcmlnL2JyYWlsbGVfdHNpLmMg
c2NyZWVuL2JyYWlsbGVfdHNpLmMKLS0tIHNjcmVlbi5vcmlnL2JyYWlsbGVfdHNpLmMJMjAyMy0w
Ni0wMSAxNDo1ODoxNy4yMzE2NjUwMDkgKzAzMDAKKysrIHNjcmVlbi9icmFpbGxlX3RzaS5jCTIw
MjItMDEtMjggMTc6MDY6MDIuNjcwNjExNjAyICswMzAwCkBAIC02LDcgKzYsNyBAQAogICogICAg
ICAgICAgICAgICAgQmlsbCBCYXJyeSAgICAgICAgIGJhcnJ5YkBkb3RzLnBoeXNpY3Mub3JzdC5l
ZHUKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTUgYnkgU2NpZW5jZSBBY2Nlc3MgUHJvamVjdCwg
T3JlZ29uIFN0YXRlIFVuaXZlcnNpdHkuCi0gKiAgICAgIAorICoKICAqCiAgKiBUaGlzIHByb2dy
YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm
eQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTM2LDIxICszNiwyMCBAQAogZXh0ZXJuIHN0cnVjdCBkaXNw
bGF5ICpkaXNwbGF5OwogCiBzdHJ1Y3Qga2V5MnJjIHsKLSAgaW50IGtleTsKLSAgaW50IG5yOwot
ICBjaGFyICphcmcxOwotICBjaGFyICphcmcyOworCWludCBrZXk7CisJaW50IG5yOworCWNoYXIg
KmFyZzE7CisJY2hhciAqYXJnMjsKIH07CiAKK3N0YXRpYyBpbnQgIHRzaV9jdHlwZSA9IDE7ICAg
ICAgIC8qIGN1cnNvciB0eXBlLCAwLDEsMiAqLwogCi1zdGF0aWMgaW50IHRzaV9jdHlwZSA9IDE7
ICAgICAgICAvKiBjdXJzb3IgdHlwZSwgMCwxLDIgKi8KLQotc3RhdGljIGludCB0c2lfbGluZV90
eXBlOyAvKiBpbmRpY2F0ZXMgbnVtYmVyIG9mIGNlbGxzIG9uIHBvd2VyYnJhaWxsZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICBkaXNwbGF5IDAxPTIwIGNlbGxzIDAyPTQwIGNlbGxzIDAzPTgw
IGNlbGxzICovCitzdGF0aWMgaW50ICB0c2lfbGluZV90eXBlOyAvKiBpbmRpY2F0ZXMgbnVtYmVy
IG9mIGNlbGxzIG9uIHBvd2VyYnJhaWxsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGlzcGxheSAwMT0yMCBjZWxscyAwMj00MCBjZWxscyAwMz04MCBjZWxscyAqLwogCiBzdGF0aWMg
aW50ICBkaXNwbGF5X3N0YXR1c190c2kgX19QKCh2b2lkKSk7Ci1zdGF0aWMgaW50ICB3cml0ZV9s
aW5lX3RzaSBfX1AoKGNoYXIgKiwgaW50LCBpbnQpKTsKLXN0YXRpYyB2b2lkIGJ1dHRvbnByZXNz
X3RzaSBfX1AoKHN0cnVjdCBrZXkycmMgKikpOworc3RhdGljIGludCAgd3JpdGVfbGluZV90c2kg
X19QKChjaGFyKiwgaW50LCBpbnQpKTsKK3N0YXRpYyB2b2lkIGJ1dHRvbnByZXNzX3RzaSBfX1Ao
KHN0cnVjdGtleTJyYyopKTsKIHN0YXRpYyB2b2lkIGJ1dHRvbnByZXNzX25hdmlnYXRvcl80MCBf
X1AoKHZvaWQpKTsKIHN0YXRpYyB2b2lkIGJ1dHRvbnByZXNzX3Bvd2VyYnJhaWxsZV80MCBfX1Ao
KHZvaWQpKTsKIHN0YXRpYyB2b2lkIGJ1dHRvbnByZXNzX3Bvd2VyYnJhaWxsZV84MCBfX1AoKHZv
aWQpKTsKQEAgLTU4LDI2MiArNTcsMjU4IEBACiBpbnQKIGJkX2luaXRfcG93ZXJicmFpbGxlXzQw
KCkKIHsKLSAgYmQud3JpdGVfbGluZV9icmFpbGxlID0gd3JpdGVfbGluZV90c2k7Ci0gIGJkLmJ1
dHRvbnByZXNzID0gYnV0dG9ucHJlc3NfcG93ZXJicmFpbGxlXzQwOwotICBiZC5iZF9yZXNwb25z
ZV90ZXN0ID0gZGlzcGxheV9zdGF0dXNfdHNpOwotICBiZC5iZF9uY2VsbHMgPSA0MDsKLSAgdHNp
X2xpbmVfdHlwZSA9IDI7Ci0gIHJldHVybiAwOworCWJkLndyaXRlX2xpbmVfYnJhaWxsZSA9IHdy
aXRlX2xpbmVfdHNpOworCWJkLmJ1dHRvbnByZXNzID0gYnV0dG9ucHJlc3NfcG93ZXJicmFpbGxl
XzQwOworCWJkLmJkX3Jlc3BvbnNlX3Rlc3QgPSBkaXNwbGF5X3N0YXR1c190c2k7CisJYmQuYmRf
bmNlbGxzID0gNDA7CisJdHNpX2xpbmVfdHlwZSA9IDI7CisJcmV0dXJuIDA7CiB9CiAKIGludAog
YmRfaW5pdF9wb3dlcmJyYWlsbGVfODAoKQogewotICBiZC53cml0ZV9saW5lX2JyYWlsbGUgPSB3
cml0ZV9saW5lX3RzaTsKLSAgYmQuYnV0dG9ucHJlc3MgPSBidXR0b25wcmVzc19wb3dlcmJyYWls
bGVfODA7Ci0gIGJkLmJkX3Jlc3BvbnNlX3Rlc3QgPSBkaXNwbGF5X3N0YXR1c190c2k7Ci0gIGJk
LmJkX25jZWxscyA9IDgwOwotICB0c2lfbGluZV90eXBlID0gMzsKLSAgcmV0dXJuIDA7CisJYmQu
d3JpdGVfbGluZV9icmFpbGxlID0gd3JpdGVfbGluZV90c2k7CisJYmQuYnV0dG9ucHJlc3MgPSBi
dXR0b25wcmVzc19wb3dlcmJyYWlsbGVfODA7CisJYmQuYmRfcmVzcG9uc2VfdGVzdCA9IGRpc3Bs
YXlfc3RhdHVzX3RzaTsKKwliZC5iZF9uY2VsbHMgPSA4MDsKKwl0c2lfbGluZV90eXBlID0gMzsK
KwlyZXR1cm4gMDsKIH0KIAogaW50CiBiZF9pbml0X25hdmlnYXRvcl80MCgpCiB7Ci0gIGJkLndy
aXRlX2xpbmVfYnJhaWxsZSA9IHdyaXRlX2xpbmVfdHNpOwotICBiZC5idXR0b25wcmVzcyA9IGJ1
dHRvbnByZXNzX25hdmlnYXRvcl80MDsKLSAgYmQuYmRfcmVzcG9uc2VfdGVzdCA9IGRpc3BsYXlf
c3RhdHVzX3RzaTsKLSAgYmQuYmRfbmNlbGxzID0gNDA7Ci0gIHRzaV9saW5lX3R5cGUgPSAyOwot
ICByZXR1cm4gMDsKKwliZC53cml0ZV9saW5lX2JyYWlsbGUgPSB3cml0ZV9saW5lX3RzaTsKKwli
ZC5idXR0b25wcmVzcyA9IGJ1dHRvbnByZXNzX25hdmlnYXRvcl80MDsKKwliZC5iZF9yZXNwb25z
ZV90ZXN0ID0gZGlzcGxheV9zdGF0dXNfdHNpOworCWJkLmJkX25jZWxscyA9IDQwOworCXRzaV9s
aW5lX3R5cGUgPSAyOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IAorc3RhdGljIGludAog
ZGlzcGxheV9zdGF0dXNfdHNpKCkKIHsKLSAgY2hhciBvYnVmWzNdLGlidWZbMjBdOwotICBpbnQg
cjsKKwljaGFyIG9idWZbM10sIGlidWZbMjBdOworCWludCByOwogCi0gIG9idWZbMF0gPSAweGZm
OwotICBvYnVmWzFdID0gMHhmZjsKLSAgb2J1ZlsyXSA9IDB4MGE7Ci0gIHIgPSByZWFkKGJkLmJk
X2ZkLCBpYnVmLCAyMCk7CQkvKiBmbHVzaCB0aGUgaW5wdXQgcG9ydCAqLwotICByID0gd3JpdGUo
YmQuYmRfZmQsIG9idWYsIDMpOwotICBpZiAociAhPSAzKQotICAgIHJldHVybiAtMTsKKwlvYnVm
WzBdID0gMHhmZjsKKwlvYnVmWzFdID0gMHhmZjsKKwlvYnVmWzJdID0gMHgwYTsKKwlyID0gcmVh
ZChiZC5iZF9mZCwgaWJ1ZiwgMjApOwkJLyogZmx1c2ggdGhlIGlucHV0IHBvcnQgKi8KKwlyID0g
d3JpdGUoYmQuYmRfZmQsIG9idWYsIDMpOworCWlmIChyICE9IDMpCisJCXJldHVybiAtMTsKIAog
ICAvKiB3ZSBoYXZlIHdyaXR0ZW4gdG8gdGhlIGRpc3BsYXkgYXNraW5nIGZvciBhIHJlc3BvbnNl
Ci0gICAgIHdlIHdhaXQgMSBzZWNvbmQgZm9yIHRoZSByZXNwb25zZSwgcmVhZCBpdCBhbmQgaWYg
bm8gCisgICAgIHdlIHdhaXQgMSBzZWNvbmQgZm9yIHRoZSByZXNwb25zZSwgcmVhZCBpdCBhbmQg
aWYgbm8KICAgICAgcmVzcG9uc2Ugd2Ugd2FpdCAyIHNlY29uZHMsIGlmIHN0aWxsIG5vIHJlc3Bv
bnNlLAogICAgICByZXR1cm4gLTEgdG8gaW5kaWNhdGUgbm8gYnJhaWxsZSAgZGlzcGxheSBhdmFp
bGFibGUgKi8KLSAgc2xlZXAoMSk7Ci0gIHIgPSByZWFkKGJkLmJkX2ZkLCBpYnVmLCAyKTsKLSAg
aWYgKHIgPT0gLTEpCi0gICAgewotICAgICAgc2xlZXAoMik7Ci0gICAgICByID0gcmVhZChiZC5i
ZF9mZCwgaWJ1ZiwgMik7Ci0gICAgfQotICBkZWJ1ZzIoImZpcnN0IGNoYXJzIGZyb20gYnJhaWxs
ZSBkaXNwbGF5ICVkICVkXG4iLGlidWZbMF0saWJ1ZlsxXSk7Ci0gIGlmIChyICE9IDIgfHwgaWJ1
ZlswXSAhPSAwIHx8IGlidWZbMV0gIT0gNSkKLSAgICByZXR1cm4gLTE7Ci0gIAotICByPSByZWFk
KGJkLmJkX2ZkLGlidWYsMik7Ci0gIGlmIChyICE9IDIpCi0gICAgcmV0dXJuIC0xOwotICBkZWJ1
ZzIoImJyYWlsbGUgZGlzcGxheSBzaXplOiVkIGRvdHM6JWRcbiIsIGlidWZbMF0sIGlidWZbMV0p
OwotICBiZC5iZF9uY2VsbHMgPSAodW5zaWduZWQgY2hhcilpYnVmWzBdOwotICBpZiAoYmQuYmRf
bmNlbGxzIDw9IDEpCi0gICAgcmV0dXJuIC0xOwotICByID0gcmVhZChiZC5iZF9mZCxpYnVmLDEp
OwotICBpZiAociAhPSAxKQotICAgIHJldHVybiAtMTsKLSAgaWYgKGlidWZbMF0gPT0gJ1YnKQot
ICAgIHIgPSByZWFkKGJkLmJkX2ZkLCBpYnVmLCAzKTsKLSAgZWxzZQotICAgIHIgPSByZWFkKGJk
LmJkX2ZkLCBpYnVmICsgMSwgMikgKyAxOwotICBpZiAociAhPSAzKQotICAgIHJldHVybiAtMTsK
LSAgaWJ1ZlszXSA9IDA7Ci0gIGRlYnVnMSgiYnJhaWxsZSBkaXNwbGF5IHZlcnNpb24gJXNcbiIs
IGlidWYpOyAKLSAgYmQuYmRfdmVyc2lvbiA9IGF0b2YoaWJ1Zik7Ci0gIHJldHVybiAwOworCisJ
c2xlZXAoMSk7CisJciA9IHJlYWQoYmQuYmRfZmQsIGlidWYsIDIpOworCWlmIChyID09IC0xKSB7
CisJCXNsZWVwKDIpOworCQlyID0gcmVhZChiZC5iZF9mZCwgaWJ1ZiwgMik7CisJfQorCisJZGVi
dWcyKCJmaXJzdCBjaGFycyBmcm9tIGJyYWlsbGUgZGlzcGxheSAlZCAlZFxuIiwgaWJ1ZlswXSwg
aWJ1ZlsxXSk7CisJaWYgKHIgIT0gMiB8fCBpYnVmWzBdICE9IDAgfHwgaWJ1ZlsxXSAhPSA1KQor
CQlyZXR1cm4gLTE7CisKKwlyID0gcmVhZChiZC5iZF9mZCwgaWJ1ZiwgMik7CisJaWYgKHIgIT0g
MikKKwkJcmV0dXJuIC0xOworCisJZGVidWcyKCJicmFpbGxlIGRpc3BsYXkgc2l6ZTolZCBkb3Rz
OiVkXG4iLCBpYnVmWzBdLCBpYnVmWzFdKTsKKwliZC5iZF9uY2VsbHMgPSAodW5zaWduZWQgY2hh
cilpYnVmWzBdOworCWlmIChiZC5iZF9uY2VsbHMgPD0gMSkKKwkJcmV0dXJuIC0xOworCisJciA9
IHJlYWQoYmQuYmRfZmQsIGlidWYsIDEpOworCWlmIChyICE9IDEpCisJCXJldHVybiAtMTsKKwor
CWlmIChpYnVmWzBdID09ICdWJykKKwkJciA9IHJlYWQoYmQuYmRfZmQsIGlidWYsIDMpOworCWVs
c2UKKwkJciA9IHJlYWQoYmQuYmRfZmQsIGlidWYgKyAxLCAyKSArIDE7CisKKwlpZiAociAhPSAz
KQorCQlyZXR1cm4gLTE7CisKKwlpYnVmWzNdID0gMDsKKwlkZWJ1ZzEoImJyYWlsbGUgZGlzcGxh
eSB2ZXJzaW9uICVzXG4iLCBpYnVmKTsKKwliZC5iZF92ZXJzaW9uID0gYXRvZihpYnVmKTsKKwly
ZXR1cm4gMDsKIH0KLQkJCiAKLXN0YXRpYyBpbnQgCi13cml0ZV9saW5lX3RzaSAoYnN0cixsaW5l
X2xlbmd0aCwgIGN1cnNvcl9wb3MpIAotY2hhciAqYnN0cjsKLWludCBsaW5lX2xlbmd0aCwgY3Vy
c29yX3BvczsgCitzdGF0aWMgaW50Cit3cml0ZV9saW5lX3RzaShjaGFyICpic3RyLCBpbnQgbGlu
ZV9sZW5ndGgsIGludCBjdXJzb3JfcG9zKQogewotICBpbnQgb2JwLCBpOwotICBiZC5iZF9vYnVm
WzBdID0gMHhmZjsKLSAgYmQuYmRfb2J1ZlsxXSA9IDB4ZmY7Ci0gIGJkLmJkX29idWZbMl0gPSB0
c2lfbGluZV90eXBlOwotICBiZC5iZF9vYnVmWzNdID0gMHgwNzsKLSAgYmQuYmRfb2J1Zls0XSA9
IGN1cnNvcl9wb3M7Ci0gIGJkLmJkX29idWZbNV0gPSB0c2lfY3R5cGU7Ci0gIG9icD02OwotCi0g
IGZvciAoaT0wOyBpIDwgbGluZV9sZW5ndGg7IGkrKykgCi0gICAgewotICAgICAgYmQuYmRfb2J1
ZlsyKmkrb2JwXSA9IDA7IAotICAgICAgYmQuYmRfb2J1ZlsyKmkrMStvYnBdID0gYmQuYmRfYnRh
YmxlWyhpbnQpKHVuc2lnbmVkIGNoYXIpYnN0cltpXV07Ci0gICAgfSAgICAgIAotICBmb3IgKGk9
bGluZV9sZW5ndGg7IGkgPCBiZC5iZF9uY2VsbHM7IGkrKykgCi0gICAgewotICAgICAgYmQuYmRf
b2J1ZlsyKmkrb2JwXSA9IDA7IAotICAgICAgYmQuYmRfb2J1ZlsyKmkrMStvYnBdID0gYmQuYmRf
YnRhYmxlWyhpbnQpJyAnXTsKLSAgICB9ICAgICAgCisJaW50IG9icCwgaTsKKwliZC5iZF9vYnVm
WzBdID0gMHhmZjsKKwliZC5iZF9vYnVmWzFdID0gMHhmZjsKKwliZC5iZF9vYnVmWzJdID0gdHNp
X2xpbmVfdHlwZTsKKwliZC5iZF9vYnVmWzNdID0gMHgwNzsKKwliZC5iZF9vYnVmWzRdID0gY3Vy
c29yX3BvczsKKwliZC5iZF9vYnVmWzVdID0gdHNpX2N0eXBlOworCW9icCA9IDY7CisKKwlmb3Ig
KGkgPSAwOyBpIDwgbGluZV9sZW5ndGg7IGkrKykgeworCQliZC5iZF9vYnVmWzIqaSArIG9icF0g
PSAwOworCQliZC5iZF9vYnVmWzIqaSArIDEgKyBvYnBdID0gYmQuYmRfYnRhYmxlWyhpbnQpKHVu
c2lnbmVkIGNoYXIpYnN0cltpXV07CisJfQorCWZvciAoaSA9IGxpbmVfbGVuZ3RoOyBpIDwgYmQu
YmRfbmNlbGxzOyBpKyspIHsKKwkJYmQuYmRfb2J1ZlsyKmkgKyBvYnBdID0gMDsKKwkJYmQuYmRf
b2J1ZlsyKmkgKyAxICsgb2JwXSA9IGJkLmJkX2J0YWJsZVsoaW50KScgJ107CisJfQogCi0gIGJk
LmJkX29idWZsZW4gPSAyKmJkLmJkX25jZWxscyArIG9icCA7ICAKLSAgcmV0dXJuIDA7CisJYmQu
YmRfb2J1ZmxlbiA9IDIqYmQuYmRfbmNlbGxzICsgb2JwOworCXJldHVybiAwOwogfQogCiBzdGF0
aWMgc3RydWN0IGtleTJyYyBrZXlzX25hdmlnYXRvcl80MFtdID0gewotICB7MHg0MDAwMDAwLAlS
Q19TVFVGRiwgIi1rIiwgImtsIn0sCQkvKiAxICovCi0gIHsweDEwMDAwMDAwLCAJUkNfU1RVRkYs
ICItayIsICJrciJ9LAkJLyogMyAqLwotICB7MHg4MDAwMDAwLAlSQ19TVFVGRiwgIi1rIiwgImt1
In0sCQkvKiAyICovCi0gIHsweDIwMDAwMDAwLAlSQ19TVFVGRiwgIi1rIiwgImtkIn0sCQkvKiA0
ICovCi0gIHsweDIwMDAsCVJDX0JEX0JDX0xFRlQsIDAsIDB9LAkJLyogNiAqLwotICB7MHg4MDAw
LAlSQ19CRF9CQ19SSUdIVCwgMCwgMH0sCQkvKiA4ICovCi0gIHsweDQwMDAsCVJDX0JEX0JDX1VQ
LCAwLCAwfSwJCS8qIDcgKi8KLSAgezB4MTAwMDAsCVJDX0JEX0JDX0RPV04sIDAsIDB9LAkJLyog
OSAqLwotICB7MHg2MDAwLAlSQ19CRF9VUFBFUl9MRUZULCAwLCAwfSwJLyogNiwgNyAqLwotICB7
MHhjMDAwLAlSQ19CRF9VUFBFUl9SSUdIVCwgMCwgMH0sCS8qIDcsIDggKi8KLSAgezB4MTIwMDAs
CVJDX0JEX0xPV0VSX0xFRlQsIDAsIDB9LAkvKiA2LCA5ICovCi0gIHsweDE4MDAwLAlSQ19CRF9M
T1dFUl9SSUdIVCwgMCwgMH0sCS8qIDgsIDkgKi8KLSAgezB4YTAwMCwJUkNfQkRfSU5GTywgIjEw
MzIiLCAwfSwJCS8qIGJjIDYsIDggKi8KLSAgezB4MTQwMDAwMDAsCVJDX0JEX0lORk8sICIyMzAx
IiwgMH0sCQkvKiBzYyAxLCAzICovCi0gIHsweDQwMDgwMDAsCVJDX0JEX0lORk8sICIzMzMwIiwg
MH0sCQkvKiBiYytzYyAxLCA4ICovCi0gIHsweDgwMTAwMDAsCVJDX0JEX0JFTEwsIDAsIDB9LAkJ
LyogMiwgOSAqLwotICB7MHg4MDA0MDAwLAlSQ19CRF9FSUdIVERPVCwgMCwgMH0sCQkvKiAyLCA3
ICovCi0gIHsweDQwMDAwMDAwLAlSQ19TVFVGRiwgIlwwMTUiLCAwfSwJCS8qIDUgKi8KLSAgezB4
MjAwMDAsCVJDX0JEX0xJTkssIDAsIDB9LAkJLyogMTAgKi8KLSAgezB4MTAwMDIwMDAsCVJDX0JE
X1NDUk9MTCwgMCwgMH0sCQkvKiAzLCA2ICovCi0gIHsweDIwMDEwMDAwLAlSQ19CRF9OQ1JDLCAi
KyIsIDB9LAkJLyogNCwgOSAqLwotICB7MHgxNDAwMCwJUkNfQkRfU0tJUCwgMCwgMH0sCQkvKiA3
LCA5Ki8KLSAgey0xLAkJUkNfSUxMRUdBTCwgMCwgMH0KKwl7MHg0MDAwMDAwLCAgICAgUkNfU1RV
RkYsICAgICAgICAgICItayIsICJrbCJ9LCAvKiAxICovCisJezB4MTAwMDAwMDAsICAgIFJDX1NU
VUZGLCAgICAgICAgICAiLWsiLCAia3IifSwgLyogMyAqLworCXsweDgwMDAwMDAsICAgICBSQ19T
VFVGRiwgICAgICAgICAgIi1rIiwgImt1In0sIC8qIDIgKi8KKwl7MHgyMDAwMDAwMCwgICAgUkNf
U1RVRkYsICAgICAgICAgICItayIsICJrZCJ9LCAvKiA0ICovCisJezB4MjAwMCwgICAgICAgIFJD
X0JEX0JDX0xFRlQsICAgICAwLCAgICAgICAwfSwgLyogNiAqLworCXsweDgwMDAsICAgICAgICBS
Q19CRF9CQ19SSUdIVCwgICAgMCwgICAgICAgMH0sIC8qIDggKi8KKwl7MHg0MDAwLCAgICAgICAg
UkNfQkRfQkNfVVAsICAgICAgIDAsICAgICAgIDB9LCAvKiA3ICovCisJezB4MTAwMDAsICAgICAg
IFJDX0JEX0JDX0RPV04sICAgICAwLCAgICAgICAwfSwgLyogOSAqLworCXsweDYwMDAsICAgICAg
ICBSQ19CRF9VUFBFUl9MRUZULCAgMCwgICAgICAgMH0sIC8qIDYsIDcgKi8KKwl7MHhjMDAwLCAg
ICAgICAgUkNfQkRfVVBQRVJfUklHSFQsIDAsICAgICAgIDB9LCAvKiA3LCA4ICovCisJezB4MTIw
MDAsICAgICAgIFJDX0JEX0xPV0VSX0xFRlQsICAwLCAgICAgICAwfSwgLyogNiwgOSAqLworCXsw
eDE4MDAwLCAgICAgICBSQ19CRF9MT1dFUl9SSUdIVCwgMCwgICAgICAgMH0sIC8qIDgsIDkgKi8K
Kwl7MHhhMDAwLCAgICAgICAgUkNfQkRfSU5GTywgICAgICAgICIxMDMyIiwgIDB9LCAvKiBiYyA2
LCA4ICovCisJezB4MTQwMDAwMDAsICAgIFJDX0JEX0lORk8sICAgICAgICAiMjMwMSIsICAwfSwg
Lyogc2MgMSwgMyAqLworCXsweDQwMDgwMDAsICAgICBSQ19CRF9JTkZPLCAgICAgICAgIjMzMzAi
LCAgMH0sIC8qIGJjK3NjIDEsIDggKi8KKwl7MHg4MDEwMDAwLCAgICAgUkNfQkRfQkVMTCwgICAg
ICAgIDAsICAgICAgIDB9LCAvKiAyLCA5ICovCisJezB4ODAwNDAwMCwgICAgIFJDX0JEX0VJR0hU
RE9ULCAgICAwLCAgICAgICAwfSwgLyogMiwgNyAqLworCXsweDQwMDAwMDAwLCAgICBSQ19TVFVG
RiwgICAgICAgICAgIlwwMTUiLCAgMH0sIC8qIDUgKi8KKwl7MHgyMDAwMCwgICAgICAgUkNfQkRf
TElOSywgICAgICAgIDAsICAgICAgIDB9LCAvKiAxMCAqLworCXsweDEwMDAyMDAwLCAgICBSQ19C
RF9TQ1JPTEwsICAgICAgMCwgICAgICAgMH0sIC8qIDMsIDYgKi8KKwl7MHgyMDAxMDAwMCwgICAg
UkNfQkRfTkNSQywgICAgICAgICIrIiwgICAgIDB9LCAvKiA0LCA5ICovCisJezB4MTQwMDAsICAg
ICAgIFJDX0JEX1NLSVAsICAgICAgICAwLCAgICAgICAwfSwgLyogNywgOSovCisJey0xLCAgICAg
ICAgICAgIFJDX0lMTEVHQUwsICAgICAgICAwLCAgICAgICAwfQogfTsKIAogc3RhdGljIHN0cnVj
dCBrZXkycmMga2V5c19wb3dlcmJyYWlsbGVfNDBbXSA9IHsKLSAgezB4NDAwMDAwMCwJUkNfU1RV
RkYsICItayIsICJrbCJ9LAkJLyogMSAqLwotICB7MHgxMDAwMDAwMCwgCVJDX1NUVUZGLCAiLWsi
LCAia3IifSwJCS8qIDMgKi8KLSAgezB4ODAwMDAwMCwJUkNfU1RVRkYsICItayIsICJrdSJ9LAkJ
LyogMiAqLwotICB7MHgyMDAwMDAwMCwJUkNfU1RVRkYsICItayIsICJrZCJ9LAkJLyogNCAqLwot
ICB7MHgyMDAwLAlSQ19CRF9CQ19MRUZULCAwLCAwfSwJCS8qIDYgKi8KLSAgezB4ODAwMCwJUkNf
QkRfQkNfUklHSFQsIDAsIDB9LAkJLyogOCAqLwotICB7MHg0MDAwLAlSQ19CRF9CQ19VUCwgMCwg
MH0sCQkvKiA3ICovCi0gIHsweDEwMDAwLAlSQ19CRF9CQ19ET1dOLCAwLCAwfSwJCS8qIDkgKi8K
LSAgezB4ODAwMjAwMCwJUkNfQkRfVVBQRVJfTEVGVCwgMCwgMH0sCS8qIDIsIDYgKi8KLSAgezB4
YzAwMCwJUkNfQkRfVVBQRVJfUklHSFQsIDAsIDB9LAkvKiA3LCA4ICovCi0gIHsweDIwMDAyMDAw
LAlSQ19CRF9MT1dFUl9MRUZULCAwLCAwfSwJLyogMywgNiAqLwotICB7MHgxODAwMCwJUkNfQkRf
TE9XRVJfUklHSFQsIDAsIDB9LAkvKiA4LCA5ICovCi0gIHsweDgwMDgwMDAsCVJDX0JEX0lORk8s
ICIxMDMyIiwgMH0sCQkvKiBiYyAyLCA4ICovCi0gIHsweDYwMDAsCVJDX0JEX0lORk8sICIyMzAx
IiwgMH0sCQkvKiA2LCA3ICovCi0gIHsweDgwMDQwMDAsCVJDX0JEX0lORk8sICIzMzMwIiwgMH0s
CQkvKiBiYytzYyAyLCA3ICovCi0gIHsweDgwMTAwMDAsCVJDX0JEX0JFTEwsIDAsIDB9LAkJLyog
MiwgOSAqLwotICB7MHgyMDAwODAwMCwJUkNfQkRfRUlHSFRET1QsIDAsIDB9LAkJLyogNCwgNiAq
LwotICB7MHg0MDAwMDAwMCwJUkNfU1RVRkYsICJcMDE1IiwgMH0sCQkvKiA1ICovCi0gIHsweDIw
MDAwLAlSQ19CRF9MSU5LLCAwLCAwfSwJCS8qIDEwICovCi0gIHsweGEwMDAsCVJDX0JEX1NDUk9M
TCwgMCwgMH0sCQkvKiA2LCA4ICovCi0gIHsweDIwMDEwMDAwLAlSQ19CRF9OQ1JDLCAiKyIsIDB9
LAkJLyogNCwgOSAqLwotICB7MHgyMDAwNDAwMCwJUkNfQkRfU0tJUCwgMCwgMH0sCQkvKiA0LCA3
ICovCi0gIHstMSwJCVJDX0lMTEVHQUwsIDAsIDB9CisJezB4NDAwMDAwMCwgICAgIFJDX1NUVUZG
LCAgICAgICAgICAiLWsiLCAia2wifSwgLyogMSAqLworCXsweDEwMDAwMDAwLCAgICBSQ19TVFVG
RiwgICAgICAgICAgIi1rIiwgImtyIn0sIC8qIDMgKi8KKwl7MHg4MDAwMDAwLCAgICAgUkNfU1RV
RkYsICAgICAgICAgICItayIsICJrdSJ9LCAvKiAyICovCisJezB4MjAwMDAwMDAsICAgIFJDX1NU
VUZGLCAgICAgICAgICAiLWsiLCAia2QifSwgLyogNCAqLworCXsweDIwMDAsICAgICAgICBSQ19C
RF9CQ19MRUZULCAgICAgMCwgICAgICAgMH0sIC8qIDYgKi8KKwl7MHg4MDAwLCAgICAgICAgUkNf
QkRfQkNfUklHSFQsICAgIDAsICAgICAgIDB9LCAvKiA4ICovCisJezB4NDAwMCwgICAgICAgIFJD
X0JEX0JDX1VQLCAgICAgICAwLCAgICAgICAwfSwgLyogNyAqLworCXsweDEwMDAwLCAgICAgICBS
Q19CRF9CQ19ET1dOLCAgICAgMCwgICAgICAgMH0sIC8qIDkgKi8KKwl7MHg4MDAyMDAwLCAgICAg
UkNfQkRfVVBQRVJfTEVGVCwgIDAsICAgICAgIDB9LCAvKiAyLCA2ICovCisJezB4YzAwMCwgICAg
ICAgIFJDX0JEX1VQUEVSX1JJR0hULCAwLCAgICAgICAwfSwgLyogNywgOCAqLworCXsweDIwMDAy
MDAwLCAgICBSQ19CRF9MT1dFUl9MRUZULCAgMCwgICAgICAgMH0sIC8qIDMsIDYgKi8KKwl7MHgx
ODAwMCwgICAgICAgUkNfQkRfTE9XRVJfUklHSFQsIDAsICAgICAgIDB9LCAvKiA4LCA5ICovCisJ
ezB4ODAwODAwMCwgICAgIFJDX0JEX0lORk8sICAgICAgICAiMTAzMiIsICAwfSwgLyogYmMgMiwg
OCAqLworCXsweDYwMDAsICAgICAgICBSQ19CRF9JTkZPLCAgICAgICAgIjIzMDEiLCAgMH0sIC8q
IDYsIDcgKi8KKwl7MHg4MDA0MDAwLCAgICAgUkNfQkRfSU5GTywgICAgICAgICIzMzMwIiwgIDB9
LCAvKiBiYytzYyAyLCA3ICovCisJezB4ODAxMDAwMCwgICAgIFJDX0JEX0JFTEwsICAgICAgICAw
LCAgICAgICAwfSwgLyogMiwgOSAqLworCXsweDIwMDA4MDAwLCAgICBSQ19CRF9FSUdIVERPVCwg
ICAgMCwgICAgICAgMH0sIC8qIDQsIDYgKi8KKwl7MHg0MDAwMDAwMCwgICAgUkNfU1RVRkYsICAg
ICAgICAgICJcMDE1IiwgIDB9LCAvKiA1ICovCisJezB4MjAwMDAsICAgICAgIFJDX0JEX0xJTkss
ICAgICAgICAwLCAgICAgICAwfSwgLyogMTAgKi8KKwl7MHhhMDAwLCAgICAgICAgUkNfQkRfU0NS
T0xMLCAgICAgIDAsICAgICAgIDB9LCAvKiA2LCA4ICovCisJezB4MjAwMTAwMDAsICAgIFJDX0JE
X05DUkMsICAgICAgICAiKyIsICAgICAwfSwgLyogNCwgOSAqLworCXsweDIwMDA0MDAwLCAgICBS
Q19CRF9TS0lQLCAgICAgICAgMCwgICAgICAgMH0sIC8qIDQsIDcgKi8KKwl7LTEsICAgICAgICAg
ICAgUkNfSUxMRUdBTCwgICAgICAgIDAsICAgICAgIDB9CiB9OwogCi0KIHN0YXRpYyBzdHJ1Y3Qg
a2V5MnJjIGtleXNfcG93ZXJicmFpbGxlXzgwW10gPSB7Ci0gIHsweDQwMDAwMDAsCVJDX1NUVUZG
LCAiLWsiLCAia2wifSwJCS8qIDEgKi8KLSAgezB4MTAwMDAwMDAsIAlSQ19TVFVGRiwgIi1rIiwg
ImtyIn0sCQkvKiAzICovCi0gIHsweDgwMDAwMDAsCVJDX1NUVUZGLCAiLWsiLCAia3UifSwJCS8q
IDIgKi8KLSAgezB4MjAwMDAwMDAsCVJDX1NUVUZGLCAiLWsiLCAia2QifSwJCS8qIDQgKi8KLSAg
ezB4NDAwMDAsCVJDX0JEX0JDX0xFRlQsIDAsIDB9LAkJLyogNiAqLwotICB7MHgxMDAwMDAsCVJD
X0JEX0JDX1JJR0hULCAwLCAwfSwJCS8qIDggKi8KLSAgezB4NDAwMCwJUkNfQkRfQkNfVVAsIDAs
IDB9LAkJLyogNyAqLwotICB7MHgxMDAwMCwJUkNfQkRfQkNfRE9XTiwgMCwgMH0sCQkvKiA5ICov
Ci0gIHsweDQ0MDAwLAlSQ19CRF9VUFBFUl9MRUZULCAwLCAwfSwJLyogNiwgNyAqLwotICB7MHgx
MDQwMDAsCVJDX0JEX1VQUEVSX1JJR0hULCAwLCAwfSwJLyogNywgOCAqLwotICB7MHg1MDAwMCwJ
UkNfQkRfTE9XRVJfTEVGVCwgMCwgMH0sCS8qIDYsIDkgKi8KLSAgezB4MTEwMDAwLAlSQ19CRF9M
T1dFUl9SSUdIVCwgMCwgMH0sCS8qIDgsIDkgKi8KLSAgezB4ODEwMDAwMCwJUkNfQkRfSU5GTywg
IjEwMzIiLCAwfSwJCS8qIDIsIDggKi8KLSAgezB4ODA0MDAwMCwJUkNfQkRfSU5GTywgIjIzMDEi
LCAwfSwJCS8qIDIsIDYgKi8KLSAgezB4MTQwMDAwLAlSQ19CRF9JTkZPLCAiMzMzMCIsIDB9LAkJ
LyogNiwgOCAqLwotICB7MHg4MDEwMDAwLAlSQ19CRF9CRUxMLCAwLCAwfSwJCS8qIDIsIDkgKi8K
LSAgezB4ODAwNDAwMCwJUkNfQkRfRUlHSFRET1QsIDAsIDB9LAkJLyogMiwgNyAqLwotICB7MHg0
MDAwMDAwMCwJUkNfU1RVRkYsICJcMDE1IiwgMH0sCQkvKiA1ICovCi0gIHsweDIwMDAwLAlSQ19C
RF9MSU5LLCAwLCAwfSwJCS8qIDEwICovCi0gIHsweDIwMDA0MDAwLAlSQ19CRF9TQ1JPTEwsIDAs
IDB9LAkJLyogNCwgNyAqLwotICB7MHgyMDAxMDAwMCwJUkNfQkRfTkNSQywgIisiLCAwfSwJCS8q
IDQsIDkgKi8KLSAgezB4NDAwMTAwMDAsCVJDX0JEX1NLSVAsIDAsIDB9LAkJLyogNSwgOSAqLwot
ICB7LTEsCQlSQ19JTExFR0FMLCAwLCAwfQorCXsweDQwMDAwMDAsICAgICBSQ19TVFVGRiwgICAg
ICAgICAgIi1rIiwgImtsIn0sIC8qIDEgKi8KKwl7MHgxMDAwMDAwMCwgICAgUkNfU1RVRkYsICAg
ICAgICAgICItayIsICJrciJ9LCAvKiAzICovCisJezB4ODAwMDAwMCwgICAgIFJDX1NUVUZGLCAg
ICAgICAgICAiLWsiLCAia3UifSwgLyogMiAqLworCXsweDIwMDAwMDAwLCAgICBSQ19TVFVGRiwg
ICAgICAgICAgIi1rIiwgImtkIn0sIC8qIDQgKi8KKwl7MHg0MDAwMCwgICAgICAgUkNfQkRfQkNf
TEVGVCwgICAgIDAsICAgICAgIDB9LCAvKiA2ICovCisJezB4MTAwMDAwLCAgICAgIFJDX0JEX0JD
X1JJR0hULCAgICAwLCAgICAgICAwfSwgLyogOCAqLworCXsweDQwMDAsICAgICAgICBSQ19CRF9C
Q19VUCwgICAgICAgMCwgICAgICAgMH0sIC8qIDcgKi8KKwl7MHgxMDAwMCwgICAgICAgUkNfQkRf
QkNfRE9XTiwgICAgIDAsICAgICAgIDB9LCAvKiA5ICovCisJezB4NDQwMDAsICAgICAgIFJDX0JE
X1VQUEVSX0xFRlQsICAwLCAgICAgICAwfSwgLyogNiwgNyAqLworCXsweDEwNDAwMCwgICAgICBS
Q19CRF9VUFBFUl9SSUdIVCwgMCwgICAgICAgMH0sIC8qIDcsIDggKi8KKwl7MHg1MDAwMCwgICAg
ICAgUkNfQkRfTE9XRVJfTEVGVCwgIDAsICAgICAgIDB9LCAvKiA2LCA5ICovCisJezB4MTEwMDAw
LCAgICAgIFJDX0JEX0xPV0VSX1JJR0hULCAwLCAgICAgICAwfSwgLyogOCwgOSAqLworCXsweDgx
MDAwMDAsICAgICBSQ19CRF9JTkZPLCAgICAgICAgIjEwMzIiLCAgMH0sIC8qIDIsIDggKi8KKwl7
MHg4MDQwMDAwLCAgICAgUkNfQkRfSU5GTywgICAgICAgICIyMzAxIiwgIDB9LCAvKiAyLCA2ICov
CisJezB4MTQwMDAwLCAgICAgIFJDX0JEX0lORk8sICAgICAgICAiMzMzMCIsICAwfSwgLyogNiwg
OCAqLworCXsweDgwMTAwMDAsICAgICBSQ19CRF9CRUxMLCAgICAgICAgMCwgICAgICAgMH0sIC8q
IDIsIDkgKi8KKwl7MHg4MDA0MDAwLCAgICAgUkNfQkRfRUlHSFRET1QsICAgIDAsICAgICAgIDB9
LCAvKiAyLCA3ICovCisJezB4NDAwMDAwMDAsICAgIFJDX1NUVUZGLCAgICAgICAgICAiXDAxNSIs
ICAwfSwgLyogNSAqLworCXsweDIwMDAwLCAgICAgICBSQ19CRF9MSU5LLCAgICAgICAgMCwgICAg
ICAgMH0sIC8qIDEwICovCisJezB4MjAwMDQwMDAsICAgIFJDX0JEX1NDUk9MTCwgICAgICAwLCAg
ICAgICAwfSwgLyogNCwgNyAqLworCXsweDIwMDEwMDAwLCAgICBSQ19CRF9OQ1JDLCAgICAgICAg
IisiLCAgICAgMH0sIC8qIDQsIDkgKi8KKwl7MHg0MDAxMDAwMCwgICAgUkNfQkRfU0tJUCwgICAg
ICAgIDAsICAgICAgIDB9LCAvKiA1LCA5ICovCisJey0xLCAgICAgICAgICAgIFJDX0lMTEVHQUws
ICAgICAgICAwLCAgICAgICAwfQogfTsKIAogc3RhdGljIHZvaWQKLWJ1dHRvbnByZXNzX3RzaSh0
YWIpCi1zdHJ1Y3Qga2V5MnJjICp0YWI7CitidXR0b25wcmVzc190c2koc3RydWN0IGtleTJyYyAq
dGFiKQogewotICBpbnQgaSwgbmI7Ci0gIGludCBia2V5czsKLSAgdW5zaWduZWQgY2hhciBidWZb
MTBdOwotICBuYiA9IHJlYWQoYmQuYmRfZmQsIGJ1ZiwgMTApOwotICBkZWJ1ZzEoImJ1dHRvbnBy
ZXNzX3RzaTogcmVhZCAlZCBieXRlc1xuIiwgbmIpOwotICBmb3IgKGk9MCwgYmtleXM9MDsgaSA8
IG5iOyBpKyspCi0gICAgeyAgIAotICAgICAgc3dpdGNoIChidWZbaV0gJiAweEUwKQotCXsKLQlj
YXNlIDB4MDA6IGJrZXlzICs9ICgoaW50KShidWZbaV0gJiAweDFmKSAgICAgICApOyAgYnJlYWs7
Ci0JY2FzZSAweDIwOiBia2V5cyArPSAoKGludCkoYnVmW2ldICYgMHgxZikgPDwgIDUgKTsgIGJy
ZWFrOwotCWNhc2UgMHg0MDogYmtleXMgKz0gKChpbnQpKGJ1ZltpXSAmIDB4MWYpIDw8ICA5ICk7
ICBicmVhazsKLQljYXNlIDB4NjA6IGJrZXlzICs9ICgoaW50KShidWZbaV0gJiAweDFmKSA8PCAg
MTMgKTsgYnJlYWs7Ci0JY2FzZSAweEEwOiBia2V5cyArPSAoKGludCkoYnVmW2ldICYgMHgxZikg
PDwgIDE4ICk7IGJyZWFrOwotCWNhc2UgMHhDMDogYmtleXMgKz0gKChpbnQpKGJ1ZltpXSAmIDB4
MWYpIDw8ICAyMiApOyBicmVhazsKLQljYXNlIDB4RTA6IGJrZXlzICs9ICgoaW50KShidWZbaV0g
JiAweDFmKSA8PCAgMjYgKTsgYnJlYWs7Ci0JZGVmYXVsdDogYnJlYWs7CisJaW50IGksIG5iOwor
CWludCBia2V5czsKKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxMF07CisJbmIgPSByZWFkKGJkLmJkX2Zk
LCBidWYsIDEwKTsKKwlkZWJ1ZzEoImJ1dHRvbnByZXNzX3RzaTogcmVhZCAlZCBieXRlc1xuIiwg
bmIpOworCWZvciAoaSA9IDAsIGJrZXlzID0gMDsgaSA8IG5iOyBpKyspIHsKKwkJc3dpdGNoIChi
dWZbaV0gJiAweEUwKSB7CisJCQljYXNlIDB4MDA6IGJrZXlzICs9ICgoaW50KShidWZbaV0gJiAw
eDFmKSk7IGJyZWFrOworCQkJY2FzZSAweDIwOiBia2V5cyArPSAoKGludCkoYnVmW2ldICYgMHgx
ZikgPDwgNSk7IGJyZWFrOworCQkJY2FzZSAweDQwOiBia2V5cyArPSAoKGludCkoYnVmW2ldICYg
MHgxZikgPDwgOSk7IGJyZWFrOworCQkJY2FzZSAweDYwOiBia2V5cyArPSAoKGludCkoYnVmW2ld
ICYgMHgxZikgPDwgMTMpOyBicmVhazsKKwkJCWNhc2UgMHhBMDogYmtleXMgKz0gKChpbnQpKGJ1
ZltpXSAmIDB4MWYpIDw8IDE4KTsgYnJlYWs7CisJCQljYXNlIDB4QzA6IGJrZXlzICs9ICgoaW50
KShidWZbaV0gJiAweDFmKSA8PCAyMik7IGJyZWFrOworCQkJY2FzZSAweEUwOiBia2V5cyArPSAo
KGludCkoYnVmW2ldICYgMHgxZikgPDwgMjYpOyBicmVhazsKKwkJCWRlZmF1bHQ6IGJyZWFrOwor
CQl9CiAJfQotICAgIH0KLSAgZGVidWcxKCJia2V5cyAleFxuIiwgYmtleXMpOwotICBmb3IgKGkg
PSAwOyB0YWJbaV0ua2V5ICE9IC0xOyBpKyspCi0gICAgaWYgKGJrZXlzID09IHRhYltpXS5rZXkp
Ci0gICAgICBicmVhazsKLSAgZGVidWcxKCJia2V5IGluZGV4ICVkXG4iLCBpKTsKLSAgaWYgKHRh
YltpXS5rZXkgIT0gLTEgJiYgdGFiW2ldLm5yICE9IFJDX0lMTEVHQUwpCi0gICAgewotICAgICAg
Y2hhciAqYXJnc1szXTsKLSAgICAgIGludCBhcmdsWzJdOwotICAgICAgCi0gICAgICBzdHJ1Y3Qg
YWN0aW9uIGFjdDsKLSAgICAgIGFyZ3NbMF0gPSB0YWJbaV0uYXJnMTsKLSAgICAgIGFyZ3NbMV0g
PSB0YWJbaV0uYXJnMjsKLSAgICAgIGFyZ3NbMl0gPSAwOwotICAgICAgYXJnbFswXSA9IGFyZ3Nb
MF0gPyBzdHJsZW4oYXJnc1swXSkgOiAwOwotICAgICAgYXJnbFsxXSA9IGFyZ3NbMV0gPyBzdHJs
ZW4oYXJnc1sxXSkgOiAwOwotICAgICAgYWN0Lm5yID0gdGFiW2ldLm5yOwotICAgICAgYWN0LmFy
Z3MgPSBhcmdzOwotICAgICAgYWN0LmFyZ2wgPSBhcmdsOwotICAgICAgZGlzcGxheSA9IGJkLmJk
X2RweTsKLSAgICAgIERvQWN0aW9uKCZhY3QsIC0yKTsKLSAgICB9Ci19CisJZGVidWcxKCJia2V5
cyAleFxuIiwgYmtleXMpOwogCisJZm9yIChpID0gMDsgdGFiW2ldLmtleSAhPSAtMTsgaSsrKQor
CQlpZiAoYmtleXMgPT0gdGFiW2ldLmtleSkKKwkJCWJyZWFrOworCisJZGVidWcxKCJia2V5IGlu
ZGV4ICVkXG4iLCBpKTsKKworCWlmICh0YWJbaV0ua2V5ICE9IC0xICYmIHRhYltpXS5uciAhPSBS
Q19JTExFR0FMKSB7CisJCWNoYXIgKmFyZ3NbM107CisJCWludCBhcmdsWzJdOworCisJCXN0cnVj
dCBhY3Rpb24gYWN0OworCQlhcmdzWzBdID0gdGFiW2ldLmFyZzE7CisJCWFyZ3NbMV0gPSB0YWJb
aV0uYXJnMjsKKwkJYXJnc1syXSA9IDA7CisJCWFyZ2xbMF0gPSBhcmdzWzBdID8gc3RybGVuKGFy
Z3NbMF0pIDogMDsKKwkJYXJnbFsxXSA9IGFyZ3NbMV0gPyBzdHJsZW4oYXJnc1sxXSkgOiAwOwor
CQlhY3QubnIgPSB0YWJbaV0ubnI7CisJCWFjdC5hcmdzID0gYXJnczsKKwkJYWN0LmFyZ2wgPSBh
cmdsOworCQlkaXNwbGF5ID0gYmQuYmRfZHB5OworCQlEb0FjdGlvbigmYWN0LCAtMik7CisJfQor
fQogCiBzdGF0aWMgdm9pZAogYnV0dG9ucHJlc3NfbmF2aWdhdG9yXzQwKCkKIHsKLSAgYnV0dG9u
cHJlc3NfdHNpKGtleXNfbmF2aWdhdG9yXzQwKTsKKwlidXR0b25wcmVzc190c2koa2V5c19uYXZp
Z2F0b3JfNDApOwogfQogCiBzdGF0aWMgdm9pZAogYnV0dG9ucHJlc3NfcG93ZXJicmFpbGxlXzQw
KCkKIHsKLSAgYnV0dG9ucHJlc3NfdHNpKGtleXNfcG93ZXJicmFpbGxlXzQwKTsKKwlidXR0b25w
cmVzc190c2koa2V5c19wb3dlcmJyYWlsbGVfNDApOwogfQogCiBzdGF0aWMgdm9pZAogYnV0dG9u
cHJlc3NfcG93ZXJicmFpbGxlXzgwKCkKIHsKLSAgYnV0dG9ucHJlc3NfdHNpKGtleXNfcG93ZXJi
cmFpbGxlXzgwKTsKKwlidXR0b25wcmVzc190c2koa2V5c19wb3dlcmJyYWlsbGVfODApOwogfQog
CiAjZW5kaWYgLyogSEFWRV9CUkFJTExFICovCi0KLQpkaWZmIC11ciBzY3JlZW4ub3JpZy9DaGFu
Z2VMb2cgc2NyZWVuL0NoYW5nZUxvZwotLS0gc2NyZWVuLm9yaWcvQ2hhbmdlTG9nCTIwMjMtMDYt
MDEgMTQ6NTg6MTcuMjI4NjY1MDAyICswMzAwCisrKyBzY3JlZW4vQ2hhbmdlTG9nCTIwMjItMDEt
MjggMTc6MDY6MDIuNjYyNjExNDAzICswMzAwCkBAIC0xLDE4ICsxLDI4IEBACi1WZXJzaW9uIDQu
OC4wICgwNS8wMi8yMDIwKQorVmVyc2lvbiA0LjkuMCAoMzAvMDEvMjAyMik6CisgICogSGFyZHN0
YXR1cyBvcHRpb24gZm9yIHVzZWQgZW5jb2RpbmcgKGVzY2FwZSBzdHJpbmcgJyVlJykKKyAgKiBP
cGVuQlNEIHVzZXMgbmF0aXZlIG9wZW5wdHkoKSBmcm9tIGl0cyB1dGlscy5oCisgICogRml4ZXM6
CisgICAgLSBmaXggY29tYmluaW5nIGNoYXIgaGFuZGxpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIGEg
c2VnZmF1bHQKKyAgICAtIENWRS0yMDIxLTI2OTM3OiBwb3NzaWJsZSBkZW5pYWwgb2Ygc2Vydmlj
ZSB2aWEgYSBjcmFmdGVkIFVURi04IGNoYXJhY3RlciBzZXF1ZW5jZSAoYnVnICM2MDAzMCkKKyAg
ICAtIG1ha2Ugc2NyZWVuIGV4aXQgY29kZSBiZSAwIHdoZW4gY2hlY2tpbmcgLS1oZWxwCisgICAg
LSBzZXNzaW9uIG5hbWVzIGxpbWl0IGlzIDgwIHN5bWJvbHMgKGJ1ZyAjNjE1MzQpCisgICAgLSBv
cHRpb24gLVggaWdub3JlcyBzcGVjaWZpZWQgdXNlciBpbiBtdWx0aXVzZXIgZW52IChidWcgIzM3
NDM3KQorICAgIC0gYSBsb3Qgb2YgcmVmb3JtYXRpb25zL2ZpeGVzL2NsZWFudXBzIChtYW4gcGFn
ZSBhbmQgc291cmNlIGNvZGUpCisKK1ZlcnNpb24gNC44LjAgKDA1LzAyLzIwMjApOgogICAqIElt
cHJvdmUgc3RhcnR1cCB0aW1lIGJ5IG9ubHkgcG9sbGluZyBmb3IgZmlsZXMgdG8gY2xvc2UKLSAg
Rml4ZXM6CisgICogRml4ZXM6CiAJLSBGaXggZm9yIHNlZ2ZhdWx0IGlmIHRlcm1jYXAgZG9lc24n
dCBoYXZlIEttIGVudHJ5CiAJLSBNYWtlIHNjcmVlbiBleGl0IGNvZGUgYmUgMCB3aGVuIGNoZWNr
aW5nIC0tdmVyc2lvbgogCS0gRml4IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiB3aGVuIHVz
aW5nIE9TQyA0OQogCi0KLVZlcnNpb24gNC43LjAgKDAyLzEwLzIwMTkpCitWZXJzaW9uIDQuNy4w
ICgwMi8xMC8yMDE5KToKICAgKiBBZGQgc3VwcG9ydCBmb3IgU0dSICgxMDA2KSBtb3VzZSBtb2Rl
CiAgICogQWRkIHN1cHBvcnQgZm9yIE9TQyAxMQogICAqIFVwZGF0ZSBVbmljb2RlIGFtYmlndW91
cyBhbmQgd2lkZSB0YWJsZXMgdG8gMTIuMS4wCiAgICogRml4ZXM6Ci0gIC0gY3Jvc3MtY29tcGls
YXRpb24gc3VwcG9ydCAoYnVnICM0MzIyMykKLSAgLSBhIGxvdCBvZiBtYW5wYWdlIGZpeGVzIGFu
ZCBjbGVhbnVwcworCS0gY3Jvc3MtY29tcGlsYXRpb24gc3VwcG9ydCAoYnVnICM0MzIyMykKKwkt
IGEgbG90IG9mIG1hbnBhZ2UgZml4ZXMgYW5kIGNsZWFudXBzCiAKIFZlcnNpb24gNC42LjIgKDIz
LzEwLzIwMTcpOgogICAqIEZpeGVzOgpAQCAtNjIsMTIgKzcyLDExIEBACiAgICogSW50cm9kdWNl
IFh4IHN0cmluZyBlc2NhcGUgc2hvd2luZyB0aGUgZXhlY3V0ZWQgY29tbWFuZCBvZiBhIHdpbmRv
dwogICAqIEltcGxlbWVudCBkZWFkL3pvbWJpZSB3aW5kb3cgcG9sbGluZywgYWxsb3dpbmcgZm9y
IGF1dG8gcmVjb25uZWN0aW5nCiAgICogQWxsb3cgc2V0dGluZyBoYXJkc3RhdHVzIG9uIGZpcnN0
IGxpbmUKLQotICBOZXcgQ29tbWFuZHM6Ci0gICogJ3NvcnQnIGNvbW1hbmQgc29ydGluZyB3aW5k
b3dzIGJ5IHRpdGxlCi0gICogJ2J1bXBsZWZ0JywgJ2J1bXByaWdodCcgLSBtYW51YWxseSBtb3Zl
IHdpbmRvd3Mgb24gd2luZG93IGxpc3QKLSAgKiAnY29sbGFwc2UnIHJlbW92aW5nIG51bWJlcmlu
ZyAnZ2FwcycgYmV0d2VlbiB3aW5kb3dzLCBieSByZW51bWJlcmluZwotICAqICd3aW5kb3dzJyBj
b21tYW5kIG5vdyBhY2NlcHRzIGFyZ3VtZW50cyBmb3IgdXNlIHdpdGggcXVlcnlpbmcKKyAgKiBO
ZXcgQ29tbWFuZHM6CisJLSAnc29ydCcgY29tbWFuZCBzb3J0aW5nIHdpbmRvd3MgYnkgdGl0bGUK
KwktICdidW1wbGVmdCcsICdidW1wcmlnaHQnIC0gbWFudWFsbHkgbW92ZSB3aW5kb3dzIG9uIHdp
bmRvdyBsaXN0CisJLSAnY29sbGFwc2UnIHJlbW92aW5nIG51bWJlcmluZyAnZ2FwcycgYmV0d2Vl
biB3aW5kb3dzLCBieSByZW51bWJlcmluZworCS0gJ3dpbmRvd3MnIGNvbW1hbmQgbm93IGFjY2Vw
dHMgYXJndW1lbnRzIGZvciB1c2Ugd2l0aCBxdWVyeWluZwogCiBWZXJzaW9uIDQuMi4xICgyOC8w
NC8yMDE0KToKICAgKiBhbGxvdyBmb3IgdGVybWluYWwgd2l0aCBsb25nICRURVJNICh1cCB0byAz
MiBjaGFyYWN0ZXJzKQpAQCAtNzksOCArODgsNyBAQAogICBOZXcgQ29tbWFuZHM6CiAgICogJ3Vu
YmluZGFsbCcgdG8gdW5iaW5kIGFsbCBjb21tYW5kcwogICAqICd1cCcsICdkb3duJywgJ2xlZnQn
LCAncmlnaHQnIHN1Yi1jb21tYW5kcyBmb3IgJ2ZvY3VzJwotICAqICdyZW5kaXRpb24nIHRvIHNw
ZWNpZnkgcmVuZGl0aW9uIHRvIHVzZSBpbiBjYXB0aW9uL2hhcmRzdGF0dXMgZm9yCi0gICAgd2lu
ZG93LW5hbWVzIHRoYXQgaGF2ZSBiZWxsL21vbml0b3Ivc2lsZW5jZS9zbyB0dXJuZWQgb24uCisg
ICogJ3JlbmRpdGlvbicgdG8gc3BlY2lmeSByZW5kaXRpb24gdG8gdXNlIGluIGNhcHRpb24vaGFy
ZHN0YXR1cyBmb3Igd2luZG93LW5hbWVzIHRoYXQgaGF2ZSBiZWxsL21vbml0b3Ivc2lsZW5jZS9z
byB0dXJuZWQgb24uCiAgICogJ2xheW91dCcsIHdpdGggdGhlIGZvbGxvd2luZyBzdWItY29tbWFu
ZHMKIAktICd0aXRsZScKIAktICdudW1iZXInCkBAIC0zNzIsOCArMzgwLDggQEAKID09PT09PT09
PT09PT09PT09PT09PT09CiAKIC5zY3JlZW5yYzoKLSAgc2NyZWVuIG5vdyBvbmx5IG9wZW5zIHRo
ZSB3aW5kb3dzIHlvdSBleHBsaWNpdGx5IGFzayBmb3IuIGlmIHlvdSAKLSAgc3BlY2lmeSBub25l
LCB5b3Ugc3RpbGwgZ2V0IG9uZSB3aW5kb3csIG9mIGNvdXJzZS4KKyAgc2NyZWVuIG5vdyBvbmx5
IG9wZW5zIHRoZSB3aW5kb3dzIHlvdSBleHBsaWNpdGx5IGFzayBmb3IuCisgIElmIHlvdSBzcGVj
aWZ5IG5vbmUsIHlvdSBzdGlsbCBnZXQgb25lIHdpbmRvdywgb2YgY291cnNlLgogCiBzY3JlZW4g
My4wLiBQYXRjaGxldmVsIDUKID09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzkxLDcgKzM5
OSw3IEBACiAgIGJ5IGEgY29sb24uIE9sZGNoYXIgYW5kIG5ld2NoYXIgYXJlIGVpdGhlciBzaW5n
bGUgYXNjaWkgY2hhcmFjdGVycywgCiAgIG9yIHRoZSB0d28gY2hhcmFjdGVyIHNlcXVlbmNlIF54
LCB3aGVyZSB4IGlzIGFuIGFzY2lpIGNoYXJhY3Rlciwgb3IKICAgYSAzIGRpZ2l0IG9jdGFsIHZh
bHVlIHByZXBlbmRlZCB3aXRoICdcJy4gdGhlIHN0cmluZyAiXDA0MD0uOl5NPXEiCi0gIHJlYmlu
ZHMgJy4nIHRvIHNldCBtYXJrcywgYW5kIHRoZSByZXR1cm4gcmV5IHdpbGwgYWJvcnQgY29weSBt
b2RlLgorICByZWJpbmRzICcuJyB0byBzZXQgbWFya3MsIGFuZCB0aGUgcmV0dXJuIGtleSB3aWxs
IGFib3J0IGNvcHkgbW9kZS4KIAogc2V0IHNjcm9sbGJhY2sgMTAwCiAgIHJlc2l6ZXMgdGhlIHNj
cm9sbGJhY2sgaGlzdG9yeSBidWZmZXIgdG8gMTAwIGxpbmVzLiBhIGRlZmF1bHQgb2YgNTAKQEAg
LTQyNiw3ICs0MzQsNyBAQAogCiBeQSA6IHNldCB2YmVsbF9tc2cgIld1ZmYgV3VmZiIKIAotVGhv
dXNhbmQgZW5oYW5jZW1lbnRzOiBoZWxwIHJlc2l6aWJsZSwgY29weSduJ3Bhc3RlIGluIG1haW4K
K1Rob3VzYW5kIGVuaGFuY2VtZW50czogaGVscCByZXNpemFibGUsIGNvcHknbidwYXN0ZSBpbiBt
YWluCiAgIHNvY2tldCBsb29wLCBhbmQgbm8gbW9yZSAnXDAnIGhhY2tpbicuIDpXUz1cRTg7JWQ7
JWR0OgogCiBzY3JlZW4gY2FuIG5vdyByZXNpemUgd2luZG93cyB1bmRlciBzdW52aWV3LgpAQCAt
NDU0LDEyICs0NjIsMTIgQEAKICAgYmluZCAnTycgc2V0IGxvZ2luIG9mZgogICBpcyB2YWxpZCBp
biB5b3VyIC5zY3JlZW5yYyBhcyB3ZWxsIGFzIHR5cGVkIGF0IHRoZSAnOicgcHJvbXB0LgogICBh
IGJvbnVzIGlzICI6c2V0IGFsbCIgd2hpY2ggaXMgc3lub255bSB0byAiOmhlbHAiLgotICBBdCB0
aGUgQ29sb24gcHJvbXB0IGFsc28gS2V5TmFtZXMgY2FuIGJlIGVudGVyZWQsIGFsb3Rob3VnaCB0
aGF0IG1ha2VzCisgIEF0IHRoZSBDb2xvbiBwcm9tcHQgYWxzbyBLZXlOYW1lcyBjYW4gYmUgZW50
ZXJlZCwgYWx0aG91Z2ggdGhhdCBtYWtlcwogICBub3QgYWx3YXlzIHNlbnNlLgogCiBeQSB4IHVz
ZXMgYSBidWlsdGluIGxvY2twcmcsIGlmIAogICBhKSB3ZSBkb24ndCBmaW5kIG91ciBsb2NrcHJn
LCBvcgotICBiKSB1c2VyIHN1cHBsaWVzIHVzIHdpdGggdGhlIGVudmlyb25tZXQgdmFyaWFibGUg
TE9DS1BSRyBzZXQgdG8gImJ1aWx0aW4iCisgIGIpIHVzZXIgc3VwcGxpZXMgdXMgd2l0aCB0aGUg
ZW52aXJvbm1lbnQgdmFyaWFibGUgTE9DS1BSRyBzZXQgdG8gImJ1aWx0aW4iCiAgIHRoZSBidWls
dGluIGxvY2tzIHVudGlsIHlvdXIgbG9naW4gcGFzc3dvcmQgaXMgdHlwZWQuIG9uIHN5c3RlbXMg
dXNpbmcKICAgInNoYWRvdyBwYXNzd29yZCBmaWxlcyIgeW91IGFyZSBwcm9tcHRlZCBmb3IgYSBw
YXNzd29yZC4KIApAQCAtNDgwLDcgKzQ4OCw3IEBACiAKIHJhcmUgbWFya3JvdXRpbmUgYnVnIGZp
eGVkLgogCi13ZSBkb250IG9wZW4gZXZlcnkgZmlsZSB0aGUgYXR0YWNoZXIgdGVsbHMgdXMuCit3
ZSBkb24ndCBvcGVuIGV2ZXJ5IGZpbGUgdGhlIGF0dGFjaGVyIHRlbGxzIHVzLgogCiB3ZSBoYXZl
IG5vdyBvdXIgd29uZGVyZnVsICJXdWZmLCBXdWZmIiB2aXN1YWxfYmVsbAogCmRpZmYgLXVyIHNj
cmVlbi5vcmlnL2NvbmZpZ3VyZS5hYyBzY3JlZW4vY29uZmlndXJlLmFjCi0tLSBzY3JlZW4ub3Jp
Zy9jb25maWd1cmUuYWMJMjAyMy0wNi0wMSAxNDo1ODoxNy4yMzI2NjUwMTEgKzAzMDAKKysrIHNj
cmVlbi9jb25maWd1cmUuYWMJMjAyMi0wMS0yOCAxNzowNjowMi42NzA2MTE2MDIgKzAzMDAKQEAg
LTE3Miw2ICsxNzIsNDAgQEAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDxmY250bC5o
Pl0sIFtpbnQgeCA9IFNJR0NITEQgfCBGTkRFTEFZO10sICwgQUNfREVGSU5FKFNZU1YpKQogCitB
Q19DSEVDS0lORyhmb3Igc2VxdWVudC9wdHgpCitBQ19FR1JFUF9DUFAoWUVTX0lTX0RFRklORUQs
CitbI2lmZGVmIF9TRVFVRU5UXworICBZRVNfSVNfREVGSU5FRDsKKyNlbmRpZgorXSwgTElCUz0i
JExJQlMgLWxzb2NrZXQgLWxpbmV0IjtzZXFwdHg9MSkKKworQUNfQ0hFQ0tJTkcoU1ZSNCkKK0FD
X0VHUkVQX0NQUCh5ZXMsCitbbWFpbiAoKSB7CisjaWYgZGVmaW5lZChTVlI0KSB8fCBkZWZpbmVk
KF9fU1ZSNCkKKyAgeWVzOworI2VuZGlmCitdLCBBQ19OT1RFKC0geW91IGhhdmUgYSBTVlI0IHN5
c3RlbSkgQUNfREVGSU5FKFNWUjQpIHN2cjQ9MSkKK2lmIHRlc3QgLW4gIiRzdnI0IiA7IHRoZW4K
K29sZGxpYnM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxlbGYiCitBQ19DSEVDS0lORyhTVlI0KQor
QUNfVFJZX0xJTksoWyNpbmNsdWRlIDx1dG1weC5oPgorXSwsCitbQUNfQ0hFQ0tfSEVBREVSKGR3
YXJmLmgsIEFDX0RFRklORShCVUdHWUdFVExPR0lOKSwKK1tBQ19DSEVDS19IRUFERVIoZWxmLmgs
IEFDX0RFRklORShCVUdHWUdFVExPR0lOKSldKV0KKyxMSUJTPSIkb2xkbGlicyIpCitmaQorCitB
Q19DSEVDS19IRUFERVJTKFtzdHJvcHRzLmggc3RyaW5nLmggc3RyaW5ncy5oXSkKKworQUNfQ0hF
Q0tJTkcoZm9yIFNvbGFyaXMgMi54KQorQUNfRUdSRVBfQ1BQKFlFU19JU19ERUZJTkVELAorWyNp
ZiBkZWZpbmVkKFNWUjQpICYmIGRlZmluZWQoc3VuKQorICBZRVNfSVNfREVGSU5FRDsKKyNlbmRp
ZgorXSwgTElCUz0iJExJQlMgLWxzb2NrZXQgLWxuc2wgLWxrc3RhdCIpCisKIGRubAogZG5sICAg
ICoqKiogIHR5cGVkZWZzICoqKioKIGRubApAQCAtMjgwLDcgKzMxNCw3IEBACiAjZGVmaW5lIFNf
SUZJRk8gMDAxMDAwMAogI2VuZGlmCiAKLWNoYXIgKmZpbiA9ICJjb25mdGVzdCQkIjsKK2NoYXIg
KmZpbiA9ICIvdG1wL2NvbmZ0ZXN0JCQiOwogCiBtYWluKCkKIHsKQEAgLTMyOCw3ICszNjIsNyBA
QAogXSwgQUNfTk9URSgtIHlvdXIgZmlmb3MgYXJlIHVzYWJsZSkgZmlmbz0xLAogQUNfTk9URSgt
IHlvdXIgZmlmb3MgYXJlIG5vdCB1c2FibGUpLAogQUNfTk9URSgtIHNraXBwaW5nIGNoZWNrIGJl
Y2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgZmlmb3MgYXJlIHVzYWJsZSkg
Zmlmbz0xKQotcm0gLWYgY29uZnRlc3QqCitybSAtZiAvdG1wL2NvbmZ0ZXN0KgogCiBpZiB0ZXN0
IC1uICIkZmlmbyI7IHRoZW4KIEFDX0NIRUNLSU5HKGZvciBicm9rZW4gZmlmbyBpbXBsZW1lbnRh
dGlvbikKQEAgLTM1MSw3ICszODUsNyBAQAogI2RlZmluZSBTX0lGSUZPIDAwMTAwMDAKICNlbmRp
ZgogCi1jaGFyICpmaW4gPSAiY29uZnRlc3QkJCI7CitjaGFyICpmaW4gPSAiL3RtcC9jb25mdGVz
dCQkIjsKIAogbWFpbigpCiB7CkBAIC0zNzcsNyArNDExLDcgQEAKIF0sIEFDX05PVEUoLSB5b3Vy
IGltcGxlbWVudGF0aW9uIGlzIG9rKSwgCiBBQ19OT1RFKC0geW91IGhhdmUgYSBicm9rZW4gaW1w
bGVtZW50YXRpb24pIEFDX0RFRklORShCUk9LRU5fUElQRSkgZmlmb2JyPTEsCiBBQ19OT1RFKC0g
c2tpcHBpbmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBm
aWZvIGltcGxlbWVudGF0aW9uIGlzIG9rKSkKLXJtIC1mIGNvbmZ0ZXN0Kgorcm0gLWYgL3RtcC9j
b25mdGVzdCoKIGZpCiAKIGRubApAQCAtNDAxLDcgKzQzNSw3IEBACiAjaW5jbHVkZSA8c3lzL3Nv
Y2tldC5oPgogI2luY2x1ZGUgPHN5cy91bi5oPgogCi1jaGFyICpzb24gPSAiY29uZnRlc3QkJCI7
CitjaGFyICpzb24gPSAiL3RtcC9jb25mdGVzdCQkIjsKIAogbWFpbigpCiB7CkBAIC00NDAsNyAr
NDc0LDcgQEAKIF0sIEFDX05PVEUoLSB5b3VyIHNvY2tldHMgYXJlIHVzYWJsZSkgc29jaz0xLAog
QUNfTk9URSgtIHlvdXIgc29ja2V0cyBhcmUgbm90IHVzYWJsZSksCiBBQ19OT1RFKC0gc2tpcHBp
bmcgY2hlY2sgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nOyBhc3N1bWluZyBzb2NrZXRz
IGFyZSB1c2FibGUpIHNvY2s9MSkKLXJtIC1mIGNvbmZ0ZXN0Kgorcm0gLWYgL3RtcC9jb25mdGVz
dCoKIAogaWYgdGVzdCAtbiAiJHNvY2siOyB0aGVuCiBBQ19DSEVDS0lORyhzb2NrZXQgaW1wbGVt
ZW50YXRpb24pCkBAIC00NTcsNyArNDkxLDcgQEAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAj
aW5jbHVkZSA8c3lzL3VuLmg+CiAKLWNoYXIgKnNvbiA9ICJjb25mdGVzdCQkIjsKK2NoYXIgKnNv
biA9ICIvdG1wL2NvbmZ0ZXN0JCQiOwogCiBtYWluKCkKIHsKQEAgLTQ4MCw3ICs1MTQsNyBAQAog
QUNfTk9URSgtIHVuaXggZG9tYWluIHNvY2tldHMgYXJlIG5vdCBrZXB0IGluIHRoZSBmaWxlc3lz
dGVtKQogQUNfREVGSU5FKFNPQ0tfTk9UX0lOX0ZTKSBzb2Nrbm9mcz0xLAogQUNfTk9URSgtIHNr
aXBwaW5nIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIGNyb3NzIGNvbXBpbGluZzsgYXNzdW1pbmcgc29j
a2V0cyBhcmUgbm9ybWFsKSkKLXJtIC1mIGNvbmZ0ZXN0Kgorcm0gLWYgL3RtcC9jb25mdGVzdCoK
IGZpCiAKIApAQCAtNTAyLDcgKzUzNiw3IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNs
dWRlIDxmY250bC5oPgogCi1jaGFyICpuYW0gPSAiY29uZnRlc3QkJCI7CitjaGFyICpuYW0gPSAi
L3RtcC9jb25mdGVzdCQkIjsKIAogI2lmZGVmIE5BTUVEUElQRQogCkBAIC02MDEsNyArNjM1LDcg
QEAKIHRnZXRlbnQoKGNoYXIgKikwLCAoY2hhciAqKTApOwogI2VuZGlmCiBdLCwKLUxJQlM9Ii1s
dGluZm8gJG9saWJzIgorTElCUz0iLWx0ZXJtY2FwICRvbGlicyIKIEFDX0NIRUNLSU5HKGxpYnRl
cm1jYXApCiBBQ19UUllfTElOSygsdGdldGVudCgoY2hhciAqKTAsIChjaGFyICopMCk7LCwKIExJ
QlM9Ii1sdGVybWxpYiAkb2xpYnMiCkBAIC02MjIsOSArNjU2LDYgQEAKIEFDX01TR19FUlJPUigh
ISEgbm8gdGdldGVudCAtIG5vIHNjcmVlbikpKSkpKSkpKQogCiBBQ19UUllfUlVOKFsKLQotZXh0
ZXJuIGNoYXIgKnRnb3RvKGNoYXIgKixpbnQsaW50KTsKLQogbWFpbigpCiB7CiAgZXhpdChzdHJj
bXAodGdvdG8oIiVwMSVkIiwgMCwgMSksICIxIikgPyAwIDogMSk7CkBAIC02MzgsMTEgKzY2OSwy
MCBAQAogZG5sICAgICoqKiogIFBUWSBzcGVjaWZpYyB0aGluZ3MgICoqKioKIGRubAogaWYgdGVz
dCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KK0FDX0NIRUNLSU5HKGZvciAvZGV2L3B0
YykKK2lmIHRlc3QgLXIgL2Rldi9wdGM7IHRoZW4KK0FDX0RFRklORShIQVZFX0RFVl9QVEMpCitm
aQorZmkKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBubyA7IHRoZW4KIEFDX0NIRUNL
SU5HKGZvciBTVlI0IHB0eXMpCiBzeXN2cjRwdHlzPQoraWYgdGVzdCAtYyAvZGV2L3B0bXggOyB0
aGVuCiBBQ19UUllfTElOSyhbXSxbcHRzbmFtZSgwKTtncmFudHB0KDApO3VubG9ja3B0KDApO10s
W0FDX0RFRklORShIQVZFX1NWUjRfUFRZUykKIHN5c3ZyNHB0eXM9MV0pCiBmaQorZmkKIAogQUNf
Q0hFQ0tfRlVOQ1MoZ2V0cHQpCiAKQEAgLTgyNCw2ICs4NjQsMTEgQEAKIGRubAogZG5sICAgICoq
KiogIGxvYWRhdiAgKioqKgogZG5sCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vIDsg
dGhlbgorQUNfQ0hFQ0tJTkcoZm9yIGxpYnV0aWwocykpCit0ZXN0IC1mIC91c3IvbGliL2xpYnV0
aWxzLmEgJiYgTElCUz0iJExJQlMgLWx1dGlscyIKK3Rlc3QgLWYgL3Vzci9saWIvbGlidXRpbC5h
ICYmIExJQlM9IiRMSUJTIC1sdXRpbCIKK2ZpCiAKIEFDX0NIRUNLSU5HKGdldGxvYWRhdmcpCiBB
Q19UUllfTElOSygsW2dldGxvYWRhdmcoKGRvdWJsZSAqKTAsIDApO10sCkBAIC0xMDUzLDYgKzEw
OTgsMTEgQEAKIExJQlM9IiRMSUJTIC1sY3J5cHQiCiBBQ19DSEVDS0lORyhjcnlwdCkKIEFDX1RS
WV9MSU5LKCwsLExJQlM9IiRvbGRsaWJzIikKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0g
bm8gOyB0aGVuCit0ZXN0IC1mIC9saWIvbGlic2VjLmEgfHwgdGVzdCAtZiAvdXNyL2xpYi9saWJz
ZWMuYSAmJiBMSUJTPSIkTElCUyAtbHNlYyIKK3Rlc3QgLWYgL2xpYi9saWJzaGFkb3cuYSB8fCB0
ZXN0IC1mIC91c3IvbGliL2xpYnNoYWRvdy5hICYmIExJQlM9IiRMSUJTIC1sc2hhZG93IgorZmkK
Kwogb2xkbGlicz0iJExJQlMiCiBMSUJTPSIkTElCUyAtbHN1biIKIEFDX0NIRUNLSU5HKElSSVgg
c3VuIGxpYnJhcnkpCkBAIC0xMTk0LDI2ICsxMjQ0LDE3IEBACiAKIEFDX0NIRUNLX0ZVTkNTKHJl
bmFtZSBmY2htb2QgZmNob3duIHN0cmVycm9yIGxzdGF0IF9leGl0IHV0aW1lcyB2c25wcmludGYg
Z2V0Y3dkIHNldGxvY2FsZSBzdHJmdGltZSkKIAotQUNfQ0hFQ0tfTElCKGRsLCBkbG9wZW4pCi0K
IEFDX0FSR19FTkFCTEUocGFtLCBbICAtLWVuYWJsZS1wYW0gICAgICAgICAgICBlbmFibGUgUEFN
IHN1cHBvcnRdKQogaWYgdGVzdCAiJGVuYWJsZV9wYW0iID0gInllcyI7IHRoZW4KICAgICBBQ19N
U0dfQ0hFQ0tJTkcoZm9yIFBBTSBzdXBwb3J0KQogICAgIG9sZGxpYnM9IiRMSUJTIgotICAgIGNm
X3Jlc3VsdD1ubwotCi0gICAgQUNfQ0hFQ0tfTElCKHBhbSwgcGFtX3N0YXJ0LCBMSUJTPSIkTElC
UyAtbHBhbSI7Y2ZfcmVzdWx0PXllcywgY2ZfcmVzdWx0PW5vKQotCi0gICAgaWYgdGVzdCAiJGNm
X3Jlc3VsdCIgPSB5ZXM7IHRoZW4KLSAgICAJQUNfQ0hFQ0tfTElCKHBhbV91c2VycGFzcywgcGFt
X3VzZXJwYXNzX2NvbnYsIExJQlM9IiRMSUJTIC1scGFtX3VzZXJwYXNzIjtjZl9yZXN1bHQ9eWVz
LCBjZl9yZXN1bHQ9bm8pCi0gICAgZmkKLQotICAgIGlmIHRlc3QgIiRjZl9yZXN1bHQiID0geWVz
OyB0aGVuCi0JQUNfREVGSU5FKFVTRV9QQU0pCi0gICAgZWxzZQotICAgIAlMSUJTPSIkb2xkbGli
cyIKLSAgICBmaQotICAgIEFDX01TR19SRVNVTFQoJGNmX3Jlc3VsdCk7CisgICAgTElCUz0iJExJ
QlMgLWxwYW0iCisgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fYXBwbC5o
Pl0sIFsKKwlwYW1fc3RhcnQoMCwgMCwgMCwgMCk7CisJcGFtX2F1dGhlbnRpY2F0ZSgwLCAwKTsK
KwlwYW1fZW5kKDAsMCk7CisgICAgXSwgQUNfTVNHX1JFU1VMVCh5ZXMpO0FDX0RFRklORShVU0Vf
UEFNKSwKKyAgICAgICBBQ19NU0dfUkVTVUxUKG5vKTtMSUJTPSIkb2xkbGlicyIpCiBmaQogCiBB
Q19BUkdfRU5BQkxFKHVzZS1sb2NhbGUsCmRpZmYgLXVyIHNjcmVlbi5vcmlnL2Rpc3BsYXkuYyBz
Y3JlZW4vZGlzcGxheS5jCi0tLSBzY3JlZW4ub3JpZy9kaXNwbGF5LmMJMjAyMy0wNi0wMSAxNDo1
ODoxNy4yMzM2NjUwMTQgKzAzMDAKKysrIHNjcmVlbi9kaXNwbGF5LmMJMjAyMi0wMS0yOCAxNzow
NjowMi42NzQ2MTE3MDEgKzAzMDAKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1
ZGUgPGZjbnRsLmg+CiAjaWZuZGVmIHN1bgogIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KQEAgLTMy
NywxNyArMzI2LDYgQEAKICAgcmV0dXJuIGRpc3BsYXk7CiB9CiAKLXN0YXRpYyBzaWdqbXBfYnVm
IGFsYXJtX2p1bXA7Ci0KLXN0YXRpYyBzaWdyZXRfdAotRmx1c2hTaWdBbGFybSBTSUdERUZBUkcK
LXsKLSNpZmRlZiBERUJVRwotICAgIGRlYnVnKCJGbHVzaFNpZ0FsYXJtXG4iKTsKLSNlbmRpZgot
ICAgIHNpZ2xvbmdqbXAgKGFsYXJtX2p1bXAsIDEpOwotfQotCiAKIHZvaWQKIEZyZWVEaXNwbGF5
KCkKQEAgLTM1OCwxMiArMzQ2LDcgQEAKICAgICAgIEZsdXNoKDMpOwogICAgICAgaWYgKCFkaXNw
bGF5KQogCXJldHVybjsKLSAgICAgIGlmIChzaWdzZXRqbXAoYWxhcm1fanVtcCwxKT09MCkgewot
ICAgICAgICBzaWduYWwoU0lHQUxSTSwgRmx1c2hTaWdBbGFybSk7Ci0gICAgICAgIGFsYXJtKDEw
KTsKLSAgICAgICAgU2V0VFRZKERfdXNlcmZkLCAmRF9PbGRNb2RlKTsKLSAgICAgICAgYWxhcm0o
MCk7Ci0gICAgICB9CisgICAgICBTZXRUVFkoRF91c2VyZmQsICZEX09sZE1vZGUpOwogICAgICAg
ZmNudGwoRF91c2VyZmQsIEZfU0VURkwsIDApOwogICAgIH0KICAgZnJlZXR0eSgpOwpAQCAtMjMz
Miw3ICsyMzE1LDcgQEAKIHsKICAgY2hhciAqYnVmOwogI2lmZGVmIFVURjgKLSAgaW50IGV4dHJh
Ynl0ZXMgPSBzdHJsZW4oaHN0YXR1c3N0cmluZykgLSBzdHJsZW5fb25zY3JlZW4oaHN0YXR1c3N0
cmluZywgTlVMTCk7CisgIGludCBleHRyYWJ5dGVzID0gc3RybGVuKGhzdGF0dXNzdHJpbmcpIC0g
c3RybGVuX29uc2NyZWVuKCh1bnNpZ25lZCBjaGFyICopaHN0YXR1c3N0cmluZywgTlVMTCk7CiAj
ZWxzZQogICBpbnQgZXh0cmFieXRlcyA9IDA7CiAjZW5kaWYKQEAgLTI0MzUsNyArMjQxOCw3IEBA
CiAJICBpZiAoeSA9PSBjdi0+Y195ZSArIDEgJiYgZnJvbSA+PSBjdi0+Y194cyAmJiBmcm9tIDw9
IGN2LT5jX3hlKQogCSAgICB7CiAjaWZkZWYgVVRGOAotCSAgICAgIGludCBleHRyYWJ5dGVzID0g
c3RybGVuKGNhcHRpb25zdHJpbmcpIC0gc3RybGVuX29uc2NyZWVuKGNhcHRpb25zdHJpbmcsIE5V
TEwpOworCSAgICAgIGludCBleHRyYWJ5dGVzID0gc3RybGVuKGNhcHRpb25zdHJpbmcpIC0gc3Ry
bGVuX29uc2NyZWVuKCh1bnNpZ25lZCBjaGFyICopY2FwdGlvbnN0cmluZywgTlVMTCk7CiAjZWxz
ZQogCSAgICAgIGludCBleHRyYWJ5dGVzID0gMDsKICNlbmRpZgpAQCAtMzA0MCw3ICszMDIzLDYg
QEAKICAgICBBZGRDaGFyKCcgJyk7CiB9CiAKLQogdm9pZAogRmx1c2gocHJvZ3Jlc3MpCiBpbnQg
cHJvZ3Jlc3M7CkBAIC0zMDkyLDE1ICszMDc0LDcgQEAKIAkgICAgICBicmVhazsKIAkgICAgfQog
CX0KLSAgICAgIGlmIChzaWdzZXRqbXAgKGFsYXJtX2p1bXAsMSkgPT0gMCkgewotICAgICAgICBz
aWduYWwoU0lHQUxSTSwgRmx1c2hTaWdBbGFybSk7Ci0JYWxhcm0oMTApOwotCXdyID0gd3JpdGUo
RF91c2VyZmQsIHAsIGwpOwotCWFsYXJtKDApOwotICAgICAgfSBlbHNlIHsKLQlkZWJ1ZzEoIldh
cm5pbmc6IFdlIHNwZW50IHRvbyBsb25nIGluIGZsdXNoOiAlZFxuIiwgZXJybm8pOwotCXJldHVy
bjsKLSAgICAgIH0KKyAgICAgIHdyID0gd3JpdGUoRF91c2VyZmQsIHAsIGwpOwogICAgICAgaWYg
KHdyIDw9IDApCiAJewogCSAgaWYgKGVycm5vID09IEVJTlRSKQpAQCAtMzIwOCw4ICszMTgyLDcg
QEAKICAgICB7CiAgICAgICBkZWJ1ZygiZGlzcGxheSBhY3Rpdml0eSBzdG9wcGVkIHNsZWVwXG4i
KTsKICAgICAgIGlmIChlYXQpCi0gICAgICAgIGlmIChyZWFkKERfdXNlcmZkLCAmYnVmLCAxKSA8
IDEpCi0JICA7CisgICAgICAgIHJlYWQoRF91c2VyZmQsICZidWYsIDEpOwogICAgIH0KICAgZGVi
dWcyKCJEaXNwbGF5U2xlZXAoJWQpIGVuZGluZywgZWF0IHdhcyAlZFxuIiwgbiwgZWF0KTsKIH0K
QEAgLTM0MzIsNyArMzQwNSw3IEBACiAgICAqLwogICBpbnQgc2l6ZTsKICAgY2hhciBidWZzcGFj
ZVtNQVhfTU9VU0VfU0VRVUVOQ0UgKyBJT1NJWkVdOwotICB1bnNpZ25lZCBjaGFyICpidWYgPSBi
dWZzcGFjZSArIE1BWF9NT1VTRV9TRVFVRU5DRTsKKyAgdW5zaWduZWQgY2hhciAqYnVmID0gKHVu
c2lnbmVkIGNoYXIqKWJ1ZnNwYWNlICsgTUFYX01PVVNFX1NFUVVFTkNFOwogCiAgIHN0cnVjdCBj
YW52YXMgKmN2OwogCkBAIC0zNTA3LDcgKzM0ODAsNyBAQAogCWlmIChwLT53X3pkaXNwbGF5ID09
IGRpc3BsYXkpCiAJICB7CiAJICAgIGZsYXllciA9ICZwLT53X2xheWVyOwotCSAgICBidWZwID0g
YnVmOworCSAgICBidWZwID0gKGNoYXIgKilidWY7CiAJICAgIHdoaWxlIChzaXplID4gMCkKIAkg
ICAgICBMYXlQcm9jZXNzKCZidWZwLCAmc2l6ZSk7CiAJICAgIHJldHVybjsKQEAgLTM3OTAsNyAr
Mzc2Myw3IEBACiAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICgqRF9wcm9jZXNzaW5w
dXQpKGJ1Ziwgc2l6ZSk7CisgICgqRF9wcm9jZXNzaW5wdXQpKChjaGFyICopYnVmLCBzaXplKTsK
IH0KIAogc3RhdGljIHZvaWQKQEAgLTQwMTUsNyArMzk4OCw2IEBACiAJfQogICAgIH0KICNlbmRp
ZgotICBmZmx1c2goTlVMTCk7CiAgIHN3aXRjaCAocGlkID0gKGludClmb3JrKCkpCiAgICAgewog
ICAgIGNhc2UgLTE6CkBAIC00MDYzLDE5ICs0MDM1LDEzIEBACiAJfQogICAgICAgZGVidWcxKCI9
PT0gUnVuQmxhbmtlcjogcGlkICVkXG4iLCAoaW50KWdldHBpZCgpKTsKICNlbmRpZgotICAgICAg
ewotICAgICAgICBpbnQgZmQgPSBvcGVuKG0sIE9fUkRXUik7Ci0gICAgICAgIGlmIChmZCA8IDAp
Ci0gICAgICAgICAgUGFuaWMoZXJybm8sICJDYW5ub3Qgb3BlbiAlcyIsIG0pOwotICAgICAgICBp
ZiAoZHVwMihmZCwgMCkgPCAwKQotICAgICAgICAgIFBhbmljKGVycm5vLCAiQ2Fubm90IHJlZGly
ZWN0ICVzIHRvICVzIiwgInN0ZGluIiwgbSk7Ci0gICAgICAgIGlmIChkdXAyKGZkLCAxKSA8IDAp
Ci0gICAgICAgICAgUGFuaWMoZXJybm8sICJDYW5ub3QgcmVkaXJlY3QgJXMgdG8gJXMiLCAic3Rk
b3V0IiwgbSk7Ci0gICAgICAgIGlmIChkdXAyKGZkLCAyKSA8IDApCi0gICAgICAgICAgUGFuaWMo
ZXJybm8sICJDYW5ub3QgcmVkaXJlY3QgJXMgdG8gJXMiLCAic3RkZXJyIiwgbSk7Ci0gICAgICAg
IGlmIChmZCA+IDIpCi0gICAgICAgICAgY2xvc2UoZmQpOwotICAgICAgfQorICAgICAgY2xvc2Uo
MCk7CisgICAgICBjbG9zZSgxKTsKKyAgICAgIGNsb3NlKDIpOworICAgICAgaWYgKG9wZW4obSwg
T19SRFdSKSkKKwlQYW5pYyhlcnJubywgIkNhbm5vdCBvcGVuICVzIiwgbSk7CisgICAgICBkdXAo
MCk7CisgICAgICBkdXAoMCk7CiAgICAgICBjbG9zZShEX2JsYW5rZXJldi5mZCk7CiAgICAgICBp
ZiAoc2xhdmUgIT0gLTEpCiAJY2xvc2Uoc2xhdmUpOwpkaWZmIC11ciBzY3JlZW4ub3JpZy9kaXNw
bGF5Lmggc2NyZWVuL2Rpc3BsYXkuaAotLS0gc2NyZWVuLm9yaWcvZGlzcGxheS5oCTIwMjMtMDYt
MDEgMTQ6NTg6MTcuMjMzNjY1MDE0ICswMzAwCisrKyBzY3JlZW4vZGlzcGxheS5oCTIwMjItMDEt
MjggMTc6MDY6MDIuNjc0NjExNzAxICswMzAwCkBAIC02MSw3ICs2MSw3IEBACiBzdHJ1Y3QgbW91
c2VfcGFyc2UKIHsKICAgY2hhciBzZ3Jtb2RlOyAgICAgICAgICAgICAgICAgLyogbm9uLXplcm8g
aWYgcGFyc2luZyBhbiBTR1Igc2VxdWVuY2UgKi8KLSAgY2hhciBzdGF0ZTsgICAgICAgICAgICAg
ICAgICAgLyogY3VycmVudCBzdGF0ZSBvZiBwYXJzaW5nICovCisgIGludCBzdGF0ZTsgICAgICAg
ICAgICAgICAgICAgIC8qIGN1cnJlbnQgc3RhdGUgb2YgcGFyc2luZyAqLwogICBpbnQgcGFyYW1z
WzNdOyAgICAgICAgICAgICAgICAvKiBwYXJzZWQgcGFyYW1zOiBidXR0b24sIHgsIHkgKi8KIH07
CiAKQEAgLTExMiw3ICsxMTIsNyBAQAogICBpbnQJZF9tb3VzZXRyYWNrOwkJLyogc2V0IHdoZW4g
dXNlciB3YW50cyB0byB1c2UgbW91c2UgZXZlbiB3aGVuIHRoZSB3aW5kb3cKIAkJCQkgICBkb2Vz
IG5vdCAqLwogI2lmZGVmIFJYVlRfT1NDCi0gIGludCAgIGRfeHRlcm1vc2NbNF07CQkvKiBvc2Mg
dXNlZCAqLworICBpbnQgICBkX3h0ZXJtb3NjWzVdOwkJLyogb3NjIHVzZWQgKi8KICNlbmRpZgog
ICBzdHJ1Y3QgbWNoYXIgZF9scGNoYXI7CS8qIG1pc3NpbmcgY2hhciAqLwogICBzdHJ1Y3QgdGlt
ZXZhbCBkX3N0YXR1c190aW1lOwkvKiB0aW1lIG9mIHN0YXR1cyBkaXNwbGF5ICovCmRpZmYgLXVy
IHNjcmVlbi5vcmlnL2RvYy9GQVEgc2NyZWVuL2RvYy9GQVEKLS0tIHNjcmVlbi5vcmlnL2RvYy9G
QVEJMjAyMy0wNi0wMSAxNDo1ODoxNy4yMzM2NjUwMTQgKzAzMDAKKysrIHNjcmVlbi9kb2MvRkFR
CTIwMjItMDEtMjggMTc6MDY6MDIuNjc0NjExNzAxICswMzAwCkBAIC0xOTEsNyArMTkxLDcgQEAK
IFE6ICAgVGhlICJ0YWxrIiBjb21tYW5kIGRvZXMgbm90IHdvcmsgd2hlbiBTY3JlZW4gaXMgYWN0
aXZlLgogIAogQTogICBUYWxrICBhbmQgc2V2ZXJhbCAgb3RoZXIgcHJvZ3JhbXMgIHJlbHkgb24g
ZW50cmllcyAgaW4gdGhlICBVdG1wLQotICAgICBEYXRhYmFzZSAgKC92YXIvcnVuL3V0bXApLiAg
T24gc29tZSAgc3lzdGVtcyB0aGlzICBEYXRhYmFzZSBpcyAgd29ybGQgCisgICAgIERhdGFiYXNl
ICAoL2V0Yy91dG1wKS4gIE9uIHNvbWUgIHN5c3RlbXMgdGhpcyAgRGF0YWJhc2UgaXMgIHdvcmxk
IAogICAgICB3cml0YWJsZSwgIG9uIG90aGVycyAgaXQgaXMgbm90LiAgSWYgaXQgIGlzIG5vdCwg
IHNjcmVlbiBtdXN0ICBiZSAKICAgICAgaW5zdGFsbGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlICBw
ZXJtaXNzaW9ucyAodXNlciBvciBncm91cCBzLWJpdCkKICAgICAganVzdCBsaWtlIGFueSAgcHJv
Z3JhbSB0aGF0IHVzZXMgIFBUWXMgKHJsb2dpbiwgeHRlcm0sIC4uLikuIFdoZW4KZGlmZiAtdXIg
c2NyZWVuLm9yaWcvZG9jL3NjcmVlbi4xIHNjcmVlbi9kb2Mvc2NyZWVuLjEKLS0tIHNjcmVlbi5v
cmlnL2RvYy9zY3JlZW4uMQkyMDIzLTA2LTAxIDE0OjU4OjE3LjIzNjY2NTAyMSArMDMwMAorKysg
c2NyZWVuL2RvYy9zY3JlZW4uMQkyMDIyLTAxLTI4IDE3OjA2OjAyLjY3ODYxMTgwMCArMDMwMApA
QCAtMSwxMCArMSw3IEBACiAuXCIgdmk6c2V0IHdtPTUKLS5USCBTQ1JFRU4gMSAiRmViIDIwMjAi
Ci0uaWYgbiAuZHMgUSBcJiIKLS5pZiBuIC5kcyBVIFwmIgotLmlmIHQgLmRzIFEgYGAKLS5pZiB0
IC5kcyBVICcnCi0uVUMgNAorLlRIIFNDUkVFTiAxICIyMDIyIEphbiAzMCIgIkdOVSBTY3JlZW4g
NC45LjAiCisuCisuCiAuU0ggTkFNRQogc2NyZWVuIFwtIHNjcmVlbiBtYW5hZ2VyIHdpdGggVlQx
MDAvQU5TSSB0ZXJtaW5hbCBlbXVsYXRpb24KIApAQCAtODAsMTQgKzc3LDE0IEBACiAuSSBTY3Jl
ZW4KIHdpbGwgYWxzbyBwcmludCBvdXQgY29udHJvbCBjaGFyYWN0ZXJzIGluIGNhcmV0IG5vdGF0
aW9uLgogLlBQCi1UaGUgc3RhbmRhcmQgd2F5IHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cgaXMgdG8g
dHlwZSBcKlFDLWEgY1wqVS4KK1RoZSBzdGFuZGFyZCB3YXkgdG8gY3JlYXRlIGEgbmV3IHdpbmRv
dyBpcyB0byB0eXBlIFxmQkMtYSBjXGZQLgogVGhpcyBjcmVhdGVzIGEgbmV3IHdpbmRvdyBydW5u
aW5nIGEgc2hlbGwgYW5kIHN3aXRjaGVzIHRvIHRoYXQKIHdpbmRvdyBpbW1lZGlhdGVseSwgcmVn
YXJkbGVzcyBvZiB0aGUgc3RhdGUgb2YgdGhlIHByb2Nlc3MgcnVubmluZwogaW4gdGhlIGN1cnJl
bnQgd2luZG93LgogU2ltaWxhcmx5LCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBh
IGN1c3RvbSBjb21tYW5kIGluIGl0IGJ5CiBmaXJzdCBiaW5kaW5nIHRoZSBjb21tYW5kIHRvIGEg
a2V5c3Ryb2tlIChpbiB5b3VyIC5zY3JlZW5yYyBmaWxlIG9yIGF0IHRoZQotXCpRQy1hIDpcKlUg
Y29tbWFuZCBsaW5lKSBhbmQKLXRoZW4gdXNpbmcgaXQganVzdCBsaWtlIHRoZSBcKlFDLWEgY1wq
VSBjb21tYW5kLgorXGZCQy1hIDpcZlAgY29tbWFuZCBsaW5lKSBhbmQKK3RoZW4gdXNpbmcgaXQg
anVzdCBsaWtlIHRoZSBcZkJDLWEgY1xmUCBjb21tYW5kLgogSW4gYWRkaXRpb24sIG5ldyB3aW5k
b3dzIGNhbiBiZSBjcmVhdGVkIGJ5IHJ1bm5pbmcgYSBjb21tYW5kIGxpa2U6CiAuSVAKIHNjcmVl
biBlbWFjcyBwcm9nLmMKQEAgLTEwMyw3ICsxMDAsNyBAQAogdGhlIGludm9raW5nIHNoZWxsIHRv
IHRoZSBhcHBsaWNhdGlvbiAoZW1hY3MgaW4gdGhpcyBjYXNlKSwgYmVjYXVzZSBpdCBpcwogZm9y
a2VkIGZyb20gdGhlIHBhcmVudCBzY3JlZW4gcHJvY2Vzcywgbm90IGZyb20gdGhlIGludm9raW5n
IHNoZWxsLgogLlBQCi1JZiBcKlEvdmFyL3J1bi91dG1wXCpVIGlzIHdyaXRhYmxlIGJ5CitJZiBc
KlEvZXRjL3V0bXBcKlUgaXMgd3JpdGFibGUgYnkKIC5JUiBzY3JlZW4gLAogYW4gYXBwcm9wcmlh
dGUgcmVjb3JkIHdpbGwgYmUgd3JpdHRlbiB0byB0aGlzIGZpbGUgZm9yIGVhY2ggd2luZG93LCBh
bmQKIHJlbW92ZWQgd2hlbiB0aGUgd2luZG93IGlzIHRlcm1pbmF0ZWQuCkBAIC0xMjEsMTEgKzEx
OCwxMSBAQAogeW91J2xsIG5lZWQgdG8gbWFrZSBzdXJlIHlvdSBoYXZlIGNvcnJlY3RseSBzZWxl
Y3RlZCB5b3VyIHRlcm1pbmFsIHR5cGUsCiBqdXN0IGFzIHlvdSB3b3VsZCBmb3IgYW55IG90aGVy
IHRlcm1jYXAvdGVybWluZm8gcHJvZ3JhbS4KIChZb3UgY2FuIGRvIHRoaXMgYnkgdXNpbmcKLS5J
UiB0c2V0CisuSVIgdGVzdAogZm9yIGV4YW1wbGUuKQogLlBQCiBJZiB5b3UncmUgaW1wYXRpZW50
IGFuZCB3YW50IHRvIGdldCBzdGFydGVkIHdpdGhvdXQgZG9pbmcgYSBsb3QgbW9yZSByZWFkaW5n
LAoteW91IHNob3VsZCByZW1lbWJlciB0aGlzIG9uZSBjb21tYW5kOiAgXCpRQy1hID9cKlUuCit5
b3Ugc2hvdWxkIHJlbWVtYmVyIHRoaXMgb25lIGNvbW1hbmQ6ICBcZkJDLWEgP1xmUC4KIFR5cGlu
ZyB0aGVzZSB0d28gY2hhcmFjdGVycyB3aWxsIGRpc3BsYXkgYSBsaXN0IG9mIHRoZSBhdmFpbGFi
bGUKIC5JIHNjcmVlbgogY29tbWFuZHMgYW5kIHRoZWlyIGJpbmRpbmdzLiBFYWNoIGtleXN0cm9r
ZSBpcyBkaXNjdXNzZWQgaW4KQEAgLTIzMiw3ICsyMjksNyBAQAogVGhlIHVzZSBvZiB0aGlzIG9w
dGlvbiBpcyBkaXNjb3VyYWdlZC4KIC5UUCA1CiAuQlIgXC1sICIgYW5kICIgXC1sbgotdHVybnMg
bG9naW4gbW9kZSBvbiBvciBvZmYgKGZvciAvdmFyL3J1bi91dG1wIHVwZGF0aW5nKS4KK3R1cm5z
IGxvZ2luIG1vZGUgb24gb3Igb2ZmIChmb3IgL2V0Yy91dG1wIHVwZGF0aW5nKS4KIFRoaXMgY2Fu
IGFsc28gYmUgZGVmaW5lZCB0aHJvdWdoIHRoZSBcKlFkZWZsb2dpblwqVSAuc2NyZWVucmMgY29t
bWFuZC4KIC5UUCA1CiAuQlIgXC1scyAiIFsiIFxmSW1hdGNoIF0KQEAgLTI1NywxMiArMjU0LDYg
QEAKIFNlc3Npb25zIG1hcmtlZCBhcyBgZGVhZCcgc2hvdWxkIGJlIHRob3JvdWdobHkgY2hlY2tl
ZCBhbmQgcmVtb3ZlZC4gCiBBc2sgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBpZiB5b3UgYXJl
IG5vdCBzdXJlLiBSZW1vdmUgc2Vzc2lvbnMgd2l0aCB0aGUgCiBcZkItd2lwZVxmUCBvcHRpb24u
IAotLklQICIiIDUKLU5vdGU6Ci0gIElmIHNvY2tldHMgYXJlIG1pc3NpbmcgKGFuZCBiZWNhdXNl
IG9mIHRoaXMsIHlvdXIgc2Vzc2lvbnMgYXJlIG5vdAotbGlzdGVkKSwgeW91IG1heSBzZW5kIGEg
U0lHQ0hMRCB0byBpdHMgYFNDUkVFTicKLXByb2Nlc3MgYW5kIHRoZSBwcm9jZXNzIHdpbGwgcmUt
ZXN0YWJsaXNoIHRoZSBzb2NrZXQgKHRoaW5rIG9mCi1zb21lb25lIGNsZWFuaW5nIC90bXAgdGhv
cm91Z2hseSkuCiAuVFAgNQogLkIgXC1MCiB0ZWxscwpAQCAtMzc4LDcgKzM2OSw4IEBACiBXaGVu
IGNyZWF0aW5nIGEgbmV3IHNlc3Npb24sIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNp
ZnkgYQogbWVhbmluZ2Z1bCBuYW1lIGZvciB0aGUgc2Vzc2lvbi4gVGhpcyBuYW1lIGlkZW50aWZp
ZXMgdGhlIHNlc3Npb24gZm9yCiBcKlFzY3JlZW4gXC1saXN0XCpVIGFuZCBcKlFzY3JlZW4gXC1y
XCpVIGFjdGlvbnMuIEl0IHN1YnN0aXR1dGVzIHRoZQotZGVmYXVsdCBbXGZJdHR5Lmhvc3RcZlBd
IHN1ZmZpeC4KK2RlZmF1bHQgW1xmSXR0eS5ob3N0XGZQXSBzdWZmaXguIFRoaXMgbmFtZSBzaG91
bGQgbm90IGJlIGxvbmdlcgordGhlbiA4MCBzeW1ib2xzLgogLlRQIDUKIC5CSSAiXC10ICIgbmFt
ZQogc2V0cyB0aGUgdGl0bGUgKGEuXHxrLlx8YS4pIGZvciB0aGUgZGVmYXVsdCBzaGVsbCBvciBz
cGVjaWZpZWQgcHJvZ3JhbS4KQEAgLTc4OCw3ICs3ODAsNyBAQAogV2hlbgogLkkgc2NyZWVuCiBp
cyBpbnZva2VkLCBpdCBleGVjdXRlcyBpbml0aWFsaXphdGlvbiBjb21tYW5kcyBmcm9tIHRoZSBm
aWxlcwotXCpRL2V0Yy9zY3JlZW5yY1wqVSBhbmQKK1wqUS91c3IvbG9jYWwvZXRjL3NjcmVlbnJj
XCpVIGFuZAogXCpRLnNjcmVlbnJjXCpVIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuIFRo
ZXNlIGFyZSB0aGUgXCpRcHJvZ3JhbW1lcidzCiBkZWZhdWx0c1wqVSB0aGF0IGNhbiBiZSBvdmVy
cmlkZGVuIGluIHRoZSBmb2xsb3dpbmcgd2F5czogZm9yIHRoZQogZ2xvYmFsIHNjcmVlbnJjIGZp
bGUgCkBAIC05MzAsMTQgKzkyMiwxNiBAQAogYW5kIGVhY2ggb2NjdXJyZW5jZSBvZiBgXkcnIGlz
IHJlcGxhY2VkIGJ5IHRoZSBkZWZpbml0aW9uIGZvciBiZWxsCiBpbiB5b3VyIHRlcm1jYXAgKHVz
dWFsbHkgYW4gYXVkaWJsZSBiZWxsKS4KIFRoZSBkZWZhdWx0IG1lc3NhZ2UgaXMKLS5zcAorLlBQ
CisubmYKIAknQWN0aXZpdHkgaW4gd2luZG93ICVuJwotLnNwCisuZmkKKy5QUAogTm90ZSB0aGF0
IG1vbml0b3JpbmcgaXMgb2ZmIGZvciBhbGwgd2luZG93cyBieSBkZWZhdWx0LCBidXQgY2FuIGJl
IGFsdGVyZWQKIGJ5IHVzZSBvZiB0aGUgXCpRbW9uaXRvclwqVSBjb21tYW5kIChDLWEgTSkuCiAu
UkUKIC5UUAotLkJSICJhbGxwYXJ0aWFsIG9uIiB8IG9mZgorLkJSICJhbGxwYXJ0aWFsIFsgb24g
fCBvZmYgXSIKIC5SUyAwCiAuUFAKIElmIHNldCB0byBvbiwgb25seSB0aGUgY3VycmVudCBjdXJz
b3IgbGluZSBpcyByZWZyZXNoZWQgb24gd2luZG93IGNoYW5nZS4KQEAgLTk0OCw3ICs5NDIsNyBA
QAogZGVmYXVsdCByZWRyYXcgYmVoYXZpb3Igb2YgbmV3bHkgY3JlYXRlZCB3aW5kb3dzLgogLlJF
CiAuVFAKLS5CUiAiYWx0c2NyZWVuIG9uIiB8IG9mZgorLkJSICJhbHRzY3JlZW4gWyBvbiB8IG9m
ZiBdIgogLlJTIDAKIC5QUAogSWYgc2V0IHRvIG9uLCAiYWx0ZXJuYXRlIHNjcmVlbiIgc3VwcG9y
dCBpcyBlbmFibGVkIGluIHZpcnR1YWwgdGVybWluYWxzLApAQCAtMTAyMSw3ICsxMDE1LDcgQEAK
IE1ha2UgYnJpZ2h0IGNvbG9yZWQgdGV4dCBhbHNvIGJvbGQuCiAuUkUKIC5UUAotLkJSICJhdXRv
ZGV0YWNoIG9uIiB8IG9mZgorLkJSICJhdXRvZGV0YWNoIFsgb24gfCBvZmYgXSIKIC5SUyAwCiAu
UFAKIFNldHMgd2hldGhlciAKQEAgLTEwMzUsNyArMTAyOSw3IEBACiBhbmQgYWxsIHRoZSBwcm9j
ZXNzZXMgaXQgY29udGFpbnMuIEF1dG9kZXRhY2ggaXMgb24gYnkgZGVmYXVsdC4KIC5SRQogLlRQ
Ci0uQlIgImF1dG9udWtlIG9uIiB8IG9mZgorLkJSICJhdXRvbnVrZSBbIG9uIHwgb2ZmIF0iCiAu
UlMgMAogLlBQCiBTZXRzIHdoZXRoZXIgYSBjbGVhciBzY3JlZW4gc2VxdWVuY2Ugc2hvdWxkIG51
a2UgYWxsIHRoZSBvdXRwdXQKQEAgLTEwNjksNyArMTA2Myw3IEBACiB3aXRoIHRoZSBudW1lcmlj
YWwgaWQgXGZJaWRcZlAuCiAuUkUKIC5UUAotLkJSICJiY2UgIiBbIG9uIHwgb2ZmIF0KKy5CUiAi
YmNlIFsgb24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKIENoYW5nZSBiYWNrZ3JvdW5kLWNvbG9yLWVy
YXNlIHNldHRpbmcuIElmIFwqUWJjZVwqVSBpcyBzZXQgdG8gb24sIGFsbApAQCAtMTA5MCwxMSAr
MTA4NCwxMSBAQAogYW5kIGVhY2ggb2NjdXJyZW5jZSBvZiBgXkcnIGlzIHJlcGxhY2VkIGJ5IHRo
ZSBkZWZpbml0aW9uIGZvciBiZWxsCiBpbiB5b3VyIHRlcm1jYXAgKHVzdWFsbHkgYW4gYXVkaWJs
ZSBiZWxsKS4KIFRoZSBkZWZhdWx0IG1lc3NhZ2UgaXMKLS5zcAotLlJTCisuUFAKKy5uZgogCSdC
ZWxsIGluIHdpbmRvdyAlbicKLS5SRQotLnNwCisuZmkKKy5QUAogQW4gZW1wdHkgbWVzc2FnZSBj
YW4gYmUgc3VwcGxpZWQgdG8gdGhlIFwqUWJlbGxfbXNnXCpVIGNvbW1hbmQgdG8gc3VwcHJlc3MK
IG91dHB1dCBvZiBhIG1lc3NhZ2UgbGluZSAoYmVsbF9tc2cgIiIpLgogV2l0aG91dCBwYXJhbWV0
ZXIsIHRoZSBjdXJyZW50IG1lc3NhZ2UgaXMgc2hvd24uCkBAIC0xMjQ4LDcgKzEyNDIsNyBAQAog
ZXNjYXBlIChiZXNpZGVzIF5BKS4KIC5SRQogLlRQCi0uQlIgYnJlYWsgWyBcZklkdXJhdGlvblxm
UiBdCisuQlIgImJyZWFrICIgWyBcZklkdXJhdGlvblxmUiBdCiAuUlMgMAogLlBQCiBTZW5kIGEg
YnJlYWsgc2lnbmFsIGZvciBcZklkdXJhdGlvblxmUCowLjI1IHNlY29uZHMgdG8gdGhpcyB3aW5k
b3cuCkBAIC0xMzE4LDEwICsxMzEyLDEwIEBACiBTd2FwcyB3aW5kb3cgd2l0aCBuZXh0IG9uZSBv
biB3aW5kb3cgbGlzdC4KIC5SRQogLlRQCi0uQlIgImMxICIgWyBvbiB8IG9mZiBdCisuQlIgImMx
IFsgb24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKLUNoYW5nZSBjMSBjb2RlIHByb2Nlc3NpbmcuIFwq
UUMxIG9uXCpVIHRlbGxzIHNjcmVlbiB0byB0cmVhdAorQ2hhbmdlIGMxIGNvZGUgcHJvY2Vzc2lu
Zy4gXGZCQzEgb25cZlAgdGVsbHMgc2NyZWVuIHRvIHRyZWF0CiB0aGUgaW5wdXQgY2hhcmFjdGVy
cyBiZXR3ZWVuIDEyOCBhbmQgMTU5IGFzIGNvbnRyb2wgZnVuY3Rpb25zLgogU3VjaCBhbiA4LWJp
dCBjb2RlIGlzIG5vcm1hbGx5IHRoZSBzYW1lIGFzIEVTQyBmb2xsb3dlZCBieSB0aGUKIGNvcnJl
c3BvbmRpbmcgNy1iaXQgY29kZS4gVGhlIGRlZmF1bHQgc2V0dGluZyBpcyB0byBwcm9jZXNzIGMx
CkBAIC0xNDI2LDcgKzE0MjAsNyBAQAogeW91IG1heSByZWdhcmQgXCpRQy1hIGVzY1wqVSAoY29w
eSBtb2RlKSBhcyBpdHMgYFZpIGNvbW1hbmQgbW9kZScuCiAuUkUKIC5UUAotLkJSICJjb21tYW5k
ICIgWyBcLWMgIiBcZkljbGFzc1xmUCIgXQorLkJSICJjb21tYW5kIFsgXC1jICIgXGZJY2xhc3Nc
ZlAiIF0iCiAuUlMgMAogLlBQCiBUaGlzIGNvbW1hbmQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0
eXBpbmcgdGhlIHNjcmVlbiBlc2NhcGUKQEAgLTE0MzUsMTQgKzE0MjksMTQgQEAKIGNsYXNzLiAg
U2VlIGFsc28gXCpRYmluZFwqVSBhbmQgXCpRYmluZGtleVwqVS4KIC5SRQogLlRQCi0uQlIgImNv
bXBhY3RoaXN0ICIgWyBvbiB8IG9mZiBdCisuQlIgImNvbXBhY3RoaXN0IFsgb24gfCBvZmYgXSIK
IC5SUyAwCiAuUFAKIFRoaXMgdGVsbHMgc2NyZWVuIHdoZXRoZXIgdG8gc3VwcHJlc3MgdHJhaWxp
bmcgYmxhbmsgbGluZXMgd2hlbgogc2Nyb2xsaW5nIHVwIHRleHQgaW50byB0aGUgaGlzdG9yeSBi
dWZmZXIuCiAuUkUKIC5UUAotLkJSICJjb25zb2xlICIgWyBvbiB8IG9mZiBdCisuQlIgImNvbnNv
bGUgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogR3JhYnMgb3IgdW4tZ3JhYnMgdGhlIG1hY2hp
bmVzIGNvbnNvbGUgb3V0cHV0IHRvIGEgd2luZG93LgpAQCAtMTUxNyw3ICsxNTExLDcgQEAKIFxm
QkJcZlAsIFxmQkVcZlBAbW92ZSB0aGUgY3Vyc29yIFdPUkQgYnkgV09SRCAoYXMgaW4gdmkpLgog
XwogXGZCZi9GXGZQLCBcZkJ0L1RcZlBAVHsKLW1vdmUgdGhlIGN1cnNvciBmb3J3YXJkL2JhY2t3
YXJkIHRvIHRoZSBuZXh0IG9jY3VyZW5jZSBvZiB0aGUKK21vdmUgdGhlIGN1cnNvciBmb3J3YXJk
L2JhY2t3YXJkIHRvIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlCiB0YXJnZXQuIChlZywgJzNm
eScgd2lsbCBtb3ZlIHRoZSBjdXJzb3IgdG8gdGhlIDNyZCAneScgdG8gdGhlIHJpZ2h0LikKIFR9
CiBfCkBAIC0xNTM5LDcgKzE1MzMsNyBAQAogXwogLlRFCiAuXCJcZkJmXGZQLFxmQnRcZlAsIFxm
QkZcZlAsIFxmQlRcZlBAVHsKLS5cIm1vdmUgdGhlIGN1cnNvciBmb3J3YXJkL2JhY2t3YXJkIHRv
IHRoZSBuZXh0IG9jY3VyZW5jZSBvZiB0aGUgdGFyZ2V0LgorLlwibW92ZSB0aGUgY3Vyc29yIGZv
cndhcmQvYmFja3dhcmQgdG8gdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgdGFyZ2V0LgogLlwi
VH0KIAogLlBQCkBAIC0xNTcxLDcgKzE1NjUsNyBAQAogRXhhbXBsZTogXCpRQy1hIEMtWyBIIDEw
IGogNSBZXCpVIHdpbGwgY29weSBsaW5lcwogMTEgdG8gMTUgaW50byB0aGUgcGFzdGUgYnVmZmVy
LgogLlBQCi1UaGUgZm9sbGxvd2luZyBzZWFyY2gga2V5cyBhcmUgZGVmaW5lZDoKK1RoZSBmb2xs
b3dpbmcgc2VhcmNoIGtleXMgYXJlIGRlZmluZWQ6CiAuSVAKIFxmQi9cZlAgXGZJVmlcZlAtbGlr
ZSBzZWFyY2ggZm9yd2FyZC4KIC5JUApAQCAtMTY1Miw3ICsxNjQ2LDcgQEAKIE5vIGxvbmdlciBl
eGlzdHMsIHVzZSBcKlFyZWFkcmVnXCpVIGluc3RlYWQuCiAuUkUKIC5UUAotLkJSICJjcmxmICIg
WyBvbiB8IG9mZiBdCisuQlIgImNybGYgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogVGhpcyBh
ZmZlY3RzIHRoZSBjb3B5aW5nIG9mIHRleHQgcmVnaW9ucyB3aXRoIHRoZSBgQy1hIFsnIGNvbW1h
bmQuIElmIGl0IGlzIHNldApAQCAtMTY2MSw3ICsxNjU1LDcgQEAKIFdoZW4gbm8gcGFyYW1ldGVy
IGlzIGdpdmVuLCB0aGUgc3RhdGUgaXMgdG9nZ2xlZC4KIC5SRQogLlRQCi0uQlIgImRlYnVnIG9u
IiB8IG9mZgorLkJSICJkZWJ1ZyBbIG9uIHwgb2ZmIF0iCiAuUlMgMAogLlBQCiBUdXJucyBydW50
aW1lIGRlYnVnZ2luZyBvbiBvciBvZmYuIElmIApAQCAtMTY3MiwxNCArMTY2NiwxNCBAQAogYmUg
dHVybmVkIG9mZiBvbmNlIGFuZCBmb3JldmVyLgogLlJFCiAuVFAKLS5CUiAiZGVmYzEgb24iIHwg
b2ZmCisuQlIgImRlZmMxIFsgb24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKIFNhbWUgYXMgdGhlIFxm
QmMxXGZQIGNvbW1hbmQgZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgbmV3CiB3
aW5kb3dzIGlzIGNoYW5nZWQuIEluaXRpYWwgc2V0dGluZyBpcyBgb24nLgogLlJFCiAuVFAKLS5C
UiAiZGVmYXV0b251a2Ugb24iIHwgb2ZmCisuQlIgImRlZmF1dG9udWtlIFsgb24gfCBvZmYgXSIK
IC5SUyAwCiAuUFAKIFNhbWUgYXMgdGhlIFxmQmF1dG9udWtlXGZQIGNvbW1hbmQgZXhjZXB0IHRo
YXQgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgbmV3IGRpc3BsYXlzIGlzIGNoYW5nZWQuIEluaXRp
YWwgc2V0dGluZyBpcyBgb2ZmJy4KQEAgLTE2ODcsNyArMTY4MSw3IEBACiB3YW50IHRvIGhhdmUg
YSBkZXBlbmRlbmN5IG9uIHRoZSB0ZXJtaW5hbCB0eXBlLgogLlJFCiAuVFAKLS5CUiAiZGVmYmNl
IG9uIiB8IG9mZgorLkJSICJkZWZiY2UgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogU2FtZSBh
cyB0aGUgXGZCYmNlXGZQIGNvbW1hbmQgZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZyBm
b3IgbmV3CkBAIC0xNzIxLDcgKzE3MTUsNyBAQAogYXJndW1lbnQuCiAuUkUKIC5UUAotLkJSICJk
ZWZkeW5hbWljdGl0bGUgb24iIHwgb2ZmCisuQlIgImRlZmR5bmFtaWN0aXRsZSBbIG9uIHwgb2Zm
IF0iCiAuUlMgMAogLlBQCiBTZXQgZGVmYXVsdCBiZWhhdmlvdXIgZm9yIG5ldyB3aW5kb3dzIHJl
Z2FyZGluZyBpZiBzY3JlZW4gc2hvdWxkIGNoYW5nZSB3aW5kb3cKQEAgLTE3MzksMTggKzE3MzMs
MTggQEAKIGNoYXJhY3RlcnMgZm9yIHVzZXJzIHRoYXQgd2lsbCBiZSBhZGRlZCBsYXRlci4KIC5S
RQogLlRQCi0uQlIgImRlZmZsb3cgIiBvbiB8IG9mZiB8ICJhdXRvICIgWyBpbnRlcnJ1cHQgXQor
LkJSICJkZWZmbG93IFsgb24gfCBvZmYgfCBhdXRvIFsgaW50ZXJydXB0IF1dCiAuUlMgMAogLlBQ
CiBTYW1lIGFzIHRoZSBcZkJmbG93XGZQIGNvbW1hbmQgZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQg
c2V0dGluZyBmb3IgbmV3IHdpbmRvd3MgCiBpcyBjaGFuZ2VkLiBJbml0aWFsIHNldHRpbmcgaXMg
YGF1dG8nLgotU3BlY2lmeWluZyBcKlFkZWZmbG93IGF1dG8gaW50ZXJydXB0XCpVIGlzIHRoZSBz
YW1lIGFzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucworU3BlY2lmeWluZyBcZkJkZWZmbG93IGF1
dG8gaW50ZXJydXB0XGZQIGlzIHRoZSBzYW1lIGFzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucwog
LkIgXC1mYQogYW5kCiAuQlIgXC1pIC4gCiAuUkUKIC5UUAotLkJSICJkZWZnciBvbiIgfCBvZmYK
Ky5CUiAiZGVmZ3IgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogU2FtZSBhcyB0aGUgXGZCZ3Jc
ZlAgY29tbWFuZCBleGNlcHQgdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBuZXcKQEAgLTE3
ODMsMTQgKzE3NzcsMTQgQEAKIHRlcm1pbmFsLgogLlJFCiAuVFAKLS5CUiAiZGVmbG9nIG9uIiB8
IG9mZgorLkJSICJkZWZsb2cgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogU2FtZSBhcyB0aGUg
XGZCbG9nXGZQIGNvbW1hbmQgZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgbmV3
IHdpbmRvd3MgCiBpcyBjaGFuZ2VkLiBJbml0aWFsIHNldHRpbmcgaXMgYG9mZicuCiAuUkUKIC5U
UAotLkJSICJkZWZsb2dpbiBvbiIgfCBvZmYKKy5CUiAiZGVmbG9naW4gWyBvbiB8IG9mZiBdIgog
LlJTIDAKIC5QUAogU2FtZSBhcyB0aGUgXGZCbG9naW5cZlAgY29tbWFuZCBleGNlcHQgdGhhdCB0
aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBuZXcgd2luZG93cyAKQEAgLTE4MDUsMjEgKzE3OTksMjEg
QEAKIFdoZW4gbm8gXCpRZGVmbW9kZVwqVSBjb21tYW5kIGlzIGdpdmVuLCBtb2RlIDA2MjIgaXMg
dXNlZC4KIC5SRQogLlRQCi0uQlIgImRlZm1vbml0b3Igb24iIHwgb2ZmCisuQlIgImRlZm1vbml0
b3IgWyBvbiB8IG9mZl0iCiAuUlMgMAogLlBQCiBTYW1lIGFzIHRoZSBcZkJtb25pdG9yXGZQIGNv
bW1hbmQgZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgbmV3IAogd2luZG93cyBp
cyBjaGFuZ2VkLiBJbml0aWFsIHNldHRpbmcgaXMgYG9mZicuCiAuUkUKIC5UUAotLkJSICJkZWZt
b3VzZXRyYWNrIG9uIiB8IG9mZgorLkJSICJkZWZtb3VzZXRyYWNrIFsgb24gfCBvZmYgXSIKIC5S
UyAwCiAuUFAKIFNhbWUgYXMgdGhlIFxmQm1vdXNldHJhY2tcZlAgY29tbWFuZCBleGNlcHQgdGhh
dCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBuZXcKIHdpbmRvd3MgaXMgY2hhbmdlZC4gSW5pdGlh
bCBzZXR0aW5nIGlzIGBvZmYnLgogLlJFCiAuVFAKLS5CUiAiZGVmbm9uYmxvY2sgb24iIHwgb2Zm
IHwgXGZJbnVtc2Vjc1xmUAorLkJSICJkZWZub25ibG9jayBbIG9uIHwgb2ZmIHwgXGZJbnVtc2Vj
c1xmUF0KIC5SUyAwCiAuUFAKIFNhbWUgYXMgdGhlIFxmQm5vbmJsb2NrXGZQIGNvbW1hbmQgZXhj
ZXB0IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKQEAgLTE4NDcsNyArMTg0MSw3IEBACiBT
eW5vbnltIHRvIHRoZSBcZkJzaGVsbFxmUCAuc2NyZWVucmMgY29tbWFuZC4gU2VlIHRoZXJlLgog
LlJFCiAuVFAKLS5CUiAiZGVmc2lsZW5jZSBvbiIgfCBvZmYKKy5CUiAiZGVmc2lsZW5jZSBbIG9u
IHwgb2ZmIF0iCiAuUlMgMAogLlBQCiBTYW1lIGFzIHRoZSBcZkJzaWxlbmNlXGZQIGNvbW1hbmQg
ZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgbmV3CkBAIC0xODYxLDcgKzE4NTUs
NyBAQAogd2luZG93cyBpcyBjaGFuZ2VkLiBJbml0aWFsIHNldHRpbmcgaXMgMCBtaWxsaXNlY29u
ZHMsIG1lYW5pbmcgYG9mZicuCiAuUkUKIC5UUAotLkJSICJkZWZ1dGY4IG9uIiB8IG9mZgorLkJS
ICJkZWZ1dGY4IFsgb24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKIFNhbWUgYXMgdGhlIFxmQnV0Zjhc
ZlAgY29tbWFuZCBleGNlcHQgdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBuZXcKQEAgLTE4
NjksNyArMTg2Myw3IEBACiBcKlFcLVVcKlUsIG90aGVyd2lzZSBgb2ZmJy4KIC5SRQogLlRQCi0u
QlIgImRlZndyYXAgb24iIHwgb2ZmCisuQlIgImRlZndyYXAgWyBvbiB8IG9mZiBdIgogLlJTIDAK
IC5QUAogU2FtZSBhcyB0aGUgXGZCd3JhcFxmUCBjb21tYW5kIGV4Y2VwdCB0aGF0IHRoZSBkZWZh
dWx0IHNldHRpbmcgZm9yIG5ldyAKQEAgLTE4NzcsNyArMTg3MSw3IEBACiBcKlF3cmFwXCpVIGNv
bW1hbmQgKFwqUUMtYSByXCpVKSBvciBieSBtZWFucyBvZiAiQy1hIDogd3JhcCBvbnxvZmYiLgog
LlJFCiAuVFAKLS5CUiAiZGVmd3JpdGVsb2NrIG9uIiB8IG9mZiB8IGF1dG8KKy5CUiAiZGVmd3Jp
dGVsb2NrIFsgb24gfCBvZmYgfCBhdXRvIF0iCiAuUlMgMAogLlBQCiBTYW1lIGFzIHRoZSBcZkJ3
cml0ZWxvY2tcZlAgY29tbWFuZCBleGNlcHQgdGhhdCB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciBu
ZXcgCkBAIC0yMDQzLDcgKzIwMzcsNyBAQAogLklSIHRpYyAuCiAuUkUKIC5UUAotLkJSICJkeW5h
bWljdGl0bGUgb24iIHwgb2ZmCisuQlIgImR5bmFtaWN0aXRsZSBbIG9uIHwgb2ZmIF0iCiAuUlMg
MAogLlBQCiBDaGFuZ2UgYmVoYXZpb3VyIGZvciB3aW5kb3dzIHJlZ2FyZGluZyBpZiBzY3JlZW4g
c2hvdWxkIGNoYW5nZSB3aW5kb3cgdGl0bGUKQEAgLTIwNTYsNyArMjA1MCw3IEBACiBUaGUgZWNo
byBjb21tYW5kIG1heSBiZSB1c2VkIHRvIGFubm95IAogLkkgc2NyZWVuCiB1c2VycyB3aXRoIGEg
J21lc3NhZ2Ugb2YgdGhlCi1kYXknLiBUeXBpY2FsbHkgaW5zdGFsbGVkIGluIGEgZ2xvYmFsIC9l
dGMvc2NyZWVucmMuCitkYXknLiBUeXBpY2FsbHkgaW5zdGFsbGVkIGluIGEgZ2xvYmFsIC9sb2Nh
bC9ldGMvc2NyZWVucmMuIAogVGhlIG9wdGlvbiBcKlFcLW5cKlUgbWF5IGJlIHVzZWQgdG8gc3Vw
cHJlc3MgdGhlIGxpbmUgZmVlZC4KIFNlZSBhbHNvIFwqUXNsZWVwXCpVLgogRWNobyBpcyBhbHNv
IHVzZWZ1bCBmb3Igb25saW5lIGNoZWNraW5nIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcy4KQEAg
LTIyMDEsOCArMjE5NSw3IEBACiBhdXRvbWF0aWNhbGx5IGlmIHRoZSB3aW5kb3cgaXMgZGlzcGxh
eWVkIG1vcmUgdGhhbiBvbmNlLgogLlJFCiAuVFAKLS5CIGZsb3cKLS5SQiBbIG9uIHwgb2ZmIHwg
ImF1dG9cZlJdXGZQIgorLkJSICJmbG93IFsgb24gfCBvZmYgfCBhdXRvXSIKIC5SUyAwCiAuUFAK
IFNldHMgdGhlIGZsb3ctY29udHJvbCBtb2RlIGZvciB0aGlzIHdpbmRvdy4KQEAgLTIyMTMsNyAr
MjIwNiw3IEBACiBEZWZhdWx0IGlzIHNldCBieSBgZGVmZmxvdycuCiAuUkUKIC5UUAotLkJSICJm
b2N1cyAiIFsgbmV4dHxwcmV2fHVwfGRvd258bGVmdHxyaWdodHx0b3B8Ym90dG9tIF0KKy5CUiAi
Zm9jdXMgWyBuZXh0IHwgcHJldiB8IHVwIHwgZG93biB8IGxlZnQgfCByaWdodCB8IHRvcCB8IGJv
dHRvbSBdIgogLlJTIDAKIC5QUAogTW92ZSB0aGUgaW5wdXQgZm9jdXMgdG8gdGhlIG5leHQgcmVn
aW9uLiBUaGlzIGlzIGRvbmUgaW4gYSBjeWNsaWMKQEAgLTIyNjQsNyArMjI1Nyw3IEBACiBUaGlz
IGZvcmNlcyBhbnkgY3VycmVudGx5IHNlbGVjdGVkIHJlZ2lvbiB0byBiZSBhdXRvbWF0aWNhbGx5
CiByZXNpemVkIGF0IGxlYXN0IGEgY2VydGFpbiBcZkl3aWR0aFxmUCBhbmQgXGZJaGVpZ2h0XGZQ
LiBBbGwKIG90aGVyIHN1cnJvdW5kaW5nIHJlZ2lvbnMgd2lsbCBiZSByZXNpemVkIGluIG9yZGVy
IHRvIGFjY29tbW9kYXRlLgotVGhpcyBjb25zdHJhaW50IGZvbGxvd3MgZXZlcnl0aW1lIHRoZSBc
KlFmb2N1c1wqVSBjb21tYW5kIGlzCitUaGlzIGNvbnN0cmFpbnQgZm9sbG93cyBldmVyeSB0aW1l
IHRoZSBcKlFmb2N1c1wqVSBjb21tYW5kIGlzCiB1c2VkLiBUaGUgXCpRcmVzaXplXCpVIGNvbW1h
bmQgY2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgZWl0aGVyCiBkaW1lbnNpb24gb2YgYSByZWdpb24s
IGJ1dCBuZXZlciBiZWxvdyB3aGF0IGlzIHNldCB3aXRoCiBcKlFmb2N1c21pbnNpemVcKlUuIFRo
ZSB1bmRlcnNjb3JlIGBfJyBpcyBhIHN5bm9ueW0gZm9yCkBAIC0yMjczLDcgKzIyNjYsNyBAQAog
V2l0aG91dCBhbnkgcGFyYW1ldGVycywgdGhlIG1pbmltdW0gd2lkdGggYW5kIGhlaWdodCBpcyBz
aG93bi4KIC5SRQogLlRQCi0uQlIgImdyICIgWyBvbiB8IG9mZiBdCisuQlIgImdyIFsgb24gfCBv
ZmYgXSIKIC5SUyAwCiAuUFAKIFR1cm4gR1IgY2hhcnNldCBzd2l0Y2hpbmcgb24vb2ZmLiBXaGVu
ZXZlciBzY3JlZW4gc2VlcyBhbiBpbnB1dApAQCAtMjMwMyw3ICsyMjk2LDcgQEAKIHNjcm9sbGJh
Y2sgYnVmZmVyLgogLlJFCiAuVFAKLS5CUiAiaGFyZGNvcHlfYXBwZW5kIG9uIiB8IG9mZgorLkJS
ICJoYXJkY29weV9hcHBlbmQgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogSWYgc2V0IHRvICJv
biIsIApAQCAtMjMyMiwxMSArMjMxNSwxMSBAQAogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4K
IC5SRQogLlRQCi0uQlIgImhhcmRzdGF0dXMgIiBbIG9uIHwgb2ZmIF0KKy5CUiAiaGFyZHN0YXR1
cyBbIG9uIHwgb2ZmIF0iCiAuVFAKLS5CUiAiaGFyZHN0YXR1cyBcZlJbXGZCYWx3YXlzXGZSXVxm
QmZpcnN0bGluZSIgfCBsYXN0bGluZSB8IG1lc3NhZ2UgfCBpZ25vcmUgWyBcZklzdHJpbmdcZlIg
XQorLkJSICJoYXJkc3RhdHVzIFsgYWx3YXlzIF0gZmlyc3RsaW5lIHwgbGFzdGxpbmUgfCBtZXNz
YWdlIHwgaWdub3JlIFsgc3RyaW5nIF0iCiAuVFAKLS5CUiAiaGFyZHN0YXR1cyBzdHJpbmciIFsg
XGZJc3RyaW5nXGZSIF0KKy5CUiAiaGFyZHN0YXR1cyBzdHJpbmcgWyBzdHJpbmcgXSIKIC5SUyAw
CiAuUFAKIFRoaXMgY29tbWFuZCBjb25maWd1cmVzIHRoZSB1c2UgYW5kIGVtdWxhdGlvbiBvZiB0
aGUgdGVybWluYWwncwpAQCAtMjM4Niw4ICsyMzc5LDcgQEAKIC5CUiBoZWxwIFsgXGZJY2xhc3Nc
ZlAgXQogLlJTIDAKIC5QUAotTm90IHJlYWxseSBhIG9ubGluZSBoZWxwLCBidXQgCi1kaXNwbGF5
cyBhIGhlbHAgCitOb3QgcmVhbGx5IGEgb25saW5lIGhlbHAsIGJ1dCBkaXNwbGF5cyBhIGhlbHAK
IC5JIHNjcmVlbiAKIHNob3dpbmcgeW91IGFsbCB0aGUga2V5IGJpbmRpbmdzLgogVGhlIGZpcnN0
IHBhZ2VzIGxpc3QgYWxsIHRoZSBpbnRlcm5hbCBjb21tYW5kcyBmb2xsb3dlZCBieSB0aGVpciBj
dXJyZW50CkBAIC0yNDMyLDcgKzI0MjQsNyBAQAogSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwg
dGhlIGN1cnJlbnQgc2V0dGluZ3MgYXJlIGRpc3BsYXllZC4KIC5SRQogLlRQCi0uQlIgImlnbm9y
ZWNhc2UgIiBbIG9uIHwgb2ZmIF0KKy5CUiAiaWdub3JlY2FzZSBbIG9uIHwgb2ZmIF0iCiAuUlMg
MAogLlBQCiBUZWxsIHNjcmVlbiB0byBpZ25vcmUgdGhlIGNhc2Ugb2YgY2hhcmFjdGVycyBpbiBz
ZWFyY2hlcy4gRGVmYXVsdCBpcwpAQCAtMjQ5Miw4ICsyNDg0LDcgQEAKIChzaGVsbCkgcnVubmlu
ZyBpbiB0aGUgd2luZG93IHJlY2VpdmVzIGEgSEFOR1VQIGNvbmRpdGlvbiwgCiB0aGUgd2luZG93
IHN0cnVjdHVyZSBpcyByZW1vdmVkIGFuZCAKIC5JIHNjcmVlbiAKLSh5b3VyIGRpc3BsYXkpIHN3
aXRjaGVzIHRvIGFub3RoZXIKLXdpbmRvdy4gIFdoZW4gdGhlIGxhc3Qgd2luZG93IGlzIGRlc3Ry
b3llZCwgCisoeW91ciBkaXNwbGF5KSBzd2l0Y2hlcyB0byBhbm90aGVyIHdpbmRvdy4gIFdoZW4g
dGhlIGxhc3Qgd2luZG93IGlzIGRlc3Ryb3llZCwKIC5JIHNjcmVlbgogZXhpdHMuCiBBZnRlciBh
IGtpbGwgCkBAIC0yNjEzLDcgKzI2MDQsNyBAQAogXGZCbGF5b3V0IGF1dG9zYXZlXGZQIGNvbW1h
bmQuCiAuUkUKIC5UUAotLkJSICJsYXlvdXQgYXV0b3NhdmUgIiBbXGZCb258b2ZmXGZQXQorLkJS
ICJsYXlvdXQgYXV0b3NhdmUgWyBvbiB8IG9mZl0iCiAuUlMgMAogLlBQCiBDaGFuZ2Ugb3IgZGlz
cGxheSB0aGUgc3RhdHVzIG9mIGF1dG9tYXRjYWxseSBzYXZpbmcgbGF5b3V0cy4gVGhlCkBAIC0y
NjUyLDcgKzI2NDMsNyBAQAogRGlzcGxheSB0aGUgZGlzY2xhaW1lciBwYWdlLiBUaGlzIGlzIGRv
bmUgd2hlbmV2ZXIKIC5JIHNjcmVlbgogaXMgc3RhcnRlZCB3aXRob3V0IG9wdGlvbnMsIHdoaWNo
IHNob3VsZCBiZSBvZnRlbiBlbm91Z2guIFNlZSBhbHNvIAotdGhlIFwqUXN0YXJ0dXBfbWVzc2Fn
ZVwqVSBjb21tYW5kLgordGhlIFxmQnN0YXJ0dXBfbWVzc2FnZVxmUCBjb21tYW5kLgogLlJFCiAu
VFAKIC5CIGxvY2tzY3JlZW4KQEAgLTI2NzQsNyArMjY2NSw3IEBACiBzaGVsbC4gVGhpcyBmZWF0
dXJlIHNob3VsZCByYXRoZXIgYmUgY2FsbGVkIGBsb2NrdGVybWluYWwnLgogLlJFCiAuVFAKLS5C
UiAibG9nICIgWyBvbiB8IG9mZiBdCisuQlIgImxvZyBbIG9uIHwgb2ZmIF0iCiAuUlMgMAogLlBQ
CiBTdGFydC9zdG9wIHdyaXRpbmcgb3V0cHV0IG9mIHRoZSBjdXJyZW50IHdpbmRvdyB0byBhIGZp
bGUgCkBAIC0yNjk5LDcgKzI2OTAsNyBAQAogZGVmYXVsdCB2YWx1ZSBpcyAxMCBzZWNvbmRzLgog
LlJFCiAuVFAKLS5CUiAibG9naW4gIiBbIG9uIHwgb2ZmIF0KKy5CUiAibG9naW4gWyBvbiB8IG9m
ZiBdIgogLlJTIDAKIC5QUAogQWRkcyBvciByZW1vdmVzIHRoZSBlbnRyeSBpbiB0aGUgdXRtcCBk
YXRhYmFzZSBmaWxlIGZvciB0aGUgY3VycmVudCB3aW5kb3cuCkBAIC0yNzk4LDcgKzI3ODksNyBA
QAogSW5zZXJ0IHRoZSBjb21tYW5kIGNoYXJhY3RlciAoQy1hKSBpbiB0aGUgY3VycmVudCB3aW5k
b3cncyBpbnB1dCBzdHJlYW0uCiAuUkUKIC5UUAotLkJSICJtb25pdG9yICIgWyBvbiB8IG9mZiBd
CisuQlIgIm1vbml0b3IgWyBvbiB8IG9mZiBdIgogLlJTIDAKIC5QUAogVG9nZ2xlcyBhY3Rpdml0
eSBtb25pdG9yaW5nIG9mIHdpbmRvd3MuCkBAIC0yODA5LDcgKzI4MDAsNyBAQAogTW9uaXRvcmlu
ZyBpcyBpbml0aWFsbHkgb2ZmIGZvciBhbGwgd2luZG93cy4KIC5SRQogLlRQCi0uQlIgIm1vdXNl
dHJhY2sgIiBbIG9uIHwgb2ZmIF0KKy5CUiAibW91c2V0cmFjayBbIG9uIHwgb2ZmIF0iCiAuUlMg
MAogLlBQCiBUaGlzIGNvbW1hbmQgZGV0ZXJtaW5lcyB3aGV0aGVyCkBAIC0yODE5LDcgKzI4MTAs
NyBAQAogYmVlbiBzcGxpdCBpbiB2YXJpb3VzIHdheXMgY2FuIGJlIHNlbGVjdGVkIGJ5IHBvaW50
aW5nIHRvIHRoZW0KIHdpdGggYSBtb3VzZSBhbmQgbGVmdC1jbGlja2luZyB0aGVtLiBXaXRob3V0
IHNwZWNpZnlpbmcgXGZCb25cZlAKIG9yIFxmQm9mZlxmUCwgdGhlIGN1cnJlbnQgc3RhdGUgaXMg
ZGlzcGxheWVkLiBUaGUgZGVmYXVsdCBzdGF0ZQotaXMgZGV0ZXJtaW5lZCBieSB0aGUgXCpRZGVm
bW91c2V0cmFja1wqVSBjb21tYW5kLgoraXMgZGV0ZXJtaW5lZCBieSB0aGUgXGZCZGVmbW91c2V0
cmFja1xmUCBjb21tYW5kLgogLlJFCiAuVFAKIC5CSSAibXNnbWlud2FpdCAiIHNlYwpAQCAtMjgz
OSw3ICsyODMwLDcgQEAKIGlzIG5vdCBkaXN0dXJiZWQgYnkgb3RoZXIgYWN0aXZpdHkuIFRoZSBk
ZWZhdWx0IGlzIDUgc2Vjb25kcy4KIC5SRQogLlRQCi0uQlIgIm11bHRpdXNlciBvbiIgfCBvZmYK
Ky5CUiAibXVsdGl1c2VyIFsgb24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKIFN3aXRjaCBiZXR3ZWVu
IHNpbmdsZXVzZXIgYW5kIG11bHRpdXNlciBtb2RlLiBTdGFuZGFyZApAQCAtMjg1MSw3ICsyODQy
LDcgQEAKIHNlc3Npb24uIAogLlJFCiAuVFAKLS5CUiAibmV0aGFjayBvbiIgfCBvZmYKKy5CUiAi
bmV0aGFjayBbIG9uIHwgb2ZmIF0iCiAuUlMgMAogLlBQCiBDaGFuZ2VzIHRoZSBraW5kIG9mIGVy
cm9yIG1lc3NhZ2VzIHVzZWQgYnkKQEAgLTI4NjEsOCArMjg1Miw3IEBACiBtdWNoIGZ1bm5pZXIg
dG8gcmVhZC4gQW55d2F5LCBzdGFuZGFyZCBtZXNzYWdlcyBvZnRlbiB0ZW5kIHRvIGJlIHVuY2xl
YXIgYXMKIHdlbGwuCiAuYnIKLVRoaXMgb3B0aW9uIGlzIG9ubHkgCi1hdmFpbGFibGUgaWYKK1Ro
aXMgb3B0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmCiAuSSBzY3JlZW4KIHdhcyBjb21waWxlZCB3
aXRoIHRoZSBORVRIQUNLIGZsYWcgZGVmaW5lZC4gVGhlCiBkZWZhdWx0IHNldHRpbmcgaXMgdGhl
biBkZXRlcm1pbmVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUgZW52aXJvbm1lbnQgCkBAIC0yODc3
LDggKzI4NjcsNyBAQAogVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIHJlcGVhdGVkbHkgdG8gY3lj
bGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB3aW5kb3dzLgogLlJFCiAuUFAKLS5CIG5vbmJsb2NrIAot
LlJCIFsgb24gfCBvZmYgfCBcZkludW1zZWNzIF0KKy5CUiAibm9uYmxvY2sgWyBvbiB8IG9mZiB8
IG51bXNlY3MgXSIKIC5SUyAwCiAuUFAKIFRlbGwgc2NyZWVuIGhvdyB0byBkZWFsIHdpdGggdXNl
ciBpbnRlcmZhY2VzIChkaXNwbGF5cykgdGhhdCBjZWFzZSB0bwpAQCAtMjkyNSw3ICsyOTE0LDcg
QEAKIFxmSW90aGVyXGZQIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgXGZJbmV4dFxmUC4KIC5SRQog
LlRQCi0uQlIgInBhcnRpYWwgb24iIHwgb2ZmCisuQlIgInBhcnRpYWwgWyBvbiB8IG9mZiBdIgog
LlJTIDAKIC5QUAogRGVmaW5lcyB3aGV0aGVyIHRoZSBkaXNwbGF5IHNob3VsZCBiZSByZWZyZXNo
ZWQgKGFzIHdpdGggXGZJcmVkaXNwbGF5XGZQKSBhZnRlcgpAQCAtMjk0MCw5ICsyOTI5LDggQEAK
IC5QUAogUHJlc2VudCBhIGNyeXB0ZWQgcGFzc3dvcmQgaW4geW91ciBcKlEuc2NyZWVucmNcKlUg
ZmlsZSBhbmQKIC5JIHNjcmVlbgotd2lsbCBhc2sKLWZvciBpdCwgd2hlbmV2ZXIgc29tZW9uZSBh
dHRlbXB0cyB0byByZXN1bWUgYSBkZXRhY2hlZC4gVGhpcyBpcyB1c2VmdWwKLWlmIHlvdSBoYXZl
IHByaXZpbGVnZWQgcHJvZ3JhbXMgcnVubmluZyB1bmRlcgord2lsbCBhc2sgZm9yIGl0LCB3aGVu
ZXZlciBzb21lb25lIGF0dGVtcHRzIHRvIHJlc3VtZSBhIGRldGFjaGVkLgorVGhpcyBpcyB1c2Vm
dWwgaWYgeW91IGhhdmUgcHJpdmlsZWdlZCBwcm9ncmFtcyBydW5uaW5nIHVuZGVyCiAuSSBzY3Jl
ZW4KIGFuZCB5b3Ugd2FudCB0byBwcm90ZWN0IHlvdXIgc2Vzc2lvbiBmcm9tIHJlYXR0YWNoIGF0
dGVtcHRzIGJ5IGFub3RoZXIgdXNlcgogbWFzcXVlcmFkaW5nIGFzIHlvdXIgdWlkIChpLmUuIGFu
eSBzdXBlcnVzZXIuKQpAQCAtMjk2MCwyMiArMjk0OCwyMiBAQAogb2YgdGhlIGN1cnJlbnQgd2lu
ZG93LiBUaGUgcmVnaXN0ZXIgJy4nIGlzIHRyZWF0ZWQgYXMgdGhlCiBwYXN0ZSBidWZmZXIuIElm
IG5vIHBhcmFtZXRlciBpcyBnaXZlbiB0aGUgdXNlciBpcyBwcm9tcHRlZCBmb3IgYSBzaW5nbGUg
CiByZWdpc3RlciB0byBwYXN0ZS4KLVRoZSBwYXN0ZSBidWZmZXIgY2FuIGJlIGZpbGxlZCB3aXRo
IHRoZSBcZkljb3B5XGZQLCBcZkloaXN0b3J5XGZQIGFuZCAKLVxmSXJlYWRidWZcZlAgY29tbWFu
ZHMuIAotT3RoZXIgcmVnaXN0ZXJzIGNhbiBiZSBmaWxsZWQgd2l0aCB0aGUgXGZJcmVnaXN0ZXJc
ZlAsIFxmSXJlYWRyZWdcZlAgYW5kIAotXGZJcGFzdGVcZlAgY29tbWFuZHMuCi1JZiBcZklwYXN0
ZVxmUCBpcyBjYWxsZWQgd2l0aCBhIHNlY29uZCBhcmd1bWVudCwgdGhlIGNvbnRlbnRzIG9mIHRo
ZSBzcGVjaWZpZWQKLXJlZ2lzdGVycyBpcyBwYXN0ZWQgaW50byB0aGUgbmFtZWQgZGVzdGluYXRp
b24gcmVnaXN0ZXIgcmF0aGVyIHRoYW4gCitUaGUgcGFzdGUgYnVmZmVyIGNhbiBiZSBmaWxsZWQg
d2l0aCB0aGUgXGZCY29weVxmUCwgXGZCaGlzdG9yeVxmUCBhbmQKK1xmQnJlYWRidWZcZlAgY29t
bWFuZHMuCitPdGhlciByZWdpc3RlcnMgY2FuIGJlIGZpbGxlZCB3aXRoIHRoZSBcZkJyZWdpc3Rl
clxmUCwgXGZCcmVhZHJlZ1xmUCBhbmQKK1xmQnBhc3RlXGZQIGNvbW1hbmRzLgorSWYgXGZCcGFz
dGVcZlAgaXMgY2FsbGVkIHdpdGggYSBzZWNvbmQgYXJndW1lbnQsIHRoZSBjb250ZW50cyBvZiB0
aGUgc3BlY2lmaWVkCityZWdpc3RlcnMgaXMgcGFzdGVkIGludG8gdGhlIG5hbWVkIGRlc3RpbmF0
aW9uIHJlZ2lzdGVyIHJhdGhlciB0aGFuCiB0aGUgd2luZG93LiBJZiAnLicgaXMgdXNlZCBhcyB0
aGUgc2Vjb25kIGFyZ3VtZW50LCB0aGUgZGlzcGxheXMgcGFzdGUgYnVmZmVyIGlzCiB0aGUgZGVz
dGluYXRpb24uCi1Ob3RlLCB0aGF0IFwqUXBhc3RlXCpVIHVzZXMgYSB3aWRlIHZhcmlldHkgb2Yg
cmVzb3VyY2VzOiBXaGVuZXZlciBhIHNlY29uZCAKK05vdGUsIHRoYXQgXGZCcGFzdGVcZlAgdXNl
cyBhIHdpZGUgdmFyaWV0eSBvZiByZXNvdXJjZXM6IFdoZW5ldmVyIGEgc2Vjb25kCiBhcmd1bWVu
dCBpcyBzcGVjaWZpZWQgbm8gY3VycmVudCB3aW5kb3cgaXMgbmVlZGVkLiBXaGVuIHRoZSBzb3Vy
Y2Ugc3BlY2lmaWNhdGlvbgotb25seSBjb250YWlucyByZWdpc3RlcnMgKG5vdCB0aGUgcGFzdGUg
YnVmZmVyKSB0aGVuIHRoZXJlIG5lZWQgbm90IGJlIGEgY3VycmVudCAKLWRpc3BsYXkgKHRlcm1p
bmFsIGF0dGFjaGVkKSwgYXMgdGhlIHJlZ2lzdGVycyBhcmUgYSBnbG9iYWwgcmVzb3VyY2UuIFRo
ZSAKK29ubHkgY29udGFpbnMgcmVnaXN0ZXJzIChub3QgdGhlIHBhc3RlIGJ1ZmZlcikgdGhlbiB0
aGVyZSBuZWVkIG5vdCBiZSBhIGN1cnJlbnQKK2Rpc3BsYXkgKHRlcm1pbmFsIGF0dGFjaGVkKSwg
YXMgdGhlIHJlZ2lzdGVycyBhcmUgYSBnbG9iYWwgcmVzb3VyY2UuIFRoZQogcGFzdGUgYnVmZmVy
IGV4aXN0cyBvbmNlIGZvciBldmVyeSB1c2VyLgogLlJFCiAuVFAKLS5CUiAicGFzdGVmb250ICIg
WyBvbiB8IG9mZiBdCisuQlIgInBhc3RlZm9udCBbIG9uIHwgb2ZmIF0iCiAuUlMgMAogLlBQCiBU
ZWxsIApAQCAtMzA3MCw3ICszMDU4LDcgQEAKIFJlYWRzIHRoZSBjb250ZW50cyBvZiB0aGUgc3Bl
Y2lmaWVkIGZpbGUgaW50byB0aGUgcGFzdGUgYnVmZmVyLgogWW91IGNhbiB0ZWxsIHNjcmVlbiB0
aGUgZW5jb2Rpbmcgb2YgdGhlIGZpbGUgdmlhIHRoZSBcZkJcLWVcZlAgb3B0aW9uLgogSWYgbm8g
ZmlsZSBpcyBzcGVjaWZpZWQsIHRoZSBzY3JlZW4tZXhjaGFuZ2UgZmlsZW5hbWUgaXMgdXNlZC4K
LVNlZSBhbHNvIFwqUWJ1ZmZlcmZpbGVcKlUgY29tbWFuZC4KK1NlZSBhbHNvIFxmQmJ1ZmZlcmZp
bGVcZlAgY29tbWFuZC4KIC5SRQogLlRQCiAuSVIgIlxmQnJlYWRyZWdcZlAgIiBbIGVuY29kaW5n
ICJdIFsiIHJlZ2lzdGVyICIgWyIgZmlsZW5hbWUgXV0KQEAgLTMxMTcsMTcgKzMxMDUsMjEgQEAK
IC5CICJyZW1vdmVidWYiCiAuUlMgMAogLlBQCi1VbmxpbmtzIHRoZSBzY3JlZW4tZXhjaGFuZ2Ug
ZmlsZSB1c2VkIGJ5IHRoZSBjb21tYW5kcyBcKlF3cml0ZWJ1ZlwqVSBhbmQgCi1cKlFyZWFkYnVm
XCpVLiAKK1VubGlua3MgdGhlIHNjcmVlbi1leGNoYW5nZSBmaWxlIHVzZWQgYnkgdGhlIGNvbW1h
bmRzCitcZkJ3cml0ZWJ1ZlxmUCBhbmQgXGZCcmVhZGJ1ZlxmUC4KIC5SRQogLlRQCi0uQiAicmVu
ZGl0aW9uIGJlbGwiIHwgbW9uaXRvciB8IHNpbGVuY2UgfCBzbyAiIFxmSWF0dHJcZlIgIiBcZlJb
XGZQIFxmSWNvbG9yXGZQIFxmUl1cZlAKKy5CICJyZW5kaXRpb24gWyBiZWxsIHwgbW9uaXRvciB8
IHNpbGVuY2UgfCBzbyBdIGF0dHIgWyBjb2xvciBdIgogLlJTIDAKIC5QUAogQ2hhbmdlIHRoZSB3
YXkKIC5JIHNjcmVlbgotcmVuZGVycyB0aGUgdGl0bGVzIG9mIHdpbmRvd3MgdGhhdCBoYXZlIG1v
bml0b3Igb3IgYmVsbCBmbGFncyBzZXQgaW4gY2FwdGlvbiBvciBoYXJkc3RhdHVzIG9yIHdpbmRv
d2xpc3QuIFNlZSB0aGUgXCpRU1RSSU5HIEVTQ0FQRVNcKlUgY2hhcHRlciBmb3IgdGhlIHN5bnRh
eCBvZiB0aGUgbW9kaWZpZXJzLgotVGhlIGRlZmF1bHQgZm9yIG1vbml0b3IgaXMgY3VycmVudGx5
IFwqUT1iIFwqVSAoYm9sZCwgYWN0aXZlIGNvbG9ycyksIGZvciBiZWxsIFwqUT11YiBcKlUgKHVu
ZGVybGluZSwgYm9sZCBhbmQgYWN0aXZlIGNvbG9ycyksIGFuZCBcKlE9dSBcKlUgZm9yIHNpbGVu
Y2UuCityZW5kZXJzIHRoZSB0aXRsZXMgb2Ygd2luZG93cyB0aGF0IGhhdmUgbW9uaXRvciBvciBi
ZWxsIGZsYWdzIHNldCBpbgorY2FwdGlvbiBvciBoYXJkc3RhdHVzIG9yIHdpbmRvd2xpc3QuIFNl
ZSB0aGUgXCpRU1RSSU5HIEVTQ0FQRVNcKlUKK2NoYXB0ZXIgZm9yIHRoZSBzeW50YXggb2YgdGhl
IG1vZGlmaWVycy4KK1RoZSBkZWZhdWx0IGZvciBtb25pdG9yIGlzIGN1cnJlbnRseSBcKlE9YiBc
KlUgKGJvbGQsIGFjdGl2ZSBjb2xvcnMpLAorZm9yIGJlbGwgXCpRPXViIFwqVSAodW5kZXJsaW5l
LCBib2xkIGFuZCBhY3RpdmUgY29sb3JzKSwgYW5kIFwqUT11IFwqVQorZm9yIHNpbGVuY2UuCiAu
UkUKIC5UUAogLkIgInJlc2V0IgpAQCAtMzE5Nyw3ICszMTg5LDcgQEAKIC5JIHNjcmVlbgogd2ls
bCBwcm9tcHQgZm9yIGhvdyB5b3Ugd291bGQgbGlrZSB0byByZXNpemUgdGhlIGN1cnJlbnQgcmVn
aW9uLgogCi1TZWUgXCpRZm9jdXNtaW5zaXplXCpVIGlmIHlvdSB3YW50IHRvIHJlc3RyaWN0IHRo
ZSBtaW5pbXVuIHNpemUgYSByZWdpb24KK1NlZSBcKlFmb2N1c21pbnNpemVcKlUgaWYgeW91IHdh
bnQgdG8gcmVzdHJpY3QgdGhlIG1pbmltdW0gc2l6ZSBhIHJlZ2lvbgogY2FuIGhhdmUuCiAuUkUK
IC5SRQpAQCAtMzI5NCw3ICszMjg2LDcgQEAKIGFuZCB2YWx1ZS4gVGhlIGVudmlyb25tZW50IGlz
IGluaGVyaXRlZCBieSBhbGwgc3Vic2VxdWVudGx5IGZvcmtlZCBzaGVsbHMuCiAuUkUKIC5UUAot
LkJSICJzZXRzaWQgIiBbIG9uIHwgb2ZmIF0KKy5CUiAic2V0c2lkIFsgb24gfCBvZmYgXSIKIC5S
UyAwCiAuUFAKIE5vcm1hbGx5IHNjcmVlbiB1c2VzIGRpZmZlcmVudCBzZXNzaW9ucyBhbmQgcHJv
Y2VzcyBncm91cHMgZm9yCkBAIC0zMzI2LDcgKzMzMTgsNyBAQAogZW50aXRsZWQgXCpRVElUTEVT
IChuYW1pbmcgd2luZG93cylcKlUuCiAuUkUKIC5UUAotLkJSICJzaWxlbmNlICIgWyBvbiB8IG9m
ZiAifFxmSXNlY1xmUF0iCisuQlIgInNpbGVuY2UgWyBvbiB8IG9mZiB8IHNlYyBdIgogLlJTIDAK
IC5QUAogVG9nZ2xlcyBzaWxlbmNlIG1vbml0b3Jpbmcgb2Ygd2luZG93cy4KQEAgLTM0MTQsMTgg
KzM0MDYsMTcgQEAKIFdpdGggdGhpcyBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHNjcmVlbiwg
c2Nyb2xsaW5nIGRhdGEKIHdpbGwgYXBwZWFyIG11Y2ggc2xvd2VyIGluIGEgdmVydGljYWxseSBz
cGxpdCByZWdpb24gdGhhbiBvbmUKIHRoYXQgaXMgbm90LiBUaGlzIHNob3VsZCBiZSB0YWtlbiBp
bnRvIGNvbnNpZGVyYXRpb24gaWYgeW91IG5lZWQKLXRvIHVzZSBzeXN0ZW0gY29tbWFuZHMgc3Vj
aCBhcyBcKlFjYXRcKlUgb3IgXCpRdGFpbCAtZlwqVS4KK3RvIHVzZSBzeXN0ZW0gY29tbWFuZHMg
c3VjaCBhcyBcZkJjYXRcZlAgb3IgXGZCdGFpbCAtZlxmUC4KIC5SRQogLlRQCi0uQiAic3RhcnR1
cF9tZXNzYWdlIG9uXGZQfFxmQm9mZiIKKy5CICJzdGFydHVwX21lc3NhZ2UgWyBvbiB8IG9mZiBd
IgogLlJTIDAKIC5QUAogU2VsZWN0IHdoZXRoZXIgeW91IHdhbnQgdG8gc2VlIHRoZSBjb3B5cmln
aHQgbm90aWNlIGR1cmluZyBzdGFydHVwLgogRGVmYXVsdCBpcyBgb24nLCBhcyB5b3UgcHJvYmFi
bHkgbm90aWNlZC4KIC5SRQogLlBQCi0uQlIgInN0YXR1cyAiIFsgdG9wIHwgdXAgfCBkb3duIHwg
Ym90dG9tIF0KLS5SQiBbIGxlZnQgfCByaWdodCBdCisuQlIgInN0YXR1cyBbIHRvcCB8IHVwIHwg
ZG93biB8IGJvdHRvbSBdIFsgbGVmdCB8IHJpZ2h0IF0iCiAuUlMgMAogLlBQCiBUaGUgc3RhdHVz
IHdpbmRvdyBieSBkZWZhdWx0IGlzIGluIGJvdHRvbS1sZWZ0IGNvcm5lci4gVGhpcyBjb21tYW5k
IGNhbiBtb3ZlCkBAIC0zNjMwLDcgKzM2MjEsNyBAQAogVW5zZXQgYW4gZW52aXJvbm1lbnQgdmFy
aWFibGUuCiAuUkUKIC5UUAotLkJSICJ1dGY4ICIgWyBvbiB8IG9mZiBbIG9uIHwgb2ZmIF1dCisu
QlIgInV0ZjggWyBvbiB8IG9mZiBbIG9uIHwgb2ZmIF1dIgogLlJTIDAKIC5QUAogQ2hhbmdlIHRo
ZSBlbmNvZGluZyB1c2VkIGluIHRoZSBjdXJyZW50IHdpbmRvdy4gSWYgdXRmOCBpcyBlbmFibGVk
LCB0aGUKQEAgLTM2NDIsNyArMzYzMyw3IEBACiB3aW5kb3cuCiAuUkUKIC5UUAotLkJSICJ2YmVs
bCAiIFsgb24gfCBvZmYgXQorLkJSICJ2YmVsbCBbIG9uIHwgb2ZmIF0iCiAuUlMgMAogLlBQCiBT
ZXRzIHRoZSB2aXN1YWwgYmVsbCBzZXR0aW5nIGZvciB0aGlzIHdpbmRvdy4gT21pdHRpbmcgdGhl
IHBhcmFtZXRlcgpAQCAtMzY3NCw3ICszNjY1LDcgQEAKIHZpc3VhbCBiZWxsIG1lc3NhZ2UuIFRo
ZSBkZWZhdWx0IGlzIDEgc2Vjb25kLgogLlJFCiAuVFAKLS5CUiAidmVyYm9zZSAiIFsgb24gfCBv
ZmYgXQorLkJSICJ2ZXJib3NlIFsgb24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKIElmIHZlcmJvc2Ug
aXMgc3dpdGNoZWQgb24sIHRoZSBjb21tYW5kIG5hbWUgaXMgZWNob2VkLCB3aGVuZXZlciBhIHdp
bmRvdwpAQCAtMzcxMSw3ICszNzAyLDcgQEAKIHZpY2UgdmVyc2EuCiAuUkUKIC5UUAotLkJSICJ3
aW5kb3dsaXN0ICIgWyBcLWIgIl0gWyIgXC1tICJdIFsiIFwtZyBdCisuQlIgIndpbmRvd2xpc3Qg
WyBcLWIgXSBbIFwtbSBdIFsgXC1nIF0iCiAuVFAKIC5JUiAiXGZCd2luZG93bGlzdCBzdHJpbmdc
ZlIgIiBbIHN0cmluZyBdCiAuVFAKQEAgLTM4MTksNyArMzgxMCw3IEBACiBUaGUgZGVmYXVsdCBj
b21tYW5kIHdpdGhvdXQgYW55IHBhcmFtZXRlciBpcyBsaW1pdGVkIHRvIGEgc2l6ZSBvZiAxMDI0
IGJ5dGVzLgogLlJFCiAuVFAKLS5CUiAid3JhcCAiIFsgb24gfCBvZmYgXQorLkJSICJ3cmFwIFsg
b24gfCBvZmYgXSIKIC5SUyAwCiAuUFAKIFNldHMgdGhlIGxpbmUtd3JhcCBzZXR0aW5nIGZvciB0
aGUgY3VycmVudCB3aW5kb3cuCkBAIC0zODQyLDcgKzM4MzMsNyBAQAogY29tbWFuZCBhbmQgZGVm
YXVsdHMgdG8gXCpRL3RtcC9zY3JlZW5cLWV4Y2hhbmdlXCpVLgogLlJFCiAuVFAKLS5CUiAid3Jp
dGVsb2NrICIgWyBvbiB8ICJvZmZcZlJ8XGZCYXV0b1xmUl0iCisuQlIgIndyaXRlbG9jayBbIG9u
IHwgb2ZmIHwgYXV0b10iCiAuUlMgMAogLlBQCiBJbiBhZGRpdGlvbiB0byBhY2Nlc3MgY29udHJv
bCBsaXN0cywgbm90IGFsbCB1c2VycyBtYXkgYmUgYWJsZSB0byB3cml0ZSB0bwpAQCAtMzg2NCw3
ICszODU1LDcgQEAKIGN1cnJlbnQgd2luZG93LgogLlJFCiAuVFAKLS5CUiAiem1vZGVtICIgWyBv
ZmZcZlJ8XGZQYXV0b1xmUnxcZlBjYXRjaFxmUnxcZlBwYXNzIF0KKy5CUiAiem1vZGVtIFsgb2Zm
IHwgYXV0byB8IGNhdGNoIHwgcGFzcyBdIgogLlRQCiAuSVIgIlxmQnptb2RlbSBzZW5kY21kXGZS
ICIgWyBzdHJpbmcgXQogLlRQCkBAIC00MDY4LDYgKzQwNTksOCBAQAogdGhlIGVzY2FwZSBjaGFy
YWN0ZXIgaXRzZWxmCiAuSVAgRQogc2V0cyAlPyB0byB0cnVlIGlmIHRoZSBlc2NhcGUgY2hhcmFj
dGVyIGhhcyBiZWVuIHByZXNzZWQuCisuSVAgZQorZW5jb2RpbmcKIC5JUCBmCiBmbGFncyBvZiB0
aGUgd2luZG93LCBzZWUgXCpRd2luZG93c1wqVSBmb3IgbWVhbmluZ3Mgb2YgdGhlIHZhcmlvdXMg
ZmxhZ3MKIC5JUCBGCkBAIC00MTYzLDcgKzQxNTYsNyBAQAogLklQIHIKIHJldmVyc2UKIC5JUCBz
Ci1zdGFuZG91dAorL3N0YW5kb3V0CiAuSVAgQgogYmxpbmtpbmcKIC5QRApAQCAtNDM0Nyw5ICs0
MzQwLDExIEBACiBoaXN0b3J5IHJlY2FsbCBjb21tYW5kcy4KIC5QUAogSGVyZSdzIHNvbWUgLnNj
cmVlbnJjIGV4YW1wbGVzOgotLklQCi1zY3JlZW4gXC10IHRvcCAyIG5pY2UgdG9wCi0uUFAKKy5z
cAorLm5mCisJc2NyZWVuIFwtdCB0b3AgMiBuaWNlIHRvcAorLmZpCisuc3AKIEFkZGluZyB0aGlz
IGxpbmUgdG8geW91ciAuc2NyZWVucmMgd291bGQgc3RhcnQgYSBuaWNlLWQgdmVyc2lvbiBvZiB0
aGUKIFwqUXRvcFwqVSBjb21tYW5kIGluIHdpbmRvdyAyIG5hbWVkIFwqUXRvcFwqVSByYXRoZXIg
dGhhbiBcKlFuaWNlXCpVLgogLnNwCkBAIC00MzYxLDE1ICs0MzU2LDE5IEBACiBUaGVzZSBjb21t
YW5kcyB3b3VsZCBzdGFydCBhIHNoZWxsIHdpdGggdGhlIGdpdmVuIHNoZWxsdGl0bGUuCiBUaGUg
dGl0bGUgc3BlY2lmaWVkIGlzIGFuIGF1dG8tdGl0bGUgdGhhdCB3b3VsZCBleHBlY3QgdGhlIHBy
b21wdCBhbmQKIHRoZSB0eXBlZCBjb21tYW5kIHRvIGxvb2sgc29tZXRoaW5nIGxpa2UgdGhlIGZv
bGxvd2luZzoKLS5JUAotL3Vzci9qb2Uvc3JjL2Rpcj4gdHJuCi0uUFAKKy5zcAorLm5mCisJL3Vz
ci9qb2Uvc3JjL2Rpcj4gdHJuCisuZmkKKy5zcAogKGl0IGxvb2tzIGFmdGVyIHRoZSAnPiAnIGZv
ciB0aGUgY29tbWFuZCBuYW1lKS4KIFRoZSB3aW5kb3cgc3RhdHVzIHdvdWxkIHNob3cgdGhlIG5h
bWUgXCpRdHJuXCpVIHdoaWxlIHRoZSBjb21tYW5kIHdhcwogcnVubmluZywgYW5kIHJldmVydCB0
byBcKlFjc2hcKlUgdXBvbiBjb21wbGV0aW9uLgotLklQCi1iaW5kIFIgc2NyZWVuIFwtdCAnJSB8
cm9vdDonIHN1Ci0uUFAKKy5zcAorLm5mCisJYmluZCBSIHNjcmVlbiBcLXQgJyUgfHJvb3Q6JyBz
dQorLmZpCisuc3AKIEhhdmluZyB0aGlzIGNvbW1hbmQgaW4geW91ciAuc2NyZWVucmMgd291bGQg
YmluZCB0aGUga2V5CiBzZXF1ZW5jZSBcKlFDLWEgUlwqVSB0byB0aGUgXCpRc3VcKlUgY29tbWFu
ZCBhbmQgZ2l2ZSBpdCBhbgogYXV0by10aXRsZSBuYW1lIG9mIFwqUXJvb3Q6XCpVLgpAQCAtNDQw
NCwxNyArNDQwMywyMSBAQAogSWYgdGhlc2UgaW52aXNpYmxlIGNoYXJhY3RlcnMgYXJlbid0IGEg
bXVsdGlwbGUgb2YgOCB0aGVuIGJhY2tzcGFjaW5nIG92ZXIKIGEgdGFiIHdpbGwgcmVzdWx0IGlu
IGFuIGluY29ycmVjdCBkaXNwbGF5LgogT25lIHdheSB0byBnZXQgYXJvdW5kIHRoaXMgaXMgdG8g
dXNlIGEgcHJvbXB0IGxpa2UgdGhpczoKLS5JUAotc2V0IHByb21wdD0nXltbMDAwMG1eW2teW1xl
JSAnCi0uUFAKKy5zcAorLm5mCisJc2V0IHByb21wdD0nXltbMDAwMG1eW2teW1xlJSAnCisuZmkK
Ky5zcAogVGhlIGVzY2FwZS1zZXF1ZW5jZSBcKlE8ZXNjPlswMDAwbVwqVSBub3Qgb25seSBub3Jt
YWxpemVzIHRoZSBjaGFyYWN0ZXIKIGF0dHJpYnV0ZXMsIGJ1dCBhbGwgdGhlIHplcm9zIHJvdW5k
IHRoZSBsZW5ndGggb2YgdGhlIGludmlzaWJsZSBjaGFyYWN0ZXJzCiB1cCB0byA4LgogQmFzaCB1
c2VycyB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZWNobyB0aGUgZXNjYXBlIHNlcXVlbmNlIGluIHRo
ZQogUFJPTVBUX0NPTU1BTkQ6Ci0uSVAKLVBST01QVF9DT01NQU5EPSdwcmludGYgIlxlMDMza1xl
MDMzXGUxMzQiJwotLlBQCisuc3AKKy5uZgorCVBST01QVF9DT01NQU5EPSdwcmludGYgIlxlMDMz
a1xlMDMzXGUxMzQiJworLmZpCisuc3AKIChJIHVzZWQgXCpRXGUxMzRcKlUgdG8gb3V0cHV0IGEg
YFxlJyBiZWNhdXNlIG9mIGEgYnVnIGluIGJhc2ggdjEuMDQpLgogCiAKQEAgLTUyMDIsMTIgKzUy
MDUsMTIgQEAKIC5JIHNjcmVlbgogZGlzdHJpYnV0aW9uIHBhY2thZ2UgZm9yIHByaXZhdGUgYW5k
IGdsb2JhbCBpbml0aWFsaXphdGlvbiBmaWxlcy4KIC5JUCAkU1lTU0NSRUVOUkMgCi0uSVAgL2V0
Yy9zY3JlZW5yYworLklQIC91c3IvbG9jYWwvZXRjL3NjcmVlbnJjCiAuSSBzY3JlZW4KIGluaXRp
YWxpemF0aW9uIGNvbW1hbmRzCiAuSVAgJFNDUkVFTlJDCiAuSVAgJEhPTUUvLnNjcmVlbnJjCi1S
ZWFkIGluIGFmdGVyIC9ldGMvc2NyZWVucmMKK1JlYWQgaW4gYWZ0ZXIgL3Vzci9sb2NhbC9ldGMv
c2NyZWVucmMKIC5JUCAkU0NSRUVORElSL1NcLTxsb2dpbj4KIC5JUCAvbG9jYWwvc2NyZWVucy9T
XC08bG9naW4+CiBTb2NrZXQgZGlyZWN0b3JpZXMgKGRlZmF1bHQpCkBAIC01MjI4LDE2ICs1MjMx
LDExIEBACiBvcgogLklQIC9ldGMvdGVybWNhcAogVGVybWluYWwgY2FwYWJpbGl0eSBkYXRhYmFz
ZXMKLS5JUCAvdmFyL3J1bi91dG1wCisuSVAgL2V0Yy91dG1wCiBMb2dpbiByZWNvcmRzCiAuSVAg
JExPQ0tQUkcKIFByb2dyYW0gdGhhdCBsb2NrcyBhIHRlcm1pbmFsLgogCi0KLS5TSCAiU0VFIEFM
U08iCi10ZXJtY2FwKDUpLCB1dG1wKDUpLCB2aSgxKSwgY2FwdG9pbmZvKDEpLCB0aWMoMSkKLQot
CiAuU0ggQVVUSE9SUwogT3JpZ2luYWxseSBjcmVhdGVkIGJ5IE9saXZlciBMYXVtYW5uLiBGb3Ig
YSBsb25nIHRpbWUgbWFpbnRhaW5lZAogYW5kIGRldmVsb3BlZCBieSBKdWVyZ2VuIFdlaWdlcnQs
IE1pY2hhZWwgU2Nocm9lZGVyLCBNaWNhaCBDb3dhbgpAQCAtNTI0Nyw3ICs1MjQ1LDcgQEAKIAog
LlNIIENPUFlMRUZUCiAubmYKLUNvcHlyaWdodCAoYykgMjAxOC0yMDIwCitDb3B5cmlnaHQgKGMp
IDIwMTgtMjAyMgogCUFsZXhhbmRlciBOYXVtb3YgPGFsZXhhbmRlcl9uYXVtb3ZAb3BlbnN1c2Uu
b3JnPgogCUFtYWRldXN6IFNsYXdpbnNraSA8YW1hZGVAYXNtYmxyLm5ldD4KIENvcHlyaWdodCAo
YykgMjAxNS0yMDE3CkBAIC01MjY3LDYgKzUyNjUsNyBAQAogCU1pY2hhZWwgU2Nocm9lZGVyIDxt
bHNjaHJvZUBpbW1kNC5pbmZvcm1hdGlrLnVuaVwtZXJsYW5nZW4uZGU+CiBDb3B5cmlnaHQgKEMp
IDE5ODcgT2xpdmVyIExhdW1hbm4KIC5maQorCiAuUFAKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eQpAQCAtNTMyNCwxMCArNTMyMywxMiBAQAogLkkgc2NyZWVuCiBhdmFpbGFibGUgdmlhIGFub255
bW91cyBmdHAgZnJvbSBmdHAuZ251Lm9yZy9nbnUvc2NyZWVuLyBvciBhbnkgb3RoZXIgCiAuSSBH
TlUgCi1kaXN0cmlidXRpb24gc2l0ZS4gVGhlIGhvbWUgc2l0ZSBvZgorZGlzdHJpYnV0aW9uIHNp
dGUuIFRoZSBob21lIHBhZ2Ugb2YKIC5JIHNjcmVlbgotaXMgc2F2YW5uYWguZ251Lm9yZy9wcm9q
ZWN0cy9zY3JlZW4vLiBJZiB5b3Ugd2FudCB0byBoZWxwLCBzZW5kIGEgbm90ZSB0bwotc2NyZWVu
LWRldmVsQGdudS5vcmcuCitpcyBodHRwczovL3NhdmFubmFoLmdudS5vcmcvcHJvamVjdHMvc2Ny
ZWVuLyBhbmQgdGhlIGdpdCByZXBvCitpcyBodHRwczovL2dpdC5zYXZhbm5haC5nbnUub3JnL2Nn
aXQvc2NyZWVuLmdpdC4KK0lmIHlvdSB3YW50IHRvIGhlbHAsIHNlbmQgYSBub3RlIHRvCisuQlIg
c2NyZWVuLWRldmVsQGdudS5vcmcuCiAKIC5TSCBCVUdTCiAuUEQKQEAgLTUzNTUsOSArNTM1Niw5
IEBACiBtdXN0IGJlIGluc3RhbGxlZCBhcyBzZXQtdWlkIHdpdGggb3duZXIgcm9vdCBvbiBtb3N0
IHN5c3RlbXMgaW4gb3JkZXIKIHRvIGJlIGFibGUgdG8gY29ycmVjdGx5IGNoYW5nZSB0aGUgb3du
ZXIgb2YgdGhlIHR0eSBkZXZpY2UgZmlsZSBmb3IKIGVhY2ggd2luZG93LgotU3BlY2lhbCBwZXJt
aXNzaW9uIG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHdyaXRlIHRoZSBmaWxlIFwqUS92YXIvcnVu
L3V0bXBcKlUuCitTcGVjaWFsIHBlcm1pc3Npb24gbWF5IGFsc28gYmUgcmVxdWlyZWQgdG8gd3Jp
dGUgdGhlIGZpbGUgXCpRL2V0Yy91dG1wXCpVLgogLklQIFwoYnUKLUVudHJpZXMgaW4gXCpRL3Zh
ci9ydW4vdXRtcFwqVSBhcmUgbm90IHJlbW92ZWQgd2hlbgorRW50cmllcyBpbiBcKlEvZXRjL3V0
bXBcKlUgYXJlIG5vdCByZW1vdmVkIHdoZW4KIC5JIHNjcmVlbgogaXMga2lsbGVkIHdpdGggU0lH
S0lMTC4KIFRoaXMgd2lsbCBjYXVzZSBzb21lIHByb2dyYW1zIChsaWtlICJ3IiBvciAicndobyIp
CkBAIC01Mzg3LDcgKzUzODgsMTUgQEAKIGZpbGUgZnJvbSB3aGljaCB0aGUgc2Vzc2lvbiBpcyBi
b290ZWQsIG9yIGhhdmUgdG8gYmUgY2hhbmdlZCBtYW51YWxseS4KIC5JUCBcKGJ1CiBBIHdlaXJk
IGltYWdpbmF0aW9uIGlzIG1vc3QgdXNlZnVsIHRvIGdhaW4gZnVsbCBhZHZhbnRhZ2Ugb2YgYWxs
IHRoZSBmZWF0dXJlcy4KLS5JUCBcKGJ1CisuUFAKIFNlbmQgYnVnLXJlcG9ydHMsIGZpeGVzLCBl
bmhhbmNlbWVudHMsIHQtc2hpcnRzLCBtb25leSwgYmVlciAmIHBpenphIHRvCiAuQlIgc2NyZWVu
LWRldmVsQGdudS5vcmcgLgogCisuU0ggIlNFRSBBTFNPIgorLkJSIHRlcm1jYXAoNSksCisuQlIg
dXRtcCg1KSwKKy5CUiB2aSgxKSwKKy5CUiBjYXB0b2luZm8oMSksCisuQlIgdGljKDEpLAorLkJS
IHR0eSg0KSwKKy5CUiBwdHkoNykKZGlmZiAtdXIgc2NyZWVuLm9yaWcvZG9jL3NjcmVlbi50ZXhp
bmZvIHNjcmVlbi9kb2Mvc2NyZWVuLnRleGluZm8KLS0tIHNjcmVlbi5vcmlnL2RvYy9zY3JlZW4u
dGV4aW5mbwkyMDIzLTA2LTAxIDE0OjU4OjE3LjIzODY2NTAyNSArMDMwMAorKysgc2NyZWVuL2Rv
Yy9zY3JlZW4udGV4aW5mbwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY4MjYxMTg5OSArMDMwMApAQCAt
NCwxNCArNCwxNCBAQAogQGRvY3VtZW50ZW5jb2RpbmcgSVNPLTg4NTktMTUKIEBzZXRmaWxlbmFt
ZSBzY3JlZW4uaW5mbwogQHNldHRpdGxlIFNjcmVlbiBVc2VyJ3MgTWFudWFsCi1AZGlyY2F0ZWdv
cnkgVGVybWluYWxzCitAZGlyY2F0ZWdvcnkgR2VuZXJhbCBDb21tYW5kcwogQGZpbmFsb3V0CiBA
c2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkCiBAYyAlKiplbmQgb2YgaGVhZGVyCi1Ac2V0IHZlcnNpb24g
NC44LjAKK0BzZXQgdmVyc2lvbiA0LjkuMAogCiBAZGlyZW50cnkKLSogU2NyZWVuOiAoc2NyZWVu
KS4gICAgICAgICAgICAgVGhlIHZpcnR1YWwgdGVybWluYWwgbWFuYWdlci4KKyogU2NyZWVuOiAo
c2NyZWVuKS4gICAgICAgICAgICAgRnVsbC1zY3JlZW4gd2luZG93IG1hbmFnZXIuCiBAZW5kIGRp
cmVudHJ5CiAKIEBjIEZvciBleGFtcGxlcywgdXNlIGEgbGl0ZXJhbCBlc2NhcGUgaW4gaW5mby4K
QEAgLTI1LDcgKzI1LDcgQEAKIEBpZmluZm8KIFRoaXMgZmlsZSBkb2N1bWVudHMgdGhlIEBjb2Rl
e1NjcmVlbn0gdmlydHVhbCB0ZXJtaW5hbCBtYW5hZ2VyLgogCi1Db3B5cmlnaHQgKGMpIDE5OTMt
MjAxOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoYykgMTk5My0y
MDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBQZXJtaXNzaW9uIGlzIGdyYW50
ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YKIHRoaXMgbWFudWFs
IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
CkBAIC01MywxMSArNTMsMTEgQEAKIEB0aXRsZSBTY3JlZW4KIEBzdWJ0aXRsZSBUaGUgdmlydHVh
bCB0ZXJtaW5hbCBtYW5hZ2VyCiBAc3VidGl0bGUgZm9yIFZlcnNpb24gQHZhbHVle3ZlcnNpb259
Ci1Ac3VidGl0bGUgRmViIDIwMjAKK0BzdWJ0aXRsZSBKYW4gMjAyMgogCiBAcGFnZQogQHZza2lw
IDBwdCBwbHVzIDFmaWxsbAotQ29weXJpZ2h0IEBjb3B5cmlnaHR7fSAxOTkzLTIwMTggRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgQGNvcHlyaWdodHt9IDE5OTMtMjAy
MiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogUGVybWlzc2lvbiBpcyBncmFudGVk
IHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mCiB0aGlzIG1hbnVhbCBw
cm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQpA
QCAtMTg1LDcgKzE4NSw3IEBACiB0aGUgaW52b2tpbmcgc2hlbGwgdG8gdGhlIGFwcGxpY2F0aW9u
IChlbWFjcyBpbiB0aGlzIGNhc2UpLCBiZWNhdXNlIGl0IGlzCiBmb3JrZWQgZnJvbSB0aGUgcGFy
ZW50IHNjcmVlbiBwcm9jZXNzLCBub3QgZnJvbSB0aGUgaW52b2tpbmcgc2hlbGwuCiAKLUlmIEBm
aWxley92YXIvcnVuL3V0bXB9IGlzIHdyaXRhYmxlIGJ5IEBjb2Rle3NjcmVlbn0sIGFuIGFwcHJv
cHJpYXRlIHJlY29yZAorSWYgQGZpbGV7L2V0Yy91dG1wfSBpcyB3cml0YWJsZSBieSBAY29kZXtz
Y3JlZW59LCBhbiBhcHByb3ByaWF0ZSByZWNvcmQKIHdpbGwgYmUgd3JpdHRlbiB0byB0aGlzIGZp
bGUgZm9yIGVhY2ggd2luZG93LCBhbmQgcmVtb3ZlZCB3aGVuIHRoZQogd2luZG93IGlzIGNsb3Nl
ZC4gIFRoaXMgaXMgdXNlZnVsIGZvciB3b3JraW5nIHdpdGggQGNvZGV7dGFsa30sCiBAY29kZXtz
Y3JpcHR9LCBAY29kZXtzaHV0ZG93bn0sIEBjb2Rle3JzZW5kfSwgQGNvZGV7c2Njc30gYW5kIG90
aGVyCkBAIC0zMTQsNyArMzE0LDcgQEAKIAogQGl0ZW0gLWwKIEBpdGVteCAtbG4KLVR1cm4gbG9n
aW4gbW9kZSBvbiBvciBvZmYgKGZvciBAZmlsZXsvdmFyL3J1bi91dG1wfSB1cGRhdGluZykuICBU
aGlzIG9wdGlvbgorVHVybiBsb2dpbiBtb2RlIG9uIG9yIG9mZiAoZm9yIEBmaWxley9ldGMvdXRt
cH0gdXBkYXRpbmcpLiAgVGhpcyBvcHRpb24KIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEBjb2Rle2Rl
ZmxvZ2lufSBjb21tYW5kIChAcHhyZWZ7TG9naW59KS4KIAogQGl0ZW0gLWxzIFtAdmFye21hdGNo
fV0KQEAgLTMzMywxMyArMzMzLDYgQEAKIEFzayB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGlm
IHlvdSBhcmUgbm90IHN1cmUuCiBSZW1vdmUgc2Vzc2lvbnMgd2l0aCB0aGUgQHNhbXB7LXdpcGV9
IG9wdGlvbi4KIAotQGVtcGh7Tm90ZX06Ci0gIElmIHNvY2tldHMgYXJlIG1pc3NpbmcgKGFuZCBi
ZWNhdXNlIG9mIHRoaXMsIHlvdXIgc2Vzc2lvbnMgYXJlIG5vdAotICBsaXN0ZWQpLCB5b3UgbWF5
IHNlbmQgYSBAY29kZXtTSUdDSExEfSB0byBpdHMgYFNDUkVFTicKLSAgcHJvY2VzcyBhbmQgdGhl
IHByb2Nlc3Mgd2lsbCByZS1lc3RhYmxpc2ggdGhlIHNvY2tldCAodGhpbmsgb2YKLSAgc29tZW9u
ZSBjbGVhbmluZyBAZmlsZXsvdG1wfSB0aG9yb3VnaGx5KS4KLQotCiBAaXRlbSAtTAogVGVsbCBA
Y29kZXtzY3JlZW59IHRvIHR1cm4gb24gYXV0b21hdGljIG91dHB1dCBsb2dnaW5nIGZvciB0aGUK
IHdpbmRvd3MuCkBAIC01MDQsMTQgKzQ5NywxNCBAQAogQGNpbmRleCBzY3JlZW5yYwogV2hlbiBA
Y29kZXtzY3JlZW59IGlzIGludm9rZWQsIGl0IGV4ZWN1dGVzIGluaXRpYWxpemF0aW9uIGNvbW1h
bmRzIGZyb20KIHRoZSBmaWxlcyBAZmlsZXsuc2NyZWVucmN9IGluIHRoZSB1c2VyJ3MgaG9tZSBk
aXJlY3RvcnkgYW5kCi1AZmlsZXsvZXRjL3NjcmVlbnJjfS4gIFRoZXNlIGRlZmF1bHRzIGNhbiBi
ZSBvdmVycmlkZGVuIGluIHRoZQorQGZpbGV7L3Vzci9sb2NhbC9ldGMvc2NyZWVucmN9LiAgVGhl
c2UgZGVmYXVsdHMgY2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIAogZm9sbG93aW5nIHdheXM6CiBG
b3IgdGhlIGdsb2JhbCBzY3JlZW5yYyBmaWxlIEBjb2Rle3NjcmVlbn0gc2VhcmNoZXMgZm9yIHRo
ZSBlbnZpcm9ubWVudAogdmFyaWFibGUgQGNvZGV7JFNZU1NDUkVFTlJDfSAodGhpcyBvdmVycmlk
ZSBmZWF0dXJlIG1heSBiZSBkaXNhYmxlZCBhdAogY29tcGlsZS10aW1lKS4gIFRoZSB1c2VyIHNw
ZWNpZmljIHNjcmVlbnJjIGZpbGUgaXMKIHNlYXJjaGVkIGZvciBpbiBAY29kZXskU0NSRUVOUkN9
LCB0aGVuIAogQGZpbGV7QGNvZGV7JEhPTUV9Ly5zY3JlZW5yY30uICBUaGUgY29tbWFuZCBsaW5l
IG9wdGlvbiBAc2FtcHstY30KLXNwZWNpZmllcyB3aGljaCBmaWxlIHRvIHVzZSAoQHB4cmVme0lu
dm9raW5nIFNjcmVlbn0uICBDb21tYW5kcyBpbiB0aGVzZQorc3BlY2lmaWVzIHdoaWNoIGZpbGUg
dG8gdXNlIChAcHhyZWZ7SW52b2tpbmcgU2NyZWVufSkuICBDb21tYW5kcyBpbiB0aGVzZQogZmls
ZXMgYXJlIHVzZWQgdG8gc2V0IG9wdGlvbnMsIGJpbmQgY29tbWFuZHMgdG8ga2V5cywgYW5kIHRv
CiBhdXRvbWF0aWNhbGx5IGVzdGFibGlzaCBvbmUgb3IgbW9yZSB3aW5kb3dzIGF0IHRoZSBiZWdp
bm5pbmcgb2YKIHlvdXIgQGNvZGV7c2NyZWVufSBzZXNzaW9uLiAgQ29tbWFuZHMgYXJlIGxpc3Rl
ZCBvbmUgcGVyIGxpbmUsIHdpdGgKQEAgLTEwOTYsNyArMTA4OSw3IEBACiBAaXRlbSBsb2dmaWxl
IEB2YXJ7ZmlsZW5hbWV9CiBQbGFjZSB3aGVyZSB0byBjb2xsZWN0IGxvZ2ZpbGVzLiAgQHhyZWZ7
TG9nfS4KIEBpdGVtIGxvZ2luIFtAdmFye3N0YXRlfV0KLUxvZyB0aGUgd2luZG93IGluIEBmaWxl
ey92YXIvcnVuL3V0bXB9LiAgQHhyZWZ7TG9naW59LgorTG9nIHRoZSB3aW5kb3cgaW4gQGZpbGV7
L2V0Yy91dG1wfS4gIEB4cmVme0xvZ2lufS4KIEBpdGVtIGxvZ3RzdGFtcCBbQHZhcntzdGF0ZX1d
CiBDb25maWd1cmUgbG9nZmlsZSB0aW1lLXN0YW1wcy4gIEB4cmVme0xvZ30uCiBAaXRlbSBtYXBk
ZWZhdWx0CkBAIC0yMjE5LDcgKzIyMTIsNyBAQAogV2l0aG91dCBhbnkgYXJndW1lbnRzLCBAY29k
ZXtzY3JlZW59IHdpbGwgcHJvbXB0IGZvciBob3cgeW91IHdvdWxkCiBsaWtlIHRvIHJlc2l6ZSB0
aGUgY3VycmVudCByZWdpb24uCiAKLVNlZSBAY29kZXtmb2N1c21pbnNpemV9IGlmIHlvdSB3YW50
IHRvIHJlc3RyaWN0IHRoZSBtaW5pbXVuIHNpemUgYSByZWdpb24gY2FuIGhhdmUuCitTZWUgQGNv
ZGV7Zm9jdXNtaW5zaXplfSBpZiB5b3Ugd2FudCB0byByZXN0cmljdCB0aGUgbWluaW11bSBzaXpl
IGEgcmVnaW9uIGNhbiBoYXZlLgogCiBAZW5kIGRlZmZuCiAKQEAgLTI0MTIsNyArMjQwNSw3IEBA
CiAqIE5hbWluZyBXaW5kb3dzOjoJCUNvbnRyb2wgdGhlIG5hbWUgb2YgdGhlIHdpbmRvdwogKiBD
b25zb2xlOjoJCQlTZWUgdGhlIGhvc3QncyBjb25zb2xlIG1lc3NhZ2VzCiAqIEtpbGw6OiAgICAg
ICAgICAgICAgICAgICAgICAgIERlc3Ryb3kgYW4gdW53YW50ZWQgd2luZG93Ci0qIExvZ2luOjog
ICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2wgQGZpbGV7L3Zhci9ydW4vdXRtcH0gbG9nZ2lu
ZworKiBMb2dpbjo6ICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIEBmaWxley9ldGMvdXRt
cH0gbG9nZ2luZwogKiBNb2RlOjogICAgICAgICAgICAgICAgICAgICAgICBDb250cm9sIHRoZSBm
aWxlIG1vZGUgb2YgdGhlIHB0eQogKiBNb25pdG9yOjogICAgICAgICAgICAgICAgICAgICBXYXRj
aCBmb3IgYWN0aXZpdHkgb3IgaW5hY3Rpdml0eSBpbiBhIHdpbmRvdwogKiBXaW5kb3dzOjoJCQlM
aXN0IHRoZSBhY3RpdmUgd2luZG93cwpAQCAtMjYyMSw3ICsyNjE0LDcgQEAKIEBraW5kZXggTAog
QGRlZmZuIENvbW1hbmQgbG9naW4gW3N0YXRlXQogKEBrYmR7Qy1hIEx9KUAqCi1BZGRzIG9yIHJl
bW92ZXMgdGhlIGVudHJ5IGluIEBmaWxley92YXIvcnVuL3V0bXB9IGZvciB0aGUgY3VycmVudCB3
aW5kb3cuCitBZGRzIG9yIHJlbW92ZXMgdGhlIGVudHJ5IGluIEBmaWxley9ldGMvdXRtcH0gZm9y
IHRoZSBjdXJyZW50IHdpbmRvdy4KIFRoaXMgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHdp
bmRvdyBpcyBAZGZue2xvZ2dlZCBpbn0uICBJbiBhZGRpdGlvbgogdG8gdGhpcyB0b2dnbGUsIGl0
IGlzIGNvbnZlbmllbnQgdG8gaGF2ZSBgYGxvZyBpbicnIGFuZCBgYGxvZyBvdXQnJwoga2V5cy4g
IEZvciBpbnN0YW5jZSwgQGNvZGV7YmluZCBJIGxvZ2luIG9ufSBhbmQgQGNvZGV7YmluZCBPIApA
QCAtMzY5Niw3ICszNjg5LDcgQEAKIAogQG5vaW5kZW50CiBAa2Jke2Z9L0BrYmR7Rn0sIEBrYmR7
dH0vQGtiZHtUfSBtb3ZlIHRoZSBjdXJzb3IgZm9yd2FyZC9iYWNrd2FyZCB0byB0aGUgCi1uZXh0
IG9jY3VyZW5jZSBvZiB0aGUgdGFyZ2V0LiAoZWcsICczZnknIHdpbGwgbW92ZSB0aGUgY3Vyc29y
IHRvIHRoZSAzcmQgCituZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHRhcmdldC4gKGVnLCAnM2Z5JyB3
aWxsIG1vdmUgdGhlIGN1cnNvciB0byB0aGUgM3JkCiAneScgdG8gdGhlIHJpZ2h0LikKIAogQG5v
aW5kZW50CkBAIC0zODc3LDcgKzM4NzAsNyBAQAogKG5vbmUpQCoKIFN0dWZmIHRoZSBzdHJpbmcg
QHZhcntzdHJpbmd9IGluIHRoZSBpbnB1dCBidWZmZXIgb2YgdGhlIGN1cnJlbnQgd2luZG93Lgog
VGhpcyBpcyBsaWtlIHRoZSBAY29kZXtwYXN0ZX0gY29tbWFuZCwgYnV0IHdpdGggbXVjaCBsZXNz
IG92ZXJoZWFkLgotV2l0aG91dCBhIHBhcmFtdGVyLCBAY29kZXtzY3JlZW59IHdpbGwgcHJvbXB0
IGZvciBhIHN0cmluZyB0byBzdHVmZi4KK1dpdGhvdXQgYSBwYXJhbWV0ZXIsIEBjb2Rle3NjcmVl
bn0gd2lsbCBwcm9tcHQgZm9yIGEgc3RyaW5nIHRvIHN0dWZmLgogWW91IGNhbm5vdCBwYXN0ZSBs
YXJnZSBidWZmZXJzIHdpdGggdGhlIEBjb2Rle3N0dWZmfSBjb21tYW5kLiBJdCBpcyBtb3N0CiB1
c2VmdWwgZm9yIGtleSBiaW5kaW5ncy4gQHhyZWZ7QmluZGtleX0uCiBAZW5kIGRlZmZuCkBAIC01
MzI4LDcgKzUzMjEsOCBAQAogbG9hZCBhdmVyYWdlcyBvdmVyIDEsIDUsIGFuZCAxNSBtaW51dGVz
IChpZiB0aGlzIGlzIGF2YWlsYWJsZSBvbiB5b3VyCiBzeXN0ZW0pLiAgRm9yIHdpbmRvdy1zcGVj
aWZpYyBpbmZvcm1hdGlvbiB1c2UgQGNvZGV7aW5mb30gKEBweHJlZntJbmZvfSkuCiBJZiBhIEB2
YXJ7c3RyaW5nfSBpcyBzcGVjaWZpZWQsIGl0IGNoYW5nZXMgdGhlIGZvcm1hdCBvZiB0aGUgdGlt
ZSByZXBvcnQKLWxpa2UgaXQgaXMgZGVzY3JpYmVkIGluIHRoZSBzdHJpbmcgZXNjYXBlcyBjaGFw
dGVyIChAcHhyZWZ7U3RyaW5nIEVzY2FwZXN9KS4gU2NyZWVuIHVzZXMgYSBkZWZhdWx0IG9mIEBz
YW1weyVjOiVzICVNICVkICVIJT8gJWwlP30uCitsaWtlIGl0IGlzIGRlc2NyaWJlZCBpbiB0aGUg
c3RyaW5nIGVzY2FwZXMgY2hhcHRlciAoQHB4cmVme1N0cmluZyBFc2NhcGVzfSkuCitTY3JlZW4g
dXNlcyBhIGRlZmF1bHQgb2YgQHNhbXB7JWM6JXMgJU0gJWQgJUglPyAlbCU/fS4KIEBlbmQgZGVm
Zm4KIAogQG5vZGUgVmVyYm9zZSwgVmVyc2lvbiwgVGltZSwgTWlzY2VsbGFuZW91cwpAQCAtNTU3
OCw2ICs1NTcyLDggQEAKIHdlZWtkYXkgbmFtZQogQGl0ZW0gRQogc2V0cyAlPyB0byB0cnVlIGlm
IHRoZSBlc2NhcGUgY2hhcmFjdGVyIGhhcyBiZWVuIHByZXNzZWQuCitAaXRlbSBlCitlbmNvZGlu
ZwogQGl0ZW0gZgogZmxhZ3Mgb2YgdGhlIHdpbmRvdy4gQHhyZWZ7V2luZG93c30sIGZvciBtZWFu
aW5ncyBvZiB0aGUgdmFyaW91cyBmbGFncy4KIEBpdGVtIEYKQEAgLTU4MDksMTMgKzU4MDUsMTMg
QEAKIGdsb2JhbCBpbml0aWFsaXphdGlvbiBmaWxlcy4KIAogQGl0ZW0gQGNvZGV7JFNZU1NDUkVF
TlJDfQotQGl0ZW14IC9ldGMvc2NyZWVucmMKK0BpdGVteCAvbG9jYWwvZXRjL3NjcmVlbnJjCiBA
Y29kZXtzY3JlZW59IGluaXRpYWxpemF0aW9uIGNvbW1hbmRzCiAKIEBpdGVtIEBjb2RleyRTQ1JF
RU5SQ30KIEBpdGVteCBAY29kZXskSE9NRX0vLmlzY3JlZW5yYwogQGl0ZW14IEBjb2RleyRIT01F
fS8uc2NyZWVucmMKLVJlYWQgaW4gYWZ0ZXIgL2V0Yy9zY3JlZW5yYworUmVhZCBpbiBhZnRlciAv
bG9jYWwvZXRjL3NjcmVlbnJjCiAKIEBpdGVtIEBjb2RleyRTQ1JFRU5ESVJ9L1MtQHZhcntsb2dp
bn0KIApAQCAtNTg0Miw3ICs1ODM4LDcgQEAKIEBpdGVteCAvZXRjL3Rlcm1jYXAKIFRlcm1pbmFs
IGNhcGFiaWxpdHkgZGF0YWJhc2VzCiAKLUBpdGVtIC92YXIvcnVuL3V0bXAKK0BpdGVtIC9ldGMv
dXRtcAogTG9naW4gcmVjb3JkcwogCiBAaXRlbSBAY29kZXskTE9DS1BSR30KQEAgLTU5NTQsMTAg
KzU5NTAsMTAgQEAKIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KIGNvcnJlY3RseSBjaGFuZ2UgdGhl
IG93bmVyIG9mIHRoZSB0dHkgZGV2aWNlIGZpbGUgZm9yIGVhY2ggd2luZG93LgogU3BlY2lhbCBw
ZXJtaXNzaW9uIG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHdyaXRlIHRoZSBmaWxlCi1AZmlsZXsv
dmFyL3J1bi91dG1wfS4KK0BmaWxley9ldGMvdXRtcH0uCiAKIEBpdGVtCi1FbnRyaWVzIGluIEBm
aWxley92YXIvcnVuL3V0bXB9IGFyZSBub3QgcmVtb3ZlZCB3aGVuIEBjb2Rle3NjcmVlbn0gaXMg
a2lsbGVkCitFbnRyaWVzIGluIEBmaWxley9ldGMvdXRtcH0gYXJlIG5vdCByZW1vdmVkIHdoZW4g
QGNvZGV7c2NyZWVufSBpcyBraWxsZWQKIHdpdGggU0lHS0lMTC4gIFRoaXMgd2lsbCBjYXVzZSBz
b21lIHByb2dyYW1zIChsaWtlICJ3IiBvciAicndobyIpIHRvCiBhZHZlcnRpc2UgdGhhdCBhIHVz
ZXIgaXMgbG9nZ2VkIG9uIHdobyByZWFsbHkgaXNuJ3QuCiAKQEAgLTU5OTUsNyArNTk5MSw3IEBA
CiBAc2VjdGlvbiBSZXBvcnRpbmcgQnVncwogQGNpbmRleCBidWcgcmVwb3J0CiAKLUlmIHlvdSBm
aW5kIGEgYnVnIGluIEBjb2Rle1NjcmVlbn0sIHBsZWFzZSBzZW5kIGVsZWN0cm9uaWMgbWFpbCB0
bworSWYgeW91IGZpbmQgYSBidWcgaW4gQGNvZGV7U2NyZWVufSwgcGxlYXNlIHNlbmQgbWFpbCB0
bwogQHd7QHNhbXB7c2NyZWVuLWRldmVsQEBnbnUub3JnfX0uICBJbmNsdWRlIHRoZSB2ZXJzaW9u
IG51bWJlcgogb2YgQGNvZGV7U2NyZWVufSB3aGljaCB5b3UgYXJlIHVzaW5nLiAgQWxzbyBpbmNs
dWRlIGluIHlvdXIgbWVzc2FnZSB0aGUKIGhhcmR3YXJlIGFuZCBvcGVyYXRpbmcgc3lzdGVtLCB0
aGUgY29tcGlsZXIgdXNlZCB0byBjb21waWxlLCBhCmRpZmYgLXVyIHNjcmVlbi5vcmlnL2VuY29k
aW5nLmMgc2NyZWVuL2VuY29kaW5nLmMKLS0tIHNjcmVlbi5vcmlnL2VuY29kaW5nLmMJMjAyMy0w
Ni0wMSAxNDo1ODoxNy4yMzk2NjUwMjcgKzAzMDAKKysrIHNjcmVlbi9lbmNvZGluZy5jCTIwMjIt
MDEtMjggMTc6MDY6MDIuNjgyNjExODk5ICswMzAwCkBAIC0xMjY0LDcgKzEyNjQsNyBAQAogICB9
OwogCiAgIGlmIChjID49IDB4ZGYwMCAmJiBjIDw9IDB4ZGZmZikKLSAgICByZXR1cm4gMTsgICAg
ICAgICAgLyogZHcgY29tYmluaW5nIHNlcXVlbmNlICovCisgICAgcmV0dXJuIDE7CQkJLyogZHcg
Y29tYmluaW5nIHNlcXVlbmNlICovCiAgIHJldHVybiAoKGJpc2VhcmNoKGMsIHdpZGUsIHNpemVv
Zih3aWRlKSAvIHNpemVvZihzdHJ1Y3QgaW50ZXJ2YWwpIC0gMSkpIHx8CiAgICAgICAgICAgKGNq
a3dpZHRoICYmCiAgICAgICAgICAgIGJpc2VhcmNoKGMsIGFtYmlndW91cywKZGlmZiAtdXIgc2Ny
ZWVuLm9yaWcvZXRjL2V0Y3NjcmVlbnJjIHNjcmVlbi9ldGMvZXRjc2NyZWVucmMKLS0tIHNjcmVl
bi5vcmlnL2V0Yy9ldGNzY3JlZW5yYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjIzOTY2NTAyNyArMDMw
MAorKysgc2NyZWVuL2V0Yy9ldGNzY3JlZW5yYwkyMDIyLTAxLTI4IDE3OjA1OjU3LjM0NjQ3OTc2
MCArMDMwMApAQCAtMSw2ICsxLDYgQEAKICMKICMgVGhpcyBpcyBhbiBleGFtcGxlIGZvciB0aGUg
Z2xvYmFsIHNjcmVlbnJjIGZpbGUuCi0jIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoaXMgZmls
ZSBhcyAvZXRjL3NjcmVlbnJjLgorIyBZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGlzIGZpbGUg
YXMgL3Vzci9sb2NhbC9ldGMvc2NyZWVucmMuCiAjIENoZWNrIGNvbmZpZy5oIGZvciB0aGUgZXhh
Y3QgbG9jYXRpb24uCiAjCiAjIEZsYXdzIG9mIHRlcm1jYXAgYW5kIHN0YW5kYXJkIHNldHRpbmdz
IGFyZSBkb25lIGhlcmUuCkBAIC05MiwxMCArOTIsMyBAQAogYmluZCBPIGxvZ2luIG9mZgogYmlu
ZCB9IGhpc3RvcnkKIAotIyBSZWQgSGF0IEhhY2teSF5IXkheSFBhdGNoCi0jIFRoaXMgbWFrZXMg
c2NyZWVuIHRyZWF0IGJhY2tzcGFjZXMgJ14/JyBhcwotIyBkZWxldGVzLiBUaGVyZSBzaG91bGQg
YmUgYSBmaXggaW4gdGhlIGNvZGUKLSMgZm9yIHRoZSB3YXkgdGVybWNhcCBpbmhlcml0YW5jZSB3
b3JrcywKLSMgYnV0IEkgZG9udCBrbm93IHdoZXJlIHRvIHB1dCBpdCwgYW5kIHRoaXMgd29ya3Mu
Ci1iaW5ka2V5IC1kIC1rIGtiIHN0dWZmIFwwMTAKLSMgL1JlZCBIYXQgUGF0Y2gKZGlmZiAtdXIg
c2NyZWVuLm9yaWcvZXRjL3NjcmVlbnJjIHNjcmVlbi9ldGMvc2NyZWVucmMKLS0tIHNjcmVlbi5v
cmlnL2V0Yy9zY3JlZW5yYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjIzOTY2NTAyNyArMDMwMAorKysg
c2NyZWVuL2V0Yy9zY3JlZW5yYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY4MjYxMTg5OSArMDMwMApA
QCAtMTMwLDE1ICsxMzAsNiBAQAogcmVnaXN0ZXIgXSAiXDAzMzpzZSBhaVwwMTVhIgogYmluZCBe
XSBwYXN0ZSBbLl0KIAotIyBSZWQgSGF0IEhhY2teSF5IXkheSFBhdGNoCi0jIFRoaXMgbWFrZXMg
c2NyZWVuIHRyZWF0IGJhY2tzcGFjZXMgJ14/JyBhcwotIyBkZWxldGVzLiBUaGVyZSBzaG91bGQg
YmUgYSBmaXggaW4gdGhlIGNvZGUKLSMgZm9yIHRoZSB3YXkgdGVybWNhcCBpbmhlcml0YW5jZSB3
b3JrcywKLSMgYnV0IEkgZG9udCBrbm93IHdoZXJlIHRvIHB1dCBpdCwgYW5kIHRoaXMgd29ya3Mu
Ci1iaW5ka2V5IC1kIC1rIGtiIHN0dWZmIFwwMTAKLSMgL1JlZCBIYXQgUGF0Y2gKLQotCiAjIyMj
IyMjIyMjIyMjIyMjCiAjCiAjIGRlZmF1bHQgd2luZG93cwpkaWZmIC11ciBzY3JlZW4ub3JpZy9l
eHRlcm4uaCBzY3JlZW4vZXh0ZXJuLmgKLS0tIHNjcmVlbi5vcmlnL2V4dGVybi5oCTIwMjMtMDYt
MDEgMTQ6NTg6MTcuMjQwNjY1MDMwICswMzAwCisrKyBzY3JlZW4vZXh0ZXJuLmgJMjAyMi0wMS0y
OCAxNzowNjowMi42ODI2MTE4OTkgKzAzMDAKQEAgLTc1LDcgKzc1LDcgQEAKIGV4dGVybiBpbnQg
ICBHZXRBbnNpU3RhdHVzIF9fUCgoc3RydWN0IHdpbiAqLCBjaGFyICopKTsKIGV4dGVybiB2b2lk
ICBXTmV3QXV0b0Zsb3cgX19QKChzdHJ1Y3Qgd2luICosIGludCkpOwogZXh0ZXJuIHZvaWQgIFdC
ZWxsIF9fUCgoc3RydWN0IHdpbiAqLCBpbnQpKTsKLWV4dGVybiB2b2lkICBXTXNnIF9fUCgoc3Ry
dWN0IHdpbiAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworZXh0ZXJuIHZvaWQgIFdNc2cgX19QKChz
dHJ1Y3Qgd2luICosIGludCwgY2hhciAqKSk7CiBleHRlcm4gdm9pZCAgV0NoYW5nZVNpemUgX19Q
KChzdHJ1Y3Qgd2luICosIGludCwgaW50KSk7CiBleHRlcm4gdm9pZCAgV2luZG93Q2hhbmdlZCBf
X1AoKHN0cnVjdCB3aW4gKiwgaW50KSk7CiBleHRlcm4gaW50ICAgTUZpbmRVc2VkTGluZSBfX1Ao
KHN0cnVjdCB3aW4gKiwgaW50LCBpbnQpKTsKZGlmZiAtdXIgc2NyZWVuLm9yaWcvRkFRIHNjcmVl
bi9GQVEKLS0tIHNjcmVlbi5vcmlnL0ZBUQkyMDIzLTA2LTAxIDE0OjU4OjE3LjIzMzY2NTAxNCAr
MDMwMAorKysgc2NyZWVuL0ZBUQkyMDIyLTAxLTI4IDE3OjA2OjAyLjY3NDYxMTcwMSArMDMwMApA
QCAtMTkxLDcgKzE5MSw3IEBACiBROiAgIFRoZSAidGFsayIgY29tbWFuZCBkb2VzIG5vdCB3b3Jr
IHdoZW4gU2NyZWVuIGlzIGFjdGl2ZS4KICAKIEE6ICAgVGFsayAgYW5kIHNldmVyYWwgIG90aGVy
IHByb2dyYW1zICByZWx5IG9uIGVudHJpZXMgIGluIHRoZSAgVXRtcC0KLSAgICAgRGF0YWJhc2Ug
ICgvdmFyL3J1bi91dG1wKS4gIE9uIHNvbWUgIHN5c3RlbXMgdGhpcyAgRGF0YWJhc2UgaXMgIHdv
cmxkIAorICAgICBEYXRhYmFzZSAgKC9ldGMvdXRtcCkuICBPbiBzb21lICBzeXN0ZW1zIHRoaXMg
IERhdGFiYXNlIGlzICB3b3JsZCAKICAgICAgd3JpdGFibGUsICBvbiBvdGhlcnMgIGl0IGlzIG5v
dC4gIElmIGl0ICBpcyBub3QsICBzY3JlZW4gbXVzdCAgYmUgCiAgICAgIGluc3RhbGxlZCB3aXRo
IHRoZSBhcHByb3ByaWF0ZSAgcGVybWlzc2lvbnMgKHVzZXIgb3IgZ3JvdXAgcy1iaXQpCiAgICAg
IGp1c3QgbGlrZSBhbnkgIHByb2dyYW0gdGhhdCB1c2VzICBQVFlzIChybG9naW4sIHh0ZXJtLCAu
Li4pLiBXaGVuCmRpZmYgLXVyIHNjcmVlbi5vcmlnL2ZpbGVpby5jIHNjcmVlbi9maWxlaW8uYwot
LS0gc2NyZWVuLm9yaWcvZmlsZWlvLmMJMjAyMy0wNi0wMSAxNDo1ODoxNy4yNDA2NjUwMzAgKzAz
MDAKKysrIHNjcmVlbi9maWxlaW8uYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY4MjYxMTg5OSArMDMw
MApAQCAtNDIsMTA5ICs0MiwxMDggQEAKIGV4dGVybiBzdHJ1Y3QgZGlzcGxheSAqZGlzcGxheSwg
KmRpc3BsYXlzOwogZXh0ZXJuIHN0cnVjdCB3aW4gKmZvcmU7CiBleHRlcm4gc3RydWN0IGxheWVy
ICpmbGF5ZXI7Ci1leHRlcm4gaW50IFNlcnZlclNvY2tldDsKLWV4dGVybiBpbnQgcmVhbF91aWQs
IGVmZl91aWQ7Ci1leHRlcm4gaW50IHJlYWxfZ2lkLCBlZmZfZ2lkOwotZXh0ZXJuIGNoYXIgKmV4
dHJhX2luY2FwLCAqZXh0cmFfb3V0Y2FwOwotZXh0ZXJuIGNoYXIgKmhvbWUsICpSY0ZpbGVOYW1l
OwotZXh0ZXJuIGNoYXIgU29ja1BhdGhbXSwgKlNvY2tOYW1lOworZXh0ZXJuIGludCAgICBTZXJ2
ZXJTb2NrZXQ7CitleHRlcm4gaW50ICAgIHJlYWxfdWlkLCBlZmZfdWlkOworZXh0ZXJuIGludCAg
ICByZWFsX2dpZCwgZWZmX2dpZDsKK2V4dGVybiBjaGFyICAqZXh0cmFfaW5jYXAsICpleHRyYV9v
dXRjYXA7CitleHRlcm4gY2hhciAgKmhvbWUsICpSY0ZpbGVOYW1lOworZXh0ZXJuIGNoYXIgICBT
b2NrUGF0aFtdLCAqU29ja05hbWU7CiAjaWZkZWYgQ09QWV9QQVNURQotZXh0ZXJuIGNoYXIgKkJ1
ZmZlckZpbGU7CitleHRlcm4gY2hhciAgKkJ1ZmZlckZpbGU7CiAjZW5kaWYKLWV4dGVybiBpbnQg
aGFyZGNvcHlfYXBwZW5kOwotZXh0ZXJuIGNoYXIgKmhhcmRjb3B5ZGlyOwotCi1zdGF0aWMgY2hh
ciAqQ2F0RXh0cmEgX19QKChjaGFyICosIGNoYXIgKikpOwotc3RhdGljIGNoYXIgKmZpbmRyY2Zp
bGUgX19QKChjaGFyICopKTsKK2V4dGVybiBpbnQgICAgaGFyZGNvcHlfYXBwZW5kOworZXh0ZXJu
IGNoYXIgICpoYXJkY29weWRpcjsKIAorc3RhdGljIGNoYXIgICpDYXRFeHRyYSBfX1AoKGNoYXIg
KiwgY2hhciAqKSk7CitzdGF0aWMgY2hhciAgKmZpbmRyY2ZpbGUgX19QKChjaGFyICopKTsKIAog
Y2hhciAqcmNfbmFtZSA9ICIiOwogaW50IHJjX3JlY3Vyc2lvbiA9IDA7CiAKLXN0YXRpYyBjaGFy
ICogQ2F0RXh0cmEocmVnaXN0ZXIgY2hhciAqc3RyMSwgcmVnaXN0ZXIgY2hhciAqc3RyMikgewot
ICByZWdpc3RlciBjaGFyICpjcDsKLSAgcmVnaXN0ZXIgaW50IGxlbjEsIGxlbjIsIGFkZF9jb2xv
bjsKLQotICBsZW4xID0gc3RybGVuKHN0cjEpOwotICBpZiAobGVuMSA9PSAwKQotICAgIHJldHVy
biBzdHIyOwotICBhZGRfY29sb24gPSAoc3RyMVtsZW4xIC0gMV0gIT0gJzonKTsKLSAgaWYgKHN0
cjIpIHsKLSAgICBsZW4yID0gc3RybGVuKHN0cjIpOwotICAgIGlmICgoY3AgPSByZWFsbG9jKHN0
cjIsICh1bnNpZ25lZCkgbGVuMSArIGxlbjIgKyBhZGRfY29sb24gKyAxKSkgPT0gTlVMTCkKLSAg
ICAgIFBhbmljKDAsICIlcyIsIHN0cm5vbWVtKTsKLSAgICBiY29weShjcCwgY3AgKyBsZW4xICsg
YWRkX2NvbG9uLCBsZW4yICsgMSk7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgaWYgKChjcCA9IG1hbGxv
YygodW5zaWduZWQpIGxlbjEgKyBhZGRfY29sb24gKyAxKSkgPT0gTlVMTCkKLSAgICAgIFBhbmlj
KDAsICIlcyIsIHN0cm5vbWVtKTsKLSAgICBjcFtsZW4xICsgYWRkX2NvbG9uXSA9ICdcMCc7Ci0g
IH0KLSAgYmNvcHkoc3RyMSwgY3AsIGxlbjEpOwotICBpZiAoYWRkX2NvbG9uKQotICAgIGNwW2xl
bjFdID0gJzonOwotICByZXR1cm4gY3A7Ci19Ci0KLXN0YXRpYyBjaGFyICpmaW5kcmNmaWxlKGNo
YXIgKnJjZmlsZSkgewotICBjaGFyIGJ1ZlsyNTZdOwotICBjaGFyICpwOwotCi0gIC8qIFRpbGRl
IHByZWZpeCBzdXBwb3J0IGNvdXJ0ZXN5IDxoZXNzb0Bwb29sLm1hdGgudHUtYmVybGluLmRlPiwK
LSAgICogdGFrZW4gZnJvbSBhIERlYmlhbiBwYXRjaC4gKi8KLSAgaWYgKHJjZmlsZSAmJiAqcmNm
aWxlID09ICd+JykgewotICAgIHN0YXRpYyBjaGFyIHJjZmlsZW5hbWVfdGlsZGVfZXhwW01BWFBB
VEhMRU4rMV07Ci0gICAgY2hhciAqc2xhc2hfcG9zaXRpb24gPSBzdHJjaHIocmNmaWxlLCAnLycp
OwotCi0gICAgaWYgKHNsYXNoX3Bvc2l0aW9uID09IHJjZmlsZSsxKSB7Ci0gICAgICBjaGFyICpo
b21lID0gZ2V0ZW52KCJIT01FIik7Ci0gICAgICBpZiAoIWhvbWUpIHsKLSAgICAgICAgTXNnKDAs
ICIlczogc291cmNlOiB0aWxkZSBleHBhbnNpb24gZmFpbGVkIiwgcmNfbmFtZSk7Ci0gICAgICAg
IHJldHVybiBOVUxMOwotICAgICAgfQotICAgICAgc25wcmludGYocmNmaWxlbmFtZV90aWxkZV9l
eHAsIE1BWFBBVEhMRU4sICIlcy8lcyIsIGhvbWUsIHJjZmlsZSsyKTsKLSAgICB9Ci0gICAgZWxz
ZSBpZiAoc2xhc2hfcG9zaXRpb24pIHsKLSAgICAgIHN0cnVjdCBwYXNzd2QgKnA7Ci0gICAgICAq
c2xhc2hfcG9zaXRpb24gPSAwOwotICAgICAgcCA9IGdldHB3bmFtKHJjZmlsZSsxKTsKLSAgICAg
IGlmICghcCl7Ci0gICAgICAgIE1zZygwLCAiJXM6IHNvdXJjZTogdGlsZGUgZXhwYW5zaW9uIGZh
aWxlZCBmb3IgdXNlciAlcyIsIHJjX25hbWUsIHJjZmlsZSsxKTsKLSAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgICB9Ci0gICAgICBzbnByaW50ZihyY2ZpbGVuYW1lX3RpbGRlX2V4cCwgTUFYUEFU
SExFTiwgIiVzLyVzIiwgcC0+cHdfZGlyLCBzbGFzaF9wb3NpdGlvbisxKTsKLSAgICB9Ci0gICAg
ZWxzZSB7Ci0gICAgICBNc2coMCwgIiVzOiBzb3VyY2U6IGlsbGVnYWwgdGlsZGUgZXhwcmVzc2lv
bi4iLCByY19uYW1lKTsKLSAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByY2ZpbGUgPSBy
Y2ZpbGVuYW1lX3RpbGRlX2V4cDsKLSAgfQotCi0gIGlmIChyY2ZpbGUpIHsKLSAgICBjaGFyICpy
Y2VuZCA9IHJpbmRleChyY19uYW1lLCAnLycpOwotICAgIGlmICgqcmNmaWxlICE9ICcvJyAmJiBy
Y2VuZCAmJiAocmNlbmQgLSByY19uYW1lKSArIHN0cmxlbihyY2ZpbGUpICsgMiA8IHNpemVvZihi
dWYpKSB7Ci0gICAgICBzdHJuY3B5KGJ1ZiwgcmNfbmFtZSwgcmNlbmQgLSByY19uYW1lICsgMSk7
Ci0gICAgICBzdHJjcHkoYnVmICsgKHJjZW5kIC0gcmNfbmFtZSkgKyAxLCByY2ZpbGUpOwotICAg
ICAgaWYgKGFjY2VzcyhidWYsIFJfT0spID09IDApCi0gICAgICAgIHJldHVybiBTYXZlU3RyKGJ1
Zik7Ci0gICAgfQotICAgIGRlYnVnMSgiZmluZHJjZmlsZTogeW91IHNwZWNpZmllZCAnJXMnXG4i
LCByY2ZpbGUpOwotICAgIHJldHVybiBTYXZlU3RyKHJjZmlsZSk7Ci0gIH0KLQotICBkZWJ1Zygi
ZmluZHJjZmlsZTogeW91IHNwZWNpZmllZCBub3RoaW5nLi4uXG4iKTsKLSAgaWYgKChwID0gZ2V0
ZW52KCJTQ1JFRU5SQyIpKSAhPSBOVUxMICYmICpwICE9ICdcMCcpIHsKLSAgICBkZWJ1ZzEoIiAg
JFNDUkVFTlJDIGhhczogJyVzJ1xuIiwgcCk7Ci0gICAgcmV0dXJuIFNhdmVTdHIocCk7Ci0gIH0K
LSAgZWxzZSB7Ci0gICAgZGVidWcoIiAgLi4ubm90aGluZyBpbiAkU0NSRUVOUkMsIGRlZmF1bHRp
bmcgJEhPTUUvLnNjcmVlbnJjXG4iKTsKLSAgICBpZiAoc3RybGVuKGhvbWUpID4gc2l6ZW9mKGJ1
ZikgLSAxMikKLSAgICAgIFBhbmljKDAsICJSYzogaG9tZSB0b28gbGFyZ2UiKTsKLSAgICBzcHJp
bnRmKGJ1ZiwgIiVzLy5zY3JlZW5yYyIsIGhvbWUpOwotICAgIHJldHVybiBTYXZlU3RyKGJ1Zik7
Ci0gIH0KK3N0YXRpYyBjaGFyICoKK0NhdEV4dHJhKHJlZ2lzdGVyIGNoYXIgKnN0cjEsIHJlZ2lz
dGVyIGNoYXIgKnN0cjIpCit7CisJcmVnaXN0ZXIgY2hhciAqY3A7CisJcmVnaXN0ZXIgaW50IGxl
bjEsIGxlbjIsIGFkZF9jb2xvbjsKKworCWxlbjEgPSBzdHJsZW4oc3RyMSk7CisJaWYgKGxlbjEg
PT0gMCkKKwkJcmV0dXJuIHN0cjI7CisJYWRkX2NvbG9uID0gKHN0cjFbbGVuMSAtIDFdICE9ICc6
Jyk7CisJaWYgKHN0cjIpIHsKKwkJbGVuMiA9IHN0cmxlbihzdHIyKTsKKwkJaWYgKChjcCA9IHJl
YWxsb2Moc3RyMiwgKHVuc2lnbmVkKWxlbjEgKyBsZW4yICsgYWRkX2NvbG9uICsgMSkpID09IE5V
TEwpCisJCQlQYW5pYygwLCAiJXMiLCBzdHJub21lbSk7CisJCWJjb3B5KGNwLCBjcCArIGxlbjEg
KyBhZGRfY29sb24sIGxlbjIgKyAxKTsKKwl9IGVsc2UgeworCQlpZiAoKGNwID0gbWFsbG9jKCh1
bnNpZ25lZClsZW4xICsgYWRkX2NvbG9uICsgMSkpID09IE5VTEwpCisJCQlQYW5pYygwLCAiJXMi
LCBzdHJub21lbSk7CisJCWNwW2xlbjEgKyBhZGRfY29sb25dID0gJ1wwJzsKKwl9CisJYmNvcHko
c3RyMSwgY3AsIGxlbjEpOworCWlmIChhZGRfY29sb24pCisJCWNwW2xlbjFdID0gJzonOworCXJl
dHVybiBjcDsKK30KKworc3RhdGljIGNoYXIgKgorZmluZHJjZmlsZShjaGFyICpyY2ZpbGUpCit7
CisJY2hhciBidWZbMjU2XTsKKwljaGFyICpwOworCisJLyogVGlsZGUgcHJlZml4IHN1cHBvcnQg
Y291cnRlc3kgPGhlc3NvQHBvb2wubWF0aC50dS1iZXJsaW4uZGU+LAorCSAqIHRha2VuIGZyb20g
YSBEZWJpYW4gcGF0Y2guICovCisJaWYgKHJjZmlsZSAmJiAqcmNmaWxlID09ICd+JykgeworCQlz
dGF0aWMgY2hhciByY2ZpbGVuYW1lX3RpbGRlX2V4cFtNQVhQQVRITEVOICsgMV07CisJCWNoYXIg
KnNsYXNoX3Bvc2l0aW9uID0gc3RyY2hyKHJjZmlsZSwgJy8nKTsKKworCQlpZiAoc2xhc2hfcG9z
aXRpb24gPT0gcmNmaWxlICsgMSkgeworCQkJY2hhciAqaG9tZSA9IGdldGVudigiSE9NRSIpOwor
CQkJaWYgKCFob21lKSB7CisJCQkJTXNnKDAsICIlczogc291cmNlOiB0aWxkZSBleHBhbnNpb24g
ZmFpbGVkIiwgcmNfbmFtZSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlzbnByaW50Zihy
Y2ZpbGVuYW1lX3RpbGRlX2V4cCwgTUFYUEFUSExFTiwgIiVzLyVzIiwgaG9tZSwgcmNmaWxlICsg
Mik7CisJCX0gZWxzZSBpZiAoc2xhc2hfcG9zaXRpb24pIHsKKwkJCXN0cnVjdCBwYXNzd2QgKnA7
CisJCQkqc2xhc2hfcG9zaXRpb24gPSAwOworCQkJcCA9IGdldHB3bmFtKHJjZmlsZSArIDEpOwor
CQkJaWYgKCFwKSB7CisJCQkJTXNnKDAsICIlczogc291cmNlOiB0aWxkZSBleHBhbnNpb24gZmFp
bGVkIGZvciB1c2VyICVzIiwgcmNfbmFtZSwgcmNmaWxlICsgMSk7CisJCQkJcmV0dXJuIE5VTEw7
CisJCQl9CisJCQlzbnByaW50ZihyY2ZpbGVuYW1lX3RpbGRlX2V4cCwgTUFYUEFUSExFTiwgIiVz
LyVzIiwgcC0+cHdfZGlyLCBzbGFzaF9wb3NpdGlvbiArIDEpOworCQl9IGVsc2UgeworCQkJTXNn
KDAsICIlczogc291cmNlOiBpbGxlZ2FsIHRpbGRlIGV4cHJlc3Npb24uIiwgcmNfbmFtZSk7CisJ
CQlyZXR1cm4gTlVMTDsKKwkJfQorCQlyY2ZpbGUgPSByY2ZpbGVuYW1lX3RpbGRlX2V4cDsKKwl9
CisKKwlpZiAocmNmaWxlKSB7CisJCWNoYXIgKnJjZW5kID0gcmluZGV4KHJjX25hbWUsICcvJyk7
CisJCWlmICgqcmNmaWxlICE9ICcvJyAmJiByY2VuZCAmJiAocmNlbmQgLSByY19uYW1lKSArIHN0
cmxlbihyY2ZpbGUpICsgMiA8IHNpemVvZihidWYpKSB7CisJCQlzdHJuY3B5KGJ1ZiwgcmNfbmFt
ZSwgcmNlbmQgLSByY19uYW1lICsgMSk7CisJCQlzdHJjcHkoYnVmICsgKHJjZW5kIC0gcmNfbmFt
ZSkgKyAxLCByY2ZpbGUpOworCQkJaWYgKGFjY2VzcyhidWYsIFJfT0spID09IDApCisJCQkJcmV0
dXJuIFNhdmVTdHIoYnVmKTsKKwkJfQorCQlkZWJ1ZzEoImZpbmRyY2ZpbGU6IHlvdSBzcGVjaWZp
ZWQgJyVzJ1xuIiwgcmNmaWxlKTsKKwkJcmV0dXJuIFNhdmVTdHIocmNmaWxlKTsKKwl9CisKKwlk
ZWJ1ZygiZmluZHJjZmlsZTogeW91IHNwZWNpZmllZCBub3RoaW5nLi4uXG4iKTsKKwlpZiAoKHAg
PSBnZXRlbnYoIlNDUkVFTlJDIikpICE9IE5VTEwgJiYgKnAgIT0gJ1wwJykgeworCQlkZWJ1ZzEo
IiAgJFNDUkVFTlJDIGhhczogJyVzJ1xuIiwgcCk7CisJCXJldHVybiBTYXZlU3RyKHApOworCX0g
ZWxzZSB7CisJCWRlYnVnKCIgIC4uLm5vdGhpbmcgaW4gJFNDUkVFTlJDLCBkZWZhdWx0aW5nICRI
T01FLy5zY3JlZW5yY1xuIik7CisJCWlmIChzdHJsZW4oaG9tZSkgPiBzaXplb2YoYnVmKSAtIDEy
KQorCQkJUGFuaWMoMCwgIlJjOiBob21lIHRvbyBsYXJnZSIpOworCQlzcHJpbnRmKGJ1ZiwgIiVz
Ly5zY3JlZW5yYyIsIGhvbWUpOworCQlyZXR1cm4gU2F2ZVN0cihidWYpOworCX0KIH0KIAogLyoK
QEAgLTE1Miw2MzAgKzE1MSw2MzggQEAKICAqIDEpIHJjZmlsZW5hbWUgPSAiL2V0Yy9zY3JlZW5y
YyIKICAqIDIpIHJjZmlsZW5hbWUgPSBSY0ZpbGVOYW1lCiAgKi8KLWludCBTdGFydFJjKGNoYXIg
KnJjZmlsZW5hbWUsIGludCBub3BhbmljKSB7Ci0gIHJlZ2lzdGVyIGludCBhcmdjLCBsZW47Ci0g
IHJlZ2lzdGVyIGNoYXIgKnAsICpjcDsKLSAgY2hhciBidWZbMjA0OF07Ci0gIGNoYXIgKmFyZ3Nb
TUFYQVJHU107Ci0gIGludCBhcmdsW01BWEFSR1NdOwotICBGSUxFICpmcDsKLSAgY2hhciAqb2xk
cmNfbmFtZSA9IHJjX25hbWU7Ci0KLSAgLyogYWx3YXlzIGZpeCB0ZXJtY2FwL2luZm8gY2FwYWJp
bGl0aWVzICovCi0gIGV4dHJhX2luY2FwID0gQ2F0RXh0cmEoIlRGIiwgZXh0cmFfaW5jYXApOwot
Ci0gIC8qIFNwZWNpYWwgc2V0dGluZ3MgZm9yIHZ0MTAwIGFuZCBvdGhlcnMgKi8KLSAgaWYgKGRp
c3BsYXkgJiYgKCFzdHJuY21wKERfdGVybW5hbWUsICJ2dCIsIDIpIHx8ICFzdHJuY21wKERfdGVy
bW5hbWUsICJ4dGVybSIsIDUpKSkKLSAgICBleHRyYV9pbmNhcCA9IENhdEV4dHJhKCJ4bjpmMD1c
MDMzT3A6ZjE9XDAzM09xOmYyPVwwMzNPcjpmMz1cMDMzT3M6ZjQ9XDAzM090OmY1PVwwMzNPdTpm
Nj1cMDMzT3Y6Zjc9XDAzM093OmY4PVwwMzNPeDpmOT1cMDMzT3k6Zi49XDAzM09uOmYsPVwwMzNP
bDpmZT1cMDMzT006Zis9XDAzM09rOmYtPVwwMzNPbTpmKj1cMDMzT2o6Zi89XDAzM09vOmZxPVww
MzNPWCIsIGV4dHJhX2luY2FwKTsKLQotICByY19uYW1lID0gZmluZHJjZmlsZShyY2ZpbGVuYW1l
KTsKLSAgaWYgKHJjX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBzZWNmb3BlbihyY19uYW1lLCAiciIp
KSA9PSBOVUxMKSB7Ci0gICAgY29uc3QgY2hhciAqcmNfbm9ubnVsbCA9IHJjX25hbWUgPyByY19u
YW1lIDogcmNmaWxlbmFtZTsKLSAgICBpZiAoIXJjX3JlY3Vyc2lvbiAmJiBSY0ZpbGVOYW1lICYm
ICFzdHJjbXAoUmNGaWxlTmFtZSwgcmNfbm9ubnVsbCkpIHsKLSAgICAgIC8qCi0gICAgICAgKiBV
c2VyIGV4cGxpY2l0bHkgZ2F2ZSB1cyB0aGF0IG5hbWUsCi0gICAgICAgKiB0aGlzIGlzIHRoZSBv
bmx5IGNhc2UsIHdoZXJlIHdlIGdldCBhbmdyeSwgaWYgd2UgY2FuJ3QgcmVhZAotICAgICAgICog
dGhlIGZpbGUuCi0gICAgICAgKi8KLSAgICAgIGRlYnVnMygiU3RhcnRSYzogJyVzJywnJXMnLCAn
JXMnXG4iLCBSY0ZpbGVOYW1lLCByY19uYW1lID8gcmNfbmFtZSA6ICIobnVsbCkiLCByY2ZpbGVu
YW1lKTsKLSAgICAgIGlmICghbm9wYW5pYykgUGFuaWMoMCwgIlVuYWJsZSB0byBvcGVuIFwiJXNc
Ii4iLCByY19ub25udWxsKTsKLSAgICAgIC8qIHBvc3NpYmx5IE5PVFJFQUNIRUQgKi8KLSAgICB9
Ci0KLSAgICBkZWJ1ZzEoIlN0YXJ0UmM6ICclcycgbm8gZ29vZC4gaWdub3JlZFxuIiwgcmNfbm9u
bnVsbCk7Ci0gICAgaWYgKHJjX25hbWUpCi0gICAgICBGcmVlKHJjX25hbWUpOwotICAgIHJjX25h
bWUgPSBvbGRyY19uYW1lOwotICAgIHJldHVybiAxOwotICB9Ci0gIHdoaWxlIChmZ2V0cyhidWYs
IHNpemVvZiBidWYsIGZwKSAhPSBOVUxMKSB7Ci0gICAgaWYgKChwID0gcmluZGV4KGJ1ZiwgJ1xu
JykpICE9IE5VTEwpCi0gICAgICAqcCA9ICdcMCc7Ci0KLSAgICBpZiAoKGFyZ2MgPSBQYXJzZShi
dWYsIHNpemVvZiBidWYsIGFyZ3MsIGFyZ2wpKSA9PSAwKQotICAgICAgY29udGludWU7Ci0KLSAg
ICBpZiAoc3RyY21wKGFyZ3NbMF0sICJlY2hvIikgPT0gMCkgewotICAgICAgaWYgKCFkaXNwbGF5
KQotICAgICAgICBjb250aW51ZTsKLSAgICAgIGlmIChhcmdjIDwgMiB8fCAoYXJnYyA9PSAzICYm
IHN0cmNtcChhcmdzWzFdLCAiLW4iKSkgfHwgYXJnYyA+IDMpIHsKLSAgICAgICAgTXNnKDAsICIl
czogJ2VjaG8gWy1uXSBcInN0cmluZ1wiJyBleHBlY3RlZC4iLCByY19uYW1lKTsKLSAgICAgICAg
Y29udGludWU7Ci0gICAgICB9Ci0gICAgICBBZGRTdHIoYXJnc1thcmdjIC0gMV0pOwotICAgICAg
aWYgKGFyZ2MgIT0gMykgewotICAgICAgICBBZGRTdHIoIlxyXG4iKTsKLSAgICAgICAgRmx1c2go
MCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZWxzZSBpZiAoc3RyY21wKGFyZ3NbMF0sICJzbGVl
cCIpID09IDApIHsKLSAgICAgIGlmICghZGlzcGxheSkKLSAgICAgICAgY29udGludWU7Ci0gICAg
ICBkZWJ1Zygic2xlZWVlZWVlcFxuIik7Ci0gICAgICBpZiAoYXJnYyAhPSAyKSB7Ci0gICAgICAg
IE1zZygwLCAiJXM6IHNsZWVwOiBvbmUgbnVtZXJpYyBhcmd1bWVudCBleHBlY3RlZC4iLCByY19u
YW1lKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBEaXNwbGF5U2xlZXAxMDAw
KDEwMDAgKiBhdG9pKGFyZ3NbMV0pLCAxKTsKLSAgICB9CitpbnQKK1N0YXJ0UmMoY2hhciAqcmNm
aWxlbmFtZSwgaW50IG5vcGFuaWMpCit7CisJcmVnaXN0ZXIgaW50IGFyZ2MsIGxlbjsKKwlyZWdp
c3RlciBjaGFyICpwLCAqY3A7CisJY2hhciBidWZbMjA0OF07CisJY2hhciAqYXJnc1tNQVhBUkdT
XTsKKwlpbnQgYXJnbFtNQVhBUkdTXTsKKwlGSUxFICpmcDsKKwljaGFyICpvbGRyY19uYW1lID0g
cmNfbmFtZTsKKworCS8qIGFsd2F5cyBmaXggdGVybWNhcC9pbmZvIGNhcGFiaWxpdGllcyAqLwor
CWV4dHJhX2luY2FwID0gQ2F0RXh0cmEoIlRGIiwgZXh0cmFfaW5jYXApOworCisJLyogU3BlY2lh
bCBzZXR0aW5ncyBmb3IgdnQxMDAgYW5kIG90aGVycyAqLworCWlmIChkaXNwbGF5ICYmICghc3Ry
bmNtcChEX3Rlcm1uYW1lLCAidnQiLCAyKSB8fCAhc3RybmNtcChEX3Rlcm1uYW1lLCAieHRlcm0i
LCA1KSkpCisJCWV4dHJhX2luY2FwID0gQ2F0RXh0cmEoInhuOmYwPVwwMzNPcDpmMT1cMDMzT3E6
ZjI9XDAzM09yOmYzPVwwMzNPczpmND1cMDMzT3Q6ZjU9XDAzM091OmY2PVwwMzNPdjpmNz1cMDMz
T3c6Zjg9XDAzM094OmY5PVwwMzNPeTpmLj1cMDMzT246Ziw9XDAzM09sOmZlPVwwMzNPTTpmKz1c
MDMzT2s6Zi09XDAzM09tOmYqPVwwMzNPajpmLz1cMDMzT286ZnE9XDAzM09YIiwgZXh0cmFfaW5j
YXApOworCisJcmNfbmFtZSA9IGZpbmRyY2ZpbGUocmNmaWxlbmFtZSk7CisJaWYgKHJjX25hbWUg
PT0gTlVMTCB8fCAoZnAgPSBzZWNmb3BlbihyY19uYW1lLCAiciIpKSA9PSBOVUxMKSB7CisJCWNv
bnN0IGNoYXIgKnJjX25vbm51bGwgPSByY19uYW1lID8gcmNfbmFtZSA6IHJjZmlsZW5hbWU7CisJ
CWlmICghcmNfcmVjdXJzaW9uICYmIFJjRmlsZU5hbWUgJiYgIXN0cmNtcChSY0ZpbGVOYW1lLCBy
Y19ub25udWxsKSkgeworCQkvKgorCQkgKiBVc2VyIGV4cGxpY2l0bHkgZ2F2ZSB1cyB0aGF0IG5h
bWUsCisJCSAqIHRoaXMgaXMgdGhlIG9ubHkgY2FzZSwgd2hlcmUgd2UgZ2V0IGFuZ3J5LCBpZiB3
ZSBjYW4ndCByZWFkCisJCSAqIHRoZSBmaWxlLgorCQkgKi8KKwkJCWRlYnVnMygiU3RhcnRSYzog
JyVzJywnJXMnLCAnJXMnXG4iLCBSY0ZpbGVOYW1lLCByY19uYW1lID8gcmNfbmFtZSA6ICIobnVs
bCkiLCByY2ZpbGVuYW1lKTsKKwkJCWlmICghbm9wYW5pYykKKwkJCQlQYW5pYygwLCAiVW5hYmxl
IHRvIG9wZW4gXCIlc1wiLiIsIHJjX25vbm51bGwpOworCQkJCS8qIHBvc3NpYmx5IE5PVFJFQUNI
RUQgKi8KKwkJfQorCisJCWRlYnVnMSgiU3RhcnRSYzogJyVzJyBubyBnb29kLiBpZ25vcmVkXG4i
LCByY19ub25udWxsKTsKKwkJaWYgKHJjX25hbWUpCisJCQlGcmVlKHJjX25hbWUpOworCQlyY19u
YW1lID0gb2xkcmNfbmFtZTsKKwkJcmV0dXJuIDE7CisJfQorCXdoaWxlIChmZ2V0cyhidWYsIHNp
emVvZiBidWYsIGZwKSAhPSBOVUxMKSB7CisJCWlmICgocCA9IHJpbmRleChidWYsICdcbicpKSAh
PSBOVUxMKQorCQkJKnAgPSAnXDAnOworCisJCWlmICgoYXJnYyA9IFBhcnNlKGJ1Ziwgc2l6ZW9m
IGJ1ZiwgYXJncywgYXJnbCkpID09IDApCisJCQljb250aW51ZTsKKworCQlpZiAoc3RyY21wKGFy
Z3NbMF0sICJlY2hvIikgPT0gMCkgeworCQkJaWYgKCFkaXNwbGF5KQorCQkJCWNvbnRpbnVlOwor
CQkJaWYgKGFyZ2MgPCAyIHx8IChhcmdjID09IDMgJiYgc3RyY21wKGFyZ3NbMV0sICItbiIpKSB8
fCBhcmdjID4gMykgeworCQkJCU1zZygwLCAiJXM6ICdlY2hvIFstbl0gXCJzdHJpbmdcIicgZXhw
ZWN0ZWQuIiwgcmNfbmFtZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlBZGRTdHIoYXJnc1th
cmdjIC0gMV0pOworCQkJaWYgKGFyZ2MgIT0gMykgeworCQkJCUFkZFN0cigiXHJcbiIpOworCQkJ
CUZsdXNoKDApOworCQkJfQorCQl9IGVsc2UgaWYgKHN0cmNtcChhcmdzWzBdLCAic2xlZXAiKSA9
PSAwKSB7CisJCQlpZiAoIWRpc3BsYXkpCisJCQkJY29udGludWU7CisJCQlkZWJ1Zygic2xlZWVl
ZWVlcFxuIik7CisJCQlpZiAoYXJnYyAhPSAyKSB7CisJCQkJTXNnKDAsICIlczogc2xlZXA6IG9u
ZSBudW1lcmljIGFyZ3VtZW50IGV4cGVjdGVkLiIsIHJjX25hbWUpOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQkJRGlzcGxheVNsZWVwMTAwMCgxMDAwICogYXRvaShhcmdzWzFdKSwgMSk7CisJCX0K
ICNpZmRlZiBURVJNSU5GTwogICAgIGVsc2UgaWYgKCFzdHJjbXAoYXJnc1swXSwgInRlcm1jYXBp
bmZvIikgfHwgIXN0cmNtcChhcmdzWzBdLCAidGVybWluZm8iKSkgewogI2Vsc2UKLSAgICBlbHNl
IGlmICghc3RyY21wKGFyZ3NbMF0sICJ0ZXJtY2FwaW5mbyIpIHx8ICFzdHJjbXAoYXJnc1swXSwg
InRlcm1jYXAiKSkgeworCQllbHNlIGlmICghc3RyY21wKGFyZ3NbMF0sICJ0ZXJtY2FwaW5mbyIp
IHx8ICFzdHJjbXAoYXJnc1swXSwgInRlcm1jYXAiKSkgewogI2VuZGlmCi0gICAgICBpZiAoIWRp
c3BsYXkpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgaWYgKGFyZ2MgPCAzIHx8IGFyZ2MgPiA0
KSB7Ci0gICAgICAgIE1zZygwLCAiJXM6ICVzOiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50
cy4iLCByY19uYW1lLCBhcmdzWzBdKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAg
ICAgIGZvciAocCA9IGFyZ3NbMV07IHAgJiYgKnA7IHAgPSBjcCkgewotICAgICAgICBpZiAoKGNw
ID0gaW5kZXgocCwgJ3wnKSkgIT0gMCkKLSAgICAgICAgICAqY3ArKyA9ICdcMCc7Ci0gICAgICAg
IGxlbiA9IHN0cmxlbihwKTsKLSAgICAgICAgaWYgKHBbbGVuIC0gMV0gPT0gJyonKSB7Ci0gICAg
ICAgICAgaWYgKCEobGVuIC0gMSkgfHwgIXN0cm5jbXAocCwgRF90ZXJtbmFtZSwgbGVuIC0gMSkp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICghc3RyY21w
KHAsIERfdGVybW5hbWUpKQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgaWYgKCEo
cCAmJiAqcCkpCi0gICAgICAgIGNvbnRpbnVlOwotICAgICAgZXh0cmFfaW5jYXAgPSBDYXRFeHRy
YShhcmdzWzJdLCBleHRyYV9pbmNhcCk7Ci0gICAgICBpZiAoYXJnYyA9PSA0KQotICAgICAgICBl
eHRyYV9vdXRjYXAgPSBDYXRFeHRyYShhcmdzWzNdLCBleHRyYV9vdXRjYXApOwotICAgIH0KLSAg
ICBlbHNlIGlmICghc3RyY21wKGFyZ3NbMF0sICJzb3VyY2UiKSkgewotICAgICAgaWYgKHJjX3Jl
Y3Vyc2lvbiA8PSAxMCkgewotICAgICAgICByY19yZWN1cnNpb24rKzsKLSAgICAgICAgKHZvaWQp
U3RhcnRSYyhhcmdzWzFdLCAwKTsKLSAgICAgICAgcmNfcmVjdXJzaW9uLS07Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0gIGZjbG9zZShmcCk7Ci0gIEZyZWUocmNfbmFtZSk7Ci0gIHJjX25hbWUgPSBv
bGRyY19uYW1lOwotICByZXR1cm4gMDsKLX0KLQotdm9pZCBGaW5pc2hSYyhjaGFyICpyY2ZpbGVu
YW1lKSB7Ci0gIGNoYXIgYnVmWzIwNDhdOwotICBGSUxFICpmcDsKLSAgY2hhciAqb2xkcmNfbmFt
ZSA9IHJjX25hbWU7Ci0KLSAgcmNfbmFtZSA9IGZpbmRyY2ZpbGUocmNmaWxlbmFtZSk7Ci0KLSAg
aWYgKHJjX25hbWUgPT0gTlVMTCB8fCAoZnAgPSBzZWNmb3BlbihyY19uYW1lLCAiciIpKSA9PSBO
VUxMKSB7Ci0gICAgY29uc3QgY2hhciAqcmNfbm9ubnVsbCA9IHJjX25hbWUgPyByY19uYW1lIDog
cmNmaWxlbmFtZTsKLSAgICBpZiAocmNfcmVjdXJzaW9uKQotICAgICAgTXNnKGVycm5vLCAiJXM6
IHNvdXJjZSAlcyIsIG9sZHJjX25hbWUsIHJjX25vbm51bGwpOwotICAgIGVsc2UgaWYgKFJjRmls
ZU5hbWUgJiYgIXN0cmNtcChSY0ZpbGVOYW1lLCByY19ub25udWxsKSkgeworCQkJaWYgKCFkaXNw
bGF5KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGFyZ2MgPCAzIHx8IGFyZ2MgPiA0KSB7CisJCQkJ
TXNnKDAsICIlczogJXM6IGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzLiIsIHJjX25hbWUs
IGFyZ3NbMF0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlmb3IgKHAgPSBhcmdzWzFdOyBw
ICYmICpwOyBwID0gY3ApIHsKKwkJCQlpZiAoKGNwID0gaW5kZXgocCwgJ3wnKSkgIT0gMCkKKwkJ
CQkJKmNwKysgPSAnXDAnOworCQkJCWxlbiA9IHN0cmxlbihwKTsKKwkJCQlpZiAocFtsZW4gLSAx
XSA9PSAnKicpIHsKKwkJCQkJaWYgKCEobGVuIC0gMSkgfHwgIXN0cm5jbXAocCwgRF90ZXJtbmFt
ZSwgbGVuIC0gMSkpCisJCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKCFzdHJjbXAocCwgRF90
ZXJtbmFtZSkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCEocCAmJiAqcCkpCisJCQkJY29u
dGludWU7CisJCQlleHRyYV9pbmNhcCA9IENhdEV4dHJhKGFyZ3NbMl0sIGV4dHJhX2luY2FwKTsK
KwkJCWlmIChhcmdjID09IDQpCisJCQkJZXh0cmFfb3V0Y2FwID0gQ2F0RXh0cmEoYXJnc1szXSwg
ZXh0cmFfb3V0Y2FwKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGFyZ3NbMF0sICJzb3VyY2UiKSkg
eworCQkJaWYgKHJjX3JlY3Vyc2lvbiA8PSAxMCkgeworCQkJCXJjX3JlY3Vyc2lvbisrOworCQkJ
CSh2b2lkKVN0YXJ0UmMoYXJnc1sxXSwgMCk7CisJCQkJcmNfcmVjdXJzaW9uLS07CisJCQl9CisJ
CX0KKwl9CisJZmNsb3NlKGZwKTsKKwlGcmVlKHJjX25hbWUpOworCXJjX25hbWUgPSBvbGRyY19u
YW1lOworCXJldHVybiAwOworfQorCit2b2lkCitGaW5pc2hSYyhjaGFyICpyY2ZpbGVuYW1lKQor
eworCWNoYXIgYnVmWzIwNDhdOworCUZJTEUgKmZwOworCWNoYXIgKm9sZHJjX25hbWUgPSByY19u
YW1lOworCisJcmNfbmFtZSA9IGZpbmRyY2ZpbGUocmNmaWxlbmFtZSk7CisKKwlpZiAocmNfbmFt
ZSA9PSBOVUxMIHx8IChmcCA9IHNlY2ZvcGVuKHJjX25hbWUsICJyIikpID09IE5VTEwpIHsKKwkJ
Y29uc3QgY2hhciAqcmNfbm9ubnVsbCA9IHJjX25hbWUgPyByY19uYW1lIDogcmNmaWxlbmFtZTsK
KwkJaWYgKHJjX3JlY3Vyc2lvbikKKwkJCU1zZyhlcnJubywgIiVzOiBzb3VyY2UgJXMiLCBvbGRy
Y19uYW1lLCByY19ub25udWxsKTsKKwkJZWxzZSBpZiAoUmNGaWxlTmFtZSAmJiAhc3RyY21wKFJj
RmlsZU5hbWUsIHJjX25vbm51bGwpKSB7CiAgICAgICAvKgogICAgICAgICogVXNlciBleHBsaWNp
dGx5IGdhdmUgdXMgdGhhdCBuYW1lLAogICAgICAgICogdGhpcyBpcyB0aGUgb25seSBjYXNlLCB3
aGVyZSB3ZSBnZXQgYW5ncnksIGlmIHdlIGNhbid0IHJlYWQKICAgICAgICAqIHRoZSBmaWxlLgog
ICAgICAgICovCi0gICAgICAgZGVidWczKCJGaW5pc2hSYzonJXMnLCclcycsJyVzJ1xuIiwgUmNG
aWxlTmFtZSwgcmNfbmFtZSA/IHJjX25hbWUgOiAiKG51bGwpIiwgcmNmaWxlbmFtZSk7Ci0gICAg
ICAgUGFuaWMoMCwgIlVuYWJsZSB0byBvcGVuIFwiJXNcIi4iLCByY19ub25udWxsKTsKLSAgICAg
ICAvKiBOT1RSRUFDSEVEICovCi0gICAgfQotICAgIGRlYnVnMSgiRmluaXNoUmM6ICclcycgbm8g
Z29vZC4gaWdub3JlZFxuIiwgcmNfbm9ubnVsbCk7Ci0gICAgaWYgKHJjX25hbWUpCi0gICAgICBG
cmVlKHJjX25hbWUpOwotICAgIHJjX25hbWUgPSBvbGRyY19uYW1lOwotICAgIHJldHVybjsKLSAg
fQotCi0gIGRlYnVnKCJmaW5pc2hyYyBpcyBnb2luZy4uLlxuIik7Ci0gIHdoaWxlIChmZ2V0cyhi
dWYsIHNpemVvZiBidWYsIGZwKSAhPSBOVUxMKQotICAgIFJjTGluZShidWYsIHNpemVvZiBidWYp
OwotICAodm9pZCkgZmNsb3NlKGZwKTsKLSAgRnJlZShyY19uYW1lKTsKLSAgcmNfbmFtZSA9IG9s
ZHJjX25hbWU7Ci19Ci0KLXZvaWQgZG9fc291cmNlKGNoYXIgKnJjZmlsZW5hbWUpIHsKLSAgaWYg
KHJjX3JlY3Vyc2lvbiA+IDEwKSB7Ci0gICAgTXNnKDAsICIlczogc291cmNlOiByZWN1cnNpb24g
bGltaXQgcmVhY2hlZCIsIHJjX25hbWUpOwotICAgIHJldHVybjsKLSAgfQotICByY19yZWN1cnNp
b24rKzsKLSAgRmluaXNoUmMocmNmaWxlbmFtZSk7Ci0gIHJjX3JlY3Vyc2lvbi0tOworCQkJZGVi
dWczKCJGaW5pc2hSYzonJXMnLCclcycsJyVzJ1xuIiwgUmNGaWxlTmFtZSwgcmNfbmFtZSA/IHJj
X25hbWUgOiAiKG51bGwpIiwgcmNmaWxlbmFtZSk7CisJCQlQYW5pYygwLCAiVW5hYmxlIHRvIG9w
ZW4gXCIlc1wiLiIsIHJjX25vbm51bGwpOworCQkJLyogTk9UUkVBQ0hFRCAqLworCQl9CisJCWRl
YnVnMSgiRmluaXNoUmM6ICclcycgbm8gZ29vZC4gaWdub3JlZFxuIiwgcmNfbm9ubnVsbCk7CisJ
CWlmIChyY19uYW1lKQorCQkJRnJlZShyY19uYW1lKTsKKwkJcmNfbmFtZSA9IG9sZHJjX25hbWU7
CisJCXJldHVybjsKKwl9CisKKwlkZWJ1ZygiZmluaXNocmMgaXMgZ29pbmcuLi5cbiIpOworCXdo
aWxlIChmZ2V0cyhidWYsIHNpemVvZiBidWYsIGZwKSAhPSBOVUxMKQorCQlSY0xpbmUoYnVmLCBz
aXplb2YgYnVmKTsKKwkodm9pZClmY2xvc2UoZnApOworCUZyZWUocmNfbmFtZSk7CisJcmNfbmFt
ZSA9IG9sZHJjX25hbWU7Cit9CisKK3ZvaWQKK2RvX3NvdXJjZShjaGFyICpyY2ZpbGVuYW1lKQor
eworCWlmIChyY19yZWN1cnNpb24gPiAxMCkgeworCQlNc2coMCwgIiVzOiBzb3VyY2U6IHJlY3Vy
c2lvbiBsaW1pdCByZWFjaGVkIiwgcmNfbmFtZSk7CisJCXJldHVybjsKKwl9CisJcmNfcmVjdXJz
aW9uKys7CisJRmluaXNoUmMocmNmaWxlbmFtZSk7CisJcmNfcmVjdXJzaW9uLS07CiB9CiAKLQog
LyoKICAqIFJ1bm5pbmcgYSBDb21tYW5kIExpbmUgaW4gdGhlIGVudmlyb25tZW50IGRldGVybWlu
ZWQgYnkgdGhlIGRpc3BsYXkuCiAgKiBUaGUgZm9yZSB3aW5kb3cgaXMgdGFrZW4gZnJvbSB0aGUg
ZGlzcGxheSBhcyB3ZWxsIGFzIHRoZSB1c2VyLgogICogVGhpcyBpcyBiYWQgd2hlbiB3ZSBydW4g
ZGV0YWNoZWQuCiAgKi8KLXZvaWQgUmNMaW5lKGNoYXIgKnVidWYsIGludCB1YnVmbCkgewotICBj
aGFyICphcmdzW01BWEFSR1NdOwotICBpbnQgYXJnbFtNQVhBUkdTXTsKK3ZvaWQKK1JjTGluZShj
aGFyICp1YnVmLCBpbnQgdWJ1ZmwpCit7CisJY2hhciAqYXJnc1tNQVhBUkdTXTsKKwlpbnQgYXJn
bFtNQVhBUkdTXTsKICNpZmRlZiBNVUxUSVVTRVIKLSAgZXh0ZXJuIHN0cnVjdCBhY2x1c2VyICpF
ZmZlY3RpdmVBY2xVc2VyOyAgICAgIC8qIGFjbC5jICovCi0gIGV4dGVybiBzdHJ1Y3QgYWNsdXNl
ciAqdXNlcnM7ICAgICAgICAgICAgICAgICAvKiBhY2wuYyAqLworCWV4dGVybiBzdHJ1Y3QgYWNs
dXNlciAqRWZmZWN0aXZlQWNsVXNlcjsgICAgICAvKiBhY2wuYyAqLworCWV4dGVybiBzdHJ1Y3Qg
YWNsdXNlciAqdXNlcnM7ICAgICAgICAgICAgICAgICAvKiBhY2wuYyAqLwogI2VuZGlmCiAKLSAg
aWYgKGRpc3BsYXkpIHsKLSAgICBmb3JlID0gRF9mb3JlOwotICAgIGZsYXllciA9IERfZm9yZWN2
LT5jX2xheWVyOwotICB9Ci0gIGVsc2UKLSAgICBmbGF5ZXIgPSBmb3JlID8gZm9yZS0+d19zYXZl
bGF5ZXIgOiAwOwotICBpZiAoUGFyc2UodWJ1ZiwgdWJ1ZmwsIGFyZ3MsIGFyZ2wpIDw9IDApCi0g
ICAgcmV0dXJuOworCWlmIChkaXNwbGF5KSB7CisJCWZvcmUgPSBEX2ZvcmU7CisJCWZsYXllciA9
IERfZm9yZWN2LT5jX2xheWVyOworCX0gZWxzZQorCQlmbGF5ZXIgPSBmb3JlID8gZm9yZS0+d19z
YXZlbGF5ZXIgOiAwOworCWlmIChQYXJzZSh1YnVmLCB1YnVmbCwgYXJncywgYXJnbCkgPD0gMCkK
KwkJcmV0dXJuOwogCiAjaWZkZWYgTVVMVElVU0VSCi0gIGlmICghZGlzcGxheSkgeworCWlmICgh
ZGlzcGxheSkgewogICAgICAgLyogdGhlIHNlc3Npb24gb3duZXIgZG9lcyBpdCwgd2hlbiB0aGVy
ZSBpcyBubyBkaXNwbGF5IGhlcmUgKi8KLSAgICAgIEVmZmVjdGl2ZUFjbFVzZXIgPSB1c2Vyczsg
ICAgICAgIAotICAgICAgZGVidWcoIlJjTGluZTogV0FSTklORywgbm8gZGlzcGxheSBubyB1c2Vy
ISBTZXNzaW9uIG93bmVyIGV4ZWN1dGVzIGNvbW1hbmRcbiIpOwotICB9CisJCUVmZmVjdGl2ZUFj
bFVzZXIgPSB1c2VyczsKKwkJZGVidWcoIlJjTGluZTogV0FSTklORywgbm8gZGlzcGxheSBubyB1
c2VyISBTZXNzaW9uIG93bmVyIGV4ZWN1dGVzIGNvbW1hbmRcbiIpOworCX0KICNlbmRpZgogCi0g
IERvQ29tbWFuZChhcmdzLCBhcmdsKTsKKwlEb0NvbW1hbmQoYXJncywgYXJnbCk7CiAKICNpZmRl
ZiBNVUxUSVVTRVIKLSAgRWZmZWN0aXZlQWNsVXNlciA9IDA7CisJRWZmZWN0aXZlQWNsVXNlciA9
IDA7CiAjZW5kaWYKIH0KIAogLyogIG5lZWRzIGRpc3BsYXkgZm9yIGNvcHlidWZmZXIgYWNjZXNz
IGFuZCB0ZXJtY2FwIGR1bXBpbmcgICovCi12b2lkIFdyaXRlRmlsZShzdHJ1Y3QgYWNsdXNlciAq
dXNlciwgY2hhciAqZm4sIGludCBkdW1wKSB7Cit2b2lkCitXcml0ZUZpbGUoc3RydWN0IGFjbHVz
ZXIgKnVzZXIsIGNoYXIgKmZuLCBpbnQgZHVtcCkKK3sKICAgLyogZHVtcD09MDoJY3JlYXRlIC50
ZXJtY2FwLAogICAgKiBkdW1wPT0xOgloYXJkY29weSwKICAgICogI2lmZGVmIENPUFlfUEFTVEUK
ICAgICogZHVtcD09MjoJQlVGRkVSRklMRQotICAgKiAjZW5kaWYgQ09QWV9QQVNURSAKKyAgICog
I2VuZGlmIENPUFlfUEFTVEUKICAgICogZHVtcD09MToJc2Nyb2xsYmFjaywKICAgICovCi0gIHJl
Z2lzdGVyIGludCBpLCBqLCBrOwotICByZWdpc3RlciBjaGFyICpwOwotICByZWdpc3RlciBGSUxF
ICpmOwotICBjaGFyIGZuYnVmWzEwMjRdOwotICBjaGFyICptb2RlID0gInciOworCXJlZ2lzdGVy
IGludCBpLCBqLCBrOworCXJlZ2lzdGVyIGNoYXIgKnA7CisJcmVnaXN0ZXIgRklMRSAqZjsKKwlj
aGFyIGZuYnVmWzEwMjRdOworCWNoYXIgKm1vZGUgPSAidyI7CiAKICNpZmRlZiBDT1BZX1BBU1RF
Ci0gIGludCBwdWJsaWMgPSAwOworCWludCBwdWJsaWMgPSAwOwogIyBpZmRlZiBIQVZFX0xTVEFU
Ci0gIHN0cnVjdCBzdGF0IHN0Yiwgc3RiMjsKLSAgaW50IGZkLCBleGlzdHMgPSAwOworCXN0cnVj
dCBzdGF0IHN0Yiwgc3RiMjsKKwlpbnQgZmQsIGV4aXN0cyA9IDA7CiAjIGVuZGlmCiAjZW5kaWYK
IAotICBzd2l0Y2ggKGR1bXApIHsKLSAgICBjYXNlIERVTVBfVEVSTUNBUDoKLSAgICAgIGlmIChm
biA9PSAwKSB7Ci0gICAgICAgIGkgPSBTb2NrTmFtZSAtIFNvY2tQYXRoOwotICAgICAgICBpZiAo
aSA+IChpbnQpc2l6ZW9mKGZuYnVmKSAtIDkpCi0gICAgICAgICAgaSA9IDA7Ci0gICAgICAgIHN0
cm5jcHkoZm5idWYsIFNvY2tQYXRoLCBpKTsKLSAgICAgICAgc3RyY3B5KGZuYnVmICsgaSwgIi50
ZXJtY2FwIik7Ci0gICAgICAgIGZuID0gZm5idWY7Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQot
ICAgIGNhc2UgRFVNUF9IQVJEQ09QWToKLSAgICBjYXNlIERVTVBfU0NST0xMQkFDSzoKLSAgICAg
IGlmIChmbiA9PSAwKSB7Ci0gICAgICAgIGlmIChmb3JlID09IDApCi0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICBpZiAoaGFyZGNvcHlkaXIgJiYgKmhhcmRjb3B5ZGlyICYmIHN0cmxlbihoYXJk
Y29weWRpcikgPCBzaXplb2YoZm5idWYpIC0gMjEpCi0gICAgICAgICAgc3ByaW50ZihmbmJ1Ziwg
IiVzL2hhcmRjb3B5LiVkIiwgaGFyZGNvcHlkaXIsIGZvcmUtPndfbnVtYmVyKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgIHNwcmludGYoZm5idWYsICJoYXJkY29weS4lZCIsIGZvcmUtPndfbnVt
YmVyKTsKLSAgICAgICAgZm4gPSBmbmJ1ZjsKLSAgICAgIH0KLSAgICAgIGlmIChoYXJkY29weV9h
cHBlbmQgJiYgIWFjY2VzcyhmbiwgV19PSykpCi0gICAgICAgIG1vZGUgPSAiYSI7Ci0gICAgICBi
cmVhazsKKwlzd2l0Y2ggKGR1bXApIHsKKwljYXNlIERVTVBfVEVSTUNBUDoKKwkJaWYgKGZuID09
IDApIHsKKwkJCWkgPSBTb2NrTmFtZSAtIFNvY2tQYXRoOworCQkJaWYgKGkgPiAoaW50KXNpemVv
ZihmbmJ1ZikgLSA5KQorCQkJCWkgPSAwOworCQkJc3RybmNweShmbmJ1ZiwgU29ja1BhdGgsIGkp
OworCQkJc3RyY3B5KGZuYnVmICsgaSwgIi50ZXJtY2FwIik7CisJCQlmbiA9IGZuYnVmOworCQl9
CisJCWJyZWFrOworCisJY2FzZSBEVU1QX0hBUkRDT1BZOgorCWNhc2UgRFVNUF9TQ1JPTExCQUNL
OgorCQlpZiAoZm4gPT0gMCkgeworCQkJaWYgKGZvcmUgPT0gMCkKKwkJCQlyZXR1cm47CisJCQlp
ZiAoaGFyZGNvcHlkaXIgJiYgKmhhcmRjb3B5ZGlyICYmIHN0cmxlbihoYXJkY29weWRpcikgPCBz
aXplb2YoZm5idWYpIC0gMjEpCisJCQkJc3ByaW50ZihmbmJ1ZiwgIiVzL2hhcmRjb3B5LiVkIiwg
aGFyZGNvcHlkaXIsIGZvcmUtPndfbnVtYmVyKTsKKwkJCWVsc2UKKwkJCQlzcHJpbnRmKGZuYnVm
LCAiaGFyZGNvcHkuJWQiLCBmb3JlLT53X251bWJlcik7CisJCQlmbiA9IGZuYnVmOworCQl9CisJ
CWlmIChoYXJkY29weV9hcHBlbmQgJiYgIWFjY2VzcyhmbiwgV19PSykpCisJCQltb2RlID0gImEi
OworCQlicmVhazsKIAogI2lmZGVmIENPUFlfUEFTVEUKLSAgICBjYXNlIERVTVBfRVhDSEFOR0U6
Ci0gICAgICBpZiAoZm4gPT0gMCkgewotICAgICAgICBzdHJuY3B5KGZuYnVmLCBCdWZmZXJGaWxl
LCBzaXplb2YoZm5idWYpIC0gMSk7Ci0gICAgICAgIGZuYnVmW3NpemVvZihmbmJ1ZikgLSAxXSA9
IDA7Ci0gICAgICAgIGZuID0gZm5idWY7Ci0gICAgICB9Ci0gICAgICBwdWJsaWMgPSAhc3RyY21w
KGZuLCBidWZmZXJmaWxlKTsKKwljYXNlIERVTVBfRVhDSEFOR0U6CisJCWlmIChmbiA9PSAwKSB7
CisJCQlzdHJuY3B5KGZuYnVmLCBCdWZmZXJGaWxlLCBzaXplb2YoZm5idWYpIC0gMSk7CisJCQlm
bmJ1ZltzaXplb2YoZm5idWYpIC0gMV0gPSAwOworCQkJZm4gPSBmbmJ1ZjsKKwkJfQorCQlwdWJs
aWMgPSAhc3RyY21wKGZuLCBERUZBVUxUX0JVRkZFUkZJTEUpOwogIyBpZmRlZiBIQVZFX0xTVEFU
Ci0gICAgICBleGlzdHMgPSAhbHN0YXQoZm4sICZzdGIpOwotICAgICAgaWYgKHB1YmxpYyAmJiBl
eGlzdHMgJiYgKFNfSVNMTksoc3RiLnN0X21vZGUpIHx8IHN0Yi5zdF9ubGluayA+IDEpKSB7Ci0g
ICAgICAgIE1zZygwLCAiTm8gd3JpdGUgdG8gbGlua3MsIHBsZWFzZS4iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQorCQlleGlzdHMgPSAhbHN0YXQoZm4sICZzdGIpOworCQlpZiAocHVibGlj
ICYmIGV4aXN0cyAmJiAoU19JU0xOSyhzdGIuc3RfbW9kZSkgfHwgc3RiLnN0X25saW5rID4gMSkp
IHsKKwkJCU1zZygwLCAiTm8gd3JpdGUgdG8gbGlua3MsIHBsZWFzZS4iKTsKKwkJCXJldHVybjsK
KwkJfQogIyBlbmRpZgotICAgICAgYnJlYWs7CisJCWJyZWFrOwogI2VuZGlmCi0gIH0KKwl9CiAK
LSAgZGVidWcyKCJXcml0ZUZpbGUoJWQpICVzXG4iLCBkdW1wLCBmbik7Ci0gIGlmIChVc2VyQ29u
dGV4dCgpID4gMCkgewotICAgIGRlYnVnKCJXcml0ZWZpbGU6IHVzZXJjb250ZXh0XG4iKTsKKwlk
ZWJ1ZzIoIldyaXRlRmlsZSglZCkgJXNcbiIsIGR1bXAsIGZuKTsKKwlpZiAoVXNlckNvbnRleHQo
KSA+IDApIHsKKwkJZGVidWcoIldyaXRlZmlsZTogdXNlcmNvbnRleHRcbiIpOwogI2lmZGVmIENP
UFlfUEFTVEUKLSAgICBpZiAoZHVtcCA9PSBEVU1QX0VYQ0hBTkdFICYmIHB1YmxpYykgeworCQlp
ZiAoZHVtcCA9PSBEVU1QX0VYQ0hBTkdFICYmIHB1YmxpYykgewogIyBpZmRlZiBIQVZFX0xTVEFU
Ci0gICAgICBpZiAoZXhpc3RzKSB7Ci0gICAgICAgIGlmICgoZmQgPSBvcGVuKGZuLCBPX1dST05M
WSwgMDY2NikpID49IDApIHsKLSAgICAgICAgICBpZiAoZnN0YXQoZmQsICZzdGIyKSA9PSAwICYm
IHN0Yi5zdF9kZXYgPT0gc3RiMi5zdF9kZXYgJiYgc3RiLnN0X2lubyA9PSBzdGIyLnN0X2lubykK
LSAgICAgICAgICAgIGlmIChmdHJ1bmNhdGUoZmQsIDApIDwgMCkgewotICAgICAgICAgICAgICBj
bG9zZShmZCk7Ci0gICAgICAgICAgICAgIGZkID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgICBmZCA9IC0xOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICBmZCA9
IG9wZW4oZm4sIE9fV1JPTkxZfE9fQ1JFQVR8T19FWENMLCAwNjY2KTsKLSAgICAgIGYgPSBmZCA+
PSAwID8gZmRvcGVuKGZkLCBtb2RlKSA6IDA7CisJCQlpZiAoZXhpc3RzKSB7CisJCQkJaWYgKChm
ZCA9IG9wZW4oZm4sIE9fV1JPTkxZLCAwNjY2KSkgPj0gMCkgeworCQkJCQlpZiAoZnN0YXQoZmQs
ICZzdGIyKSA9PSAwICYmIHN0Yi5zdF9kZXYgPT0gc3RiMi5zdF9kZXYgJiYgc3RiLnN0X2lubyA9
PSBzdGIyLnN0X2lubykKKwkJCQkJCWZ0cnVuY2F0ZShmZCwgMCk7CisJCQkJCWVsc2UgeworCQkJ
CQkJY2xvc2UoZmQpOworCQkJCQkJZmQgPSAtMTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZQor
CQkJCWZkID0gb3BlbihmbiwgT19XUk9OTFl8T19DUkVBVHxPX0VYQ0wsIDA2NjYpOworCQkJZiA9
IGZkID49IDAgPyBmZG9wZW4oZmQsIG1vZGUpIDogMDsKICMgZWxzZQotICAgICAgZiA9IGZvcGVu
KGZuLCBtb2RlKTsKKwkJCWYgPSBmb3BlbihmbiwgbW9kZSk7CiAjIGVuZGlmCi0gICAgfQotICAg
IGVsc2UKKwkJfSBlbHNlCiAjZW5kaWYgLyogQ09QWV9QQVNURSAqLwotICAgICAgZiA9IGZvcGVu
KGZuLCBtb2RlKTsKLSAgICAgICAgaWYgKGYgPT0gTlVMTCkgewotICAgICAgICAgIGRlYnVnMigi
V3JpdGVGaWxlOiBmb3BlbiglcyxcIiVzXCIpIGZhaWxlZFxuIiwgZm4sIG1vZGUpOwotICAgICAg
ICAgIFVzZXJSZXR1cm4oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
c3dpdGNoIChkdW1wKSB7Ci0gICAgICAgICAgICBjYXNlIERVTVBfSEFSRENPUFk6Ci0gICAgICAg
ICAgICBjYXNlIERVTVBfU0NST0xMQkFDSzoKLSAgICAgICAgICAgICAgaWYgKCFmb3JlKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBpZiAoKm1vZGUgPT0gJ2EnKSB7Ci0g
ICAgICAgICAgICAgICAgcHV0YygnPicsIGYpOwotICAgICAgICAgICAgICAgIGZvciAoaiA9IGZv
cmUtPndfd2lkdGggLSAyOyBqID4gMDsgai0tKQotICAgICAgICAgICAgICAgICAgcHV0YygnPScs
IGYpOwotICAgICAgICAgICAgICAgICAgZnB1dHMoIjxcbiIsIGYpOwotICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgIGlmIChkdW1wID09IERVTVBfU0NST0xMQkFDSykgeworCQkJZiA9IGZv
cGVuKGZuLCBtb2RlKTsKKwkJaWYgKGYgPT0gTlVMTCkgeworCQkJZGVidWcyKCJXcml0ZUZpbGU6
IGZvcGVuKCVzLFwiJXNcIikgZmFpbGVkXG4iLCBmbiwgbW9kZSk7CisJCQlVc2VyUmV0dXJuKDAp
OworCQl9IGVsc2UgeworCQkJc3dpdGNoIChkdW1wKSB7CisJCQljYXNlIERVTVBfSEFSRENPUFk6
CisJCQljYXNlIERVTVBfU0NST0xMQkFDSzoKKwkJCQlpZiAoIWZvcmUpCisJCQkJCWJyZWFrOwor
CQkJCWlmICgqbW9kZSA9PSAnYScpIHsKKwkJCQkJcHV0YygnPicsIGYpOworCQkJCQlmb3IgKGog
PSBmb3JlLT53X3dpZHRoIC0gMjsgaiA+IDA7IGotLSkKKwkJCQkJCXB1dGMoJz0nLCBmKTsKKwkJ
CQkJZnB1dHMoIjxcbiIsIGYpOworCQkJCX0KKwkJCQlpZiAoZHVtcCA9PSBEVU1QX1NDUk9MTEJB
Q0spIHsKICNpZmRlZiBDT1BZX1BBU1RFCi0gICAgICAgICAgICAgICAgZm9yIChpID0gZm9yZS0+
d19oaXN0aGVpZ2h0IC0gZm9yZS0+d19zY3JvbGxiYWNrX2hlaWdodDsgaSA8IGZvcmUtPndfaGlz
dGhlaWdodDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICBwID0gKGNoYXIgKikoV0lOKGkpLT5p
bWFnZSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGZvcmUtPndfd2lkdGggLSAxOyBr
ID49IDAgJiYgcFtrXSA9PSAnICc7IGstLSkKLSAgICAgICAgICAgICAgICAgICAgICA7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPD0gazsgaisrKQotICAgICAgICAgICAgICAg
ICAgICAgIHB1dGMocFtqXSwgZik7Ci0gICAgICAgICAgICAgICAgICAgICAgcHV0YygnXG4nLCBm
KTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgZm9yZS0+d19oZWlnaHQ7IGkrKykgewotICAgICAgICAgICAg
ICAgIHAgPSAoY2hhciAqKWZvcmUtPndfbWxpbmVzW2ldLmltYWdlOwotICAgICAgICAgICAgICAg
IGZvciAoayA9IGZvcmUtPndfd2lkdGggLSAxOyBrID49IDAgJiYgcFtrXSA9PSAnICc7IGstLSkK
LSAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDw9IGs7
IGorKykKLSAgICAgICAgICAgICAgICAgIHB1dGMocFtqXSwgZik7Ci0gICAgICAgICAgICAgICAg
ICBwdXRjKCdcbicsIGYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgY2FzZSBEVU1QX1RFUk1DQVA6Ci0gICAgICAgICAgICAgIER1bXBU
ZXJtY2FwKGZvcmUtPndfYWZsYWcsIGYpOwotCSAgICAgIGJyZWFrOworCQkJCQlmb3IgKGkgPSBm
b3JlLT53X2hpc3RoZWlnaHQgLSBmb3JlLT53X3Njcm9sbGJhY2tfaGVpZ2h0OyBpIDwgZm9yZS0+
d19oaXN0aGVpZ2h0OyBpKyspIHsKKwkJCQkJCXAgPSAoY2hhciAqKShXSU4oaSktPmltYWdlKTsK
KwkJCQkJCWZvciAoayA9IGZvcmUtPndfd2lkdGggLSAxOworCQkJCQkJICAgIGsgPj0gMCAmJiBw
W2tdID09ICcgJzsgay0tKQorCQkJCQkJCTsKKwkJCQkJCWZvciAoaiA9IDA7IGogPD0gazsgaisr
KQorCQkJCQkJCXB1dGMocFtqXSwgZik7CisJCQkJCQlwdXRjKCdcbicsIGYpOworCQkJCQl9Cisj
ZW5kaWYKKwkJCQl9CisJCQkJZm9yIChpID0gMDsgaSA8IGZvcmUtPndfaGVpZ2h0OyBpKyspIHsK
KwkJCQkJcCA9IChjaGFyICopZm9yZS0+d19tbGluZXNbaV0uaW1hZ2U7CisJCQkJCWZvciAoayA9
IGZvcmUtPndfd2lkdGggLSAxOworCQkJCQkgICAgayA+PSAwICYmIHBba10gPT0gJyAnOyBrLS0p
CisJCQkJCQk7CisJCQkJCWZvciAoaiA9IDA7IGogPD0gazsgaisrKQorCQkJCQkJcHV0YyhwW2pd
LCBmKTsKKwkJCQkJcHV0YygnXG4nLCBmKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2Ug
RFVNUF9URVJNQ0FQOgorCQkJCUR1bXBUZXJtY2FwKGZvcmUtPndfYWZsYWcsIGYpOworCQkJCWJy
ZWFrOwogCiAjaWZkZWYgQ09QWV9QQVNURQotICAgICAgICAgICAgY2FzZSBEVU1QX0VYQ0hBTkdF
OgotICAgICAgICAgICAgICBwID0gdXNlci0+dV9wbG9wLmJ1ZjsKLSAgICAgICAgICAgICAgZm9y
IChpID0gdXNlci0+dV9wbG9wLmxlbjsgaS0tID4gMDsgcCsrKQotICAgICAgICAgICAgICAgIGlm
ICgqcCA9PSAnXHInICYmIChpID09IDAgfHwgcFsxXSAhPSAnXG4nKSkKLSAgICAgICAgICAgICAg
ICAgIHB1dGMoJ1xuJywgZik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgcHV0YygqcCwgZik7Ci0gICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIH0K
LSAgICAgICAgKHZvaWQpIGZjbG9zZShmKTsKLSAgICAgICAgVXNlclJldHVybigxKTsKLSAgICAg
IH0KLSAgICB9Ci0gIGlmIChVc2VyU3RhdHVzKCkgPD0gMCkKLSAgICBNc2coMCwgIkNhbm5vdCBv
cGVuIFwiJXNcIiIsIGZuKTsKLSAgZWxzZSBpZiAoZGlzcGxheSAmJiAhKnJjX25hbWUpIHsKLSAg
ICBzd2l0Y2ggKGR1bXApIHsKLSAgICAgIGNhc2UgRFVNUF9URVJNQ0FQOgotICAgICAgICBNc2co
MCwgIlRlcm1jYXAgZW50cnkgd3JpdHRlbiB0byBcIiVzXCIuIiwgZm4pOwotICAgICAgICBicmVh
azsKLSAgICAgIGNhc2UgRFVNUF9IQVJEQ09QWToKLSAgICAgIGNhc2UgRFVNUF9TQ1JPTExCQUNL
OgotICAgICAgICBNc2coMCwgIlNjcmVlbiBpbWFnZSAlcyB0byBcIiVzXCIuIiwgKCptb2RlID09
ICdhJykgPyAiYXBwZW5kZWQiIDogIndyaXR0ZW4iLCBmbik7Ci0gICAgICAgIGJyZWFrOworCQkJ
Y2FzZSBEVU1QX0VYQ0hBTkdFOgorCQkJCXAgPSB1c2VyLT51X3Bsb3AuYnVmOworCQkJCWZvciAo
aSA9IHVzZXItPnVfcGxvcC5sZW47IGktLSA+IDA7IHArKykKKwkJCQkJaWYgKCpwID09ICdccicg
JiYgKGkgPT0gMCB8fCBwWzFdICE9ICdcbicpKQorCQkJCQkJcHV0YygnXG4nLCBmKTsKKwkJCQkJ
ZWxzZQorCQkJCQkJcHV0YygqcCwgZik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCX0KKwkJCSh2
b2lkKWZjbG9zZShmKTsKKwkJCVVzZXJSZXR1cm4oMSk7CisJCX0KKwl9CisJaWYgKFVzZXJTdGF0
dXMoKSA8PSAwKQorCQlNc2coMCwgIkNhbm5vdCBvcGVuIFwiJXNcIiIsIGZuKTsKKwllbHNlIGlm
IChkaXNwbGF5ICYmICEqcmNfbmFtZSkgeworCQlzd2l0Y2ggKGR1bXApIHsKKwkJY2FzZSBEVU1Q
X1RFUk1DQVA6CisJCQlNc2coMCwgIlRlcm1jYXAgZW50cnkgd3JpdHRlbiB0byBcIiVzXCIuIiwg
Zm4pOworCQkJYnJlYWs7CisJCWNhc2UgRFVNUF9IQVJEQ09QWToKKwkJY2FzZSBEVU1QX1NDUk9M
TEJBQ0s6CisJCQlNc2coMCwgIlNjcmVlbiBpbWFnZSAlcyB0byBcIiVzXCIuIiwgKCptb2RlID09
ICdhJykgPyAiYXBwZW5kZWQiIDogIndyaXR0ZW4iLCBmbik7CisJCQlicmVhazsKICNpZmRlZiBD
T1BZX1BBU1RFCi0gICAgICBjYXNlIERVTVBfRVhDSEFOR0U6Ci0gICAgICAgIE1zZygwLCAiQ29w
eWJ1ZmZlciB3cml0dGVuIHRvIFwiJXNcIi4iLCBmbik7CisJCWNhc2UgRFVNUF9FWENIQU5HRToK
KwkJCU1zZygwLCAiQ29weWJ1ZmZlciB3cml0dGVuIHRvIFwiJXNcIi4iLCBmbik7CiAjZW5kaWYK
LSAgICB9Ci0gIH0KKwkJfQorCX0KIH0KIAogI2lmZGVmIENPUFlfUEFTVEUKIAogLyoKICAqIHJl
dHVybnMgYW4gYWxsb2NhdGVkIGJ1ZmZlciB3aGljaCBob2xkcyBhIGNvcHkgb2YgdGhlIGZpbGUg
bmFtZWQgZm4uCi0gKiBsZW5wIChpZiBub256ZXJvKSBwb2ludHMgdG8gYSBsb2NhdGlvbiwgd2hl
cmUgdGhlIGJ1ZmZlciBzaXplIHNob3VsZCBiZSAKKyAqIGxlbnAgKGlmIG5vbnplcm8pIHBvaW50
cyB0byBhIGxvY2F0aW9uLCB3aGVyZSB0aGUgYnVmZmVyIHNpemUgc2hvdWxkIGJlCiAgKiBzdG9y
ZWQuCiAgKi8KLWNoYXIgKlJlYWRGaWxlKGNoYXIgKmZuLCBpbnQgKmxlbnApIHsKLSAgaW50IGks
IGwsIHNpemU7Ci0gIGNoYXIgYywgKmJwLCAqYnVmOwotICBzdHJ1Y3Qgc3RhdCBzdGI7Ci0KLSAg
QVNTRVJUKGxlbnApOwotICBkZWJ1ZzEoIlJlYWRGaWxlKCVzKVxuIiwgZm4pOwotCi0gIGlmICgo
aSA9IHNlY29wZW4oZm4sIE9fUkRPTkxZLCAwKSkgPCAwKSB7Ci0gICAgTXNnKGVycm5vLCAibm8g
JXMgLS0gbm8gc2x1cnAiLCBmbik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBpZiAoZnN0
YXQoaSwgJnN0YikpIHsKLSAgICBNc2coZXJybm8sICJubyBnb29kICVzIC0tIG5vIHNsdXJwIiwg
Zm4pOwotICAgIGNsb3NlKGkpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHNpemUgPSBzdGIu
c3Rfc2l6ZTsKLQotICBpZiAoKGJ1ZiA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotICAgIGNs
b3NlKGkpOwotICAgIE1zZygwLCAiJXMiLCBzdHJub21lbSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0g
IH0KLSAgZXJybm8gPSAwOwotCi0gIGlmICgobCA9IHJlYWQoaSwgYnVmLCBzaXplKSkgIT0gc2l6
ZSkgewotICAgIGlmIChsIDwgMCkKLSAgICAgIGwgPSAwOwotICAgIE1zZyhlcnJubywgIkdvdCBv
bmx5ICVkIGJ5dGVzIGZyb20gJXMiLCBsLCBmbik7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgaWYgKHJl
YWQoaSwgJmMsIDEpID4gMCkKLSAgICAgIE1zZygwLCAiU2x1cnBlZCBvbmx5ICVkIGNoYXJhY3Rl
cnMgKG9mICVkKSBpbnRvIGJ1ZmZlciAtIHRyeSBhZ2FpbiIsIGwsIHNpemUpOwotICAgIGVsc2UK
LSAgICAgIE1zZygwLCAiU2x1cnBlZCAlZCBjaGFyYWN0ZXJzIGludG8gYnVmZmVyIiwgbCk7Ci0g
IH0KLSAgY2xvc2UoaSk7Ci0gICpsZW5wID0gbDsKLSAgZm9yIChicCA9IGJ1ZjsgbC0tID4gMDsg
YnArKykKLSAgICBpZiAoKmJwID09ICdcbicgJiYgKGJwID09IGJ1ZiB8fCBicFstMV0gIT0gJ1xy
JykpCi0gICAgICAqYnAgPSAnXHInOwotICByZXR1cm4gYnVmOwotfQotCi12b2lkIEtpbGxCdWZm
ZXJzKCkgewotICBpZiAoVXNlckNvbnRleHQoKSA+IDApCi0gICAgVXNlclJldHVybih1bmxpbmso
QnVmZmVyRmlsZSkgPyBlcnJubyA6IDApOwotICBlcnJubyA9IFVzZXJTdGF0dXMoKTsKLSAgTXNn
KGVycm5vLCAiJXMgJXNyZW1vdmVkIiwgQnVmZmVyRmlsZSwgZXJybm8gPyAibm90ICIgOiAiIik7
CitjaGFyICoKK1JlYWRGaWxlKGNoYXIgKmZuLCBpbnQgKmxlbnApCit7CisJaW50IGksIGwsIHNp
emU7CisJY2hhciBjLCAqYnAsICpidWY7CisJc3RydWN0IHN0YXQgc3RiOworCisJQVNTRVJUKGxl
bnApOworCWRlYnVnMSgiUmVhZEZpbGUoJXMpXG4iLCBmbik7CisKKwlpZiAoKGkgPSBzZWNvcGVu
KGZuLCBPX1JET05MWSwgMCkpIDwgMCkgeworCQlNc2coZXJybm8sICJubyAlcyAtLSBubyBzbHVy
cCIsIGZuKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGZzdGF0KGksICZzdGIpKSB7CisJ
CU1zZyhlcnJubywgIm5vIGdvb2QgJXMgLS0gbm8gc2x1cnAiLCBmbik7CisJCWNsb3NlKGkpOwor
CQlyZXR1cm4gTlVMTDsKKwl9CisJc2l6ZSA9IHN0Yi5zdF9zaXplOworCisJaWYgKChidWYgPSBt
YWxsb2Moc2l6ZSkpID09IE5VTEwpIHsKKwkJY2xvc2UoaSk7CisJCU1zZygwLCAiJXMiLCBzdHJu
b21lbSk7CisJCXJldHVybiBOVUxMOworCX0KKwllcnJubyA9IDA7CisKKwlpZiAoKGwgPSByZWFk
KGksIGJ1Ziwgc2l6ZSkpICE9IHNpemUpIHsKKwkJaWYgKGwgPCAwKQorCQkJbCA9IDA7CisJCU1z
ZyhlcnJubywgIkdvdCBvbmx5ICVkIGJ5dGVzIGZyb20gJXMiLCBsLCBmbik7CisJfSBlbHNlIHsK
KwkJaWYgKHJlYWQoaSwgJmMsIDEpID4gMCkKKwkJCU1zZygwLCAiU2x1cnBlZCBvbmx5ICVkIGNo
YXJhY3RlcnMgKG9mICVkKSBpbnRvIGJ1ZmZlciAtIHRyeSBhZ2FpbiIsIGwsIHNpemUpOworCQll
bHNlCisJCQlNc2coMCwgIlNsdXJwZWQgJWQgY2hhcmFjdGVycyBpbnRvIGJ1ZmZlciIsIGwpOwor
CX0KKwljbG9zZShpKTsKKwkqbGVucCA9IGw7CisJZm9yIChicCA9IGJ1ZjsgbC0tID4gMDsgYnAr
KykKKwkJaWYgKCpicCA9PSAnXG4nICYmIChicCA9PSBidWYgfHwgYnBbLTFdICE9ICdccicpKQor
CQkJKmJwID0gJ1xyJzsKKwlyZXR1cm4gYnVmOworfQorCit2b2lkCitLaWxsQnVmZmVycygpCit7
CisJaWYgKFVzZXJDb250ZXh0KCkgPiAwKQorCQlVc2VyUmV0dXJuKHVubGluayhCdWZmZXJGaWxl
KSA/IGVycm5vIDogMCk7CisJZXJybm8gPSBVc2VyU3RhdHVzKCk7CisJTXNnKGVycm5vLCAiJXMg
JXNyZW1vdmVkIiwgQnVmZmVyRmlsZSwgZXJybm8gPyAibm90ICIgOiAiIik7CiB9CiAjZW5kaWYJ
LyogQ09QWV9QQVNURSAqLwogCiAKIC8qIChBbG1vc3QpIHNlY3VyZSBvcGVuIGFuZCBmb3Blbi4u
LiAgKi8KIAotRklMRSAqc2VjZm9wZW4oY2hhciAqbmFtZSwgY2hhciAqbW9kZSkgewotICBGSUxF
ICpmaTsKK0ZJTEUgKgorc2VjZm9wZW4oY2hhciAqbmFtZSwgY2hhciAqbW9kZSkKK3sKKwlGSUxF
ICpmaTsKICNpZm5kZWYgVVNFX1NFVEVVSUQKLSAgaW50IGZsYWdzLCBmZDsKKwlpbnQgZmxhZ3Ms
IGZkOwogI2VuZGlmCiAKLSAgZGVidWcyKCJzZWNmb3BlbiglcywgJXMpXG4iLCBuYW1lLCBtb2Rl
KTsKKwlkZWJ1ZzIoInNlY2ZvcGVuKCVzLCAlcylcbiIsIG5hbWUsIG1vZGUpOwogI2lmZGVmIFVT
RV9TRVRFVUlECi0gIHhzZXRldWlkKHJlYWxfdWlkKTsKLSAgeHNldGVnaWQocmVhbF9naWQpOwot
ICBmaSA9IGZvcGVuKG5hbWUsIG1vZGUpOwotICB4c2V0ZXVpZChlZmZfdWlkKTsKLSAgeHNldGVn
aWQoZWZmX2dpZCk7Ci0gIHJldHVybiBmaTsKLQorCXhzZXRldWlkKHJlYWxfdWlkKTsKKwl4c2V0
ZWdpZChyZWFsX2dpZCk7CisJZmkgPSBmb3BlbihuYW1lLCBtb2RlKTsKKwl4c2V0ZXVpZChlZmZf
dWlkKTsKKwl4c2V0ZWdpZChlZmZfZ2lkKTsKKwlyZXR1cm4gZmk7CiAjZWxzZQotICBpZiAoZWZm
X3VpZCA9PSByZWFsX3VpZCkKLSAgICByZXR1cm4gZm9wZW4obmFtZSwgbW9kZSk7Ci0gIGlmICht
b2RlWzBdICYmIG1vZGVbMV0gPT0gJysnKQotICAgIGZsYWdzID0gT19SRFdSOwotICBlbHNlCi0g
ICAgZmxhZ3MgPSAobW9kZVswXSA9PSAncicpID8gT19SRE9OTFkgOiBPX1dST05MWTsKLSAgaWYg
KG1vZGVbMF0gPT0gJ3cnKQotICAgIGZsYWdzIHw9IE9fQ1JFQVQgfCBPX1RSVU5DOwotICBlbHNl
IGlmIChtb2RlWzBdID09ICdhJykKLSAgICBmbGFncyB8PSBPX0NSRUFUIHwgT19BUFBFTkQ7Ci0g
IGVsc2UgaWYgKG1vZGVbMF0gIT0gJ3InKSB7Ci0gICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgcmV0
dXJuIDA7Ci0gIH0KLSAgaWYgKChmZCA9IHNlY29wZW4obmFtZSwgZmxhZ3MsIDA2NjYpKSA8IDAp
Ci0gICAgcmV0dXJuIDA7Ci0gIGlmICgoZmkgPSBmZG9wZW4oZmQsIG1vZGUpKSA9PSAwKSB7Ci0g
ICAgY2xvc2UoZmQpOwotICAgIHJldHVybiAwOwotICB9Ci0gIHJldHVybiBmaTsKKwlpZiAoZWZm
X3VpZCA9PSByZWFsX3VpZCkKKwkJcmV0dXJuIGZvcGVuKG5hbWUsIG1vZGUpOworCWlmIChtb2Rl
WzBdICYmIG1vZGVbMV0gPT0gJysnKQorCQlmbGFncyA9IE9fUkRXUjsKKwllbHNlCisJCWZsYWdz
ID0gKG1vZGVbMF0gPT0gJ3InKSA/IE9fUkRPTkxZIDogT19XUk9OTFk7CisJaWYgKG1vZGVbMF0g
PT0gJ3cnKQorCQlmbGFncyB8PSBPX0NSRUFUIHwgT19UUlVOQzsKKwllbHNlIGlmIChtb2RlWzBd
ID09ICdhJykKKwkJZmxhZ3MgfD0gT19DUkVBVCB8IE9fQVBQRU5EOworCWVsc2UgaWYgKG1vZGVb
MF0gIT0gJ3InKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKChm
ZCA9IHNlY29wZW4obmFtZSwgZmxhZ3MsIDA2NjYpKSA8IDApCisJCXJldHVybiAwOworCWlmICgo
ZmkgPSBmZG9wZW4oZmQsIG1vZGUpKSA9PSAwKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7
CisJfQorCXJldHVybiBmaTsKICNlbmRpZgogfQogCi0KLWludCBzZWNvcGVuKGNoYXIgKm5hbWUs
IGludCBmbGFncywgaW50IG1vZGUpIHsKLSAgaW50IGZkOworaW50CitzZWNvcGVuKGNoYXIgKm5h
bWUsIGludCBmbGFncywgaW50IG1vZGUpCit7CisJaW50IGZkOwogI2lmbmRlZiBVU0VfU0VURVVJ
RAotICBpbnQgcTsKLSAgc3RydWN0IHN0YXQgc3RiOworCWludCBxOworCXN0cnVjdCBzdGF0IHN0
YjsKICNlbmRpZgogCi0gIGRlYnVnMygic2Vjb3BlbiglcywgMHgleCwgMCUwM28pXG4iLCBuYW1l
LCBmbGFncywgbW9kZSk7CisJZGVidWczKCJzZWNvcGVuKCVzLCAweCV4LCAwJTAzbylcbiIsIG5h
bWUsIGZsYWdzLCBtb2RlKTsKICNpZmRlZiBVU0VfU0VURVVJRAotICB4c2V0ZXVpZChyZWFsX3Vp
ZCk7Ci0gIHhzZXRlZ2lkKHJlYWxfZ2lkKTsKLSAgZmQgPSBvcGVuKG5hbWUsIGZsYWdzLCBtb2Rl
KTsKLSAgeHNldGV1aWQoZWZmX3VpZCk7Ci0gIHhzZXRlZ2lkKGVmZl9naWQpOwotICByZXR1cm4g
ZmQ7CisJeHNldGV1aWQocmVhbF91aWQpOworCXhzZXRlZ2lkKHJlYWxfZ2lkKTsKKwlmZCA9IG9w
ZW4obmFtZSwgZmxhZ3MsIG1vZGUpOworCXhzZXRldWlkKGVmZl91aWQpOworCXhzZXRlZ2lkKGVm
Zl9naWQpOworCXJldHVybiBmZDsKICNlbHNlCi0gIGlmIChlZmZfdWlkID09IHJlYWxfdWlkKQot
ICAgIHJldHVybiBvcGVuKG5hbWUsIGZsYWdzLCBtb2RlKTsKLSAgLyogVHJ1bmNhdGlvbi9jcmVh
dGlvbiBpcyBkb25lIGluIFVzZXJDb250ZXh0ICovCi0gIGlmICgoZmxhZ3MgJiBPX1RSVU5DKSB8
fCAoKGZsYWdzICYgT19DUkVBVCkgJiYgYWNjZXNzKG5hbWUsIEZfT0spKSkgewotICAgIGlmIChV
c2VyQ29udGV4dCgpID4gMCkgewotICAgICAgaWYgKChmZCA9IG9wZW4obmFtZSwgZmxhZ3MsIG1v
ZGUpKSA+PSAwKSB7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgVXNlclJldHVybigwKTsK
LSAgICAgIH0KLSAgICAgIGlmIChlcnJubyA9PSAwKQotICAgICAgICBlcnJubyA9IEVBQ0NFUzsK
LSAgICAgIFVzZXJSZXR1cm4oZXJybm8pOwotICAgIH0KLSAgICBpZiAoKHEgPSBVc2VyU3RhdHVz
KCkpKSB7Ci0gICAgICBpZiAocSA+IDApCi0gICAgICAgIGVycm5vID0gcTsKLSAgICAgIHJldHVy
biAtMTsKLSAgICB9Ci0gIH0KLSAgaWYgKGFjY2VzcyhuYW1lLCBGX09LKSkKLSAgICByZXR1cm4g
LTE7Ci0gIGlmICgoZmQgPSBvcGVuKG5hbWUsIGZsYWdzICYgfihPX1RSVU5DIHwgT19DUkVBVCks
IDApKSA8IDApCi0gICAgcmV0dXJuIC0xOwotICBkZWJ1Zygib3BlbiBzdWNjZXNzZnVsXG4iKTsK
LSAgaWYgKGZzdGF0KGZkLCAmc3RiKSkgewotICAgIGNsb3NlKGZkKTsKLSAgICByZXR1cm4gLTE7
Ci0gIH0KLSAgZGVidWcoImZzdGF0IHN1Y2Nlc3NmdWxcbiIpOwotICBpZiAoc3RiLnN0X3VpZCAh
PSByZWFsX3VpZCkgewotICAgIHN3aXRjaCAoZmxhZ3MgJiAoT19SRE9OTFkgfCBPX1dST05MWSB8
IE9fUkRXUikpIHsKLSAgICAgIGNhc2UgT19SRE9OTFk6Ci0gICAgICAgIHEgPSAwMDA0OwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgT19XUk9OTFk6Ci0gICAgICAgIHEgPSAwMDAyOwotICAg
ICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHEgPSAwMDA2OwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgaWYgKChzdGIuc3RfbW9kZSAmIHEpICE9IHEpIHsKLSAgICAgIGRl
YnVnMSgic2Vjb3BlbjogcGVybWlzc2lvbiBkZW5pZWQgKCUwM28pXG4iLCBzdGIuc3RfbW9kZSAm
IDA3Nzc3KTsKLSAgICAgIGNsb3NlKGZkKTsKLSAgICAgIGVycm5vID0gRUFDQ0VTOwotICAgICAg
cmV0dXJuIC0xOwotICAgIH0KLSAgfQotICBkZWJ1ZzEoInNlY29wZW4gb2sgLSByZXR1cm5pbmcg
JWRcbiIsIGZkKTsKLSAgcmV0dXJuIGZkOwotI2VuZGlmCi19Ci0KLQotaW50IHByaW50cGlwZShz
dHJ1Y3Qgd2luICpwLCBjaGFyICpjbWQpIHsKLSAgaW50IHBpWzJdOwotICBpZiAocGlwZShwaSkp
IHsKLSAgICBXTXNnKHAsIGVycm5vLCAicHJpbnRpbmcgcGlwZSIpOwotICAgIHJldHVybiAtMTsK
LSAgfQotICBmZmx1c2goTlVMTCk7Ci0gIHN3aXRjaCAoZm9yaygpKSB7Ci0gICAgY2FzZSAtMToK
LSAgICAgIFdNc2cocCwgZXJybm8sICJwcmludGluZyBmb3JrIik7Ci0gICAgICByZXR1cm4gLTE7
Ci0gICAgY2FzZSAwOgotICAgICAgZGlzcGxheSA9IHAtPndfcGRpc3BsYXk7Ci0gICAgICBkaXNw
bGF5cyA9IDA7Ci0gICAgICBTZXJ2ZXJTb2NrZXQgPSAtMTsKKwlpZiAoZWZmX3VpZCA9PSByZWFs
X3VpZCkKKwkJcmV0dXJuIG9wZW4obmFtZSwgZmxhZ3MsIG1vZGUpOworCisJLyogVHJ1bmNhdGlv
bi9jcmVhdGlvbiBpcyBkb25lIGluIFVzZXJDb250ZXh0ICovCisJaWYgKChmbGFncyAmIE9fVFJV
TkMpIHx8ICgoZmxhZ3MgJiBPX0NSRUFUKSAmJiBhY2Nlc3MobmFtZSwgRl9PSykpKSB7CisJCWlm
IChVc2VyQ29udGV4dCgpID4gMCkgeworCQkJaWYgKChmZCA9IG9wZW4obmFtZSwgZmxhZ3MsIG1v
ZGUpKSA+PSAwKSB7CisJCQkJY2xvc2UoZmQpOworCQkJCVVzZXJSZXR1cm4oMCk7CisJCQl9CisJ
CQlpZiAoZXJybm8gPT0gMCkKKwkJCQllcnJubyA9IEVBQ0NFUzsKKwkJCVVzZXJSZXR1cm4oZXJy
bm8pOworCQl9CisJCWlmICgocSA9IFVzZXJTdGF0dXMoKSkpIHsKKwkJCWlmIChxID4gMCkKKwkJ
CQllcnJubyA9IHE7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJaWYgKGFjY2VzcyhuYW1lLCBG
X09LKSkKKwkJcmV0dXJuIC0xOworCWlmICgoZmQgPSBvcGVuKG5hbWUsIGZsYWdzICYgfihPX1RS
VU5DIHwgT19DUkVBVCksIDApKSA8IDApCisJCXJldHVybiAtMTsKKwlkZWJ1Zygib3BlbiBzdWNj
ZXNzZnVsXG4iKTsKKwlpZiAoZnN0YXQoZmQsICZzdGIpKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0
dXJuIC0xOworCX0KKwlkZWJ1ZygiZnN0YXQgc3VjY2Vzc2Z1bFxuIik7CisJaWYgKHN0Yi5zdF91
aWQgIT0gcmVhbF91aWQpIHsKKwkJc3dpdGNoIChmbGFncyAmIChPX1JET05MWSB8IE9fV1JPTkxZ
IHwgT19SRFdSKSkgeworCQljYXNlIE9fUkRPTkxZOgorCQkJcSA9IDAwMDQ7CisJCQlicmVhazsK
KwkJY2FzZSBPX1dST05MWToKKwkJCXEgPSAwMDAyOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlxID0gMDAwNjsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoc3RiLnN0X21vZGUgJiBxKSAhPSBx
KSB7CisJCQlkZWJ1ZzEoInNlY29wZW46IHBlcm1pc3Npb24gZGVuaWVkICglMDNvKVxuIiwgc3Ri
LnN0X21vZGUgJiAwNzc3Nyk7CisJCQljbG9zZShmZCk7CisJCQllcnJubyA9IEVBQ0NFUzsKKwkJ
CXJldHVybiAtMTsKKwkJfQorCX0KKwlkZWJ1ZzEoInNlY29wZW4gb2sgLSByZXR1cm5pbmcgJWRc
biIsIGZkKTsKKwlyZXR1cm4gZmQ7CisjZW5kaWYKK30KKworaW50CitwcmludHBpcGUoc3RydWN0
IHdpbiAqcCwgY2hhciAqY21kKQoreworCWludCBwaVsyXTsKKwlpZiAocGlwZShwaSkpIHsKKwkJ
V01zZyhwLCBlcnJubywgInByaW50aW5nIHBpcGUiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzd2l0
Y2ggKGZvcmsoKSkgeworCWNhc2UgLTE6CisJCVdNc2cocCwgZXJybm8sICJwcmludGluZyBmb3Jr
Iik7CisJCXJldHVybiAtMTsKKwljYXNlIDA6CisJCWRpc3BsYXkgPSBwLT53X3BkaXNwbGF5Owor
CQlkaXNwbGF5cyA9IDA7CisJCVNlcnZlclNvY2tldCA9IC0xOwogI2lmZGVmIERFQlVHCi0gICAg
ICBpZiAoZGZwICYmIGRmcCAhPSBzdGRlcnIpCi0gICAgICAgIGZjbG9zZShkZnApOworCQlpZiAo
ZGZwICYmIGRmcCAhPSBzdGRlcnIpCisJCQlmY2xvc2UoZGZwKTsKICNlbmRpZgotICAgICAgaWYg
KGR1cDIocGlbMF0sIDApIDwgMCkKLSAgICAgICAgUGFuaWMoZXJybm8sICJwcmludHBpcGUgZHVw
MiIpOwotICAgICAgY2xvc2VhbGxmaWxlcygwKTsKLSAgICAgIGlmIChzZXRnaWQocmVhbF9naWQp
IHx8IHNldHVpZChyZWFsX3VpZCkpCi0gICAgICAgIFBhbmljKGVycm5vLCAicHJpbnRwaXBlIHNl
dHVpZCIpOwotICAgICAgZWZmX3VpZCA9IHJlYWxfdWlkOwotICAgICAgZWZmX2dpZCA9IHJlYWxf
Z2lkOworCQljbG9zZSgwKTsKKwkJZHVwKHBpWzBdKTsKKwkJY2xvc2VhbGxmaWxlcygwKTsKKwkJ
aWYgKHNldGdpZChyZWFsX2dpZCkgfHwgc2V0dWlkKHJlYWxfdWlkKSkKKwkJCVBhbmljKGVycm5v
LCAicHJpbnRwaXBlIHNldHVpZCIpOworCQllZmZfdWlkID0gcmVhbF91aWQ7CisJCWVmZl9naWQg
PSByZWFsX2dpZDsKIAogI2lmZGVmIFNJR1BJUEUKLSAgICAgIHNpZ25hbChTSUdQSVBFLCBTSUdf
REZMKTsKKwkJc2lnbmFsKFNJR1BJUEUsIFNJR19ERkwpOwogI2VuZGlmCi0gICAgICBleGVjbCgi
L2Jpbi9zaCIsICJzaCIsICItYyIsIGNtZCwgTlVMTCk7Ci0gICAgICBQYW5pYyhlcnJubywgIi9i
aW4vc2giKTsKLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLSAgY2xvc2UocGlbMF0p
OwotICByZXR1cm4gcGlbMV07Ci19Ci0KLWludCByZWFkcGlwZShjaGFyICoqY21kdikgewotICBp
bnQgcGlbMl07Ci0KLSAgaWYgKHBpcGUocGkpKSB7Ci0gICAgTXNnKGVycm5vLCAicGlwZSIpOwot
ICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGZmbHVzaChOVUxMKTsKLSAgc3dpdGNoIChmb3JrKCkp
IHsKLSAgY2FzZSAtMToKLSAgICBNc2coZXJybm8sICJmb3JrIik7Ci0gICAgcmV0dXJuIC0xOwot
ICBjYXNlIDA6Ci0gICAgZGlzcGxheXMgPSAwOwotICAgIFNlcnZlclNvY2tldCA9IC0xOworCQll
eGVjbCgiL2Jpbi9zaCIsICJzaCIsICItYyIsIGNtZCwgKGNoYXIgKikwKTsKKwkJUGFuaWMoZXJy
bm8sICIvYmluL3NoIik7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWNsb3NlKHBpWzBdKTsK
KwlyZXR1cm4gcGlbMV07Cit9CisKK2ludAorcmVhZHBpcGUoY2hhciAqKmNtZHYpCit7CisJaW50
IHBpWzJdOworCisJaWYgKHBpcGUocGkpKSB7CisJCU1zZyhlcnJubywgInBpcGUiKTsKKwkJcmV0
dXJuIC0xOworCX0KKworCXN3aXRjaCAoZm9yaygpKSB7CisJY2FzZSAtMToKKwkJTXNnKGVycm5v
LCAiZm9yayIpOworCQlyZXR1cm4gLTE7CisJY2FzZSAwOgorCQlkaXNwbGF5cyA9IDA7CisJCVNl
cnZlclNvY2tldCA9IC0xOwogI2lmZGVmIERFQlVHCi0gICAgaWYgKGRmcCAmJiBkZnAgIT0gc3Rk
ZXJyKQotICAgICAgZmNsb3NlKGRmcCk7CisJCWlmIChkZnAgJiYgZGZwICE9IHN0ZGVycikKKwkJ
CWZjbG9zZShkZnApOwogI2VuZGlmCi0gICAgY2xvc2UoMSk7Ci0gICAgaWYgKGR1cChwaVsxXSkg
IT0gMSkgewotICAgICAgY2xvc2UocGlbMV0pOwotICAgICAgUGFuaWMoMCwgImR1cCIpOwotICAg
IH0KLSAgICBjbG9zZWFsbGZpbGVzKDEpOwotCi0gICAgaWYgKHNldGdpZChyZWFsX2dpZCkgfHwg
c2V0dWlkKHJlYWxfdWlkKSkgewotICAgICAgY2xvc2UoMSk7Ci0gICAgICBQYW5pYyhlcnJubywg
InNldHVpZC9zZXRnaWQiKTsKLSAgICB9Ci0gICAgZWZmX3VpZCA9IHJlYWxfdWlkOwotICAgIGVm
Zl9naWQgPSByZWFsX2dpZDsKKwkJY2xvc2UoMSk7CisJCWlmIChkdXAocGlbMV0pICE9IDEpIHsK
KwkJCWNsb3NlKHBpWzFdKTsKKwkJCVBhbmljKDAsICJkdXAiKTsKKwkJfQorCQljbG9zZWFsbGZp
bGVzKDEpOworCisJCWlmIChzZXRnaWQocmVhbF9naWQpIHx8IHNldHVpZChyZWFsX3VpZCkpIHsK
KwkJCWNsb3NlKDEpOworCQkJUGFuaWMoZXJybm8sICJzZXR1aWQvc2V0Z2lkIik7CisJCX0KKwkJ
ZWZmX3VpZCA9IHJlYWxfdWlkOworCQllZmZfZ2lkID0gcmVhbF9naWQ7CiAjaWZkZWYgU0lHUElQ
RQotICAgIHNpZ25hbChTSUdQSVBFLCBTSUdfREZMKTsKKwkJc2lnbmFsKFNJR1BJUEUsIFNJR19E
RkwpOwogI2VuZGlmCi0gICAgZXhlY3ZwKCpjbWR2LCBjbWR2KTsKLSAgICBjbG9zZSgxKTsKLSAg
ICBQYW5pYyhlcnJubywgIiVzIiwgKmNtZHYpOwotICBkZWZhdWx0OgotICAgIGJyZWFrOwotICB9
Ci0gIGNsb3NlKHBpWzFdKTsKLSAgcmV0dXJuIHBpWzBdOworCQlleGVjdnAoKmNtZHYsIGNtZHYp
OworCQljbG9zZSgxKTsKKwkJUGFuaWMoZXJybm8sICIlcyIsICpjbWR2KTsKKwlkZWZhdWx0Ogor
CQlicmVhazsKKwl9CisJY2xvc2UocGlbMV0pOworCXJldHVybiBwaVswXTsKIH0KZGlmZiAtdXIg
c2NyZWVuLm9yaWcvSEFDS0lORyBzY3JlZW4vSEFDS0lORwotLS0gc2NyZWVuLm9yaWcvSEFDS0lO
RwkyMDIzLTA2LTAxIDE0OjU4OjE3LjIyODY2NTAwMiArMDMwMAorKysgc2NyZWVuL0hBQ0tJTkcJ
MjAyMi0wMS0yOCAxNzowNjowMi42NjI2MTE0MDMgKzAzMDAKQEAgLTQsNyArNCw3IEBACiAgIFRo
ZSBsb2NhbCB2YXJpYWJsZSBuciBpcyBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRp
bmcgdGhlCiAgIGNvbW1hbmQgdG8gYmUgZXZhbHVhdGVkOyBmb3IgZXZlcnkgY29tbWFuZCBgZm9v
JywgdGhlcmUgaXMgYW4KICAgaW50ZWdlciB2YWx1ZSBSQ19GT08gZm9yIHVzZSBhcyBucidzIHZh
bHVlIHRvIHJlcHJlc2VudCBpdC4gRmluZAotICB0aGUgbWF0Y2hpbmcgY2FzZSBsYWJlbCB0byBm
b2xsb3cgcHJvY2VzaW5nIG9mIHRoZSBjb21tYW5kLgorICB0aGUgbWF0Y2hpbmcgY2FzZSBsYWJl
bCB0byBmb2xsb3cgcHJvY2Vzc2luZyBvZiB0aGUgY29tbWFuZC4KICAgIAogICBUaGUgUkNfRk9P
IHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBjb21tLmgsIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkKICAg
Z2VuZXJhdGVkIGJ5IGNvbW0uc2gsIGJhc2VkIG9uIHRoZSBuYW1lcyBvZiB0aGUgY29tbWFuZHMK
ZGlmZiAtdXIgc2NyZWVuLm9yaWcvaGVscC5jIHNjcmVlbi9oZWxwLmMKLS0tIHNjcmVlbi5vcmln
L2hlbHAuYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjI0MDY2NTAzMCArMDMwMAorKysgc2NyZWVuL2hl
bHAuYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY4NjYxMTk5OCArMDMwMApAQCAtMTExLDggKzExMSw5
IEBACiAgICAgcHJpbnRmKCJcbkVycm9yOiAiKTsKICAgICBwcmludGYobWVzc2FnZSwgYXJnKTsK
ICAgICBwcmludGYoIlxuIik7CisgICAgZXhpdCgxKTsKICAgfQotICBleGl0KDEpOworICBleGl0
KDApOwogfQogCiAvKiBIZXJlIGNvbWUgdGhlIGhlbHAgcGFnZSByb3V0aW5lcyAqLwpkaWZmIC11
ciBzY3JlZW4ub3JpZy9JTlNUQUxMIHNjcmVlbi9JTlNUQUxMCi0tLSBzY3JlZW4ub3JpZy9JTlNU
QUxMCTIwMjMtMDYtMDEgMTQ6NTg6MTcuMjI4NjY1MDAyICswMzAwCisrKyBzY3JlZW4vSU5TVEFM
TAkyMDIyLTAxLTI4IDE3OjA2OjAyLjY2MjYxMTQwMyArMDMwMApAQCAtNDAsNyArNDAsNyBAQAog
bm90LiBBdCBsZWFzdCBpdCBtdXN0IGJlIG9uIGEgZmlsZXN5c3RlbSB0aGF0IHN1cHBvcnRzIHNv
Y2tldHMvZmlmb3MuCiBTT0NLRElSIG11c3Qgbm90IHBvaW50IGludG8gYW4gQUZTIChBbmRyZXcg
RmlsZSBTeXN0ZW0pIG1vdW50ZWQgZGlyZWN0b3J5LiAKIElmIHlvdSBhcmUgdW5jZXJ0YWluIGFi
b3V0IHlvdXIgTkZTIGltcGxlbWVudGF0aW9uLCB1c2UgYSBVRlMgZGlyZWN0b3J5IGZvciAKLVNP
Q0tESVIuIFBlcnNvbmFsbHksIEkgZmF2b3VyIGEgdXNlcnMgaG9tZSBkaXJlY3RvcnkgYW5kIHJl
Y29tbWVuZCB0aGUgdGhlIAorU09DS0RJUi4gUGVyc29uYWxseSwgSSBmYXZvdXIgYSB1c2VyJ3Mg
aG9tZSBkaXJlY3RvcnkgYW5kIHJlY29tbWVuZCB0aGUgdGhlCiAvdG1wLyBhcmVhLiAKIFRoZSBw
YXRoIGZvciBFVENTQ1JFRU5SQyBtYXkgYWxzbyBuZWVkIHRvIGJlIGFkYXB0ZWQuCiAKQEAgLTU4
LDcgKzU4LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBZb3UgbWF5IHdlbGwgcnVuIHNjcmVl
biBmcm9tIHlvdXIgcHJpdmF0ZSBiaW5hcnkgZGlyZWN0b3J5IGFuZCB3aXRoIGEgCiBwcml2YXRl
IHNvY2tldCBkaXJlY3RvcnkgbGlrZSAkSE9NRS8uc2NyZWVuLiBCdXQgdG8gaGF2ZSBhIGZ1bGwg
ZmVhdHVyZWQKLXNjcmVlbiBhbmQgKGZyb20gYSB1c2VycyBwb2ludCBvZiB2aWV3KSBtb3JlIHNl
Y3VyZSBwdHkncyB5b3Ugc2hvdWxkCitzY3JlZW4gYW5kIChmcm9tIGEgdXNlcidzIHBvaW50IG9m
IHZpZXcpIG1vcmUgc2VjdXJlIHB0eSdzIHlvdSBzaG91bGQKIGNvbnN1bHQgYSBzeXN0ZW0gYWRt
aW5pc3RyYXRvciBhbmQgZGlzY3VzcyBpbnN0YWxsaW5nIHNjcmVlbiBzZXR1aWQtcm9vdAogaW4g
c29tZSBnbG9iYWxseSBhY2Nlc3NpYmxlIGRpcmVjdG9yeSBsaWtlIC91c3IvbG9jYWwvYmluLgog
CkBAIC05NCw3ICs5NCw3IEBACiBUaGUgZmlsZXMgc2NyZWVucmMgYW5kIGV0Yy9ldGNzY3JlZW5y
YyBhcmUgaW5zdHJ1Y3RpdmUgc2FtcGxlcyB0aGF0CiBkZW1vbnN0cmF0ZSB3aGF0IGNhbi9zaG91
bGQgYmUgZG9uZSBmcm9tIHlvdXIgcHJpdmF0ZSAuc2NyZWVucmMgYW5kIGZyb20KICRFVENTQ1JF
RU5SQyAtLSBkbyBub3QganVzdCBjb3B5IHRoZW0uIFJlYWQgdGhlbS4gIExvb2sgdGhyb3VnaCB0
aGUgCi1ldGNzY3JlZW5yYyBmaWxlIGZvciBzeXN0ZW0gd2lkZSBkZWZhdWx0cyB0aGF0IHlvdSBs
aWtlIHRvIHNldC4gZS5nLiAKK2V0Y3NjcmVlbnJjIGZpbGUgZm9yIHN5c3RlbSB3aWRlIGRlZmF1
bHRzIHRoYXQgeW91IGxpa2UgdG8gc2V0LCBlLmcuCiBhdXRvZGV0YWNoIG9mZiwgc3RhcnR1cF9t
ZXNzYWdlIG9mZiwgdmJlbGwgb24sIC4uLgogU2luY2UgdmVyc2lvbiAzLjIuMTUgdGhlIHNjcmVl
bnJjIGZpbGUgc3ludGF4IGNoYW5nZWQgc2xpZ2h0bHkuIEFsbCByYyBmaWxlcwogZnJvbSBwcmV2
aW91cyB2ZXJzaW9ucyBzaG91bGQgYmUgcnVuIHRocm91Z2ggdGhlICduZXdzeW50YXgnIHNjcmlw
dCB0aGF0IGNvbWVzIApkaWZmIC11ciBzY3JlZW4ub3JpZy8uaXNjcmVlbnJjIHNjcmVlbi8uaXNj
cmVlbnJjCi0tLSBzY3JlZW4ub3JpZy8uaXNjcmVlbnJjCTIwMjMtMDYtMDEgMTQ6NTg6MTcuMjI3
NjY1MDAwICswMzAwCisrKyBzY3JlZW4vLmlzY3JlZW5yYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY2
MjYxMTQwMyArMDMwMApAQCAtMTcsNyArMTcsNyBAQAogZWNobyAtbiAiYm9vdGluZyBzY3JlZW4i
CiAKICMgbGV0IGl0IGZsYXNoLCBub3QgaG9ybiEKLSN2YmVsbCBvbiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIyAidmJlbGwiIGRvbid0IHdvcmsgYW55IGxvbmdlciwgc29ycnkuCisjdmJlbGwg
b24gICAgICAgICAgICAgICAgICAgICAgICAgICMgInZiZWxsIiBkb2Vzbid0IHdvcmsgYW55IGxv
bmdlciwgc29ycnkuCiAjdmJlbGxfbXNnICIgIFd1ZmYsICBXdWZmISEgICIgICAgICMgdGhpcyBp
cyB0aGUgZGVmYXVsdCBtZXNzYWdlCiAjYmVsbCAiB0JpbW1tZWwgTm8uICUiCQkgICAjIHNvdW5k
cyB0aGUgYmVsbCBhbmQgc2hvd3MgYSBtZXNzYWdlCiAKQEAgLTQ1LDExICs0NSwxMSBAQAogIyBQ
cmludGluZyBpbiB0aGUgbGVmdG1vc3QgY29sdW1uIGlzIG5vdCBzYXZlLiBXZSBleHByZXNzIHRo
YXQgZmFjdCBhcyA6TFBAOgogIwogIyBFbWFjcyB0ZW5kcyB0byBzbWVhciBpdCdzIGhpZ2hsaWdo
dGVkIHN0YXR1cyBiYXIgYWNyb3NzIHRoZSBzY3JlZW4sIHByb2R1Y2luZwotIyB1Z2x5IGFyZWFz
IG9mIGJyaWdodCBiYWNrZ3JvdW5kLCBpZiB0ZXJtY2FwIGlzJ250IHBlcmZlY3RseSBzb2Jlci4K
KyMgdWdseSBhcmVhcyBvZiBicmlnaHQgYmFja2dyb3VuZCwgaWYgdGVybWNhcCBpc24ndCBwZXJm
ZWN0bHkgc29iZXIuCiAjIEdpdmUgYSBsaXR0bGUgOm1zQDogaW4gdGhlIHRlcm1jYXAsIHRoaXMg
bWF5IGhlbHAuCiAjCiAjIEFuZCB3aG8gaW52ZW50ZWQgdGhlIGluaXRpYWxpc2F0aW9uIGZvciBm
YWNpdCB0ZXJtaW5hbHM/IFdlIHRlbGwgaGltIHRoYXQgCi0jIHdlIG5vbid0IGxpa2Ugc21vb3Ro
IHNjcm9sbCwgYnkgc3BlY2lmeWluZyA6dGk9XEVbP2w6LgorIyB3ZSBkb24ndCBsaWtlIHNtb290
aCBzY3JvbGwsIGJ5IHNwZWNpZnlpbmcgOnRpPVxFWz9sOi4KICMgXEVbPzNsICAgODAgWmVpY2hl
bgogIyBcRVs/M2ggICAxMzIgWmVpY2hlbgogIyBMUCAgICAgICBMYXN0IGNvbHVtbiBQcmludGFi
bGUKQEAgLTkyLDExICs5MiwxMSBAQAogIyBJQ0wgNjQwMiB0ZXN0aW5nOgogdGVybWNhcCBpY2wq
IEcwOlMwPVxFJFtzdGFydF06RTA9XEUlW2VuZF06QzA9ajlrPGw2bTNuP3FcOnQ3dT12O3c+eDUg
R1M9XEUoMF5POkdFPVxFKEJeTzpHMT1rOkcyPWw6RzM9bTpHND1qOkdWPXg6R0g9cTpHUj11OkdM
PXQ6R1U9dzpHRD12OkdDPW4KIAotIyBGbG93Y29udHJvbCBwcm9kdWNlcyB0cm91YmxlLiBeUyB1
bmQgXlEgd2lsbCBuZXZlciByZWFjaCBzY3JlZW4sIGFzIG91cgorIyBGbG93IGNvbnRyb2wgcHJv
ZHVjZXMgdHJvdWJsZS4gXlMgdW5kIF5RIHdpbGwgbmV2ZXIgcmVhY2ggc2NyZWVuLCBhcyBvdXIK
ICMgdGVybWluYWxzIGNhdGNoIHRoZW0gbG9jYWxseS4gV2hvIGNhbiBleHBsYWluIHRoYXQgdG8g
bWU/OgogI2Zsb3cgb258b2ZmfGF1dG8gW2ludGVycnVwdF0KIAotIyBMb25nIExpbmVzIGdldCB3
cmFwcGVkIGFyb3VuZCAodGhlIGJhY2sgb2YgeW91ciB0ZXJtaW5hbCkuIFRoaXMgaXMgdGhlIAor
IyBMb25nIGxpbmVzIGdldCB3cmFwcGVkIGFyb3VuZCAodGhlIGJhY2sgb2YgeW91ciB0ZXJtaW5h
bCkuIFRoaXMgaXMgdGhlCiAjIGRlZmF1bHQgZm9yIHZ0MTAwLiBCdXQgbm93IHByb2dyYW1zIG1h
a2UgZGlmZmVyZW50IGFzdW1wdGlvbnMgYWJvdXQgeW91cgogIyB0ZXJtaW5hbC4gWW91IG1heSBm
aW5kIHR3byBsaW5lZmVlZHMgd2hlcmUgeW91J2QgZXhwZWN0IG9uZSwgb3IgeW91IG1heQogIyBi
ZSBjb25mcm9udGVkIHdpdGggYSB0cnVuY2F0ZWQgbGluZS4gQ3VycmVudGx5IHRoZXJlIGlzIG5v
IGZpeCwgYnV0IHByZXNzaW5nCkBAIC0xMDYsMTAgKzEwNiwxMCBAQAogIyB0aGUgYXV0b2FrYSBh
bGxvd3MgeW91IHRvIHNlZSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBzaGVsbCBjb21tYW5kIGlu
IHRoZQogIyB3aW5kb3cgbmFtZSBmaWVsZC4gVG8gdXNlIHRoYXQsIHlvdXIgc2hlbGwgcHJvbXB0
IG11c3QgY29udGFpbiBeW2teW1wgb3IKICMgeW91IHdpbGwgc2VlIHRoZSBzdHJpbmcgIihpbml0
KSIgYXMgYSBuYW1lLgotIyBpbiBteSAuY3NocmMgSSBtYXkgdXNlIHRoaXMgZm9yIGEgd29uZGVy
ZnVsbCB0Y3NoLXByb21wdDoKKyMgaW4gbXkgLmNzaHJjIEkgbWF5IHVzZSB0aGlzIGZvciBhIHdv
bmRlcmZ1bCB0Y3NoLXByb21wdDoKICMJc2V0IHByb21wdD0iJXteW2teW1xcJX0laCAlYzIoJW0p
JSMgIgogIwotIyBkZWZpbmluZyBhIHNoZWxsYWthIHRoYXQgY29udGFpbnMgYSBwaXBlLXN5bWJv
bCAofCkgYWN0aXZpdGVzIHRoZQorIyBkZWZpbmluZyBhIHNoZWxsYWthIHRoYXQgY29udGFpbnMg
YSBwaXBlLXN5bWJvbCAofCkgYWN0aXZhdGVzIHRoZQogIyBhdXRvYWthIGZlYXR1cmUuIFRvIHRo
ZSBsZWZ0IG9mIHRoYXQgfCB5b3Ugc3BlY2lmeSBhIGNvbnN0YW50IHBhcnQgb2YKICMgeW91ciBw
cm9tcHQgYXMgYSB0cmlnZ2VyLCB0byB0aGUgcmlnaHQgeW91IG1heSBwbGFjZSBhIGRlZmF1bHQg
c3RyaW5nCiAjIGFzIGluCkBAIC0xMjEsOCArMTIxLDggQEAKICMgLi4uIG5vdyBhIGxpdHRsZSBi
aXQgb2Yga2V5IGJpbmRpbmdzCiAjIEluIGNhc2Ugd2UgZG9uJ3QgaGF2ZSB3cml0ZSBwZXJtaXNz
aW9uIGZvciAvZXRjL3V0bXAgKG5vIHMtYml0KQogIyB3ZSBjcmVhdGUgZXZlbiBsb2NhbCB3aW5k
b3dzIHZpYSBybG9naW4uIC0+IEV0IHZvaWxhOiBhIHV0bXAtc2xvdAotIyB1dG1wLXNsb3RzIGFy
ZSBzdHJvbmdseSByZWNvbWVuZGVkIHRvIGtlZXAgc2NjcyBhbmQgdGFsayBoYXBweS4KLSMgKHRo
dXMgd2UgaGF2ZSBeQSMgb3IuIF5BYyBmb3Igd2luZG93Y3JlYXRpb24gd2l0aCBvciB3aXRob3V0
IHV0bXAtc2xvdC4pCisjIHV0bXAtc2xvdHMgYXJlIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGtl
ZXAgc2NjcyBhbmQgdGFsayBoYXBweS4KKyMgKHRodXMgd2UgaGF2ZSBeQSMgb3IuIF5BYyBmb3Ig
d2luZG93IGNyZWF0aW9uIHdpdGggb3Igd2l0aG91dCB1dG1wLXNsb3QuKQogIyBidXQgaWYgd2Ug
cnVuIHN1aWQtcm9vdCwgd2UgcHJvZHVjZSBhbGwgdGhlIHJsb2dpbnMgd2l0aCAtbG4sIAogIyBh
cyBub2JvZHkgc2hhbGwgcmVmZXIgdG8gdGhlc2UgcHR5J3MuCiBiaW5kICchJyBzY3JlZW4gLWxu
IC1rIGZhdWk0MSBybG9naW4gZmF1aTQxCkBAIC0xNTEsNyArMTUxLDcgQEAKICMgV2hhdCBoYXBw
ZW5zLCB3aGVuIHlvdSAndGhpbmsgZW1hY3MnIGFuZCB3YW50IHRvIGVyYXNlIGEgd2hvbGUKICMg
bGluZT8gWW91IHR5cGUgXkFeSyByaWdodD8gVW5kZXIgc2NyZWVuIGl0IHNob3VsZCBiZSBeQWFe
Sy4gQnV0Li4uCiAjIGtpbGxpbmcgdGhlIHdpbmRvdyB3b3VsZCBiZSBhIHJlYWwgcHVuaXNobWVu
dCBmb3IgYSBsaXR0bGUgbWlzdHlwaW5nLgotYmluZCBrCQkjd293ISBJIGV2ZW4gYW1hbmdlIHRv
IHR5cGUgXkFrIGJ5IGFjY2lkZW50LgorYmluZCBrCQkjd293ISBJIGV2ZW4gbWFuZ2UgdG8gdHlw
ZSBeQWsgYnkgYWNjaWRlbnQuCiAjYmluZCBeawogI2JpbmQgSyBraWxsCiAKZGlmZiAtdXIgc2Ny
ZWVuLm9yaWcvbGF5ZXIuYyBzY3JlZW4vbGF5ZXIuYwotLS0gc2NyZWVuLm9yaWcvbGF5ZXIuYwky
MDIzLTA2LTAxIDE0OjU4OjE3LjI0MTY2NTAzMiArMDMwMAorKysgc2NyZWVuL2xheWVyLmMJMjAy
Mi0wMS0yOCAxNzowNjowMi42ODY2MTE5OTggKzAzMDAKQEAgLTg3NiwyNiArODc2LDIyIEBACiB7
CiAgIFZBX0xJU1QoYXApCiAgIGNoYXIgYnVmW01BWFBBVEhMRU4qMl07Ci0gIHNzaXplX3QgbGVu
OwotICBjb25zdCBpbnQgZXJybGVuID0gZXJyID8gMTAwIDogMDsKKyAgY2hhciAqcCA9IGJ1ZjsK
ICAgc3RydWN0IGNhbnZhcyAqY3Y7CiAKICAgVkFfU1RBUlQoYXAsIGZtdCk7CiAgIGZtdCA9IERv
TkxTKGZtdCk7Ci0gIGxlbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpIC0gZXJybGVuLCBm
bXQsIFZBX0FSR1MoYXApKTsKKyAgKHZvaWQpdnNucHJpbnRmKHAsIHNpemVvZihidWYpIC0gMTAw
LCBmbXQsIFZBX0FSR1MoYXApKTsKICAgVkFfRU5EKGFwKTsKIAotICBpZiAobGVuIDwgMCkgewot
ICAgIHN0cm5jcHkoYnVmLCBmbXQsIHNpemVvZihidWYpIC0gZXJybGVuKTsKLSAgICBidWZbc2l6
ZW9mKGJ1ZikgLSBlcnJsZW4gLSAxXSA9IDA7Ci0gIH0KICAgaWYgKGVycikgewotICAgIGNvbnN0
IGNoYXIgKnN0cmVyciA9IHN0cmVycm9yKGVycik7Ci0gICAgaWYgKHN0cmVycikgewotICAgICAg
c3RybmNhdChidWYsICI6ICIsIDIpOwotICAgICAgc3RybmNhdChidWYsIHN0cmVyciwgZXJybGVu
IC0gMyk7Ci0gICAgfQorICAgIHAgKz0gc3RybGVuKHApOworICAgICpwKysgPSAnOic7CisgICAg
KnArKyA9ICcgJzsKKyAgICBzdHJuY3B5KHAsIHN0cmVycm9yKGVyciksIGJ1ZiArIHNpemVvZihi
dWYpIC0gcCAtIDEpOworICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKICAgfQorCiAgIGRl
YnVnMigiTE1zZygnJXMnKSAoJSN4KTtcbiIsIGJ1ZiwgKHVuc2lnbmVkIGludClmbGF5ZXIpOwog
ICBmb3IgKGRpc3BsYXkgPSBkaXNwbGF5czsgZGlzcGxheTsgZGlzcGxheSA9IGRpc3BsYXktPmRf
bmV4dCkgewogICAgIGZvciAoY3YgPSBEX2N2bGlzdDsgY3Y7IGN2ID0gY3YtPmNfbmV4dCkKQEAg
LTk0Myw3ICs5MzksNyBAQAogICBmb3IgKGwgPSBsYXk7IGw7IGwgPSBsLT5sX25leHQpIHsKICAg
ICBpZiAobC0+bF9sYXlmbiA9PSAmV2luTGYgfHwgbC0+bF9sYXlmbiA9PSAmQmxhbmtMZikKICAg
ICAgIGJyZWFrOwotICAgIGRlYnVnMSgiLSBraWxsaW5nICVwXG4iLCBsKTsKKyAgICBkZWJ1ZzEo
Ii0ga2lsbGluZyAlI3hcbiIsIGwpOwogICAgIGlmIChvbGRmbGF5ZXIgPT0gbCkKICAgICAgIG9s
ZGZsYXllciA9IDA7CiAgICAgZm9yIChjdiA9IGwtPmxfY3ZsaXN0OyBjdjsgY3YgPSBuY3YpIHsK
QEAgLTk3Nyw3ICs5NzMsNyBAQAogICAgIE1zZygwLCAiTm8gbWVtb3J5IGZvciBsYXllciBzdHJ1
Y3QiKTsKICAgICAgIHJldHVybiAtMTsKICAgfQotICBkZWJ1ZzIoIkVudGVyaW5nIG5ldyBsYXll
ciBvbiB0b3Agb2YgJXA6ICVwXG4iLCAodW5zaWduZWQgaW50KWZsYXllciwgbmV3bGF5KTsKKyAg
ZGVidWcyKCJFbnRlcmluZyBuZXcgbGF5ZXIgb24gdG9wIG9mICUjeDogJSN4XG4iLCAodW5zaWdu
ZWQgaW50KWZsYXllciwgbmV3bGF5KTsKICAgZGF0YSA9IDA7CiAgIGlmIChkYXRhc2l6ZSkgewog
ICAgIGlmICgoZGF0YSA9IGNhbGxvYygxLCBkYXRhc2l6ZSkpID09IDApIHsKZGlmZiAtdXIgc2Ny
ZWVuLm9yaWcvbGF5ZXIuaCBzY3JlZW4vbGF5ZXIuaAotLS0gc2NyZWVuLm9yaWcvbGF5ZXIuaAky
MDIzLTA2LTAxIDE0OjU4OjE3LjI0MTY2NTAzMiArMDMwMAorKysgc2NyZWVuL2xheWVyLmgJMjAy
Mi0wMS0yOCAxNzowNjowMi42ODY2MTE5OTggKzAzMDAKQEAgLTEwNiw3ICsxMDYsNyBAQAogCSAg
ZGVidWcoIkxheUNhbGxVcFxuIik7CQkJCVwKIAkgIGZsYXllciA9IGZsYXllci0+bF9uZXh0OwkJ
CVwKIAkgIG9sZGN2bGlzdCA9IGZsYXllci0+bF9jdmxpc3Q7CQkJXAotCSAgZGVidWcxKCJvbGRj
dmxpc3Q6ICVwXG4iLCBvbGRjdmxpc3QpOwkJXAorCSAgZGVidWcxKCJvbGRjdmxpc3Q6ICV4XG4i
LCBvbGRjdmxpc3QpOwkJXAogCSAgZmxheWVyLT5sX2N2bGlzdCA9IG9sZGxheS0+bF9jdmxpc3Q7
CQlcCiAJICBmb3IgKGN2ID0gZmxheWVyLT5sX2N2bGlzdDsgY3Y7IGN2ID0gY3YtPmNfbG5leHQp
CVwKIAkJY3YtPmNfbGF5ZXIgPSBmbGF5ZXI7CQkJXApkaWZmIC11ciBzY3JlZW4ub3JpZy9saXN0
X3dpbmRvdy5jIHNjcmVlbi9saXN0X3dpbmRvdy5jCi0tLSBzY3JlZW4ub3JpZy9saXN0X3dpbmRv
dy5jCTIwMjMtMDYtMDEgMTQ6NTg6MTcuMjQyNjY1MDM0ICswMzAwCisrKyBzY3JlZW4vbGlzdF93
aW5kb3cuYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY4NjYxMTk5OCArMDMwMApAQCAtNTE1LDcgKzUx
NSw3IEBACiAKICAgaWYgKG9uYmxhbmspCiAgICAgewotICAgICAgZGVidWczKCJmbGF5ZXIgJXAg
JWQgJXhcbiIsIGZsYXllciwgZmxheWVyLT5sX3dpZHRoLCBmbGF5ZXItPmxfaGVpZ2h0KTsKKyAg
ICAgIGRlYnVnMygiZmxheWVyICV4ICVkICV4XG4iLCBmbGF5ZXIsIGZsYXllci0+bF93aWR0aCwg
ZmxheWVyLT5sX2hlaWdodCk7CiAgICAgICBpZiAoIWRpc3BsYXkpCiAJewogCSAgTE1zZygwLCAi
d2luZG93bGlzdCAtYjogZGlzcGxheSByZXF1aXJlZCIpOwpkaWZmIC11ciBzY3JlZW4ub3JpZy9s
b2FkYXYuYyBzY3JlZW4vbG9hZGF2LmMKLS0tIHNjcmVlbi5vcmlnL2xvYWRhdi5jCTIwMjMtMDYt
MDEgMTQ6NTg6MTcuMjQyNjY1MDM0ICswMzAwCisrKyBzY3JlZW4vbG9hZGF2LmMJMjAyMi0wMS0y
OCAxNzowNjowMi42ODY2MTE5OTggKzAzMDAKQEAgLTg1LDEzICs4NSwxMyBAQAogCiAgIGlmICgo
ZnAgPSBzZWNmb3BlbigiL3Byb2MvbG9hZGF2ZyIsICJyIikpID09IE5VTEwpCiAgICAgcmV0dXJu
IDA7Ci0gIHMgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCk7CisgICpidWYgPSAwOworICBm
Z2V0cyhidWYsIHNpemVvZihidWYpLCBmcCk7CiAgIGZjbG9zZShmcCk7Ci0gIGlmIChzID09IE5V
TEwpCi0gICAgcmV0dXJuIDA7CiAgIC8qIGNhbid0IHVzZSBmc2NhbmYgYmVjYXVzZSB0aGUgZGVj
aW1hbCBwb2ludCBzeW1ib2wgZGVwZW5kcyBvbgogICAgKiB0aGUgbG9jYWxlIGJ1dCB0aGUga2Vy
bmVsIHVzZXMgYWx3YXlzICcuJy4KICAgICovCisgIHMgPSBidWY7CiAgIGZvciAoaSA9IDA7IGkg
PCAoTE9BREFWX05VTSA+IDMgPyAzIDogTE9BREFWX05VTSk7IGkrKykKICAgICB7CiAgICAgICBk
ID0gZSA9IDA7CmRpZmYgLXVyIHNjcmVlbi5vcmlnL01ha2VmaWxlLmluIHNjcmVlbi9NYWtlZmls
ZS5pbgotLS0gc2NyZWVuLm9yaWcvTWFrZWZpbGUuaW4JMjAyMy0wNi0wMSAxNDo1ODoxNy4yMjg2
NjUwMDIgKzAzMDAKKysrIHNjcmVlbi9NYWtlZmlsZS5pbgkyMDIyLTAxLTI4IDE3OjA2OjAyLjY2
MjYxMTQwMyArMDMwMApAQCAtNjcsNyArNjcsNyBAQAogCXNjaGVkLmMgdGVsbi5jIG5ldGhhY2su
YyBlbmNvZGluZy5jIGNhbnZhcy5jIGxheW91dC5jIHZpZXdwb3J0LmMgXAogCWxpc3RfZGlzcGxh
eS5jIGxpc3RfZ2VuZXJpYy5jIGxpc3Rfd2luZG93LmMKIE9GSUxFUz0Jc2NyZWVuLm8gYW5zaS5v
IGZpbGVpby5vIG1hcmsubyBtaXNjLm8gcmVzaXplLm8gc29ja2V0Lm8gXAotCXNlYXJjaC5vIHR0
eS5vIHRlcm0ubyB3aW5kb3cubyB1dG1wLm8gbG9hZGF2Lm8gaGVscC5vIFwKKwlzZWFyY2gubyB0
dHkubyB0ZXJtLm8gd2luZG93Lm8gdXRtcC5vIGxvYWRhdi5vIHB1dGVudi5vIGhlbHAubyBcCiAJ
dGVybWNhcC5vIGlucHV0Lm8gYXR0YWNoZXIubyBwdHkubyBwcm9jZXNzLm8gZGlzcGxheS5vIGNv
bW0ubyBcCiAJa21hcGRlZi5vIGFjbHMubyBicmFpbGxlLm8gYnJhaWxsZV90c2kubyBsb2dmaWxl
Lm8gbGF5ZXIubyBcCiAJbGlzdF9nZW5lcmljLm8gbGlzdF9kaXNwbGF5Lm8gbGlzdF93aW5kb3cu
byBcCkBAIC05MSwxNSArOTEsMTUgQEAKIAktaWYgWyAtZiAkKERFU1RESVIpJChiaW5kaXIpL3Nj
cmVlbiBdICYmIFsgISAtZiAkKERFU1RESVIpJChiaW5kaXIpL3NjcmVlbi5vbGQgXTsgdGhlbiBt
diAkKERFU1RESVIpJChiaW5kaXIpL3NjcmVlbiAkKERFU1RESVIpJChiaW5kaXIpL3NjcmVlbi5v
bGQ7IGZpCiAJcm0gLWYgJChERVNURElSKSQoYmluZGlyKS9zY3JlZW4KIAkoY2QgJChERVNURElS
KSQoYmluZGlyKSAmJiBsbiAtZiAtcyAkKFNDUkVFTikgc2NyZWVuKQotCWNwICQoc3JjZGlyKS91
dGY4ZW5jb2RpbmdzLz8/ICQoUlBNX0JVSUxEX1JPT1QpJChTQ1JFRU5FTkNPRElOR1MpCisJY3Ag
JChzcmNkaXIpL3V0ZjhlbmNvZGluZ3MvPz8gJChERVNURElSKSQoU0NSRUVORU5DT0RJTkdTKQog
CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbnN0YWxsOiBpbnN0YWxsZGlycyBpbnN0YWxsX2Jp
bgotCXB1c2hkIGRvYyA7ICQoTUFLRSkgaW5zdGFsbDsgcG9wZAotCS0oZXhwb3J0IFRFUk1JTkZP
PSIkKERFU1RESVIpJChkYXRhZGlyKS90ZXJtaW5mbyI7IGlmIFsgLWQgIiQkVEVSTUlORk8iIF07
IHRoZW4gXAotCQl0aWMgJHtzcmNkaXJ9L3Rlcm1pbmZvL3NjcmVlbmluZm8uc3JjOyBcCi0JCWNo
bW9kIDY0NCAiJCRURVJNSU5GTyIvcy9zY3JlZW4qOyBcCi0JZmkpCisJY2QgZG9jIDsgJChNQUtF
KSBpbnN0YWxsCisJLWlmIFsgLWQgJChERVNURElSKS91c3IvbGliL3Rlcm1pbmZvIF07IHRoZW4g
XAorCQlQQVRIPSIkJFBBVEg6L3Vzci81YmluIiB0aWMgJHtzcmNkaXJ9L3Rlcm1pbmZvL3NjcmVl
bmluZm8uc3JjOyBcCisJCWNobW9kIDY0NCAkKERFU1RESVIpL3Vzci9saWIvdGVybWluZm8vcy9z
Y3JlZW4qOyBcCisJZmkKICMgQmV0dGVyIGRvIHRoaXMgYnkgaGFuZC4gRS5nLiB1bmRlciBSQ1Mu
Li4KICMJY2F0ICR7c3JjZGlyfS90ZXJtaW5mby9zY3JlZW5jYXAgPj4gL2V0Yy90ZXJtY2FwCiAJ
QGVjaG8gInRlcm1jYXAgZW50cnkgKCR7c3JjZGlyfS90ZXJtaW5mby9zY3JlZW5jYXApIHNob3Vs
ZCBiZSBpbnN0YWxsZWQgbWFudWFsbHkuIgpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIGluc3RhbGxk
aXJzOgogIyBQYXRoIGxlYWRpbmcgdG8gRVRDU0NSRUVOUkMgYW5kIFNvY2tldGRpcmVjdG9yeSBu
b3QgY2hlY2tlZC4KLQkkKHNyY2RpcikvZXRjL21raW5zdGFsbGRpcnMgJChERVNURElSKSQoYmlu
ZGlyKSAkKFJQTV9CVUlMRF9ST09UKSQoU0NSRUVORU5DT0RJTkdTKQorCSQoc3JjZGlyKS9ldGMv
bWtpbnN0YWxsZGlycyAkKERFU1RESVIpJChiaW5kaXIpICQoREVTVERJUikkKFNDUkVFTkVOQ09E
SU5HUykKIAljZCBkb2MgOyAkKE1BS0UpIGluc3RhbGxkaXJzCiAKIHVuaW5zdGFsbDogLnZlcnNp
b24KZGlmZiAtdXIgc2NyZWVuLm9yaWcvbWFyay5jIHNjcmVlbi9tYXJrLmMKLS0tIHNjcmVlbi5v
cmlnL21hcmsuYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjI0MjY2NTAzNCArMDMwMAorKysgc2NyZWVu
L21hcmsuYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY5MDYxMjA5NyArMDMwMApAQCAtNDUsMTIgKzQ1
LDEyIEBACiAgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEh
ISEhISEhISEhISEhIQogICovCiAKLXN0YXRpYyBpbnQgIGlzX2xldHRlciBfX1AoKGludCkpOwor
c3RhdGljIGludCAgaXNfbGV0dGVyIF9fUCgoY2hhcikpOwogc3RhdGljIHZvaWQgbmV4dHdvcmQg
X19QKChpbnQgKiwgaW50ICosIGludCwgaW50KSk7CiBzdGF0aWMgaW50ICBsaW5lc3RhcnQgX19Q
KChpbnQpKTsKIHN0YXRpYyBpbnQgIGxpbmVlbmQgX19QKChpbnQpKTsKLXN0YXRpYyBpbnQgIHJl
bSBfX1AoKGludCwgaW50ICwgaW50ICwgaW50ICwgaW50ICwgY2hhciAqLCBpbnQpKTsKLXN0YXRp
YyBpbnQgIGVxIF9fUCgoaW50LCBpbnQgKSk7CitzdGF0aWMgaW50ICByZW0gX19QKChpbnQsIGlu
dCwgaW50LCBpbnQsIGludCwgY2hhciAqLCBpbnQpKTsKK3N0YXRpYyBpbnQgIGVxIF9fUCgoaW50
LCBpbnQpKTsKIHN0YXRpYyBpbnQgIE1hcmtTY3JvbGxEb3duRGlzcGxheSBfX1AoKGludCkpOwog
c3RhdGljIGludCAgTWFya1Njcm9sbFVwRGlzcGxheSBfX1AoKGludCkpOwogCkBAIC02OSw3NiAr
NjksNzIgQEAKIGludCBwYXN0ZWZvbnQgPSAxOwogI2VuZGlmCiAKLXN0cnVjdCBMYXlGdW5jcyBN
YXJrTGYgPQotewotICBNYXJrUHJvY2VzcywKLSAgTWFya0Fib3J0LAotICBNYXJrUmVkaXNwbGF5
TGluZSwKLSAgRGVmQ2xlYXJMaW5lLAotICBNYXJrUmV3cml0ZSwKLSAgRGVmUmVzaXplLAotICBE
ZWZSZXN0b3JlLAotICAwCitzdHJ1Y3QgTGF5RnVuY3MgTWFya0xmID0geworCU1hcmtQcm9jZXNz
LAorCU1hcmtBYm9ydCwKKwlNYXJrUmVkaXNwbGF5TGluZSwKKwlEZWZDbGVhckxpbmUsCisJTWFy
a1Jld3JpdGUsCisJRGVmUmVzaXplLAorCURlZlJlc3RvcmUsCisJMAogfTsKIAotaW50IGpvaW5f
d2l0aF9jciA9ICAwOworaW50IGpvaW5fd2l0aF9jciA9IDA7CiBpbnQgY29tcGFjdGhpc3QgPSAw
OwogCiB1bnNpZ25lZCBjaGFyIG1hcmtfa2V5X3RhYlsyNTZdOyAvKiB0aGlzIGFycmF5IG11c3Qg
YmUgaW5pdGlhbGlzZWQgZmlyc3QhICovCiAKIHN0YXRpYyBzdHJ1Y3QgbWFya2RhdGEgKm1hcmtk
YXRhOwogCi0KIC8qCiAgKiBWSSBsaWtlIGlzX2xldHRlcjogMCAtIHdoaXRlc3BhY2UKICAqICAg
ICAgICAgICAgICAgICAgICAxIC0gbGV0dGVyCi0gKgkJICAgICAgMiAtIG90aGVyCisgKiAgICAg
ICAgICAgICAgICAgICAgMiAtIG90aGVyCiAgKi8KLXN0YXRpYyBpbnQgaXNfbGV0dGVyKGMpCi1j
aGFyIGM7CitzdGF0aWMgaW50Citpc19sZXR0ZXIoY2hhciBjKQogewotICBpZiAoKGMgPj0gJ2En
ICYmIGMgPD0gJ3onKSB8fAotICAgICAgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fAotICAgICAg
KGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fAotICAgICAgYyA9PSAnXycgfHwgYyA9PSAnLicgfHwK
LSAgICAgIGMgPT0gJ0AnIHx8IGMgPT0gJzonIHx8Ci0gICAgICBjID09ICclJyB8fCBjID09ICch
JyB8fAotICAgICAgYyA9PSAnLScgfHwgYyA9PSAnKycpCisJaWYgKChjID49ICdhJyAmJiBjIDw9
ICd6JykgfHwKKwkgICAgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fAorCSAgICAoYyA+PSAnMCcg
JiYgYyA8PSAnOScpIHx8CisJICAgIGMgPT0gJ18nIHx8IGMgPT0gJy4nIHx8CisJICAgIGMgPT0g
J0AnIHx8IGMgPT0gJzonIHx8CisJICAgIGMgPT0gJyUnIHx8IGMgPT0gJyEnIHx8CisJICAgIGMg
PT0gJy0nIHx8IGMgPT0gJysnKQogICAgIC8qIHRodXMgd2UgY2FuIGNhdGNoIGVtYWlsLWFkZHJl
c3NlcyBhcyBhIHdvcmQgOi0pICovCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UgaWYgKGMgIT0gJyAn
KQotICAgIHJldHVybiAyOwotICByZXR1cm4gMDsKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAoYyAh
PSAnICcpCisJCXJldHVybiAyOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1saW5lc3Rh
cnQoeSkKLWludCB5OworbGluZXN0YXJ0KGludCB5KQogewotICByZWdpc3RlciBpbnQgeDsKLSAg
cmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqaTsKKwlyZWdpc3RlciBpbnQgeDsKKwlyZWdpc3RlciB1
bnNpZ25lZCBjaGFyICppOwogCi0gIGZvciAoeCA9IG1hcmtkYXRhLT5sZWZ0X21hciwgaSA9IFdJ
Tih5KS0+aW1hZ2UgKyB4OyB4IDwgZm9yZS0+d193aWR0aCAtIDE7IHgrKykKLSAgICBpZiAoKmkr
KyAhPSAnICcpCi0gICAgICBicmVhazsKLSAgaWYgKHggPT0gZm9yZS0+d193aWR0aCAtIDEpCi0g
ICAgeCA9IG1hcmtkYXRhLT5sZWZ0X21hcjsKLSAgcmV0dXJuIHg7CisJZm9yICh4ID0gbWFya2Rh
dGEtPmxlZnRfbWFyLCBpID0gV0lOKHkpLT5pbWFnZSArIHg7IHggPCBmb3JlLT53X3dpZHRoIC0g
MTsgeCsrKQorCQlpZiAoKmkrKyAhPSAnICcpCisJCQlicmVhazsKKwlpZiAoeCA9PSBmb3JlLT53
X3dpZHRoIC0gMSkKKwkJeCA9IG1hcmtkYXRhLT5sZWZ0X21hcjsKKwlyZXR1cm4geDsKIH0KIAog
c3RhdGljIGludAotbGluZWVuZCh5KQotaW50IHk7CitsaW5lZW5kKGludCB5KQogewotICByZWdp
c3RlciBpbnQgeDsKLSAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqaTsKKwlyZWdpc3RlciBpbnQg
eDsKKwlyZWdpc3RlciB1bnNpZ25lZCBjaGFyICppOwogCi0gIGZvciAoeCA9IG1hcmtkYXRhLT5y
aWdodF9tYXIsIGkgPSBXSU4oeSktPmltYWdlICsgeDsgeCA+PSAwOyB4LS0pCi0gICAgaWYgKCpp
LS0gIT0gJyAnKQotICAgICAgYnJlYWs7Ci0gIGlmICh4IDwgMCkKLSAgICB4ID0gbWFya2RhdGEt
PmxlZnRfbWFyOwotICByZXR1cm4geDsKKwlmb3IgKHggPSBtYXJrZGF0YS0+cmlnaHRfbWFyLCBp
ID0gV0lOKHkpLT5pbWFnZSArIHg7IHggPj0gMDsgeC0tKQorCQlpZiAoKmktLSAhPSAnICcpCisJ
CQlicmVhazsKKwlpZiAoeCA8IDApCisJCXggPSBtYXJrZGF0YS0+bGVmdF9tYXI7CisJcmV0dXJu
IHg7CiB9CiAKIC8qCkBAIC0xNDksNTAgKzE0NSw1MCBAQAogc3RhdGljIGludAogbmV4dGNoYXIo
aW50ICp4cCwgaW50ICp5cCwgaW50IGRpcmVjdGlvbiwgY2hhciB0YXJnZXQsIGludCBudW0pCiB7
Ci0gIGludCB3aWR0aDsgIC8qIHdpZHRoIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gKi8KLSAgaW50
IHg7ICAgICAgLyogeCBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4g
Ki8KLSAgaW50IHN0ZXA7ICAgLyogYW1vdW50IHRvIGluY3JlbWVudCB4ICgrMSBvciAtMSkgKi8K
LSAgaW50IGFkanVzdDsgLyogRmluYWwgYWRqdXN0bWVudCBvZiBjdXJzb3IgcG9zaXRpb24uICov
Ci0gIGNoYXIgKmRpc3BsYXllZF9saW5lOyAvKiBMaW5lIGluIHdoaWNoIHNlYXJjaCB0YWtlcyBw
bGFjZS4gKi8KLSAKLSAgZGVidWcoIm5leHRjaGFyXG4iKTsKLSAKLSAgeCA9ICp4cDsKLSAgc3Rl
cCA9IDE7Ci0gIGFkanVzdCA9IDA7Ci0gIHdpZHRoID0gZm9yZS0+d193aWR0aDsKLSAgZGlzcGxh
eWVkX2xpbmUgPSAoY2hhciAqKVdJTigqeXApIC0+IGltYWdlOwotIAotICBzd2l0Y2goZGlyZWN0
aW9uKSB7Ci0gICAgY2FzZSAndCc6Ci0gICAgICBhZGp1c3QgPSAtMTsgLyogZmFsbCB0aHJvdWdo
ICovCi0gICAgY2FzZSAnZic6Ci0gICAgICBzdGVwID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNh
c2UgJ1QnOgotICAgICAgYWRqdXN0ID0gMTsgLyogZmFsbCB0aHJvdWdoICovCi0gICAgY2FzZSAn
Ric6Ci0gICAgICBzdGVwID0gLTE7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
QVNTRVJUKDApOwotICB9Ci0gCi0gIHggKz0gc3RlcDsKLSAKLSAgZGVidWcxKCJtbC0+aW1hZ2Ug
PSAlc1xuIiwgZGlzcGxheWVkX2xpbmUpOwotICBkZWJ1ZzIoIm51bSA9ICVkLCB3aWR0aCA9ICVk
XG4iLG51bSwgd2lkdGgpOwotICBkZWJ1ZzIoInggPSAlZCB0YXJnZXQgPSAlY1xuIiwgeCwgdGFy
Z2V0ICk7Ci0gCi0gIGZvciAoIDt4Pj0wICYmIHggPD0gd2lkdGg7IHggKz0gc3RlcCkgewotICAg
IGlmIChkaXNwbGF5ZWRfbGluZVt4XSA9PSB0YXJnZXQpIHsKLSAgICAgIGlmICgtLW51bSA9PSAw
KSB7Ci0gICAgICAgICp4cCA9IHggKyBhZGp1c3Q7Ci0gICAgICAgIHJldHVybiAwOwotICAgICAg
fQotICAgIH0KLSAgfQotICByZXR1cm4gLTE7CisJaW50IHdpZHRoOyAgICAgICAgICAgIC8qIHdp
ZHRoIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gKi8KKwlpbnQgeDsgICAgICAgICAgICAgICAgLyog
eCBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbi4gKi8KKwlpbnQgc3Rl
cDsgICAgICAgICAgICAgLyogYW1vdW50IHRvIGluY3JlbWVudCB4ICgrMSBvciAtMSkgKi8KKwlp
bnQgYWRqdXN0OyAgICAgICAgICAgLyogRmluYWwgYWRqdXN0bWVudCBvZiBjdXJzb3IgcG9zaXRp
b24uICovCisJY2hhciAqZGlzcGxheWVkX2xpbmU7IC8qIExpbmUgaW4gd2hpY2ggc2VhcmNoIHRh
a2VzIHBsYWNlLiAqLworCisJZGVidWcoIm5leHRjaGFyXG4iKTsKKworCXggPSAqeHA7CisJc3Rl
cCA9IDE7CisJYWRqdXN0ID0gMDsKKwl3aWR0aCA9IGZvcmUtPndfd2lkdGg7CisJZGlzcGxheWVk
X2xpbmUgPSAoY2hhciAqKVdJTigqeXApLT5pbWFnZTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7
CisJY2FzZSAndCc6CisJCWFkanVzdCA9IC0xOyAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlICdm
JzoKKwkJc3RlcCA9IDE7CisJCWJyZWFrOworCWNhc2UgJ1QnOgorCQlhZGp1c3QgPSAxOyAvKiBm
YWxsIHRocm91Z2ggKi8KKwljYXNlICdGJzoKKwkJc3RlcCA9IC0xOworCQlicmVhazsKKwlkZWZh
dWx0OgorCQlBU1NFUlQoMCk7CisJfQorCisJeCArPSBzdGVwOworCisJZGVidWcxKCJtbC0+aW1h
Z2UgPSAlc1xuIiwgZGlzcGxheWVkX2xpbmUpOworCWRlYnVnMigibnVtID0gJWQsIHdpZHRoID0g
JWRcbiIsIG51bSwgd2lkdGgpOworCWRlYnVnMigieCA9ICVkIHRhcmdldCA9ICVjXG4iLCB4LCB0
YXJnZXQpOworCisJZm9yICg7IHggPj0gMCAmJiB4IDw9IHdpZHRoOyB4ICs9IHN0ZXApIHsKKwkJ
aWYgKGRpc3BsYXllZF9saW5lW3hdID09IHRhcmdldCkgeworCQkJaWYgKC0tbnVtID09IDApIHsK
KwkJCQkqeHAgPSB4ICsgYWRqdXN0OworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXJl
dHVybiAtMTsKIH0KIAogLyoKQEAgLTIwNCwyMjIgKzIwMCwyMDEgQEAKICAqICBOV19CSUc6ICAg
ICAgICAgICAgIG1hdGNoIFdPUkRzIG5vdCB3b3JkcwogICovCiAKLSNkZWZpbmUgTldfQkFDSwkJ
KDE8PDApCi0jZGVmaW5lIE5XX0VORE9GV09SRAkoMTw8MSkKLSNkZWZpbmUgTldfTVVTVE1PVkUJ
KDE8PDIpCi0jZGVmaW5lIE5XX0JJRwkJKDE8PDMpCi0KLQorI2RlZmluZSBOV19CQUNLICAgICAg
KDE8PDApCisjZGVmaW5lIE5XX0VORE9GV09SRCAoMTw8MSkKKyNkZWZpbmUgTldfTVVTVE1PVkUg
ICgxPDwyKQorI2RlZmluZSBOV19CSUcgICAgICAgKDE8PDMpCiAKIHN0YXRpYyB2b2lkCi1uZXh0
d29yZCh4cCwgeXAsIGZsYWdzLCBudW0pCi1pbnQgKnhwLCAqeXAsIGZsYWdzLCBudW07CituZXh0
d29yZChpbnQgKnhwLCBpbnQgKnlwLCBpbnQgZmxhZ3MsIGludCBudW0pCiB7Ci0gIGludCB4eCA9
IGZvcmUtPndfd2lkdGgsIHl5ID0gZm9yZS0+d19oaXN0aGVpZ2h0ICsgZm9yZS0+d19oZWlnaHQ7
Ci0gIHJlZ2lzdGVyIGludCBzeCwgb3EsIHEsIHgsIHk7Ci0gIHN0cnVjdCBtbGluZSAqbWw7Ci0K
LSAgeCA9ICp4cDsKLSAgeSA9ICp5cDsKLSAgc3ggPSAoZmxhZ3MgJiBOV19CQUNLKSA/IC0xIDog
MTsKLSAgaWYgKChmbGFncyAmIE5XX0VORE9GV09SRCkgJiYgKGZsYWdzICYgTldfTVVTVE1PVkUp
KQotICAgIHggKz0gc3g7Ci0gIG1sID0gV0lOKHkpOwotICBmb3IgKG9xID0gLTE7IDsgeCArPSBz
eCwgb3EgPSBxKQotICAgIHsKLSAgICAgIGlmICh4ID49IHh4IHx8IHggPCAwKQotCXEgPSAwOwot
ICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBOV19CSUcpCi0gICAgICAgIHEgPSBtbC0+aW1hZ2VbeF0g
PT0gJyAnOwotICAgICAgZWxzZQotICAgICAgICBxID0gaXNfbGV0dGVyKG1sLT5pbWFnZVt4XSk7
Ci0gICAgICBpZiAob3EgPj0gMCAmJiBvcSAhPSBxKQotCXsKLQkgIGlmIChvcSA9PSAwIHx8ICEo
ZmxhZ3MgJiBOV19FTkRPRldPUkQpKQotCSAgICAqeHAgPSB4OwotCSAgZWxzZQotCSAgICAqeHAg
PSB4LXN4OwotCSAgKnlwID0geTsKLQkgIGlmICgoIShmbGFncyAmIE5XX0VORE9GV09SRCkgJiYg
cSkgfHwKLQkgICAgICAoKGZsYWdzICYgTldfRU5ET0ZXT1JEKSAmJiBvcSkpCi0JICAgIHsKLQkg
ICAgICBpZiAoLS1udW0gPD0gMCkKLQkgICAgICAgIHJldHVybjsKLQkgICAgfQotCX0KLSAgICAg
IGlmICh4ID09IHh4KQotCXsKLQkgIHggPSAtMTsKLQkgIGlmICgrK3kgPj0geXkpCi0JICAgIHJl
dHVybjsKLQkgIG1sID0gV0lOKHkpOwotCX0KLSAgICAgIGVsc2UgaWYgKHggPCAwKQotCXsKLQkg
IHggPSB4eDsKLQkgIGlmICgtLXkgPCAwKQotCSAgICByZXR1cm47Ci0JICBtbCA9IFdJTih5KTsK
KwlpbnQgeHggPSBmb3JlLT53X3dpZHRoLCB5eSA9IGZvcmUtPndfaGlzdGhlaWdodCArIGZvcmUt
PndfaGVpZ2h0OworCXJlZ2lzdGVyIGludCBzeCwgb3EsIHEsIHgsIHk7CisJc3RydWN0IG1saW5l
ICptbDsKKworCXggPSAqeHA7CisJeSA9ICp5cDsKKwlzeCA9IChmbGFncyAmIE5XX0JBQ0spID8g
LTEgOiAxOworCWlmICgoZmxhZ3MgJiBOV19FTkRPRldPUkQpICYmIChmbGFncyAmIE5XX01VU1RN
T1ZFKSkKKwkJeCArPSBzeDsKKwltbCA9IFdJTih5KTsKKwlmb3IgKG9xID0gLTE7OyB4ICs9IHN4
LCBvcSA9IHEpIHsKKwkJaWYgKHggPj0geHggfHwgeCA8IDApCisJCQlxID0gMDsKKwkJZWxzZSBp
ZiAoZmxhZ3MgJiBOV19CSUcpCisJCQlxID0gbWwtPmltYWdlW3hdID09ICcgJzsKKwkJZWxzZQor
CQkJcSA9IGlzX2xldHRlcihtbC0+aW1hZ2VbeF0pOworCisJCWlmIChvcSA+PSAwICYmIG9xICE9
IHEpIHsKKwkJCWlmIChvcSA9PSAwIHx8ICEoZmxhZ3MgJiBOV19FTkRPRldPUkQpKQorCQkJCSp4
cCA9IHg7CisJCQllbHNlCisJCQkJKnhwID0geCAtIHN4OworCQkJKnlwID0geTsKKworCQkJaWYg
KCghKGZsYWdzICYgTldfRU5ET0ZXT1JEKSAmJiBxKSB8fCAoKGZsYWdzICYgTldfRU5ET0ZXT1JE
KSAmJiBvcSkpIHsKKwkJCQlpZiAoLS1udW0gPD0gMCkKKwkJCQkJcmV0dXJuOworCQkJfQorCQl9
CisKKwkJaWYgKHggPT0geHgpIHsKKwkJCXggPSAtMTsKKwkJCWlmICgrK3kgPj0geXkpCisJCQkJ
cmV0dXJuOworCQkJbWwgPSBXSU4oeSk7CisJCX0gZWxzZSBpZiAoeCA8IDApIHsKKwkJCXggPSB4
eDsKKwkJCWlmICgtLXkgPCAwKQorCQkJCXJldHVybjsKKwkJCW1sID0gV0lOKHkpOworCQl9CiAJ
fQotICAgIH0KIH0KIAotCiAvKgogICogeTEsIHkyIGFyZSBXSU4gY29vcmRpbmF0ZXMKICAqCi0g
KiByZWRpc3BsYXk6CTAgIC0gIGp1c3QgY29weQotICogCQkxICAtICByZWRpc3BsYXkgKyBjb3B5
Ci0gKgkJMiAgLSAgY291bnQgKyBjb3B5LCBkb24ndCByZWRpc3BsYXkKKyAqIHJlZGlzcGxheTog
MCAgLSAganVzdCBjb3B5CisgKiAgICAgICAgICAgIDEgIC0gIHJlZGlzcGxheSArIGNvcHkKKyAq
ICAgICAgICAgICAgMiAgLSAgY291bnQgKyBjb3B5LCBkb24ndCByZWRpc3BsYXkKICAqLwogCiBz
dGF0aWMgaW50Ci1yZW0oeDEsIHkxLCB4MiwgeTIsIHJlZGlzcGxheSwgcHQsIHllbmQpCi1pbnQg
eDEsIHkxLCB4MiwgeTIsIHJlZGlzcGxheSwgeWVuZDsKLWNoYXIgKnB0OworcmVtKGludCB4MSwg
aW50IHkxLCBpbnQgeDIsIGludCB5MiwgaW50IHJlZGlzcGxheSwgY2hhciAqcHQsIGludCB5ZW5k
KQogewotICBpbnQgaSwgaiwgZnJvbSwgdG8sIHJ5LCBjOwotICBpbnQgbCA9IDA7Ci0gIHVuc2ln
bmVkIGNoYXIgKmltOwotICBzdHJ1Y3QgbWxpbmUgKm1sOworCWludCBpLCBqLCBmcm9tLCB0bywg
cnksIGM7CisJaW50IGwgPSAwOworCXVuc2lnbmVkIGNoYXIgKmltOworCXN0cnVjdCBtbGluZSAq
bWw7CiAjaWZkZWYgRk9OVAotICBpbnQgY2YsIGNmeCwgZm9udDsKLSAgdW5zaWduZWQgY2hhciAq
Zm8sICpmb3g7CisJaW50IGNmLCBjZngsIGZvbnQ7CisJdW5zaWduZWQgY2hhciAqZm8sICpmb3g7
CiAjZW5kaWYKIAotICBtYXJrZGF0YS0+c2Vjb25kID0gMDsKLSAgaWYgKHkyIDwgeTEgfHwgKCh5
MiA9PSB5MSkgJiYgKHgyIDwgeDEpKSkKLSAgICB7Ci0gICAgICBpID0geTI7Ci0gICAgICB5MiA9
IHkxOwotICAgICAgeTEgPSBpOwotICAgICAgaSA9IHgyOwotICAgICAgeDIgPSB4MTsKLSAgICAg
IHgxID0gaTsKLSAgICB9Ci0gIHJ5ID0geTEgLSBtYXJrZGF0YS0+aGlzdF9vZmZzZXQ7Ci0KLSAg
aSA9IHkxOwotICBpZiAocmVkaXNwbGF5ICE9IDIgJiYgcHQgPT0gMCAmJiByeSA8MCkKLSAgICB7
Ci0gICAgICBpIC09IHJ5OwotICAgICAgcnkgPSAwOwotICAgIH0KLSAgZm9yICg7IGkgPD0geTI7
IGkrKywgcnkrKykKLSAgICB7Ci0gICAgICBpZiAocmVkaXNwbGF5ICE9IDIgJiYgcHQgPT0gMCAm
JiByeSA+IHllbmQpCi0JYnJlYWs7Ci0gICAgICBtbCA9IFdJTihpKTsKLSAgICAgIGZyb20gPSAo
aSA9PSB5MSkgPyB4MSA6IDA7Ci0gICAgICBpZiAoZnJvbSA8IG1hcmtkYXRhLT5sZWZ0X21hcikK
LQlmcm9tID0gbWFya2RhdGEtPmxlZnRfbWFyOwotICAgICAgZm9yICh0byA9IGZvcmUtPndfd2lk
dGgsIGltID0gbWwtPmltYWdlICsgdG87IHRvID49IDA7IHRvLS0pCi0gICAgICAgIGlmICgqaW0t
LSAhPSAnICcpCi0JICBicmVhazsKLSAgICAgIGlmIChpID09IHkyICYmIHgyIDwgdG8pCi0JdG8g
PSB4MjsKLSAgICAgIGlmICh0byA+IG1hcmtkYXRhLT5yaWdodF9tYXIpCi0JdG8gPSBtYXJrZGF0
YS0+cmlnaHRfbWFyOwotICAgICAgaWYgKHJlZGlzcGxheSA9PSAxICYmIGZyb20gPD0gdG8gJiYg
cnkgPj0wICYmIHJ5IDw9IHllbmQpCi0JTWFya1JlZGlzcGxheUxpbmUocnksIGZyb20sIHRvLCAw
KTsKLSAgICAgIGlmIChyZWRpc3BsYXkgIT0gMiAmJiBwdCA9PSAwKQkvKiBkb24ndCBjb3VudC9j
b3B5ICovCi0JY29udGludWU7Ci0gICAgICBqID0gZnJvbTsKKwltYXJrZGF0YS0+c2Vjb25kID0g
MDsKKwlpZiAoeTIgPCB5MSB8fCAoKHkyID09IHkxKSAmJiAoeDIgPCB4MSkpKSB7CisJCWkgPSB5
MjsKKwkJeTIgPSB5MTsKKwkJeTEgPSBpOworCQlpID0geDI7CisJCXgyID0geDE7CisJCXgxID0g
aTsKKwl9CisJcnkgPSB5MSAtIG1hcmtkYXRhLT5oaXN0X29mZnNldDsKKworCWkgPSB5MTsKKwlp
ZiAocmVkaXNwbGF5ICE9IDIgJiYgcHQgPT0gMCAmJiByeSA8IDApIHsKKwkJaSAtPSByeTsKKwkJ
cnkgPSAwOworCX0KKwlmb3IgKDsgaSA8PSB5MjsgaSsrLCByeSsrKSB7CisJCWlmIChyZWRpc3Bs
YXkgIT0gMiAmJiBwdCA9PSAwICYmIHJ5ID4geWVuZCkKKwkJCWJyZWFrOworCQltbCA9IFdJTihp
KTsKKwkJZnJvbSA9IChpID09IHkxKSA/IHgxIDogMDsKKworCQlpZiAoZnJvbSA8IG1hcmtkYXRh
LT5sZWZ0X21hcikKKwkJCWZyb20gPSBtYXJrZGF0YS0+bGVmdF9tYXI7CisJCWZvciAodG8gPSBm
b3JlLT53X3dpZHRoLCBpbSA9IG1sLT5pbWFnZSArIHRvOyB0byA+PSAwOyB0by0tKQorCQkJaWYg
KCppbS0tICE9ICcgJykKKwkJCQlicmVhazsKKwkJaWYgKGkgPT0geTIgJiYgeDIgPCB0bykKKwkJ
CXRvID0geDI7CisJCWlmICh0byA+IG1hcmtkYXRhLT5yaWdodF9tYXIpCisJCQl0byA9IG1hcmtk
YXRhLT5yaWdodF9tYXI7CisJCWlmIChyZWRpc3BsYXkgPT0gMSAmJiBmcm9tIDw9IHRvICYmIHJ5
ID49IDAgJiYgcnkgPD0geWVuZCkKKwkJCU1hcmtSZWRpc3BsYXlMaW5lKHJ5LCBmcm9tLCB0bywg
MCk7CisJCWlmIChyZWRpc3BsYXkgIT0gMiAmJiBwdCA9PSAwKQkvKiBkb24ndCBjb3VudC9jb3B5
ICovCisJCQljb250aW51ZTsKKwkJaiA9IGZyb207CiAjaWZkZWYgRFdfQ0hBUlMKLSAgICAgIGlm
IChkd19yaWdodChtbCwgaiwgZm9yZS0+d19lbmNvZGluZykpCi0Jai0tOworCQlpZiAoZHdfcmln
aHQobWwsIGosIGZvcmUtPndfZW5jb2RpbmcpKQorCQkJai0tOwogI2VuZGlmCi0gICAgICBpbSA9
IG1sLT5pbWFnZSArIGo7CisJCWltID0gbWwtPmltYWdlICsgajsKICNpZmRlZiBGT05UCi0gICAg
ICBmbyA9IG1sLT5mb250ICsgajsKLSAgICAgIGZveCA9IG1sLT5mb250eCArIGo7Ci0gICAgICBm
b250ID0gQVNDSUk7CisJCWZvID0gbWwtPmZvbnQgKyBqOworCQlmb3ggPSBtbC0+Zm9udHggKyBq
OworCQlmb250ID0gQVNDSUk7CiAjZW5kaWYKLSAgICAgIGZvciAoOyBqIDw9IHRvOyBqKyspCi0J
ewotCSAgYyA9ICh1bnNpZ25lZCBjaGFyKSppbSsrOworCQlmb3IgKDsgaiA8PSB0bzsgaisrKSB7
CisJCQljID0gKHVuc2lnbmVkIGNoYXIpKmltKys7CiAjaWZkZWYgRk9OVAotCSAgY2YgPSAodW5z
aWduZWQgY2hhcikqZm8rKzsKLQkgIGNmeCA9ICh1bnNpZ25lZCBjaGFyKSpmb3grKzsKKwkJCWNm
ID0gKHVuc2lnbmVkIGNoYXIpKmZvKys7CisJCQljZnggPSAodW5zaWduZWQgY2hhcikqZm94Kys7
CiAjIGlmZGVmIFVURjgKLQkgIGlmIChmb3JlLT53X2VuY29kaW5nID09IFVURjgpCi0JICAgIHsK
LQkgICAgICBjIHw9IGNmIDw8IDggfCBjZnggPDwgMTY7Ci0JICAgICAgaWYgKGMgPT0gVUNTX0hJ
RERFTikKLQkJY29udGludWU7Ci0JICAgICAgYyA9IFRvVXRmOF9jb21iKHB0LCBjKTsKLQkgICAg
ICBsICs9IGM7Ci0JICAgICAgaWYgKHB0KQotCSAgICAgICAgcHQgKz0gYzsKLQkgICAgICBjb250
aW51ZTsKLQkgICAgfQorCQkJaWYgKGZvcmUtPndfZW5jb2RpbmcgPT0gVVRGOCkgeworCQkJCWMg
fD0gY2YgPDwgOCB8IGNmeCA8PCAxNjsKKwkJCQlpZiAoYyA9PSBVQ1NfSElEREVOKQorCQkJCQlj
b250aW51ZTsKKwkJCQljID0gVG9VdGY4X2NvbWIocHQsIGMpOworCQkJCWwgKz0gYzsKKwkJCQlp
ZiAocHQpCisJCQkJCXB0ICs9IGM7CisJCQkJY29udGludWU7CisJCQl9CiAjIGVuZGlmCiAjIGlm
ZGVmIERXX0NIQVJTCi0JICBpZiAoaXNfZHdfZm9udChjZikpCi0JICAgIHsKLQkgICAgICBjID0g
YyA8PCA4IHwgKHVuc2lnbmVkIGNoYXIpKmltKys7Ci0JICAgICAgZm8rKzsKLQkgICAgICBqKys7
Ci0JICAgIH0KKwkJCWlmIChpc19kd19mb250KGNmKSkgeworCQkJCWMgPSBjIDw8IDggfCAodW5z
aWduZWQgY2hhcikqaW0rKzsKKwkJCQlmbysrOworCQkJCWorKzsKKwkJCX0KICMgZW5kaWYKLQkg
IGlmIChwYXN0ZWZvbnQpCi0JICAgIHsKLQkgICAgICBjID0gRW5jb2RlQ2hhcihwdCwgYyB8IGNm
IDw8IDE2LCBmb3JlLT53X2VuY29kaW5nLCAmZm9udCk7Ci0JICAgICAgbCArPSBjOwotCSAgICAg
IGlmIChwdCkKLQkJcHQgKz0gYzsKLQkgICAgICBjb250aW51ZTsKLQkgICAgfQorCQkJaWYgKHBh
c3RlZm9udCkgeworCQkJCWMgPSBFbmNvZGVDaGFyKHB0LCBjIHwgY2YgPDwgMTYsIGZvcmUtPndf
ZW5jb2RpbmcsICZmb250KTsKKwkJCQlsICs9IGM7CisJCQkJaWYgKHB0KQorCQkJCQlwdCArPSBj
OworCQkJCWNvbnRpbnVlOworCQkJfQogI2VuZGlmIC8qIEZPTlQgKi8KLQkgIGlmIChwdCkKLQkg
ICAgKnB0KysgPSBjOwotCSAgbCsrOwotCX0KKwkJCWlmIChwdCkKKwkJCQkqcHQrKyA9IGM7CisJ
CQlsKys7CisJCX0KICNpZmRlZiBGT05UCi0gICAgICBpZiAocGFzdGVmb250ICYmIGZvbnQgIT0g
QVNDSUkpCi0JewotCSAgaWYgKHB0KQotCSAgICB7Ci0JICAgICAgc3RyY3B5KHB0LCAiXDAzMyhC
Iik7Ci0JICAgICAgcHQgKz0gMzsKLQkgICAgfQotCSAgbCArPSAzOwotCX0KKwkJaWYgKHBhc3Rl
Zm9udCAmJiBmb250ICE9IEFTQ0lJKSB7CisJCQlpZiAocHQpIHsKKwkJCQlzdHJjcHkocHQsICJc
MDMzKEIiKTsKKwkJCQlwdCArPSAzOworCQkJfQorCQkJbCArPSAzOworCQl9CiAjZW5kaWYKLSAg
ICAgIGlmIChpICE9IHkyICYmICh0byAhPSBmb3JlLT53X3dpZHRoIC0gMSB8fCBtbC0+aW1hZ2Vb
dG8gKyAxXSA9PSAnICcpKQotCXsKLQkgIC8qCi0JICAgKiB0aGlzIGNvZGUgZGVmaW5lcywgd2hh
dCBnbHVlcyBsaW5lcyB0b2dldGhlcgotCSAgICovCi0JICBzd2l0Y2ggKG1hcmtkYXRhLT5ub25s
KQotCSAgICB7Ci0JICAgIGNhc2UgMDoJCS8qIGxpbmVzIHNlcGFyYXRlZCBieSBuZXdsaW5lcyAq
LwotCSAgICAgIGlmIChwdCkKLQkJKnB0KysgPSAnXHInOwotCSAgICAgIGwrKzsKLQkgICAgICBp
ZiAoam9pbl93aXRoX2NyKQotCQl7Ci0JCSAgaWYgKHB0KQotCQkgICAgKnB0KysgPSAnXG4nOwot
CQkgIGwrKzsKKwkJaWYgKGkgIT0geTIgJiYgKHRvICE9IGZvcmUtPndfd2lkdGggLSAxIHx8IG1s
LT5pbWFnZVt0byArIDFdID09ICcgJykpIHsKKwkJCS8qCisJCQkgKiB0aGlzIGNvZGUgZGVmaW5l
cywgd2hhdCBnbHVlcyBsaW5lcyB0b2dldGhlcgorCQkJICovCisJCQlzd2l0Y2ggKG1hcmtkYXRh
LT5ub25sKSB7CisJCQljYXNlIDA6CQkvKiBsaW5lcyBzZXBhcmF0ZWQgYnkgbmV3bGluZXMgKi8K
KwkJCQlpZiAocHQpCisJCQkJCSpwdCsrID0gJ1xyJzsKKwkJCQlsKys7CisJCQkJaWYgKGpvaW5f
d2l0aF9jcikgeworCQkJCQlpZiAocHQpCisJCQkJCQkqcHQrKyA9ICdcbic7CisJCQkJCWwrKzsK
KwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CQkvKiBub3RoaW5nIHRvIHNlcGFyYXRlIGxp
bmVzICovCisJCQkJYnJlYWs7CisJCQljYXNlIDI6CQkvKiBsaW5lcyBzZXBhcmF0ZWQgYnkgYmxh
bmtzICovCisJCQkJaWYgKHB0KQorCQkJCQkqcHQrKyA9ICcgJzsKKwkJCQlsKys7CisJCQkJYnJl
YWs7CisJCQljYXNlIDM6CQkvKiBzZXBlcmF0ZSBieSBjb21tYSwgZm9yIGNzaCBqdW5raWVzICov
CisJCQkJaWYgKHB0KQorCQkJCQkqcHQrKyA9ICcsJzsKKwkJCQlsKys7CisJCQkJYnJlYWs7CisJ
CQl9CiAJCX0KLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAxOgkJLyogbm90aGluZyB0byBzZXBh
cmF0ZSBsaW5lcyAqLwotCSAgICAgIGJyZWFrOwotCSAgICBjYXNlIDI6CQkvKiBsaW5lcyBzZXBh
cmF0ZWQgYnkgYmxhbmtzICovCi0JICAgICAgaWYgKHB0KQotCQkqcHQrKyA9ICcgJzsKLQkgICAg
ICBsKys7Ci0JICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgMzoJCS8qIHNlcGVyYXRlIGJ5IGNvbW1h
LCBmb3IgY3NoIGp1bmtpZXMgKi8KLQkgICAgICBpZiAocHQpCi0JICAgICAgICAqcHQrKyA9ICcs
JzsKLQkgICAgICBsKys7Ci0JICAgICAgYnJlYWs7Ci0JICAgIH0KIAl9Ci0gICAgfQotICByZXR1
cm4gbDsKKwlyZXR1cm4gbDsKIH0KIAogLyogQ2hlY2sgaWYgdHdvIGNoYXJzIGFyZSBpZGVudGlj
YWwuIEFsbCBkaWdpdHMgYXJlIHRyZWF0ZWQKQEAgLTQyNyw2NyArNDAyLDYzIEBACiAgKi8KIAog
c3RhdGljIGludAotZXEoYSwgYikKLWludCBhLCBiOworZXEoaW50IGEsIGludCBiKQogewotICBp
ZiAoYSA9PSBiKQotICAgIHJldHVybiAxOwotICBpZiAoYSA9PSAwIHx8IGIgPT0gMCkKLSAgICBy
ZXR1cm4gMTsKLSAgaWYgKGEgPD0gJzknICYmIGEgPj0gJzAnICYmIGIgPD0gJzknICYmIGIgPj0g
JzAnKQotICAgIHJldHVybiAxOwotICByZXR1cm4gMDsKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4g
MTsKKwlpZiAoYSA9PSAwIHx8IGIgPT0gMCkKKwkJcmV0dXJuIDE7CisJaWYgKGEgPD0gJzknICYm
IGEgPj0gJzAnICYmIGIgPD0gJzknICYmIGIgPj0gJzAnKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4g
MDsKIH0KIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogaW50CiBHZXRIaXN0b3J5KCkJLyogcmV0dXJu
IHZhbHVlIDEgaWYgY29weWJ1ZmZlciBjaGFuZ2VkICovCiB7Ci0gIGludCBpID0gMCwgcSA9IDAs
IHh4LCB5eSwgeCwgeTsKLSAgdW5zaWduZWQgY2hhciAqbGluZXA7Ci0gIHN0cnVjdCBtbGluZSAq
bWw7Ci0KLSAgQVNTRVJUKGRpc3BsYXkgJiYgZm9yZSk7Ci0gIHggPSBmb3JlLT53X3g7Ci0gIGlm
ICh4ID49IGZvcmUtPndfd2lkdGgpCi0gICAgeCA9IGZvcmUtPndfd2lkdGggLSAxOwotICB5ID0g
Zm9yZS0+d195ICsgZm9yZS0+d19oaXN0aGVpZ2h0OwotICBkZWJ1ZzIoImN1cnNvciBpcyBhdCB4
PSVkLCB5PSVkXG4iLCB4LCB5KTsKLSAgbWwgPSBXSU4oeSk7Ci0gIGZvciAoeHggPSB4IC0gMSwg
bGluZXAgPSBtbC0+aW1hZ2UgKyB4eDsgeHggPj0gMDsgeHgtLSkKLSAgICBpZiAoKHEgPSAqbGlu
ZXAtLSkgIT0gJyAnICkKLSAgICAgIGJyZWFrOwotICBkZWJ1ZzMoIiVjIGF0ICglZCwlZClcbiIs
IHEsIHh4LCB5KTsKLSAgZm9yICh5eSA9IHkgLSAxOyB5eSA+PSAwOyB5eS0tKQotICAgIHsKLSAg
ICAgIG1sID0gV0lOKHl5KTsKLSAgICAgIGxpbmVwID0gbWwtPmltYWdlOwotICAgICAgaWYgKHh4
IDwgMCB8fCBlcShsaW5lcFt4eF0sIHEpKQotCXsJCS8qIGxpbmUgaXMgbWF0Y2hpbmcuLi4gKi8K
LQkgIGZvciAoaSA9IGZvcmUtPndfd2lkdGggLSAxLCBsaW5lcCArPSBpOyBpID49IHg7IGktLSkK
LQkgICAgaWYgKCpsaW5lcC0tICE9ICcgJykKLQkgICAgICBicmVhazsKLQkgIGlmIChpID49IHgp
Ci0JICAgIGJyZWFrOwotCX0KLSAgICB9Ci0gIGlmICh5eSA8IDApCi0gICAgcmV0dXJuIDA7Ci0g
IGlmIChEX3VzZXItPnVfcGxvcC5idWYpCi0gICAgVXNlckZyZWVDb3B5QnVmZmVyKERfdXNlcik7
Ci0gIGlmICgoRF91c2VyLT51X3Bsb3AuYnVmID0gKGNoYXIgKiltYWxsb2MoKHVuc2lnbmVkKSAo
aSAtIHggKyAyKSkpID09IE5VTEwpCi0gICAgewotICAgICAgTE1zZygwLCAiTm90IGVub3VnaCBt
ZW1vcnkuLi4gU29ycnkuIik7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gIGJjb3B5KChjaGFy
ICopbGluZXAgLSBpICsgeCArIDEsIERfdXNlci0+dV9wbG9wLmJ1ZiwgaSAtIHggKyAxKTsKLSAg
RF91c2VyLT51X3Bsb3AubGVuID0gaSAtIHggKyAxOworCWludCBpID0gMCwgcSA9IDAsIHh4LCB5
eSwgeCwgeTsKKwl1bnNpZ25lZCBjaGFyICpsaW5lcDsKKwlzdHJ1Y3QgbWxpbmUgKm1sOworCisJ
QVNTRVJUKGRpc3BsYXkgJiYgZm9yZSk7CisJeCA9IGZvcmUtPndfeDsKKwlpZiAoeCA+PSBmb3Jl
LT53X3dpZHRoKQorCQl4ID0gZm9yZS0+d193aWR0aCAtIDE7CisJeSA9IGZvcmUtPndfeSArIGZv
cmUtPndfaGlzdGhlaWdodDsKKwlkZWJ1ZzIoImN1cnNvciBpcyBhdCB4PSVkLCB5PSVkXG4iLCB4
LCB5KTsKKwltbCA9IFdJTih5KTsKKwlmb3IgKHh4ID0geCAtIDEsIGxpbmVwID0gbWwtPmltYWdl
ICsgeHg7IHh4ID49IDA7IHh4LS0pCisJCWlmICgocSA9ICpsaW5lcC0tKSAhPSAnICcpCisJCQli
cmVhazsKKwlkZWJ1ZzMoIiVjIGF0ICglZCwlZClcbiIsIHEsIHh4LCB5KTsKKwlmb3IgKHl5ID0g
eSAtIDE7IHl5ID49IDA7IHl5LS0pIHsKKwkJbWwgPSBXSU4oeXkpOworCQlsaW5lcCA9IG1sLT5p
bWFnZTsKKwkJaWYgKHh4IDwgMCB8fCBlcShsaW5lcFt4eF0sIHEpKSB7CQkvKiBsaW5lIGlzIG1h
dGNoaW5nLi4uICovCisJCQlmb3IgKGkgPSBmb3JlLT53X3dpZHRoIC0gMSwgbGluZXAgKz0gaTsg
aSA+PSB4OyBpLS0pCisJCQkJaWYgKCpsaW5lcC0tICE9ICcgJykKKwkJCQkJYnJlYWs7CisJCQlp
ZiAoaSA+PSB4KQorCQkJCWJyZWFrOworCQl9CisJfQorCWlmICh5eSA8IDApCisJCXJldHVybiAw
OworCWlmIChEX3VzZXItPnVfcGxvcC5idWYpCisJCVVzZXJGcmVlQ29weUJ1ZmZlcihEX3VzZXIp
OworCWlmICgoRF91c2VyLT51X3Bsb3AuYnVmID0gKGNoYXIgKiltYWxsb2MoKHVuc2lnbmVkKShp
IC0geCArIDIpKSkgPT0KKwkgICAgTlVMTCkgeworCQlMTXNnKDAsICJOb3QgZW5vdWdoIG1lbW9y
eS4uLiBTb3JyeS4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWJjb3B5KChjaGFyICopbGluZXAgLSBp
ICsgeCArIDEsIERfdXNlci0+dV9wbG9wLmJ1ZiwgaSAtIHggKyAxKTsKKwlEX3VzZXItPnVfcGxv
cC5sZW4gPSBpIC0geCArIDE7CiAjaWZkZWYgRU5DT0RJTkdTCi0gIERfdXNlci0+dV9wbG9wLmVu
YyA9IGZvcmUtPndfZW5jb2Rpbmc7CisJRF91c2VyLT51X3Bsb3AuZW5jID0gZm9yZS0+d19lbmNv
ZGluZzsKICNlbmRpZgotICByZXR1cm4gMTsKKwlyZXR1cm4gMTsKIH0KIAogLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCkBAIC00OTYsOTggKzQ2Nyw4OCBAQAogdm9pZAogTWFya1JvdXRpbmUoKQogewotICBpbnQg
eCwgeTsKKwlpbnQgeCwgeTsKIAotICBBU1NFUlQoZm9yZSAmJiBkaXNwbGF5ICYmIERfdXNlcik7
CisJQVNTRVJUKGZvcmUgJiYgZGlzcGxheSAmJiBEX3VzZXIpOwogCi0gIGRlYnVnMigiTWFya1Jv
dXRpbmUgY2FsbGVkOiBmb3JlIG5yICVkLCBkaXNwbGF5ICVzXG4iLAotICAgICAgICAgZm9yZS0+
d19udW1iZXIsIERfdXNlcnR0eSk7CisJZGVidWcyKCJNYXJrUm91dGluZSBjYWxsZWQ6IGZvcmUg
bnIgJWQsIGRpc3BsYXkgJXNcbiIsIGZvcmUtPndfbnVtYmVyLCBEX3VzZXJ0dHkpOwogCi0gIGlm
IChJbml0T3ZlcmxheVBhZ2Uoc2l6ZW9mKCptYXJrZGF0YSksICZNYXJrTGYsIDEpKQotICAgIHJl
dHVybjsKLSAgZmxheWVyLT5sX2VuY29kaW5nID0gZm9yZS0+d19lbmNvZGluZzsKLSAgZmxheWVy
LT5sX21vZGUgPSAxOwotICBtYXJrZGF0YSA9IChzdHJ1Y3QgbWFya2RhdGEgKilmbGF5ZXItPmxf
ZGF0YTsKLSAgbWFya2RhdGEtPm1kX3VzZXIgPSBEX3VzZXI7CS8qIFhYWDogQ29ycmVjdD8gKi8K
LSAgbWFya2RhdGEtPm1kX3dpbmRvdyA9IGZvcmU7Ci0gIG1hcmtkYXRhLT5zZWNvbmQgPSAwOwot
ICBtYXJrZGF0YS0+cmVwX2NudCA9IDA7Ci0gIG1hcmtkYXRhLT5hcHBlbmRfbW9kZSA9IDA7Ci0g
IG1hcmtkYXRhLT53cml0ZV9idWZmZXIgPSAwOwotICBtYXJrZGF0YS0+bm9ubCA9IDA7Ci0gIG1h
cmtkYXRhLT5sZWZ0X21hciAgPSAwOwotICBtYXJrZGF0YS0+cmlnaHRfbWFyID0gZm9yZS0+d193
aWR0aCAtIDE7Ci0gIG1hcmtkYXRhLT5oaXN0X29mZnNldCA9IGZvcmUtPndfaGlzdGhlaWdodDsK
LSAgeCA9IGZvcmUtPndfeDsKLSAgeSA9IEQyVyhmb3JlLT53X3kpOwotICBpZiAoeCA+PSBmb3Jl
LT53X3dpZHRoKQotICAgIHggPSBmb3JlLT53X3dpZHRoIC0gMTsKLQotICBMR290b1BvcyhmbGF5
ZXIsIHgsIFcyRCh5KSk7Ci0gIExNc2coMCwgIkNvcHkgbW9kZSAtIENvbHVtbiAlZCBMaW5lICVk
KCslZCkgKCVkLCVkKSIsCi0gICAgICB4ICsgMSwgVzJEKHkgKyAxKSwgZm9yZS0+d19oaXN0aGVp
Z2h0LCBmb3JlLT53X3dpZHRoLCBmb3JlLT53X2hlaWdodCk7Ci0gIG1hcmtkYXRhLT5jeCA9IG1h
cmtkYXRhLT54MSA9IHg7Ci0gIG1hcmtkYXRhLT5jeSA9IG1hcmtkYXRhLT55MSA9IHk7Ci0gIGZs
YXllci0+bF94ID0geDsKLSAgZmxheWVyLT5sX3kgPSBXMkQoeSk7CisJaWYgKEluaXRPdmVybGF5
UGFnZShzaXplb2YoKm1hcmtkYXRhKSwgJk1hcmtMZiwgMSkpCisJCXJldHVybjsKKwlmbGF5ZXIt
PmxfZW5jb2RpbmcgPSBmb3JlLT53X2VuY29kaW5nOworCWZsYXllci0+bF9tb2RlID0gMTsKKwlt
YXJrZGF0YSA9IChzdHJ1Y3QgbWFya2RhdGEgKilmbGF5ZXItPmxfZGF0YTsKKwltYXJrZGF0YS0+
bWRfdXNlciA9IERfdXNlcjsJLyogWFhYOiBDb3JyZWN0PyAqLworCW1hcmtkYXRhLT5tZF93aW5k
b3cgPSBmb3JlOworCW1hcmtkYXRhLT5zZWNvbmQgPSAwOworCW1hcmtkYXRhLT5yZXBfY250ID0g
MDsKKwltYXJrZGF0YS0+YXBwZW5kX21vZGUgPSAwOworCW1hcmtkYXRhLT53cml0ZV9idWZmZXIg
PSAwOworCW1hcmtkYXRhLT5ub25sID0gMDsKKwltYXJrZGF0YS0+bGVmdF9tYXIgPSAwOworCW1h
cmtkYXRhLT5yaWdodF9tYXIgPSBmb3JlLT53X3dpZHRoIC0gMTsKKwltYXJrZGF0YS0+aGlzdF9v
ZmZzZXQgPSBmb3JlLT53X2hpc3RoZWlnaHQ7CisJeCA9IGZvcmUtPndfeDsKKwl5ID0gRDJXKGZv
cmUtPndfeSk7CisJaWYgKHggPj0gZm9yZS0+d193aWR0aCkKKwkJeCA9IGZvcmUtPndfd2lkdGgg
LSAxOworCisJTEdvdG9Qb3MoZmxheWVyLCB4LCBXMkQoeSkpOworCUxNc2coMCwgIkNvcHkgbW9k
ZSAtIENvbHVtbiAlZCBMaW5lICVkKCslZCkgKCVkLCVkKSIsIHggKyAxLCBXMkQoeSArIDEpLCBm
b3JlLT53X2hpc3RoZWlnaHQsIGZvcmUtPndfd2lkdGgsIGZvcmUtPndfaGVpZ2h0KTsKKwltYXJr
ZGF0YS0+Y3ggPSBtYXJrZGF0YS0+eDEgPSB4OworCW1hcmtkYXRhLT5jeSA9IG1hcmtkYXRhLT55
MSA9IHk7CisJZmxheWVyLT5sX3ggPSB4OworCWZsYXllci0+bF95ID0gVzJEKHkpOwogfQogCiBz
dGF0aWMgdm9pZAotTWFya1Byb2Nlc3MoaW5idWZwLGlubGVucCkKLWNoYXIgKippbmJ1ZnA7Ci1p
bnQgKmlubGVucDsKK01hcmtQcm9jZXNzKGNoYXIgKippbmJ1ZnAsIGludCAqaW5sZW5wKQogewot
ICBjaGFyICppbmJ1ZiwgKnB0OwotICBpbnQgaW5sZW47Ci0gIGludCBjeCwgY3ksIHgyLCB5Miwg
aiwgeWVuZDsKLSAgaW50IG5ld2NvcHlsZW4gPSAwLCBvZDsKLSAgaW50IGluX21hcms7Ci0gIGlu
dCByZXBfY250OwotICBzdHJ1Y3QgYWNsdXNlciAqbWRfdXNlcjsKKwljaGFyICppbmJ1ZiwgKnB0
OworCWludCBpbmxlbjsKKwlpbnQgY3gsIGN5LCB4MiwgeTIsIGosIHllbmQ7CisJaW50IG5ld2Nv
cHlsZW4gPSAwLCBvZDsKKwlpbnQgaW5fbWFyazsKKwlpbnQgcmVwX2NudDsKKwlzdHJ1Y3QgYWNs
dXNlciAqbWRfdXNlcjsKIAogLyoKICAgY2hhciAqZXh0cmFwID0gMCwgZXh0cmFidWZbMTAwXTsK
ICovCiAKLSAgbWFya2RhdGEgPSAoc3RydWN0IG1hcmtkYXRhICopZmxheWVyLT5sX2RhdGE7Ci0g
IGZvcmUgPSBtYXJrZGF0YS0+bWRfd2luZG93OwotICBtZF91c2VyID0gbWFya2RhdGEtPm1kX3Vz
ZXI7Ci0gIGlmIChpbmJ1ZnAgPT0gMCkKLSAgICB7Ci0gICAgICBNYXJrQWJvcnQoKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgTEdvdG9Qb3MoZmxheWVyLCBtYXJrZGF0YS0+Y3gsIFcyRCht
YXJrZGF0YS0+Y3kpKTsKLSAgaW5idWY9ICppbmJ1ZnA7Ci0gIGlubGVuPSAqaW5sZW5wOwotICBw
dCA9IGluYnVmOwotICBpbl9tYXJrID0gMTsKLSAgd2hpbGUgKGluX21hcmsgJiYgKGlubGVuIC8q
IHx8IGV4dHJhcCAqLykpCi0gICAgewotICAgICAgdW5zaWduZWQgY2hhciBjaCA9ICh1bnNpZ25l
ZCBjaGFyICkqcHQrKzsKLSAgICAgIGlubGVuLS07Ci0gICAgICBpZiAoZmxheWVyLT5sX21vdXNl
ZXZlbnQuc3RhcnQpCi0JewotCSAgaW50IHIgPSBMYXlQcm9jZXNzTW91c2UoZmxheWVyLCBjaCk7
Ci0JICBpZiAociA9PSAtMSkKLQkgICAgTGF5UHJvY2Vzc01vdXNlU3dpdGNoKGZsYXllciwgMCk7
Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBpZiAocikKLQkJY2ggPSAwMjIyOwotCSAgICAgIGVs
c2UKLQkJY29udGludWU7Ci0JICAgIH0KLQl9Ci0gICAgICBvZCA9IG1hcmtfa2V5X3RhYlsoaW50
KWNoXTsKLSAgICAgIHJlcF9jbnQgPSBtYXJrZGF0YS0+cmVwX2NudDsKLSAgICAgIGlmIChvZCA+
PSAnMCcgJiYgb2QgPD0gJzknICYmICFtYXJrZGF0YS0+Zl9jbWQuZmxhZykKLSAgICAgICAgewot
CSAgaWYgKHJlcF9jbnQgPCAxMDAxICYmIChvZCAhPSAnMCcgfHwgcmVwX2NudCAhPSAwKSkKLQkg
ICAgewotCSAgICAgIG1hcmtkYXRhLT5yZXBfY250ID0gMTAgKiByZXBfY250ICsgb2QgLSAnMCc7
Ci0JICAgICAgY29udGludWU7CisJbWFya2RhdGEgPSAoc3RydWN0IG1hcmtkYXRhICopZmxheWVy
LT5sX2RhdGE7CisJZm9yZSA9IG1hcmtkYXRhLT5tZF93aW5kb3c7CisJbWRfdXNlciA9IG1hcmtk
YXRhLT5tZF91c2VyOworCWlmIChpbmJ1ZnAgPT0gMCkgeworCQlNYXJrQWJvcnQoKTsKKwkJcmV0
dXJuOworCX0KKworCUxHb3RvUG9zKGZsYXllciwgbWFya2RhdGEtPmN4LCBXMkQobWFya2RhdGEt
PmN5KSk7CisJaW5idWYgPSAqaW5idWZwOworCWlubGVuID0gKmlubGVucDsKKwlwdCA9IGluYnVm
OworCWluX21hcmsgPSAxOworCXdoaWxlIChpbl9tYXJrICYmIChpbmxlbiAvKiB8fCBleHRyYXAg
Ki8pKSB7CisJCXVuc2lnbmVkIGNoYXIgY2ggPSAodW5zaWduZWQgY2hhcikqcHQrKzsKKwkJaW5s
ZW4tLTsKKwkJaWYgKGZsYXllci0+bF9tb3VzZWV2ZW50LnN0YXJ0KSB7CisJCQlpbnQgciA9IExh
eVByb2Nlc3NNb3VzZShmbGF5ZXIsIGNoKTsKKwkJCWlmIChyID09IC0xKQorCQkJCUxheVByb2Nl
c3NNb3VzZVN3aXRjaChmbGF5ZXIsIDApOworCQkJZWxzZSB7CisJCQkJaWYgKHIpCisJCQkJCWNo
ID0gMDIyMjsKKwkJCQllbHNlCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCW9kID0gbWFy
a19rZXlfdGFiWyhpbnQpY2hdOworCQlyZXBfY250ID0gbWFya2RhdGEtPnJlcF9jbnQ7CisJCWlm
IChvZCA+PSAnMCcgJiYgb2QgPD0gJzknICYmICFtYXJrZGF0YS0+Zl9jbWQuZmxhZykgeworCQkJ
aWYgKHJlcF9jbnQgPCAxMDAxICYmIChvZCAhPSAnMCcgfHwgcmVwX2NudCAhPSAwKSkgeworCQkJ
CW1hcmtkYXRhLT5yZXBfY250ID0gMTAgKiByZXBfY250ICsgb2QgLSAnMCc7CisJCQkJY29udGlu
dWU7CiAgCSAgICAgIC8qCiAJICAgICAgICogTm93IHdoYXQgaXMgdGhhdCAxMDAxIGhlcmU/IFdl
bGwsIHdlIGhhdmUgYSBzY3JlZW4gd2l0aAogCSAgICAgICAqIDI1ICogODAgPSAyMDAwIGNoYXJh
Y3RlcnMuIE1vdmVtZW50IGlzIGF0IG1vc3QgYWNyb3NzIHRoZSBmdWxsCkBAIC01OTgsMzIgKzU1
OSwzMSBAQAogCSAgICAgICAqIHdvcmRzLCBhcyB0aGV5IHNob3VsZCBiZSBtb3JlIGFkdmFuY2Vk
LiBqdy4KIAkgICAgICAgKiBPaCwgd3JvbmcuIFdlIHN0aWxsIGdpdmUgZXZlbiB0aGUgZXhwZXJp
ZW5jZWQgdXNlciBhIGZhY3RvciBvZiB0ZW4uCiAJICAgICAgICovCi0JICAgIH0KLQl9Ci0gICAg
ICBjeCA9IG1hcmtkYXRhLT5jeDsKLSAgICAgIGN5ID0gbWFya2RhdGEtPmN5OworCQkJfQorCQl9
CisJCWN4ID0gbWFya2RhdGEtPmN4OworCQljeSA9IG1hcmtkYXRhLT5jeTsKIAotICAgICAgaWYg
KG1hcmtkYXRhIC0+IGZfY21kLmZsYWcpIHsKLSAgICAgICAgZGVidWcyKCJzZWFyY2hpbmcgZm9y
ICVjOiVkXG4iLG9kLHJlcF9jbnQpOwotICAgICAgICBtYXJrZGF0YS0+Zl9jbWQuZmxhZyA9IDA7
Ci0gICAgICAgIG1hcmtkYXRhLT5yZXBfY250ID0gMDsKLQotCWlmIChpc2dyYXBoIChvZCkpIHsK
LQkgIG1hcmtkYXRhLT5mX2NtZC50YXJnZXQgPSBvZDsKLQkgIHJlcF9jbnQgPSAocmVwX2NudCkg
PyByZXBfY250IDogMTsKLQkgIG5leHRjaGFyKCZjeCwgJmN5LCBtYXJrZGF0YS0+Zl9jbWQuZGly
ZWN0aW9uLCBvZCwgcmVwX2NudCApOwotCSAgcmV2dG8oY3gsIGN5KTsKLQkgIGNvbnRpbnVlOwot
CX0KLSAgICAgIH0KKwkJaWYgKG1hcmtkYXRhLT5mX2NtZC5mbGFnKSB7CisJCQlkZWJ1ZzIoInNl
YXJjaGluZyBmb3IgJWM6JWRcbiIsIG9kLCByZXBfY250KTsKKwkJCW1hcmtkYXRhLT5mX2NtZC5m
bGFnID0gMDsKKwkJCW1hcmtkYXRhLT5yZXBfY250ID0gMDsKKworCQkJaWYgKGlzZ3JhcGgob2Qp
KSB7CisJCQkJbWFya2RhdGEtPmZfY21kLnRhcmdldCA9IG9kOworCQkJCXJlcF9jbnQgPSAocmVw
X2NudCkgPyByZXBfY250IDogMTsKKwkJCQluZXh0Y2hhcigmY3gsICZjeSwgbWFya2RhdGEtPmZf
Y21kLmRpcmVjdGlvbiwgb2QsIHJlcF9jbnQpOworCQkJCXJldnRvKGN4LCBjeSk7CisJCQkJY29u
dGludWU7CisJCQl9CisJCX0KIAogcHJvY2Vzc2NoYXI6Ci0gICAgICBzd2l0Y2ggKG9kKQotICAg
ICAgICB7Ci0JY2FzZSAnZic6IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgJ0YnOiAvKiBmYWxs
IHRocm91Z2ggKi8KLQljYXNlICd0JzogLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSAnVCc6IC8q
IGZhbGwgdGhyb3VnaCAqLworCQlzd2l0Y2ggKG9kKSB7CisJCWNhc2UgJ2YnOiAvKiBmYWxsIHRo
cm91Z2ggKi8KKwkJY2FzZSAnRic6IC8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlICd0JzogLyog
ZmFsbCB0aHJvdWdoICovCisJCWNhc2UgJ1QnOiAvKiBmYWxsIHRocm91Z2ggKi8KIAkgIC8qCiAJ
ICAgKiBTZXQgZl9jbWQgdG8gZG8gYSBzZWFyY2ggb24gdGhlIG5leHQga2V5IHN0cm9rZS4KIAkg
ICAqIElmIHdlIGJyZWFrLCByZXBfY250IHdpbGwgYmUgcmVzZXQsIHNvIHdlCkBAIC02MzIsOTA1
ICs1OTIsODU3IEBACiAJICAgKiBicmVhayBoZXJlIHNvIGxhdGVyIGZvbGxvd29uIGNvZGUgd2ls
bCBiZQogCSAgICogaGl0LgogCSAgICovCi0JICBtYXJrZGF0YS0+Zl9jbWQuZmxhZyA9IDE7Ci0J
ICBtYXJrZGF0YS0+Zl9jbWQuZGlyZWN0aW9uID0gb2Q7Ci0JICBkZWJ1ZygiZW50ZXJpbmcgY2hh
ciBzZWFyY2hcbiIpOwotCSAgY29udGludWU7Ci0JY2FzZSAnOyc6Ci0JY2FzZSAnLCc6Ci0JICBp
ZiAoIW1hcmtkYXRhLT5mX2NtZC50YXJnZXQpCi0JICAgIGJyZWFrOwotCSAgaWYgKCFyZXBfY250
KQotCSAgICByZXBfY250ID0gMTsKLQkgIG5leHRjaGFyKCZjeCwgJmN5LAotCSAgICAgIG9kID09
ICc7JyA/IG1hcmtkYXRhLT5mX2NtZC5kaXJlY3Rpb24gOiAobWFya2RhdGEtPmZfY21kLmRpcmVj
dGlvbiBeIDB4MjApLAotCSAgICAgIG1hcmtkYXRhLT5mX2NtZC50YXJnZXQsIHJlcF9jbnQgKTsK
LQkgIHJldnRvKGN4LCBjeSk7Ci0JICBicmVhazsKLQljYXNlICdvJzoKLQljYXNlICd4JzoKLQkg
IGlmICghbWFya2RhdGEtPnNlY29uZCkKLQkgICAgYnJlYWs7Ci0JICBtYXJrZGF0YS0+Y3ggPSBt
YXJrZGF0YS0+eDE7Ci0JICBtYXJrZGF0YS0+Y3kgPSBtYXJrZGF0YS0+eTE7Ci0JICBtYXJrZGF0
YS0+eDEgPSBjeDsKLQkgIG1hcmtkYXRhLT55MSA9IGN5OwotCSAgcmV2dG8obWFya2RhdGEtPmN4
LCBtYXJrZGF0YS0+Y3kpOwotCSAgYnJlYWs7Ci0JY2FzZSAnXDAxNCc6CS8qIENUUkwtTCBSZWRp
c3BsYXkgKi8KLQkgIFJlZGlzcGxheSgwKTsKLQkgIExHb3RvUG9zKGZsYXllciwgY3gsIFcyRChj
eSkpOwotCSAgYnJlYWs7Ci0JY2FzZSAwMjAyOgkvKiBNLUMtYiAqLwotCWNhc2UgJ1wwMTAnOgkv
KiBDVFJMLUggQmFja3NwYWNlICovCi0JY2FzZSAnaCc6Ci0JICBpZiAocmVwX2NudCA9PSAwKQot
CSAgICByZXBfY250ID0gMTsKLQkgIHJldnRvKGN4IC0gcmVwX2NudCwgY3kpOwotCSAgYnJlYWs7
Ci0JY2FzZSAwMjE2OgkvKiBNLUMtcCAqLwotCWNhc2UgJ1wwMTYnOgkvKiBDVFJMLU4gKi8KLQlj
YXNlICdqJzoKLQkgIGlmIChyZXBfY250ID09IDApCi0JICAgIHJlcF9jbnQgPSAxOwotCSAgcmV2
dG8oY3gsIGN5ICsgcmVwX2NudCk7Ci0JICBicmVhazsKLQljYXNlICcrJzoKLQkgIGlmIChyZXBf
Y250ID09IDApCi0JICAgIHJlcF9jbnQgPSAxOwotCSAgaiA9IGN5ICsgcmVwX2NudDsKLQkgIGlm
IChqID4gZm9yZS0+d19oaXN0aGVpZ2h0ICsgZm9yZS0+d19oZWlnaHQgLSAxKQotCSAgICBqID0g
Zm9yZS0+d19oaXN0aGVpZ2h0ICsgZm9yZS0+d19oZWlnaHQgLSAxOwotCSAgcmV2dG8obGluZXN0
YXJ0KGopLCBqKTsKLQkgIGJyZWFrOwotCWNhc2UgJy0nOgotCSAgaWYgKHJlcF9jbnQgPT0gMCkK
LQkgICAgcmVwX2NudCA9IDE7Ci0JICBjeSAtPSByZXBfY250OwotCSAgaWYgKGN5IDwgMCkKLQkg
ICAgY3kgPSAwOwotCSAgcmV2dG8obGluZXN0YXJ0KGN5KSwgY3kpOwotCSAgYnJlYWs7Ci0JY2Fz
ZSAnXic6Ci0JICByZXZ0byhsaW5lc3RhcnQoY3kpLCBjeSk7Ci0JICBicmVhazsKLQljYXNlICdc
bic6Ci0JICByZXZ0byhtYXJrZGF0YS0+bGVmdF9tYXIsIGN5ICsgMSk7Ci0JICBicmVhazsKLQlj
YXNlIDAyMjA6CS8qIE0tQy1wICovCi0JY2FzZSAnXDAyMCc6CS8qIENUUkwtUCAqLwotCWNhc2Ug
J2snOgotCSAgaWYgKHJlcF9jbnQgPT0gMCkKLQkgICAgcmVwX2NudCA9IDE7Ci0JICByZXZ0byhj
eCwgY3kgLSByZXBfY250KTsKLQkgIGJyZWFrOwotCWNhc2UgMDIwNjoJLyogTS1DLWYgKi8KLQlj
YXNlICdsJzoKLQkgIGlmIChyZXBfY250ID09IDApCi0JICAgIHJlcF9jbnQgPSAxOwotCSAgcmV2
dG8oY3ggKyByZXBfY250LCBjeSk7Ci0JICBicmVhazsKLQljYXNlICdcMDAxJzoJLyogQ1RSTC1B
IGZyb20gdGNzaC9lbWFjcyAqLwotCWNhc2UgJzAnOgotCSAgcmV2dG8obWFya2RhdGEtPmxlZnRf
bWFyLCBjeSk7Ci0JICBicmVhazsKLQljYXNlICdcMDA0JzogICAgLyogQ1RSTC1EIGRvd24gaGFs
ZiBzY3JlZW4gKi8KLQkgIGlmIChyZXBfY250ID09IDApCi0JICAgIHJlcF9jbnQgPSAoZm9yZS0+
d19oZWlnaHQgKyAxKSA+PiAxOwotCSAgcmV2dG9fbGluZShjeCwgY3kgKyByZXBfY250LCBXMkQo
Y3kpKTsKLQkgIGJyZWFrOwotCWNhc2UgJyQnOgotCSAgcmV2dG8obGluZWVuZChjeSksIGN5KTsK
LQkgIGJyZWFrOwotICAgICAgICBjYXNlICdcMDIyJzoJLyogQ1RSTC1SIGVtYWNzIHN0eWxlIGJh
Y2t3YXJkcyBzZWFyY2ggKi8KLQkgIElTZWFyY2goLTEpOwotCSAgaW5fbWFyayA9IDA7Ci0JICBi
cmVhazsKLSAgICAgICAgY2FzZSAnXDAyMyc6CS8qIENUUkwtUyBlbWFjcyBzdHlsZSBzZWFyY2gg
Ki8KLQkgIElTZWFyY2goMSk7Ci0JICBpbl9tYXJrID0gMDsKLQkgIGJyZWFrOwotCWNhc2UgJ1ww
MjUnOgkvKiBDVFJMLVUgdXAgaGFsZiBzY3JlZW4gKi8KLQkgIGlmIChyZXBfY250ID09IDApCi0J
ICAgIHJlcF9jbnQgPSAoZm9yZS0+d19oZWlnaHQgKyAxKSA+PiAxOwotCSAgcmV2dG9fbGluZShj
eCwgY3kgLSByZXBfY250LCBXMkQoY3kpKTsKLQkgIGJyZWFrOwotCWNhc2UgJ1wwMDcnOgkvKiBD
VFJMLUcgc2hvdyBjdXJzb3Jwb3MgKi8KLQkgIGlmIChtYXJrZGF0YS0+bGVmdF9tYXIgPT0gMCAm
JiBtYXJrZGF0YS0+cmlnaHRfbWFyID09IGZvcmUtPndfd2lkdGggLSAxKQotCSAgICBMTXNnKDAs
ICJDb2x1bW4gJWQgTGluZSAlZCgrJWQpIiwgY3grMSwgVzJEKGN5KSsxLAotCQltYXJrZGF0YS0+
aGlzdF9vZmZzZXQpOwotCSAgZWxzZQotCSAgICBMTXNnKDAsICJDb2x1bW4gJWQoJWQuLiVkKSBM
aW5lICVkKCslZCkiLCBjeCsxLAotCQltYXJrZGF0YS0+bGVmdF9tYXIrMSwgbWFya2RhdGEtPnJp
Z2h0X21hcisxLCBXMkQoY3kpKzEsIG1hcmtkYXRhLT5oaXN0X29mZnNldCk7Ci0JICBicmVhazsK
LQljYXNlICdcMDAyJzoJLyogQ1RSTC1CICBiYWNrIG9uZSBwYWdlICovCi0JICBpZiAocmVwX2Nu
dCA9PSAwKQotCSAgICByZXBfY250ID0gMTsKLQkgIHJlcF9jbnQgKj0gZm9yZS0+d19oZWlnaHQ7
Ci0JICByZXZ0byhjeCwgY3kgLSByZXBfY250KTsKLQkgIGJyZWFrOwotCWNhc2UgJ1wwMDYnOgkv
KiBDVFJMLUYgIGZvcndhcmQgb25lIHBhZ2UgKi8KLQkgIGlmIChyZXBfY250ID09IDApCi0JICAg
IHJlcF9jbnQgPSAxOwotCSAgcmVwX2NudCAqPSBmb3JlLT53X2hlaWdodDsKLQkgIHJldnRvKGN4
LCBjeSArIHJlcF9jbnQpOwotCSAgYnJlYWs7Ci0JY2FzZSAnXDAwNSc6CS8qIENUUkwtRSAgc2Ny
b2xsIHVwICovCi0JICBpZiAocmVwX2NudCA9PSAwKQotCSAgICByZXBfY250ID0gMTsKLQkgIHJl
cF9jbnQgPSBNYXJrU2Nyb2xsVXBEaXNwbGF5KHJlcF9jbnQpOwotCSAgaWYgKGN5IDwgRDJXKDAp
KQotICAgICAgICAgICAgcmV2dG8oY3gsIEQyVygwKSk7Ci0JICBlbHNlCi0gICAgICAgICAgICBM
R290b1BvcyhmbGF5ZXIsIGN4LCBXMkQoY3kpKTsKLQkgIGJyZWFrOwotCWNhc2UgJ1wwMzEnOiAv
KiBDVFJMLVkgIHNjcm9sbCBkb3duICovCi0JICBpZiAocmVwX2NudCA9PSAwKQotCSAgICByZXBf
Y250ID0gMTsKLQkgIHJlcF9jbnQgPSBNYXJrU2Nyb2xsRG93bkRpc3BsYXkocmVwX2NudCk7Ci0J
ICBpZiAoY3kgPiBEMlcoZm9yZS0+d19oZWlnaHQtMSkpCi0gICAgICAgICAgICByZXZ0byhjeCwg
RDJXKGZvcmUtPndfaGVpZ2h0LTEpKTsKLQkgIGVsc2UKLSAgICAgICAgICAgIExHb3RvUG9zKGZs
YXllciwgY3gsIFcyRChjeSkpOwotCSAgYnJlYWs7Ci0JY2FzZSAnQCc6CisJCQltYXJrZGF0YS0+
Zl9jbWQuZmxhZyA9IDE7CisJCQltYXJrZGF0YS0+Zl9jbWQuZGlyZWN0aW9uID0gb2Q7CisJCQlk
ZWJ1ZygiZW50ZXJpbmcgY2hhciBzZWFyY2hcbiIpOworCQkJY29udGludWU7CisJCWNhc2UgJzsn
OgorCQljYXNlICcsJzoKKwkJCWlmICghbWFya2RhdGEtPmZfY21kLnRhcmdldCkKKwkJCQlicmVh
azsKKwkJCWlmICghcmVwX2NudCkKKwkJCQlyZXBfY250ID0gMTsKKwkJCW5leHRjaGFyKCZjeCwK
KwkJCSAgICAgICAgICZjeSwKKwkJCSAgICAgICAgIG9kID09ICc7JyA/IG1hcmtkYXRhLT5mX2Nt
ZC5kaXJlY3Rpb24gOiAobWFya2RhdGEtPmZfY21kLmRpcmVjdGlvbiBeIDB4MjApLAorCQkJICAg
ICAgICAgbWFya2RhdGEtPmZfY21kLnRhcmdldCwKKwkJCSAgICAgICAgIHJlcF9jbnQpOworCQkJ
ICAgICAgICAgcmV2dG8oY3gsIGN5KTsKKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJY2FzZSAn
eCc6CisJCQlpZiAoIW1hcmtkYXRhLT5zZWNvbmQpCisJCQkJYnJlYWs7CisJCQltYXJrZGF0YS0+
Y3ggPSBtYXJrZGF0YS0+eDE7CisJCQltYXJrZGF0YS0+Y3kgPSBtYXJrZGF0YS0+eTE7CisJCQlt
YXJrZGF0YS0+eDEgPSBjeDsKKwkJCW1hcmtkYXRhLT55MSA9IGN5OworCQkJcmV2dG8obWFya2Rh
dGEtPmN4LCBtYXJrZGF0YS0+Y3kpOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwMTQnOgkvKiBDVFJM
LUwgUmVkaXNwbGF5ICovCisJCQlSZWRpc3BsYXkoMCk7CisJCQlMR290b1BvcyhmbGF5ZXIsIGN4
LCBXMkQoY3kpKTsKKwkJCWJyZWFrOworCQljYXNlIDAyMDI6CS8qIE0tQy1iICovCisJCWNhc2Ug
J1wwMTAnOgkvKiBDVFJMLUggQmFja3NwYWNlICovCisJCWNhc2UgJ2gnOgorCQkJaWYgKHJlcF9j
bnQgPT0gMCkKKwkJCQlyZXBfY250ID0gMTsKKwkJCXJldnRvKGN4IC0gcmVwX2NudCwgY3kpOwor
CQkJYnJlYWs7CisJCWNhc2UgMDIxNjoJLyogTS1DLXAgKi8KKwkJY2FzZSAnXDAxNic6CS8qIENU
UkwtTiAqLworCQljYXNlICdqJzoKKwkJCWlmIChyZXBfY250ID09IDApCisJCQkJcmVwX2NudCA9
IDE7CisJCQlyZXZ0byhjeCwgY3kgKyByZXBfY250KTsKKwkJCWJyZWFrOworCQljYXNlICcrJzoK
KwkJCWlmIChyZXBfY250ID09IDApCisJCQkJcmVwX2NudCA9IDE7CisJCQlqID0gY3kgKyByZXBf
Y250OworCQkJaWYgKGogPiBmb3JlLT53X2hpc3RoZWlnaHQgKyBmb3JlLT53X2hlaWdodCAtIDEp
CisJCQkJaiA9IGZvcmUtPndfaGlzdGhlaWdodCArIGZvcmUtPndfaGVpZ2h0IC0gMTsKKwkJCXJl
dnRvKGxpbmVzdGFydChqKSwgaik7CisJCQlicmVhazsKKwkJY2FzZSAnLSc6CisJCQlpZiAocmVw
X2NudCA9PSAwKQorCQkJCXJlcF9jbnQgPSAxOworCQkJY3kgLT0gcmVwX2NudDsKKwkJCWlmIChj
eSA8IDApCisJCQkJY3kgPSAwOworCQkJcmV2dG8obGluZXN0YXJ0KGN5KSwgY3kpOworCQkJYnJl
YWs7CisJCWNhc2UgJ14nOgorCQkJcmV2dG8obGluZXN0YXJ0KGN5KSwgY3kpOworCQkJYnJlYWs7
CisJCWNhc2UgJ1xuJzoKKwkJCXJldnRvKG1hcmtkYXRhLT5sZWZ0X21hciwgY3kgKyAxKTsKKwkJ
CWJyZWFrOworCQljYXNlIDAyMjA6CS8qIE0tQy1wICovCisJCWNhc2UgJ1wwMjAnOgkvKiBDVFJM
LVAgKi8KKwkJY2FzZSAnayc6CisJCQlpZiAocmVwX2NudCA9PSAwKQorCQkJCXJlcF9jbnQgPSAx
OworCQkJcmV2dG8oY3gsIGN5IC0gcmVwX2NudCk7CisJCQlicmVhazsKKwkJY2FzZSAwMjA2Ogkv
KiBNLUMtZiAqLworCQljYXNlICdsJzoKKwkJCWlmIChyZXBfY250ID09IDApCisJCQkJcmVwX2Nu
dCA9IDE7CisJCQlyZXZ0byhjeCArIHJlcF9jbnQsIGN5KTsKKwkJCWJyZWFrOworCQljYXNlICdc
MDAxJzoJLyogQ1RSTC1BIGZyb20gdGNzaC9lbWFjcyAqLworCQljYXNlICcwJzoKKwkJCXJldnRv
KG1hcmtkYXRhLT5sZWZ0X21hciwgY3kpOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwMDQnOiAgICAv
KiBDVFJMLUQgZG93biBoYWxmIHNjcmVlbiAqLworCQkJaWYgKHJlcF9jbnQgPT0gMCkKKwkJCQly
ZXBfY250ID0gKGZvcmUtPndfaGVpZ2h0ICsgMSkgPj4gMTsKKwkJCXJldnRvX2xpbmUoY3gsIGN5
ICsgcmVwX2NudCwgVzJEKGN5KSk7CisJCQlicmVhazsKKwkJY2FzZSAnJCc6CisJCQlyZXZ0byhs
aW5lZW5kKGN5KSwgY3kpOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwMjInOgkvKiBDVFJMLVIgZW1h
Y3Mgc3R5bGUgYmFja3dhcmRzIHNlYXJjaCAqLworCQkJSVNlYXJjaCgtMSk7CisJCQlpbl9tYXJr
ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdcMDIzJzoJLyogQ1RSTC1TIGVtYWNzIHN0eWxlIHNl
YXJjaCAqLworCQkJSVNlYXJjaCgxKTsKKwkJCWluX21hcmsgPSAwOworCQkJYnJlYWs7CisJCWNh
c2UgJ1wwMjUnOgkvKiBDVFJMLVUgdXAgaGFsZiBzY3JlZW4gKi8KKwkJCWlmIChyZXBfY250ID09
IDApCisJCQkJcmVwX2NudCA9IChmb3JlLT53X2hlaWdodCArIDEpID4+IDE7CisJCQlyZXZ0b19s
aW5lKGN4LCBjeSAtIHJlcF9jbnQsIFcyRChjeSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwMDcn
OgkvKiBDVFJMLUcgc2hvdyBjdXJzb3Jwb3MgKi8KKwkJCWlmIChtYXJrZGF0YS0+bGVmdF9tYXIg
PT0gMCAmJiBtYXJrZGF0YS0+cmlnaHRfbWFyID09IGZvcmUtPndfd2lkdGggLSAxKQorCQkJCUxN
c2coMCwgIkNvbHVtbiAlZCBMaW5lICVkKCslZCkiLCBjeCArIDEsIFcyRChjeSkgKyAxLCBtYXJr
ZGF0YS0+aGlzdF9vZmZzZXQpOworCQkJZWxzZQorCQkJCUxNc2coMCwgIkNvbHVtbiAlZCglZC4u
JWQpIExpbmUgJWQoKyVkKSIsCisJCQkJICAgIGN4ICsgMSwgbWFya2RhdGEtPmxlZnRfbWFyICsg
MSwKKwkJCQkgICAgbWFya2RhdGEtPnJpZ2h0X21hciArIDEsIFcyRChjeSkgKyAxLAorCQkJCSAg
ICBtYXJrZGF0YS0+aGlzdF9vZmZzZXQpOworCQkJYnJlYWs7CisJCWNhc2UgJ1wwMDInOgkvKiBD
VFJMLUIgIGJhY2sgb25lIHBhZ2UgKi8KKwkJCWlmIChyZXBfY250ID09IDApCisJCQkJcmVwX2Nu
dCA9IDE7CisJCQlyZXBfY250ICo9IGZvcmUtPndfaGVpZ2h0OworCQkJcmV2dG8oY3gsIGN5IC0g
cmVwX2NudCk7CisJCQlicmVhazsKKwkJY2FzZSAnXDAwNic6CS8qIENUUkwtRiAgZm9yd2FyZCBv
bmUgcGFnZSAqLworCQkJaWYgKHJlcF9jbnQgPT0gMCkKKwkJCQlyZXBfY250ID0gMTsKKwkJCXJl
cF9jbnQgKj0gZm9yZS0+d19oZWlnaHQ7CisJCQlyZXZ0byhjeCwgY3kgKyByZXBfY250KTsKKwkJ
CWJyZWFrOworCQljYXNlICdcMDA1JzoJLyogQ1RSTC1FICBzY3JvbGwgdXAgKi8KKwkJCWlmIChy
ZXBfY250ID09IDApCisJCQkJcmVwX2NudCA9IDE7CisJCQlyZXBfY250ID0gTWFya1Njcm9sbFVw
RGlzcGxheShyZXBfY250KTsKKwkJCWlmIChjeSA8IEQyVygwKSkKKwkJCQlyZXZ0byhjeCwgRDJX
KDApKTsKKwkJCWVsc2UKKwkJCQlMR290b1BvcyhmbGF5ZXIsIGN4LCBXMkQoY3kpKTsKKwkJCWJy
ZWFrOworCQljYXNlICdcMDMxJzogLyogQ1RSTC1ZICBzY3JvbGwgZG93biAqLworCQkJaWYgKHJl
cF9jbnQgPT0gMCkKKwkJCQlyZXBfY250ID0gMTsKKwkJCXJlcF9jbnQgPSBNYXJrU2Nyb2xsRG93
bkRpc3BsYXkocmVwX2NudCk7CisJCQlpZiAoY3kgPiBEMlcoZm9yZS0+d19oZWlnaHQgLSAxKSkK
KwkJCQlyZXZ0byhjeCwgRDJXKGZvcmUtPndfaGVpZ2h0IC0gMSkpOworCQkJZWxzZQorCQkJCUxH
b3RvUG9zKGZsYXllciwgY3gsIFcyRChjeSkpOworCQkJYnJlYWs7CisJCWNhc2UgJ0AnOgogCSAg
LyogaXQgbWF5IGJlIHVzZWZ1bCB0byBoYXZlIGEga2V5IHRoYXQgZG9lcyBub3RoaW5nICovCi0J
ICBicmVhazsKLQljYXNlICclJzoKKwkJCWJyZWFrOworCQljYXNlICclJzoKIAkgIC8qIHJlcF9j
bnQgaXMgYSBwZXJjZW50YWdlIGZvciB0aGUgaGlzdG9yeSBidWZmZXIgKi8KLQkgIGlmIChyZXBf
Y250IDwgMCkKLQkgICAgcmVwX2NudCA9IDA7Ci0JICBpZiAocmVwX2NudCA+IDEwMCkKLQkgICAg
cmVwX2NudCA9IDEwMDsKLQkgIHJldnRvX2xpbmUobWFya2RhdGEtPmxlZnRfbWFyLAotCQkgICAg
IGZvcmUtPndfaGlzdGhlaWdodCAtIGZvcmUtPndfc2Nyb2xsYmFja19oZWlnaHQgKwotCQkgICAg
IChpbnQpKHJlcF9jbnQgKiAoZm9yZS0+d19zY3JvbGxiYWNrX2hlaWdodCArIGZvcmUtPndfaGVp
Z2h0KSAvIDEwMC4wKSwKLQkJICAgICAoZm9yZS0+d19oZWlnaHQgLSAxKSAvIDIpOwotCSAgYnJl
YWs7Ci0JY2FzZSAwMjAxOgotCWNhc2UgJ2cnOgotCSAgcmVwX2NudCA9IDE7CisJCQlpZiAocmVw
X2NudCA8IDApCisJCQkJcmVwX2NudCA9IDA7CisJCQlpZiAocmVwX2NudCA+IDEwMCkKKwkJCQly
ZXBfY250ID0gMTAwOworCisJCQlyZXZ0b19saW5lKG1hcmtkYXRhLT5sZWZ0X21hciwKKwkJCSAg
ICBmb3JlLT53X2hpc3RoZWlnaHQgLSBmb3JlLT53X3Njcm9sbGJhY2tfaGVpZ2h0ICsKKwkJCSAg
ICAoaW50KShyZXBfY250ICogKGZvcmUtPndfc2Nyb2xsYmFja19oZWlnaHQgKworCQkJICAgIGZv
cmUtPndfaGVpZ2h0KSAvIDEwMC4wKSwgKGZvcmUtPndfaGVpZ2h0IC0gMSkgLyAyKTsKKwkJCWJy
ZWFrOworCQljYXNlIDAyMDE6CisJCWNhc2UgJ2cnOgorCQkJcmVwX2NudCA9IDE7CiAJICAvKiBG
QUxMVEhST1VHSCAqLwotCWNhc2UgMDIwNToKLQljYXNlICdHJzoKKwkJY2FzZSAwMjA1OgorCQlj
YXNlICdHJzoKIAkgIC8qIHJlcF9jbnQgaXMgaGVyZSB0aGUgV0lOIGxpbmUgbnVtYmVyICovCi0J
ICBpZiAocmVwX2NudCA9PSAwKQotCSAgICByZXBfY250ID0gZm9yZS0+d19oaXN0aGVpZ2h0ICsg
Zm9yZS0+d19oZWlnaHQ7Ci0JICByZXZ0b19saW5lKG1hcmtkYXRhLT5sZWZ0X21hciwgLS1yZXBf
Y250LCAoZm9yZS0+d19oZWlnaHQgLSAxKSAvIDIpOwotCSAgYnJlYWs7Ci0JY2FzZSAnSCc6Ci0J
ICByZXZ0byhtYXJrZGF0YS0+bGVmdF9tYXIsIEQyVygwKSk7Ci0JICBicmVhazsKLQljYXNlICdN
JzoKLQkgIHJldnRvKG1hcmtkYXRhLT5sZWZ0X21hciwgRDJXKChmb3JlLT53X2hlaWdodCAtIDEp
IC8gMikpOwotCSAgYnJlYWs7Ci0JY2FzZSAnTCc6Ci0JICByZXZ0byhtYXJrZGF0YS0+bGVmdF9t
YXIsIEQyVyhmb3JlLT53X2hlaWdodCAtIDEpKTsKLQkgIGJyZWFrOwotCWNhc2UgJ3wnOgotCSAg
cmV2dG8oLS1yZXBfY250LCBjeSk7Ci0JICBicmVhazsKLQljYXNlICd3JzoKLQkgIGlmIChyZXBf
Y250ID09IDApCi0JICAgIHJlcF9jbnQgPSAxOwotCSAgbmV4dHdvcmQoJmN4LCAmY3ksIE5XX01V
U1RNT1ZFLCByZXBfY250KTsKLQkgIHJldnRvKGN4LCBjeSk7Ci0JICBicmVhazsKLQljYXNlICdl
JzoKLQljYXNlICdFJzoKLQkgIGlmIChyZXBfY250ID09IDApCi0JICAgIHJlcF9jbnQgPSAxOwot
CSAgbmV4dHdvcmQoJmN4LCAmY3ksIE5XX0VORE9GV09SRHxOV19NVVNUTU9WRSB8IChvZCA9PSAn
RScgPyBOV19CSUcgOiAwKSwgcmVwX2NudCk7Ci0JICByZXZ0byhjeCwgY3kpOwotCSAgYnJlYWs7
Ci0JY2FzZSAnYic6Ci0JY2FzZSAnQic6Ci0JICBpZiAocmVwX2NudCA9PSAwKQotCSAgICByZXBf
Y250ID0gMTsKLQkgIG5leHR3b3JkKCZjeCwgJmN5LCBOV19CQUNLfE5XX0VORE9GV09SRHxOV19N
VVNUTU9WRSB8IChvZCA9PSAnQicgPyBOV19CSUcgOiAwKSwgcmVwX2NudCk7Ci0JICByZXZ0byhj
eCwgY3kpOwotCSAgYnJlYWs7Ci0JY2FzZSAnYSc6Ci0JICBtYXJrZGF0YS0+YXBwZW5kX21vZGUg
PSAxIC0gbWFya2RhdGEtPmFwcGVuZF9tb2RlOwotCSAgZGVidWcxKCJhcHBlbmQgbW9kZSAlZC0t
XG4iLCBtYXJrZGF0YS0+YXBwZW5kX21vZGUpOwotCSAgTE1zZygwLCAobWFya2RhdGEtPmFwcGVu
ZF9tb2RlKSA/ICI6c2V0IGFwcGVuZCIgOiAiOnNldCBub2FwcGVuZCIpOwotCSAgYnJlYWs7Ci0J
Y2FzZSAndic6Ci0JY2FzZSAnVic6CisJCQlpZiAocmVwX2NudCA9PSAwKQorCQkJCXJlcF9jbnQg
PSBmb3JlLT53X2hpc3RoZWlnaHQgKyBmb3JlLT53X2hlaWdodDsKKwkJCXJldnRvX2xpbmUobWFy
a2RhdGEtPmxlZnRfbWFyLCAtLXJlcF9jbnQsIChmb3JlLT53X2hlaWdodCAtIDEpIC8gMik7CisJ
CQlicmVhazsKKwkJY2FzZSAnSCc6CisJCQlyZXZ0byhtYXJrZGF0YS0+bGVmdF9tYXIsIEQyVygw
KSk7CisJCQlicmVhazsKKwkJY2FzZSAnTSc6CisJCQlyZXZ0byhtYXJrZGF0YS0+bGVmdF9tYXIs
IEQyVygoZm9yZS0+d19oZWlnaHQgLSAxKSAvIDIpKTsKKwkJCWJyZWFrOworCQljYXNlICdMJzoK
KwkJCXJldnRvKG1hcmtkYXRhLT5sZWZ0X21hciwgRDJXKGZvcmUtPndfaGVpZ2h0IC0gMSkpOwor
CQkJYnJlYWs7CisJCWNhc2UgJ3wnOgorCQkJcmV2dG8oLS1yZXBfY250LCBjeSk7CisJCQlicmVh
azsKKwkJY2FzZSAndyc6CisJCQlpZiAocmVwX2NudCA9PSAwKQorCQkJCXJlcF9jbnQgPSAxOwor
CQkJbmV4dHdvcmQoJmN4LCAmY3ksIE5XX01VU1RNT1ZFLCByZXBfY250KTsKKwkJCXJldnRvKGN4
LCBjeSk7CisJCQlicmVhazsKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQkJaWYgKHJlcF9j
bnQgPT0gMCkKKwkJCQlyZXBfY250ID0gMTsKKwkJCW5leHR3b3JkKCZjeCwgJmN5LCBOV19FTkRP
RldPUkR8TldfTVVTVE1PVkUgfCAob2QgPT0gJ0UnID8gTldfQklHIDogMCksIHJlcF9jbnQpOwor
CQkJcmV2dG8oY3gsIGN5KTsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJY2FzZSAnQic6CisJ
CQlpZiAocmVwX2NudCA9PSAwKQorCQkJCXJlcF9jbnQgPSAxOworCQkJbmV4dHdvcmQoJmN4LCAm
Y3ksIE5XX0JBQ0t8TldfRU5ET0ZXT1JEfE5XX01VU1RNT1ZFIHwgKG9kID09ICdCJyA/IE5XX0JJ
RyA6IDApLCByZXBfY250KTsKKwkJCXJldnRvKGN4LCBjeSk7CisJCQlicmVhazsKKwkJY2FzZSAn
YSc6CisJCQltYXJrZGF0YS0+YXBwZW5kX21vZGUgPSAxIC0gbWFya2RhdGEtPmFwcGVuZF9tb2Rl
OworCQkJZGVidWcxKCJhcHBlbmQgbW9kZSAlZC0tXG4iLCBtYXJrZGF0YS0+YXBwZW5kX21vZGUp
OworCQkJTE1zZygwLCAobWFya2RhdGEtPmFwcGVuZF9tb2RlKSA/ICI6c2V0IGFwcGVuZCIgOiAi
OnNldCBub2FwcGVuZCIpOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQljYXNlICdWJzoKIAkg
IC8qIHRoaXMgc2V0cyBzdGFydCBjb2x1bW4gdG8gY29sdW1uIDkgZm9yIFZJIDpzZXQgbnUgdXNl
cnMgKi8KLQkgIGlmIChtYXJrZGF0YS0+bGVmdF9tYXIgPT0gOCkKLQkgICAgcmVwX2NudCA9IDE7
Ci0JICBlbHNlCi0JICAgIHJlcF9jbnQgPSA5OworCQkJaWYgKG1hcmtkYXRhLT5sZWZ0X21hciA9
PSA4KQorCQkJCXJlcF9jbnQgPSAxOworCQkJZWxzZQorCQkJCXJlcF9jbnQgPSA5OwogCSAgLyog
RkFMTFRIUk9VR0ggKi8KLQljYXNlICdjJzoKLQljYXNlICdDJzoKKwkJY2FzZSAnYyc6CisJCWNh
c2UgJ0MnOgogCSAgLyogc2V0IHN0YXJ0IGNvbHVtbiAoYykgYW5kIGVuZCBjb2x1bW4gKEMpICov
Ci0JICBpZiAobWFya2RhdGEtPnNlY29uZCkKLQkgICAgewotCSAgICAgIHJlbShtYXJrZGF0YS0+
eDEsIG1hcmtkYXRhLT55MSwgY3gsIGN5LCAxLCAoY2hhciAqKTAsIGZvcmUtPndfaGVpZ2h0LTEp
OyAvKiBIYWNrICovCi0JICAgICAgbWFya2RhdGEtPnNlY29uZCA9IDE7CS8qIHJlbSB0dXJucyBv
ZmYgc2Vjb25kICovCi0JICAgIH0KLQkgIHJlcF9jbnQtLTsKLQkgIGlmIChyZXBfY250IDwgMCkK
LQkgICAgcmVwX2NudCA9IGN4OwotCSAgaWYgKG9kICE9ICdDJykKLQkgICAgewotCSAgICAgIG1h
cmtkYXRhLT5sZWZ0X21hciA9IHJlcF9jbnQ7Ci0JICAgICAgaWYgKG1hcmtkYXRhLT5sZWZ0X21h
ciA+IG1hcmtkYXRhLT5yaWdodF9tYXIpCi0JCW1hcmtkYXRhLT5sZWZ0X21hciA9IG1hcmtkYXRh
LT5yaWdodF9tYXI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIG1hcmtkYXRhLT5y
aWdodF9tYXIgPSByZXBfY250OwotCSAgICAgIGlmIChtYXJrZGF0YS0+bGVmdF9tYXIgPiBtYXJr
ZGF0YS0+cmlnaHRfbWFyKQotCQltYXJrZGF0YS0+cmlnaHRfbWFyID0gbWFya2RhdGEtPmxlZnRf
bWFyOwotCSAgICB9Ci0JICBpZiAobWFya2RhdGEtPnNlY29uZCkKLQkgICAgewotCSAgICAgIG1h
cmtkYXRhLT5jeCA9IG1hcmtkYXRhLT54MTsgbWFya2RhdGEtPmN5ID0gbWFya2RhdGEtPnkxOwot
CSAgICAgIHJldnRvKGN4LCBjeSk7Ci0JICAgIH0KLQkgIGlmIChvZCA9PSAndicgfHwgb2QgPT0g
J1YnKQotCSAgICBMTXNnKDAsIChtYXJrZGF0YS0+bGVmdF9tYXIgIT0gOCkgPyAiOnNldCBub251
IiA6ICI6c2V0IG51Iik7Ci0JICBicmVhazsKLQljYXNlICdKJzoKLQkgIC8qIGhvdyBkbyB5b3Ug
am9pbiBsaW5lcyBpbiBWSSA/ICovCi0JICBtYXJrZGF0YS0+bm9ubCA9IChtYXJrZGF0YS0+bm9u
bCArIDEpICUgNDsKLQkgIHN3aXRjaCAobWFya2RhdGEtPm5vbmwpCi0JICAgIHsKLQkgICAgY2Fz
ZSAwOgotCSAgICAgIGlmIChqb2luX3dpdGhfY3IpCi0JCUxNc2coMCwgIk11bHRpcGxlIGxpbmVz
IChDUi9MRikiKTsKLQkgICAgICBlbHNlCi0JCUxNc2coMCwgIk11bHRpcGxlIGxpbmVzIChMRiki
KTsKLQkgICAgICBicmVhazsKLQkgICAgY2FzZSAxOgotCSAgICAgIExNc2coMCwgIkxpbmVzIGpv
aW5lZCIpOwotCSAgICAgIGJyZWFrOwotCSAgICBjYXNlIDI6Ci0JICAgICAgTE1zZygwLCAiTGlu
ZXMgam9pbmVkIHdpdGggYmxhbmtzIik7Ci0JICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgMzoKLQkg
ICAgICBMTXNnKDAsICJMaW5lcyBqb2luZWQgd2l0aCBjb21tYSIpOwotCSAgICAgIGJyZWFrOwot
CSAgICB9Ci0JICBicmVhazsKLQljYXNlICcvJzoKLQkgIFNlYXJjaCgxKTsKLQkgIGluX21hcmsg
PSAwOwotCSAgYnJlYWs7Ci0JY2FzZSAnPyc6Ci0JICBTZWFyY2goLTEpOwotCSAgaW5fbWFyayA9
IDA7Ci0JICBicmVhazsKLQljYXNlICduJzoKLQkgIFNlYXJjaCgwKTsKLQkgIGJyZWFrOwotCWNh
c2UgJ04nOgotCSAgbWFya2RhdGEtPmlzZGlyID0gLW1hcmtkYXRhLT5pc2RpcjsKLQkgIFNlYXJj
aCgwKTsKLQkgIG1hcmtkYXRhLT5pc2RpciA9IC1tYXJrZGF0YS0+aXNkaXI7Ci0JICBicmVhazsK
LQljYXNlICd5JzoKLQljYXNlICdZJzoKLQkgIGlmIChtYXJrZGF0YS0+c2Vjb25kID09IDApCi0J
ICAgIHsKLQkgICAgICByZXZ0byhsaW5lc3RhcnQoY3kpLCBjeSk7Ci0JICAgICAgbWFya2RhdGEt
PnNlY29uZCsrOwotCSAgICAgIGN4ID0gbWFya2RhdGEtPngxID0gbWFya2RhdGEtPmN4OwotCSAg
ICAgIGN5ID0gbWFya2RhdGEtPnkxID0gbWFya2RhdGEtPmN5OwotCSAgICB9Ci0JICBpZiAoLS1y
ZXBfY250ID4gMCkKLQkgICAgcmV2dG8oY3gsIGN5ICsgcmVwX2NudCk7Ci0JICByZXZ0byhsaW5l
ZW5kKG1hcmtkYXRhLT5jeSksIG1hcmtkYXRhLT5jeSk7Ci0JICBpZiAob2QgPT0gJ3knKQotCSAg
ICBicmVhazsKKwkJCWlmIChtYXJrZGF0YS0+c2Vjb25kKSB7CisJCQkJcmVtKG1hcmtkYXRhLT54
MSwgbWFya2RhdGEtPnkxLCBjeCwgY3ksIDEsIChjaGFyICopMCwgZm9yZS0+d19oZWlnaHQgLSAx
KTsgLyogSGFjayAqLworCQkJCW1hcmtkYXRhLT5zZWNvbmQgPSAxOwkvKiByZW0gdHVybnMgb2Zm
IHNlY29uZCAqLworCQkJfQorCQkJcmVwX2NudC0tOworCQkJaWYgKHJlcF9jbnQgPCAwKQorCQkJ
CXJlcF9jbnQgPSBjeDsKKwkJCWlmIChvZCAhPSAnQycpIHsKKwkJCQltYXJrZGF0YS0+bGVmdF9t
YXIgPSByZXBfY250OworCQkJCWlmIChtYXJrZGF0YS0+bGVmdF9tYXIgPiBtYXJrZGF0YS0+cmln
aHRfbWFyKQorCQkJCQltYXJrZGF0YS0+bGVmdF9tYXIgPSBtYXJrZGF0YS0+cmlnaHRfbWFyOwor
CQkJfSBlbHNlIHsKKwkJCQltYXJrZGF0YS0+cmlnaHRfbWFyID0gcmVwX2NudDsKKwkJCQlpZiAo
bWFya2RhdGEtPmxlZnRfbWFyID4gbWFya2RhdGEtPnJpZ2h0X21hcikKKwkJCQkJbWFya2RhdGEt
PnJpZ2h0X21hciA9IG1hcmtkYXRhLT5sZWZ0X21hcjsKKwkJCX0KKwkJCWlmIChtYXJrZGF0YS0+
c2Vjb25kKSB7CisJCQkJbWFya2RhdGEtPmN4ID0gbWFya2RhdGEtPngxOworCQkJCW1hcmtkYXRh
LT5jeSA9IG1hcmtkYXRhLT55MTsKKwkJCQlyZXZ0byhjeCwgY3kpOworCQkJfQorCQkJaWYgKG9k
ID09ICd2JyB8fCBvZCA9PSAnVicpCisJCQkJTE1zZygwLCAobWFya2RhdGEtPmxlZnRfbWFyICE9
IDgpID8gIjpzZXQgbm9udSIgOiAiOnNldCBudSIpOworCQkJYnJlYWs7CisJCWNhc2UgJ0onOgor
CQkvKiBob3cgZG8geW91IGpvaW4gbGluZXMgaW4gVkkgPyAqLworCQkJbWFya2RhdGEtPm5vbmwg
PSAobWFya2RhdGEtPm5vbmwgKyAxKSAlIDQ7CisJCQlzd2l0Y2ggKG1hcmtkYXRhLT5ub25sKSB7
CisJCQljYXNlIDA6CisJCQkJaWYgKGpvaW5fd2l0aF9jcikKKwkJCQkJTE1zZygwLCAiTXVsdGlw
bGUgbGluZXMgKENSL0xGKSIpOworCQkJCWVsc2UKKwkJCQkJTE1zZygwLCAiTXVsdGlwbGUgbGlu
ZXMgKExGKSIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCUxNc2coMCwgIkxpbmVzIGpv
aW5lZCIpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCUxNc2coMCwgIkxpbmVzIGpvaW5l
ZCB3aXRoIGJsYW5rcyIpOworCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCUxNc2coMCwgIkxp
bmVzIGpvaW5lZCB3aXRoIGNvbW1hIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJ
Y2FzZSAnLyc6CisJCQlTZWFyY2goMSk7CisJCQlpbl9tYXJrID0gMDsKKwkJCWJyZWFrOworCQlj
YXNlICc/JzoKKwkJCVNlYXJjaCgtMSk7CisJCQlpbl9tYXJrID0gMDsKKwkJCWJyZWFrOworCQlj
YXNlICduJzoKKwkJCVNlYXJjaCgwKTsKKwkJCWJyZWFrOworCQljYXNlICdOJzoKKwkJCW1hcmtk
YXRhLT5pc2RpciA9IC1tYXJrZGF0YS0+aXNkaXI7CisJCQlTZWFyY2goMCk7CisJCQltYXJrZGF0
YS0+aXNkaXIgPSAtbWFya2RhdGEtPmlzZGlyOworCQkJYnJlYWs7CisJCWNhc2UgJ3knOgorCQlj
YXNlICdZJzoKKwkJCWlmIChtYXJrZGF0YS0+c2Vjb25kID09IDApIHsKKwkJCQlyZXZ0byhsaW5l
c3RhcnQoY3kpLCBjeSk7CisJCQkJbWFya2RhdGEtPnNlY29uZCsrOworCQkJCWN4ID0gbWFya2Rh
dGEtPngxID0gbWFya2RhdGEtPmN4OworCQkJCWN5ID0gbWFya2RhdGEtPnkxID0gbWFya2RhdGEt
PmN5OworCQkJfQorCQkJaWYgKC0tcmVwX2NudCA+IDApCisJCQkJcmV2dG8oY3gsIGN5ICsgcmVw
X2NudCk7CisJCQlyZXZ0byhsaW5lZW5kKG1hcmtkYXRhLT5jeSksIG1hcmtkYXRhLT5jeSk7CisJ
CQlpZiAob2QgPT0gJ3knKQorCQkJCWJyZWFrOwogCSAgLyogRkFMTFRIUk9VR0ggKi8KLQljYXNl
ICdXJzoKLQkgIGlmIChvZCA9PSAnVycpCi0JICAgIHsKLQkgICAgICBpZiAocmVwX2NudCA9PSAw
KQotCQlyZXBfY250ID0gMTsKLQkgICAgICBpZiAoIW1hcmtkYXRhLT5zZWNvbmQpCi0JCXsKLQkJ
ICBuZXh0d29yZCgmY3gsICZjeSwgTldfQkFDS3xOV19FTkRPRldPUkQsIDEpOwotCQkgIHJldnRv
KGN4LCBjeSk7Ci0JCSAgbWFya2RhdGEtPnNlY29uZCsrOwotCQkgIGN4ID0gbWFya2RhdGEtPngx
ID0gbWFya2RhdGEtPmN4OwotCQkgIGN5ID0gbWFya2RhdGEtPnkxID0gbWFya2RhdGEtPmN5Owot
CQl9Ci0JICAgICAgbmV4dHdvcmQoJmN4LCAmY3ksIE5XX0VORE9GV09SRCwgcmVwX2NudCk7Ci0J
ICAgICAgcmV2dG8oY3gsIGN5KTsKLQkgICAgfQotCSAgY3ggPSBtYXJrZGF0YS0+Y3g7Ci0JICBj
eSA9IG1hcmtkYXRhLT5jeTsKKwkJY2FzZSAnVyc6CisJCQlpZiAob2QgPT0gJ1cnKSB7CisJCQkJ
aWYgKHJlcF9jbnQgPT0gMCkKKwkJCQkJcmVwX2NudCA9IDE7CisJCQkJaWYgKCFtYXJrZGF0YS0+
c2Vjb25kKSB7CisJCQkJCW5leHR3b3JkKCZjeCwgJmN5LCBOV19CQUNLfE5XX0VORE9GV09SRCwg
MSk7CisJCQkJCXJldnRvKGN4LCBjeSk7CisJCQkJCW1hcmtkYXRhLT5zZWNvbmQrKzsKKwkJCQkJ
Y3ggPSBtYXJrZGF0YS0+eDEgPSBtYXJrZGF0YS0+Y3g7CisJCQkJCWN5ID0gbWFya2RhdGEtPnkx
ID0gbWFya2RhdGEtPmN5OworCQkJCX0KKwkJCQluZXh0d29yZCgmY3gsICZjeSwgTldfRU5ET0ZX
T1JELCByZXBfY250KTsKKwkJCQlyZXZ0byhjeCwgY3kpOworCQkJfQorCQkJY3ggPSBtYXJrZGF0
YS0+Y3g7CisJCQljeSA9IG1hcmtkYXRhLT5jeTsKIAkgIC8qIEZBTExUSFJPVUdIICovCi0JY2Fz
ZSAnQSc6Ci0JICBpZiAob2QgPT0gJ0EnKQotCSAgICBtYXJrZGF0YS0+YXBwZW5kX21vZGUgPSAx
OworCQljYXNlICdBJzoKKwkJCWlmIChvZCA9PSAnQScpCisJCQkJbWFya2RhdGEtPmFwcGVuZF9t
b2RlID0gMTsKIAkgIC8qIEZBTExUSFJPVUdIICovCi0JY2FzZSAnPic6Ci0JICBpZiAob2QgPT0g
Jz4nKQotCSAgICBtYXJrZGF0YS0+d3JpdGVfYnVmZmVyID0gMTsKKwkJY2FzZSAnPic6CisJCQlp
ZiAob2QgPT0gJz4nKQorCQkJCW1hcmtkYXRhLT53cml0ZV9idWZmZXIgPSAxOwogCSAgLyogRkFM
TFRIUk9VR0ggKi8KLQljYXNlICcgJzoKLQljYXNlICdccic6Ci0JICBpZiAoIW1hcmtkYXRhLT5z
ZWNvbmQpCi0JICAgIHsKLQkgICAgICBtYXJrZGF0YS0+c2Vjb25kKys7Ci0JICAgICAgbWFya2Rh
dGEtPngxID0gY3g7Ci0JICAgICAgbWFya2RhdGEtPnkxID0gY3k7Ci0JICAgICAgcmV2dG8oY3gs
IGN5KTsKLQkgICAgICBMTXNnKDAsICJGaXJzdCBtYXJrIHNldCAtIENvbHVtbiAlZCBMaW5lICVk
IiwgY3grMSwgVzJEKGN5KSsxKTsKLQkgICAgICBicmVhazsKLQkgICAgfQotCSAgZWxzZQotCSAg
ICB7Ci0JICAgICAgaW50IGFwcGVuZF9tb2RlID0gbWFya2RhdGEtPmFwcGVuZF9tb2RlOwotCSAg
ICAgIGludCB3cml0ZV9idWZmZXIgPSBtYXJrZGF0YS0+d3JpdGVfYnVmZmVyOwotCi0JICAgICAg
eDIgPSBjeDsKLQkgICAgICB5MiA9IGN5OwotCSAgICAgIG5ld2NvcHlsZW4gPSByZW0obWFya2Rh
dGEtPngxLCBtYXJrZGF0YS0+eTEsIHgyLCB5MiwgMiwgKGNoYXIgKikwLCAwKTsgLyogY291bnQg
Ki8KLQkgICAgICBpZiAobWRfdXNlci0+dV9wbG9wLmJ1ZiAmJiAhYXBwZW5kX21vZGUpCi0JCVVz
ZXJGcmVlQ29weUJ1ZmZlcihtZF91c2VyKTsKLQkgICAgICB5ZW5kID0gZm9yZS0+d19oZWlnaHQg
LSAxOwotCSAgICAgIGlmIChmb3JlLT53X2hpc3RoZWlnaHQgLSBtYXJrZGF0YS0+aGlzdF9vZmZz
ZXQgPCBmb3JlLT53X2hlaWdodCkKLQkJewotCQkgIG1hcmtkYXRhLT5zZWNvbmQgPSAwOwotCQkg
IHllbmQgLT0gTWFya1Njcm9sbFVwRGlzcGxheShmb3JlLT53X2hpc3RoZWlnaHQgLSBtYXJrZGF0
YS0+aGlzdF9vZmZzZXQpOwotCQl9Ci0JICAgICAgaWYgKG5ld2NvcHlsZW4gPiAwKQotCQl7CisJ
CWNhc2UgJyAnOgorCQljYXNlICdccic6CisJCQlpZiAoIW1hcmtkYXRhLT5zZWNvbmQpIHsKKwkJ
CQltYXJrZGF0YS0+c2Vjb25kKys7CisJCQkJbWFya2RhdGEtPngxID0gY3g7CisJCQkJbWFya2Rh
dGEtPnkxID0gY3k7CisJCQkJcmV2dG8oY3gsIGN5KTsKKwkJCQlMTXNnKDAsICJGaXJzdCBtYXJr
IHNldCAtIENvbHVtbiAlZCBMaW5lICVkIiwgY3ggKyAxLCBXMkQoY3kpICsgMSk7CisJCQkJYnJl
YWs7CisJCQl9IGVsc2UgeworCQkJCWludCBhcHBlbmRfbW9kZSA9IG1hcmtkYXRhLT5hcHBlbmRf
bW9kZTsKKwkJCQlpbnQgd3JpdGVfYnVmZmVyID0gbWFya2RhdGEtPndyaXRlX2J1ZmZlcjsKKwor
CQkJCXgyID0gY3g7CisJCQkJeTIgPSBjeTsKKwkJCQluZXdjb3B5bGVuID0gcmVtKG1hcmtkYXRh
LT54MSwgbWFya2RhdGEtPnkxLCB4MiwgeTIsIDIsIChjaGFyICopMCwgMCk7IC8qIGNvdW50ICov
CisJCQkJaWYgKG1kX3VzZXItPnVfcGxvcC5idWYgJiYgIWFwcGVuZF9tb2RlKQorCQkJCQlVc2Vy
RnJlZUNvcHlCdWZmZXIobWRfdXNlcik7CisJCQkJeWVuZCA9IGZvcmUtPndfaGVpZ2h0IC0gMTsK
KwkJCQlpZiAoZm9yZS0+d19oaXN0aGVpZ2h0IC0gbWFya2RhdGEtPmhpc3Rfb2Zmc2V0IDwgZm9y
ZS0+d19oZWlnaHQpIHsKKwkJCQkJbWFya2RhdGEtPnNlY29uZCA9IDA7CisJCQkJCXllbmQgLT0g
TWFya1Njcm9sbFVwRGlzcGxheShmb3JlLT53X2hpc3RoZWlnaHQgLSBtYXJrZGF0YS0+aGlzdF9v
ZmZzZXQpOworCQkJCX0KKwkJCQlpZiAobmV3Y29weWxlbiA+IDApIHsKIAkJICAvKiB0aGUgKzMg
YmVsb3cgaXMgZm9yIDogY3IgKyBsZiArIFwwICovCi0JCSAgaWYgKG1kX3VzZXItPnVfcGxvcC5i
dWYpCi0JCSAgICBtZF91c2VyLT51X3Bsb3AuYnVmID0gcmVhbGxvYyhtZF91c2VyLT51X3Bsb3Au
YnVmLAotCQkJKHVuc2lnbmVkKSAobWRfdXNlci0+dV9wbG9wLmxlbiArIG5ld2NvcHlsZW4gKyAz
KSk7Ci0JCSAgZWxzZQotCQkgICAgewotCQkgICAgICBtZF91c2VyLT51X3Bsb3AubGVuID0gMDsK
LQkJICAgICAgbWRfdXNlci0+dV9wbG9wLmJ1ZiA9IG1hbGxvYygodW5zaWduZWQpIChuZXdjb3B5
bGVuICsgMykpOwotCQkgICAgfQotCQkgIGlmICghbWRfdXNlci0+dV9wbG9wLmJ1ZikKLQkJICAg
IHsKLQkJICAgICAgTWFya0Fib3J0KCk7Ci0JCSAgICAgIGluX21hcmsgPSAwOwotCQkgICAgICBM
TXNnKDAsICJOb3QgZW5vdWdoIG1lbW9yeS4uLiBTb3JyeS4iKTsKLQkJICAgICAgbWRfdXNlci0+
dV9wbG9wLmxlbiA9IDA7Ci0JCSAgICAgIG1kX3VzZXItPnVfcGxvcC5idWYgPSAwOwotCQkgICAg
ICBicmVhazsKLQkJICAgIH0KLQkJICBpZiAoYXBwZW5kX21vZGUpCi0JCSAgICB7Ci0JCSAgICAg
IHN3aXRjaCAobWFya2RhdGEtPm5vbmwpCi0JCQl7CisJCQkJCWlmIChtZF91c2VyLT51X3Bsb3Au
YnVmKQorCQkJCQkJbWRfdXNlci0+dV9wbG9wLmJ1ZiA9IHJlYWxsb2MobWRfdXNlci0+dV9wbG9w
LmJ1ZiwgKHVuc2lnbmVkKShtZF91c2VyLT51X3Bsb3AubGVuICsgbmV3Y29weWxlbiArIDMpKTsK
KwkJCQkJZWxzZSB7CisJCQkJCQltZF91c2VyLT51X3Bsb3AubGVuID0gMDsKKwkJCQkJCW1kX3Vz
ZXItPnVfcGxvcC5idWYgPSBtYWxsb2MoKHVuc2lnbmVkKShuZXdjb3B5bGVuICsgMykpOworCQkJ
CQl9CisJCQkJCWlmICghbWRfdXNlci0+dV9wbG9wLmJ1ZikgeworCQkJCQkJTWFya0Fib3J0KCk7
CisJCQkJCQlpbl9tYXJrID0gMDsKKwkJCQkJCUxNc2coMCwgIk5vdCBlbm91Z2ggbWVtb3J5Li4u
IFNvcnJ5LiIpOworCQkJCQkJbWRfdXNlci0+dV9wbG9wLmxlbiA9IDA7CisJCQkJCQltZF91c2Vy
LT51X3Bsb3AuYnVmID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChhcHBlbmRf
bW9kZSkgeworCQkJCQkJc3dpdGNoIChtYXJrZGF0YS0+bm9ubCkgewogCQkJLyoKIAkJCSAqIHRo
aXMgY29kZSBkZWZpbmVzLCB3aGF0IGdsdWVzIGxpbmVzIHRvZ2V0aGVyCiAJCQkgKi8KLQkJCWNh
c2UgMDoKLQkJCSAgaWYgKGpvaW5fd2l0aF9jcikKLQkJCSAgICB7Ci0JCQkgICAgICBtZF91c2Vy
LT51X3Bsb3AuYnVmW21kX3VzZXItPnVfcGxvcC5sZW5dID0gJ1xyJzsKLQkJCSAgICAgIG1kX3Vz
ZXItPnVfcGxvcC5sZW4rKzsKLQkJCSAgICB9Ci0JCQkgIG1kX3VzZXItPnVfcGxvcC5idWZbbWRf
dXNlci0+dV9wbG9wLmxlbl0gPSAnXG4nOwotCQkJICBtZF91c2VyLT51X3Bsb3AubGVuKys7Ci0J
CQkgIGJyZWFrOwotCQkJY2FzZSAxOgotCQkJICBicmVhazsKLQkJCWNhc2UgMjoKLQkJCSAgbWRf
dXNlci0+dV9wbG9wLmJ1ZlttZF91c2VyLT51X3Bsb3AubGVuXSA9ICcgJzsKLQkJCSAgbWRfdXNl
ci0+dV9wbG9wLmxlbisrOwotCQkJICBicmVhazsKLQkJCWNhc2UgMzoKLQkJCSAgbWRfdXNlci0+
dV9wbG9wLmJ1ZlttZF91c2VyLT51X3Bsb3AubGVuXSA9ICcsJzsKLQkJCSAgbWRfdXNlci0+dV9w
bG9wLmxlbisrOwotCQkJICBicmVhazsKLQkJCX0KLQkJICAgIH0KLQkJICBtZF91c2VyLT51X3Bs
b3AubGVuICs9IHJlbShtYXJrZGF0YS0+eDEsIG1hcmtkYXRhLT55MSwgeDIsIHkyLAotCQkgICAg
bWFya2RhdGEtPmhpc3Rfb2Zmc2V0ID09IGZvcmUtPndfaGlzdGhlaWdodCwKLQkJICAgIG1kX3Vz
ZXItPnVfcGxvcC5idWYgKyBtZF91c2VyLT51X3Bsb3AubGVuLCB5ZW5kKTsKKwkJCQkJCWNhc2Ug
MDoKKwkJCQkJCQlpZiAoam9pbl93aXRoX2NyKSB7CisJCQkJCQkJCW1kX3VzZXItPnVfcGxvcC5i
dWZbbWRfdXNlci0+dV9wbG9wLmxlbl0gPSAnXHInOworCQkJCQkJCQltZF91c2VyLT51X3Bsb3Au
bGVuKys7CisJCQkJCQkJfQorCQkJCQkJCW1kX3VzZXItPnVfcGxvcC5idWZbbWRfdXNlci0+dV9w
bG9wLmxlbl0gPSAnXG4nOworCQkJCQkJCW1kX3VzZXItPnVfcGxvcC5sZW4rKzsKKwkJCQkJCQli
cmVhazsKKwkJCQkJCWNhc2UgMToKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMjoKKwkJCQkJ
CQltZF91c2VyLT51X3Bsb3AuYnVmW21kX3VzZXItPnVfcGxvcC5sZW5dID0gJyAnOworCQkJCQkJ
CW1kX3VzZXItPnVfcGxvcC5sZW4rKzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgMzoKKwkJ
CQkJCQltZF91c2VyLT51X3Bsb3AuYnVmW21kX3VzZXItPnVfcGxvcC5sZW5dID0gJywnOworCQkJ
CQkJCW1kX3VzZXItPnVfcGxvcC5sZW4rKzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJ
fQorCQkJCQltZF91c2VyLT51X3Bsb3AubGVuICs9IHJlbShtYXJrZGF0YS0+eDEsCisJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtkYXRhLT55MSwKKwkJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeDIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyLAor
CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZGF0YS0+aGlzdF9vZmZzZXQgPT0g
Zm9yZS0+d19oaXN0aGVpZ2h0LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBtZF91
c2VyLT51X3Bsb3AuYnVmICsgbWRfdXNlci0+dV9wbG9wLmxlbiwKKwkJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeWVuZCk7CiAjaWZkZWYgRU5DT0RJTkdTCi0JCSAgbWRfdXNlci0+dV9w
bG9wLmVuYyA9IGZvcmUtPndfZW5jb2Rpbmc7CisJCQkJCW1kX3VzZXItPnVfcGxvcC5lbmMgPSBm
b3JlLT53X2VuY29kaW5nOwogI2VuZGlmCi0JCX0KLQkgICAgICBpZiAobWFya2RhdGEtPmhpc3Rf
b2Zmc2V0ICE9IGZvcmUtPndfaGlzdGhlaWdodCkKLQkJewotCQkgIExBWV9DQUxMX1VQKExSZWZy
ZXNoQWxsKGZsYXllciwgMCkpOwotCQl9Ci0JICAgICAgRXhpdE92ZXJsYXlQYWdlKCk7Ci0JICAg
ICAgV2luZG93Q2hhbmdlZChmb3JlLCAnUCcpOwotCSAgICAgIGlmIChhcHBlbmRfbW9kZSkKLQkJ
TE1zZygwLCAiQXBwZW5kZWQgJWQgY2hhcmFjdGVycyB0byBidWZmZXIiLAotCQkgICAgbmV3Y29w
eWxlbik7Ci0JICAgICAgZWxzZQotCQlMTXNnKDAsICJDb3BpZWQgJWQgY2hhcmFjdGVycyBpbnRv
IGJ1ZmZlciIsIG1kX3VzZXItPnVfcGxvcC5sZW4pOwotCSAgICAgIGlmICh3cml0ZV9idWZmZXIp
Ci0JCVdyaXRlRmlsZShtZF91c2VyLCAoY2hhciAqKTAsIERVTVBfRVhDSEFOR0UpOwotCSAgICAg
IGluX21hcmsgPSAwOwotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0KLQljYXNlIDAyMjI6Ci0JICBp
ZiAoZmxheWVyLT5sX21vdXNlZXZlbnQuc3RhcnQpCi0JICAgIHsKLQkgICAgICBpbnQgYnV0dG9u
ID0gZmxheWVyLT5sX21vdXNlZXZlbnQuYnVmZmVyWzBdOwotCSAgICAgIGlmIChidXR0b24gPT0g
J2EnKQotCQl7Ci0JCSAgLyogU2Nyb2xsIGRvd24gKi8KLQkJICBvZCA9ICdqJzsKLQkJfQotCSAg
ICAgIGVsc2UgaWYgKGJ1dHRvbiA9PSAnYCcpCi0JCXsKLQkJICAvKiBTY3JvbGwgdXAgKi8KLQkJ
ICBvZCA9ICdrJzsKLQkJfQotCSAgICAgIGVsc2UgaWYgKGJ1dHRvbiA9PSAnICcpCi0JCXsKLQkJ
ICAvKiBMZWZ0IGNsaWNrICovCi0JCSAgY3ggPSBmbGF5ZXItPmxfbW91c2VldmVudC5idWZmZXJb
MV07Ci0JCSAgY3kgPSBEMlcoZmxheWVyLT5sX21vdXNlZXZlbnQuYnVmZmVyWzJdKTsKLQkJICBy
ZXZ0byhjeCwgY3kpOwotCQkgIG9kID0gJyAnOwotCQl9Ci0JICAgICAgZWxzZQotCQlvZCA9IDA7
Ci0JICAgICAgTGF5UHJvY2Vzc01vdXNlU3dpdGNoKGZsYXllciwgMCk7Ci0JICAgICAgaWYgKG9k
KQotCQlnb3RvIHByb2Nlc3NjaGFyOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIExheVByb2Nlc3NN
b3VzZVN3aXRjaChmbGF5ZXIsIDEpOwotCSAgYnJlYWs7CisJCQkJfQorCQkJCWlmIChtYXJrZGF0
YS0+aGlzdF9vZmZzZXQgIT0gZm9yZS0+d19oaXN0aGVpZ2h0KSB7CisJCQkJCUxBWV9DQUxMX1VQ
KExSZWZyZXNoQWxsKGZsYXllciwgMCkpOworCQkJCX0KKwkJCQlFeGl0T3ZlcmxheVBhZ2UoKTsK
KwkJCQlXaW5kb3dDaGFuZ2VkKGZvcmUsICdQJyk7CisKKwkJCQlpZiAoYXBwZW5kX21vZGUpCisJ
CQkJCUxNc2coMCwgIkFwcGVuZGVkICVkIGNoYXJhY3RlcnMgdG8gYnVmZmVyIiwgbmV3Y29weWxl
bik7CisJCQkJZWxzZQorCQkJCQlMTXNnKDAsICJDb3BpZWQgJWQgY2hhcmFjdGVycyBpbnRvIGJ1
ZmZlciIsIG1kX3VzZXItPnVfcGxvcC5sZW4pOworCisJCQkJaWYgKHdyaXRlX2J1ZmZlcikKKwkJ
CQkJV3JpdGVGaWxlKG1kX3VzZXIsIChjaGFyICopMCwgRFVNUF9FWENIQU5HRSk7CisJCQkJaW5f
bWFyayA9IDA7CisJCQkJYnJlYWs7CisJCQl9CiAKLQlkZWZhdWx0OgotCSAgTWFya0Fib3J0KCk7
Ci0JICBMTXNnKDAsICJDb3B5IG1vZGUgYWJvcnRlZCIpOwotCSAgaW5fbWFyayA9IDA7Ci0JICBi
cmVhazsKLQl9Ci0gICAgICBpZiAoaW5fbWFyaykJLyogbWFya2RhdGEgbWF5IGJlIGZyZWVkICov
Ci0gICAgICAgIG1hcmtkYXRhLT5yZXBfY250ID0gMDsKLSAgICB9Ci0gIGlmIChpbl9tYXJrKQot
ICAgIHsKLSAgICAgIGZsYXllci0+bF94ID0gbWFya2RhdGEtPmN4OwotICAgICAgZmxheWVyLT5s
X3kgPSBXMkQobWFya2RhdGEtPmN5KTsKLSAgICB9Ci0gICppbmJ1ZnAgPSBwdDsKLSAgKmlubGVu
cCA9IGlubGVuOworCQljYXNlIDAyMjI6CisJCQlpZiAoZmxheWVyLT5sX21vdXNlZXZlbnQuc3Rh
cnQpIHsKKwkJCQlpbnQgYnV0dG9uID0gZmxheWVyLT5sX21vdXNlZXZlbnQuYnVmZmVyWzBdOwor
CQkJCWlmIChidXR0b24gPT0gJ2EnKSB7CisJCQkJCS8qIFNjcm9sbCBkb3duICovCisJCQkJCW9k
ID0gJ2onOworCQkJCX0gZWxzZSBpZiAoYnV0dG9uID09ICdgJykgeworCQkJCQkvKiBTY3JvbGwg
dXAgKi8KKwkJCQkJb2QgPSAnayc7CisJCQkJfSBlbHNlIGlmIChidXR0b24gPT0gJyAnKSB7CisJ
CQkJCS8qIExlZnQgY2xpY2sgKi8KKwkJCQkJY3ggPSBmbGF5ZXItPmxfbW91c2VldmVudC5idWZm
ZXJbMV07CisJCQkJCWN5ID0gRDJXKGZsYXllci0+bF9tb3VzZWV2ZW50LmJ1ZmZlclsyXSk7CisJ
CQkJCXJldnRvKGN4LCBjeSk7CisJCQkJCW9kID0gJyAnOworCQkJCX0gZWxzZQorCQkJCQlvZCA9
IDA7CisJCQkJTGF5UHJvY2Vzc01vdXNlU3dpdGNoKGZsYXllciwgMCk7CisJCQkJaWYgKG9kKQor
CQkJCQlnb3RvIHByb2Nlc3NjaGFyOworCQkJfSBlbHNlCisJCQkJTGF5UHJvY2Vzc01vdXNlU3dp
dGNoKGZsYXllciwgMSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJTWFya0Fib3J0KCk7
CisJCQlMTXNnKDAsICJDb3B5IG1vZGUgYWJvcnRlZCIpOworCQkJaW5fbWFyayA9IDA7CisJCQli
cmVhazsKKwkJfQorCQlpZiAoaW5fbWFyaykJLyogbWFya2RhdGEgbWF5IGJlIGZyZWVkICovCisJ
CQltYXJrZGF0YS0+cmVwX2NudCA9IDA7CisJfQorCWlmIChpbl9tYXJrKSB7CisJCWZsYXllci0+
bF94ID0gbWFya2RhdGEtPmN4OworCQlmbGF5ZXItPmxfeSA9IFcyRChtYXJrZGF0YS0+Y3kpOwor
CX0KKwkqaW5idWZwID0gcHQ7CisJKmlubGVucCA9IGlubGVuOwogfQogCi12b2lkIHJldnRvKHR4
LCB0eSkKLWludCB0eCwgdHk7Cit2b2lkCityZXZ0byhpbnQgdHgsIGludCB0eSkKIHsKLSAgcmV2
dG9fbGluZSh0eCwgdHksIC0xKTsKKwlyZXZ0b19saW5lKHR4LCB0eSwgLTEpOwogfQogCiAvKiB0
eCwgdHk6IFdJTkRPVywgIGxpbmU6IERJU1BMQVkgKi8KLXZvaWQgcmV2dG9fbGluZSh0eCwgdHks
IGxpbmUpCi1pbnQgdHgsIHR5LCBsaW5lOwordm9pZAorcmV2dG9fbGluZShpbnQgdHgsIGludCB0
eSwgaW50IGxpbmUpCiB7Ci0gIGludCBmeCwgZnk7Ci0gIGludCB4LCB5LCB0LCByZXZzdCwgcmV2
ZW4sIHFxLCBmZiwgdHQsIHN0LCBlbiwgY2UgPSAwOwotICBpbnQgeXN0YXJ0ID0gMCwgeWVuZCA9
IGZvcmUtPndfaGVpZ2h0LTE7Ci0gIGludCBpLCByeTsKLSAgdW5zaWduZWQgY2hhciAqd2k7Ci0g
IHN0cnVjdCBtbGluZSAqbWw7Ci0gIHN0cnVjdCBtY2hhciBtYzsKLQotICBpZiAodHggPCAwKQot
ICAgIHR4ID0gMDsKLSAgZWxzZSBpZiAodHggPiBmb3JlLT53X3dpZHRoIC0gMSkKLSAgICB0eCA9
IGZvcmUtPndfd2lkdGggLTE7Ci0gIGlmICh0eSA8IGZvcmUtPndfaGlzdGhlaWdodCAtIGZvcmUt
Pndfc2Nyb2xsYmFja19oZWlnaHQpCi0gICAgdHkgPSBmb3JlLT53X2hpc3RoZWlnaHQgLSBmb3Jl
LT53X3Njcm9sbGJhY2tfaGVpZ2h0OwotICBlbHNlIGlmICh0eSA+IGZvcmUtPndfaGlzdGhlaWdo
dCArIGZvcmUtPndfaGVpZ2h0IC0gMSkKLSAgICB0eSA9IGZvcmUtPndfaGlzdGhlaWdodCArIGZv
cmUtPndfaGVpZ2h0IC0gMTsKKwlpbnQgZngsIGZ5OworCWludCB4LCB5LCB0LCByZXZzdCwgcmV2
ZW4sIHFxLCBmZiwgdHQsIHN0LCBlbiwgY2UgPSAwOworCWludCB5c3RhcnQgPSAwLCB5ZW5kID0g
Zm9yZS0+d19oZWlnaHQgLSAxOworCWludCBpLCByeTsKKwl1bnNpZ25lZCBjaGFyICp3aTsKKwlz
dHJ1Y3QgbWxpbmUgKm1sOworCXN0cnVjdCBtY2hhciBtYzsKKworCWlmICh0eCA8IDApCisJCXR4
ID0gMDsKKwllbHNlIGlmICh0eCA+IGZvcmUtPndfd2lkdGggLSAxKQorCQl0eCA9IGZvcmUtPndf
d2lkdGggLSAxOworCWlmICh0eSA8IGZvcmUtPndfaGlzdGhlaWdodCAtIGZvcmUtPndfc2Nyb2xs
YmFja19oZWlnaHQpCisJCXR5ID0gZm9yZS0+d19oaXN0aGVpZ2h0IC0gZm9yZS0+d19zY3JvbGxi
YWNrX2hlaWdodDsKKwllbHNlIGlmICh0eSA+IGZvcmUtPndfaGlzdGhlaWdodCArIGZvcmUtPndf
aGVpZ2h0IC0gMSkKKwkJdHkgPSBmb3JlLT53X2hpc3RoZWlnaHQgKyBmb3JlLT53X2hlaWdodCAt
IDE7CiAKLSAgZnggPSBtYXJrZGF0YS0+Y3g7IGZ5ID0gbWFya2RhdGEtPmN5OworCWZ4ID0gbWFy
a2RhdGEtPmN4OworCWZ5ID0gbWFya2RhdGEtPmN5OwogCiAjaWZkZWYgRFdfQ0hBUlMKLSAgLyog
ZG9uJ3QganVzdCBtb3ZlIGluc2lkZSBvZiBhIGthbmppLCB0aGUgdXNlciB3YW50cyB0byBzZWUg
c29tZXRoaW5nICovCi0gIG1sID0gV0lOKHR5KTsKLSAgaWYgKHR5ID09IGZ5ICYmIGZ4ICsgMSA9
PSB0eCAmJiBkd19yaWdodChtbCwgdHgsIGZvcmUtPndfZW5jb2RpbmcpICYmIHR4IDwgRF93aWR0
aCAtIDEpCi0gICAgdHgrKzsKLSAgaWYgKHR5ID09IGZ5ICYmIGZ4IC0gMSA9PSB0eCAmJiBkd19y
aWdodChtbCwgZngsIGZvcmUtPndfZW5jb2RpbmcpICYmIHR4KQotICAgIHR4LS07CisJLyogZG9u
J3QganVzdCBtb3ZlIGluc2lkZSBvZiBhIGthbmppLCB0aGUgdXNlciB3YW50cyB0byBzZWUgc29t
ZXRoaW5nICovCisJbWwgPSBXSU4odHkpOworCWlmICh0eSA9PSBmeSAmJiBmeCArIDEgPT0gdHgg
JiYgZHdfcmlnaHQobWwsIHR4LCBmb3JlLT53X2VuY29kaW5nKSAmJiB0eCA8IERfd2lkdGggLSAx
KQorCQl0eCsrOworCWlmICh0eSA9PSBmeSAmJiBmeCAtIDEgPT0gdHggJiYgZHdfcmlnaHQobWws
IGZ4LCBmb3JlLT53X2VuY29kaW5nKSAmJiB0eCkKKwkJdHgtLTsKICNlbmRpZgogCi0gIG1hcmtk
YXRhLT5jeCA9IHR4OyBtYXJrZGF0YS0+Y3kgPSB0eTsKKwltYXJrZGF0YS0+Y3ggPSB0eDsKKwlt
YXJrZGF0YS0+Y3kgPSB0eTsKIAogICAvKgogICAgKiBpZiB3ZSBnbyB0byBhIHBvc2l0aW9uIHRo
YXQgaXMgY3VycmVudGx5IG9mZnNjcmVlbgogICAgKiB0aGVuIHNjcm9sbCB0aGUgc2NyZWVuCiAg
ICAqLwotICBpID0gMDsKLSAgaWYgKGxpbmUgPj0gMCAmJiBsaW5lIDwgZm9yZS0+d19oZWlnaHQp
Ci0gICAgaSA9IFcyRCh0eSkgLSBsaW5lOwotICBlbHNlIGlmICh0eSA8IG1hcmtkYXRhLT5oaXN0
X29mZnNldCkKLSAgICBpID0gdHkgLSBtYXJrZGF0YS0+aGlzdF9vZmZzZXQ7Ci0gIGVsc2UgaWYg
KHR5ID4gbWFya2RhdGEtPmhpc3Rfb2Zmc2V0ICsgKGZvcmUtPndfaGVpZ2h0IC0gMSkpCi0gICAg
aSA9IHR5IC0gbWFya2RhdGEtPmhpc3Rfb2Zmc2V0IC0gKGZvcmUtPndfaGVpZ2h0IC0gMSk7Ci0g
IGlmIChpID4gMCkKLSAgICB5ZW5kIC09IE1hcmtTY3JvbGxVcERpc3BsYXkoaSk7Ci0gIGVsc2Ug
aWYgKGkgPCAwKQotICAgIHlzdGFydCArPSBNYXJrU2Nyb2xsRG93bkRpc3BsYXkoLWkpOwotCi0g
IGlmIChtYXJrZGF0YS0+c2Vjb25kID09IDApCi0gICAgewotICAgICAgZmxheWVyLT5sX3ggPSB0
eDsKLSAgICAgIGZsYXllci0+bF95ID0gVzJEKHR5KTsKLSAgICAgIExHb3RvUG9zKGZsYXllciwg
dHgsIFcyRCh0eSkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICBxcSA9IG1hcmtkYXRhLT54
MSArIG1hcmtkYXRhLT55MSAqIGZvcmUtPndfd2lkdGg7Ci0gIGZmID0gZnggKyBmeSAqIGZvcmUt
Pndfd2lkdGg7IC8qICJmcm9tIiBvZmZzZXQgaW4gV0lOIGNvb3JkcyAqLwotICB0dCA9IHR4ICsg
dHkgKiBmb3JlLT53X3dpZHRoOyAvKiAidG8iIG9mZnNldCAgaW4gV0lOIGNvb3JkcyovCi0KLSAg
aWYgKGZmID4gdHQpCi0gICAgewotICAgICAgc3QgPSB0dDsgZW4gPSBmZjsKLSAgICAgIHggPSB0
eDsgeSA9IHR5OwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHN0ID0gZmY7IGVuID0gdHQ7
Ci0gICAgICB4ID0gZng7IHkgPSBmeTsKLSAgICB9Ci0gIGlmIChzdCA+IHFxKQotICAgIHsKLSAg
ICAgIHN0Kys7Ci0gICAgICB4Kys7Ci0gICAgfQotICBpZiAoZW4gPCBxcSkKLSAgICBlbi0tOwot
ICBpZiAodHQgPiBxcSkKLSAgICB7Ci0gICAgICByZXZzdCA9IHFxOyByZXZlbiA9IHR0OwotICAg
IH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHJldnN0ID0gdHQ7IHJldmVuID0gcXE7Ci0gICAgfQot
ICByeSA9IHkgLSBtYXJrZGF0YS0+aGlzdF9vZmZzZXQ7Ci0gIGlmIChyeSA8IHlzdGFydCkKLSAg
ICB7Ci0gICAgICB5ICs9ICh5c3RhcnQgLSByeSk7Ci0gICAgICB4ID0gMDsKLSAgICAgIHN0ID0g
eSAqIGZvcmUtPndfd2lkdGg7Ci0gICAgICByeSA9IHlzdGFydDsKLSAgICB9Ci0gIG1sID0gV0lO
KHkpOwotICBmb3IgKHQgPSBzdDsgdCA8PSBlbjsgdCsrLCB4KyspCi0gICAgewotICAgICAgaWYg
KHggPj0gZm9yZS0+d193aWR0aCkKLQl7Ci0JICB4ID0gMDsKLQkgIHkrKywgcnkrKzsKLQkgIG1s
ID0gV0lOKHkpOwotCX0KLSAgICAgIGlmIChyeSA+IHllbmQpCi0JYnJlYWs7Ci0gICAgICBpZiAo
dCA9PSBzdCB8fCB4ID09IDApCi0JewotCSAgd2kgPSBtbC0+aW1hZ2UgKyBmb3JlLT53X3dpZHRo
OwotCSAgZm9yIChjZSA9IGZvcmUtPndfd2lkdGg7IGNlID49IDA7IGNlLS0sIHdpLS0pCi0JICAg
IGlmICgqd2kgIT0gJyAnKQotCSAgICAgIGJyZWFrOworCWkgPSAwOworCisJaWYgKGxpbmUgPj0g
MCAmJiBsaW5lIDwgZm9yZS0+d19oZWlnaHQpCisJCWkgPSBXMkQodHkpIC0gbGluZTsKKwllbHNl
IGlmICh0eSA8IG1hcmtkYXRhLT5oaXN0X29mZnNldCkKKwkJaSA9IHR5IC0gbWFya2RhdGEtPmhp
c3Rfb2Zmc2V0OworCWVsc2UgaWYgKHR5ID4gbWFya2RhdGEtPmhpc3Rfb2Zmc2V0ICsgKGZvcmUt
PndfaGVpZ2h0IC0gMSkpCisJCWkgPSB0eSAtIG1hcmtkYXRhLT5oaXN0X29mZnNldCAtIChmb3Jl
LT53X2hlaWdodCAtIDEpOworCisJaWYgKGkgPiAwKQorCQl5ZW5kIC09IE1hcmtTY3JvbGxVcERp
c3BsYXkoaSk7CisJZWxzZSBpZiAoaSA8IDApCisJCXlzdGFydCArPSBNYXJrU2Nyb2xsRG93bkRp
c3BsYXkoLWkpOworCisJaWYgKG1hcmtkYXRhLT5zZWNvbmQgPT0gMCkgeworCQlmbGF5ZXItPmxf
eCA9IHR4OworCQlmbGF5ZXItPmxfeSA9IFcyRCh0eSk7CisJCUxHb3RvUG9zKGZsYXllciwgdHgs
IFcyRCh0eSkpOworCQlyZXR1cm47CisJfQorCisJcXEgPSBtYXJrZGF0YS0+eDEgKyBtYXJrZGF0
YS0+eTEgKiBmb3JlLT53X3dpZHRoOworCWZmID0gZnggKyBmeSAqIGZvcmUtPndfd2lkdGg7IC8q
ICJmcm9tIiBvZmZzZXQgaW4gV0lOIGNvb3JkcyAqLworCXR0ID0gdHggKyB0eSAqIGZvcmUtPndf
d2lkdGg7IC8qICJ0byIgb2Zmc2V0ICBpbiBXSU4gY29vcmRzKi8KKworCWlmIChmZiA+IHR0KSB7
CisJCXN0ID0gdHQ7CisJCWVuID0gZmY7CisJCXggPSB0eDsKKwkJeSA9IHR5OworCX0gZWxzZSB7
CisJCXN0ID0gZmY7CisJCWVuID0gdHQ7CisJCXggPSBmeDsKKwkJeSA9IGZ5OworCX0KKworCWlm
IChzdCA+IHFxKSB7CisJCXN0Kys7CisJCXgrKzsKIAl9Ci0gICAgICBpZiAoeCA8PSBjZSAmJiB4
ID49IG1hcmtkYXRhLT5sZWZ0X21hciAmJiB4IDw9IG1hcmtkYXRhLT5yaWdodF9tYXIpCi0Jewor
CisJaWYgKGVuIDwgcXEpCisJCWVuLS07CisKKwlpZiAodHQgPiBxcSkgeworCQlyZXZzdCA9IHFx
OworCQlyZXZlbiA9IHR0OworCX0gZWxzZSB7CisJCXJldnN0ID0gdHQ7CisJCXJldmVuID0gcXE7
CisJfQorCXJ5ID0geSAtIG1hcmtkYXRhLT5oaXN0X29mZnNldDsKKworCWlmIChyeSA8IHlzdGFy
dCkgeworCQl5ICs9ICh5c3RhcnQgLSByeSk7CisJCXggPSAwOworCQlzdCA9IHkgKiBmb3JlLT53
X3dpZHRoOworCQlyeSA9IHlzdGFydDsKKwl9CisJbWwgPSBXSU4oeSk7CisKKwlmb3IgKHQgPSBz
dDsgdCA8PSBlbjsgdCsrLCB4KyspIHsKKwkJaWYgKHggPj0gZm9yZS0+d193aWR0aCkgeworCQkJ
eCA9IDA7CisJCQl5KyssIHJ5Kys7CisJCQltbCA9IFdJTih5KTsKKwkJfQorCQlpZiAocnkgPiB5
ZW5kKQorCQkJYnJlYWs7CisJCWlmICh0ID09IHN0IHx8IHggPT0gMCkgeworCQkJd2kgPSBtbC0+
aW1hZ2UgKyBmb3JlLT53X3dpZHRoOworCQkJZm9yIChjZSA9IGZvcmUtPndfd2lkdGg7IGNlID49
IDA7IGNlLS0sIHdpLS0pCisJCQkJaWYgKCp3aSAhPSAnICcpCisJCQkJCWJyZWFrOworCQl9CisK
KwkJaWYgKHggPD0gY2UgJiYgeCA+PSBtYXJrZGF0YS0+bGVmdF9tYXIgJiYgeCA8PSBtYXJrZGF0
YS0+cmlnaHRfbWFyKSB7CiAjaWZkZWYgRFdfQ0hBUlMKLQkgIGlmIChkd19yaWdodChtbCwgeCwg
Zm9yZS0+d19lbmNvZGluZykpCi0JICAgICAgewotCQlpZiAodCA9PSByZXZzdCkKLQkJICByZXZz
dC0tOwotCSAgICAgICAgdC0tOwotCQl4LS07Ci0JICAgICAgfQorCQkJaWYgKGR3X3JpZ2h0KG1s
LCB4LCBmb3JlLT53X2VuY29kaW5nKSkgeworCQkJCWlmICh0ID09IHJldnN0KQorCQkJCQlyZXZz
dC0tOworCQkJCXQtLTsKKwkJCQl4LS07CisJCQl9CiAjZW5kaWYKLQkgIGlmICh0ID49IHJldnN0
ICYmIHQgPD0gcmV2ZW4pCi0JICAgIHsKLQkgICAgICBtYyA9IG1jaGFyX3NvOworCQkJaWYgKHQg
Pj0gcmV2c3QgJiYgdCA8PSByZXZlbikgeworCQkJCW1jID0gbWNoYXJfc287CiAjaWZkZWYgRk9O
VAotCSAgICAgIGlmIChwYXN0ZWZvbnQpCi0JCXsKLQkJICBtYy5mb250ID0gbWwtPmZvbnRbeF07
Ci0JCSAgbWMuZm9udHggPSBtbC0+Zm9udHhbeF07Ci0JCX0KKwkJCQlpZiAocGFzdGVmb250KSB7
CisJCQkJCW1jLmZvbnQgPSBtbC0+Zm9udFt4XTsKKwkJCQkJbWMuZm9udHggPSBtbC0+Zm9udHhb
eF07CisJCQkJfQogI2VuZGlmCi0JICAgICAgbWMuaW1hZ2UgPSBtbC0+aW1hZ2VbeF07Ci0JICAg
IH0KLQkgIGVsc2UKLQkgICAgY29weV9tbGluZTJtY2hhcigmbWMsIG1sLCB4KTsKKwkJCQltYy5p
bWFnZSA9IG1sLT5pbWFnZVt4XTsKKwkJCX0gZWxzZQorCQkJCWNvcHlfbWxpbmUybWNoYXIoJm1j
LCBtbCwgeCk7CiAjaWZkZWYgRFdfQ0hBUlMKLQkgIGlmIChkd19sZWZ0KG1sLCB4LCBmb3JlLT53
X2VuY29kaW5nKSkKLQkgICAgewotCSAgICAgIG1jLm1iY3MgPSBtbC0+aW1hZ2VbeCArIDFdOwot
CSAgICAgIExQdXRDaGFyKGZsYXllciwgJm1jLCB4LCBXMkQoeSkpOwotCSAgICAgIHQrKzsKLQkg
ICAgfQorCQkJaWYgKGR3X2xlZnQobWwsIHgsIGZvcmUtPndfZW5jb2RpbmcpKSB7CisJCQkJbWMu
bWJjcyA9IG1sLT5pbWFnZVt4ICsgMV07CisJCQkJTFB1dENoYXIoZmxheWVyLCAmbWMsIHgsIFcy
RCh5KSk7CisJCQkJdCsrOworCQkJfQogI2VuZGlmCi0JICBMUHV0Q2hhcihmbGF5ZXIsICZtYywg
eCwgVzJEKHkpKTsKKwkJCUxQdXRDaGFyKGZsYXllciwgJm1jLCB4LCBXMkQoeSkpOwogI2lmZGVm
IERXX0NIQVJTCi0JICBpZiAoZHdfbGVmdChtbCwgeCwgZm9yZS0+d19lbmNvZGluZykpCi0JICAg
IHgrKzsKKwkJCWlmIChkd19sZWZ0KG1sLCB4LCBmb3JlLT53X2VuY29kaW5nKSkKKwkJCQl4Kys7
CiAjZW5kaWYKKwkJfQogCX0KLSAgICB9Ci0gIGZsYXllci0+bF94ID0gdHg7Ci0gIGZsYXllci0+
bF95ID0gVzJEKHR5KTsKLSAgTEdvdG9Qb3MoZmxheWVyLCB0eCwgVzJEKHR5KSk7CisJZmxheWVy
LT5sX3ggPSB0eDsKKwlmbGF5ZXItPmxfeSA9IFcyRCh0eSk7CisJTEdvdG9Qb3MoZmxheWVyLCB0
eCwgVzJEKHR5KSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBNYXJrQWJvcnQoKQogewotICBpbnQgeWVu
ZCwgcmVkaXNwOworCWludCB5ZW5kLCByZWRpc3A7CiAKLSAgZGVidWcoIk1hcmtBYm9ydFxuIik7
Ci0gIG1hcmtkYXRhID0gKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOwotICBmb3Jl
ID0gbWFya2RhdGEtPm1kX3dpbmRvdzsKLSAgeWVuZCA9IGZvcmUtPndfaGVpZ2h0IC0gMTsKLSAg
cmVkaXNwID0gbWFya2RhdGEtPnNlY29uZDsKLSAgaWYgKGZvcmUtPndfaGlzdGhlaWdodCAtIG1h
cmtkYXRhLT5oaXN0X29mZnNldCA8IGZvcmUtPndfaGVpZ2h0KQotICAgIHsKLSAgICAgIG1hcmtk
YXRhLT5zZWNvbmQgPSAwOwotICAgICAgeWVuZCAtPSBNYXJrU2Nyb2xsVXBEaXNwbGF5KGZvcmUt
PndfaGlzdGhlaWdodCAtIG1hcmtkYXRhLT5oaXN0X29mZnNldCk7Ci0gICAgfQotICBpZiAobWFy
a2RhdGEtPmhpc3Rfb2Zmc2V0ICE9IGZvcmUtPndfaGlzdGhlaWdodCkKLSAgICB7Ci0gICAgICBM
QVlfQ0FMTF9VUChMUmVmcmVzaEFsbChmbGF5ZXIsIDApKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7
Ci0gICAgICByZW0obWFya2RhdGEtPngxLCBtYXJrZGF0YS0+eTEsIG1hcmtkYXRhLT5jeCwgbWFy
a2RhdGEtPmN5LCByZWRpc3AsIChjaGFyICopMCwgeWVuZCk7Ci0gICAgfQotICBFeGl0T3Zlcmxh
eVBhZ2UoKTsKLSAgV2luZG93Q2hhbmdlZChmb3JlLCAnUCcpOworCWRlYnVnKCJNYXJrQWJvcnRc
biIpOworCW1hcmtkYXRhID0gKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOworCWZv
cmUgPSBtYXJrZGF0YS0+bWRfd2luZG93OworCXllbmQgPSBmb3JlLT53X2hlaWdodCAtIDE7CisJ
cmVkaXNwID0gbWFya2RhdGEtPnNlY29uZDsKKwlpZiAoZm9yZS0+d19oaXN0aGVpZ2h0IC0gbWFy
a2RhdGEtPmhpc3Rfb2Zmc2V0IDwgZm9yZS0+d19oZWlnaHQpIHsKKwkJbWFya2RhdGEtPnNlY29u
ZCA9IDA7CisJCXllbmQgLT0gTWFya1Njcm9sbFVwRGlzcGxheShmb3JlLT53X2hpc3RoZWlnaHQg
LSBtYXJrZGF0YS0+aGlzdF9vZmZzZXQpOworCX0KKwlpZiAobWFya2RhdGEtPmhpc3Rfb2Zmc2V0
ICE9IGZvcmUtPndfaGlzdGhlaWdodCkgeworCQlMQVlfQ0FMTF9VUChMUmVmcmVzaEFsbChmbGF5
ZXIsIDApKTsKKwl9IGVsc2UgeworCQlyZW0obWFya2RhdGEtPngxLCBtYXJrZGF0YS0+eTEsIG1h
cmtkYXRhLT5jeCwgbWFya2RhdGEtPmN5LCByZWRpc3AsIChjaGFyICopMCwgeWVuZCk7CisJfQor
CUV4aXRPdmVybGF5UGFnZSgpOworCVdpbmRvd0NoYW5nZWQoZm9yZSwgJ1AnKTsKIH0KIAotCiBz
dGF0aWMgdm9pZAotTWFya1JlZGlzcGxheUxpbmUoeSwgeHMsIHhlLCBpc2JsYW5rKQotaW50IHk7
CS8qIE5PVEU6IHkgaXMgaW4gRElTUExBWSBjb29yZHMgc3lzdGVtISAqLwotaW50IHhzLCB4ZTsK
LWludCBpc2JsYW5rOworTWFya1JlZGlzcGxheUxpbmUoaW50IHksIGludCB4cywgaW50IHhlLCBp
bnQgaXNibGFuaykgLyogTk9URTogeSBpcyBpbiBESVNQTEFZIGNvb3JkcyBzeXN0ZW0hICovCiB7
Ci0gIGludCB3eSwgeCwgaSwgcm07Ci0gIGludCBzdGEsIHN0bywgY3A7CS8qIE5PVEU6IHRoZXNl
IDMgYXJlIGluIFdJTkRPVyBjb29yZHMgc3lzdGVtICovCi0gIHVuc2lnbmVkIGNoYXIgKndpOwot
ICBzdHJ1Y3QgbWxpbmUgKm1sOwotICBzdHJ1Y3QgbWNoYXIgbWNoYXJfbWFya2VkOwotCi0gIGlm
ICh5IDwgMCkJLyogTm8gc3BlY2lhbCBmdWxsIHBhZ2UgaGFuZGxpbmcgKi8KLSAgICByZXR1cm47
Ci0KLSAgbWFya2RhdGEgPSAoc3RydWN0IG1hcmtkYXRhICopZmxheWVyLT5sX2RhdGE7Ci0gIGZv
cmUgPSBtYXJrZGF0YS0+bWRfd2luZG93OwotCi0gIG1jaGFyX21hcmtlZCA9IG1jaGFyX3NvOwot
Ci0gIHd5ID0gRDJXKHkpOwotICBtbCA9IFdJTih3eSk7Ci0KLSAgaWYgKG1hcmtkYXRhLT5zZWNv
bmQgPT0gMCkKLSAgICB7Ci0gICAgICBpZiAoZHdfcmlnaHQobWwsIHhzLCBmb3JlLT53X2VuY29k
aW5nKSAmJiB4cyA+IDApCi0JeHMtLTsKLSAgICAgIGlmIChkd19sZWZ0KG1sLCB4ZSwgZm9yZS0+
d19lbmNvZGluZykgJiYgeGUgPCBmb3JlLT53X3dpZHRoIC0gMSkKLQl4ZSsrOwotICAgICAgaWYg
KHhzID09IDAgJiYgeSA+IDAgJiYgd3kgPiAwICYmIFdJTih3eSAtIDEpLT5pbWFnZVtmbGF5ZXIt
Pmxfd2lkdGhdID09IDApCi0gICAgICAgIExDRGlzcGxheUxpbmVXcmFwKGZsYXllciwgbWwsIHks
IHhzLCB4ZSwgaXNibGFuayk7Ci0gICAgICBlbHNlCi0gICAgICAgIExDRGlzcGxheUxpbmUoZmxh
eWVyLCBtbCwgeSwgeHMsIHhlLCBpc2JsYW5rKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
c3RhID0gbWFya2RhdGEtPnkxICogZm9yZS0+d193aWR0aCArIG1hcmtkYXRhLT54MTsKLSAgc3Rv
ID0gbWFya2RhdGEtPmN5ICogZm9yZS0+d193aWR0aCArIG1hcmtkYXRhLT5jeDsKLSAgaWYgKHN0
YSA+IHN0bykKLSAgICB7Ci0gICAgICBpPXN0YTsgc3RhPXN0bzsgc3RvPWk7Ci0gICAgfQotICBj
cCA9IHd5ICogZm9yZS0+d193aWR0aCArIHhzOwotCi0gIHJtID0gbWFya2RhdGEtPnJpZ2h0X21h
cjsKLSAgZm9yICh4ID0gZm9yZS0+d193aWR0aCwgd2kgPSBtbC0+aW1hZ2UgKyBmb3JlLT53X3dp
ZHRoOyB4ID49IDA7IHgtLSwgd2ktLSkKLSAgICBpZiAoKndpICE9ICcgJykKLSAgICAgIGJyZWFr
OwotICBpZiAoeCA8IHJtKQotICAgIHJtID0geDsKLQotICBmb3IgKHggPSB4czsgeCA8PSB4ZTsg
eCsrLCBjcCsrKQotICAgIGlmIChjcCA+PSBzdGEgJiYgeCA+PSBtYXJrZGF0YS0+bGVmdF9tYXIp
Ci0gICAgICBicmVhazsKKwlpbnQgd3ksIHgsIGksIHJtOworCWludCBzdGEsIHN0bywgY3A7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTk9URTogdGhlc2UgMyBhcmUgaW4gV0lO
RE9XIGNvb3JkcyBzeXN0ZW0gKi8KKwl1bnNpZ25lZCBjaGFyICp3aTsKKwlzdHJ1Y3QgbWxpbmUg
Km1sOworCXN0cnVjdCBtY2hhciBtY2hhcl9tYXJrZWQ7CisKKwlpZiAoeSA8IDApCS8qIE5vIHNw
ZWNpYWwgZnVsbCBwYWdlIGhhbmRsaW5nICovCisJCXJldHVybjsKKworCW1hcmtkYXRhID0gKHN0
cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOworCWZvcmUgPSBtYXJrZGF0YS0+bWRfd2lu
ZG93OworCisJbWNoYXJfbWFya2VkID0gbWNoYXJfc287CisKKwl3eSA9IEQyVyh5KTsKKwltbCA9
IFdJTih3eSk7CisKKwlpZiAobWFya2RhdGEtPnNlY29uZCA9PSAwKSB7CisJCWlmIChkd19yaWdo
dChtbCwgeHMsIGZvcmUtPndfZW5jb2RpbmcpICYmIHhzID4gMCkKKwkJCXhzLS07CisJCWlmIChk
d19sZWZ0KG1sLCB4ZSwgZm9yZS0+d19lbmNvZGluZykgJiYgeGUgPCBmb3JlLT53X3dpZHRoIC0g
MSkKKwkJCXhlKys7CisJCWlmICh4cyA9PSAwICYmIHkgPiAwICYmIHd5ID4gMCAmJiBXSU4od3kg
LSAxKS0+aW1hZ2VbZmxheWVyLT5sX3dpZHRoXSA9PSAwKQorCQkJTENEaXNwbGF5TGluZVdyYXAo
ZmxheWVyLCBtbCwgeSwgeHMsIHhlLCBpc2JsYW5rKTsKKwkJZWxzZQorCQkJTENEaXNwbGF5TGlu
ZShmbGF5ZXIsIG1sLCB5LCB4cywgeGUsIGlzYmxhbmspOworCQlyZXR1cm47CisJfQorCisJc3Rh
ID0gbWFya2RhdGEtPnkxICogZm9yZS0+d193aWR0aCArIG1hcmtkYXRhLT54MTsKKwlzdG8gPSBt
YXJrZGF0YS0+Y3kgKiBmb3JlLT53X3dpZHRoICsgbWFya2RhdGEtPmN4OworCWlmIChzdGEgPiBz
dG8pIHsKKwkJaSA9IHN0YTsKKwkJc3RhID0gc3RvOworCQlzdG8gPSBpOworCX0KKwljcCA9IHd5
ICogZm9yZS0+d193aWR0aCArIHhzOworCisJcm0gPSBtYXJrZGF0YS0+cmlnaHRfbWFyOworCWZv
ciAoeCA9IGZvcmUtPndfd2lkdGgsIHdpID0gbWwtPmltYWdlICsgZm9yZS0+d193aWR0aDsgeCA+
PSAwOyB4LS0sIHdpLS0pCisJCWlmICgqd2kgIT0gJyAnKQorCQkJYnJlYWs7CisJaWYgKHggPCBy
bSkKKwkJcm0gPSB4OworCisJZm9yICh4ID0geHM7IHggPD0geGU7IHgrKywgY3ArKykKKwkJaWYg
KGNwID49IHN0YSAmJiB4ID49IG1hcmtkYXRhLT5sZWZ0X21hcikKKwkJCWJyZWFrOwogI2lmZGVm
IERXX0NIQVJTCi0gIGlmIChkd19yaWdodChtbCwgeCwgZm9yZS0+d19lbmNvZGluZykpCi0gICAg
eC0tOworCWlmIChkd19yaWdodChtbCwgeCwgZm9yZS0+d19lbmNvZGluZykpCisJCXgtLTsKICNl
bmRpZgotICBpZiAoeCA+IHhzKQotICAgIExDRGlzcGxheUxpbmUoZmxheWVyLCBtbCwgeSwgeHMs
IHggLSAxLCBpc2JsYW5rKTsKLSAgZm9yICg7IHggPD0geGU7IHgrKywgY3ArKykKLSAgICB7Ci0g
ICAgICBpZiAoY3AgPiBzdG8gfHwgeCA+IHJtKQotCWJyZWFrOworCWlmICh4ID4geHMpCisJCUxD
RGlzcGxheUxpbmUoZmxheWVyLCBtbCwgeSwgeHMsIHggLSAxLCBpc2JsYW5rKTsKKwlmb3IgKDsg
eCA8PSB4ZTsgeCsrLCBjcCsrKSB7CisJCWlmIChjcCA+IHN0byB8fCB4ID4gcm0pCisJCQlicmVh
azsKICNpZmRlZiBGT05UCi0gICAgICBpZiAocGFzdGVmb250KQotCXsKLQkgIG1jaGFyX21hcmtl
ZC5mb250ID0gbWwtPmZvbnRbeF07Ci0JICBtY2hhcl9tYXJrZWQuZm9udHggPSBtbC0+Zm9udHhb
eF07Ci0JfQorCQlpZiAocGFzdGVmb250KSB7CisJCQltY2hhcl9tYXJrZWQuZm9udCA9IG1sLT5m
b250W3hdOworCQkJbWNoYXJfbWFya2VkLmZvbnR4ID0gbWwtPmZvbnR4W3hdOworCQl9CiAjZW5k
aWYKLSAgICAgIG1jaGFyX21hcmtlZC5pbWFnZSA9IG1sLT5pbWFnZVt4XTsKKwkJbWNoYXJfbWFy
a2VkLmltYWdlID0gbWwtPmltYWdlW3hdOwogI2lmZGVmIERXX0NIQVJTCi0gICAgICBtY2hhcl9t
YXJrZWQubWJjcyA9IDA7Ci0gICAgICBpZiAoZHdfbGVmdChtbCwgeCwgZm9yZS0+d19lbmNvZGlu
ZykpCi0JewotCSAgbWNoYXJfbWFya2VkLm1iY3MgPSBtbC0+aW1hZ2VbeCArIDFdOwotCSAgY3Ar
KzsKLQl9CisJCW1jaGFyX21hcmtlZC5tYmNzID0gMDsKKwkJaWYgKGR3X2xlZnQobWwsIHgsIGZv
cmUtPndfZW5jb2RpbmcpKSB7CisJCQltY2hhcl9tYXJrZWQubWJjcyA9IG1sLT5pbWFnZVt4ICsg
MV07CisJCQljcCsrOworCQl9CiAjZW5kaWYKLSAgICAgIExQdXRDaGFyKGZsYXllciwgJm1jaGFy
X21hcmtlZCwgeCwgeSk7CisJCUxQdXRDaGFyKGZsYXllciwgJm1jaGFyX21hcmtlZCwgeCwgeSk7
CiAjaWZkZWYgRFdfQ0hBUlMKLSAgICAgIGlmIChkd19sZWZ0KG1sLCB4LCBmb3JlLT53X2VuY29k
aW5nKSkKLQl4Kys7CisJCWlmIChkd19sZWZ0KG1sLCB4LCBmb3JlLT53X2VuY29kaW5nKSkKKwkJ
CXgrKzsKICNlbmRpZgotICAgIH0KLSAgaWYgKHggPD0geGUpCi0gICAgTENEaXNwbGF5TGluZShm
bGF5ZXIsIG1sLCB5LCB4LCB4ZSwgaXNibGFuayk7CisJfQorCWlmICh4IDw9IHhlKQorCQlMQ0Rp
c3BsYXlMaW5lKGZsYXllciwgbWwsIHksIHgsIHhlLCBpc2JsYW5rKTsKIH0KIAotCiAvKgogICog
VGhpcyB1Z2x5IHJvdXRpbmUgaXMgdG8gc3BlZWQgdXAgR290b1BvcygpCiAgKi8KIHN0YXRpYyBp
bnQKLU1hcmtSZXdyaXRlKHJ5LCB4cywgeGUsIHJlbmQsIGRvaXQpCi1pbnQgcnksIHhzLCB4ZSwg
ZG9pdDsKLXN0cnVjdCBtY2hhciAqcmVuZDsKK01hcmtSZXdyaXRlKGludCByeSwgaW50IHhzLCBp
bnQgeGUsIHN0cnVjdCBtY2hhciAqcmVuZCwgaW50IGRvaXQpCiB7Ci0gIGludCBkeCwgeCwgeSwg
c3QsIGVuLCB0LCBybTsKLSAgdW5zaWduZWQgY2hhciAqaTsKLSAgc3RydWN0IG1saW5lICptbDsK
LSAgc3RydWN0IG1jaGFyIG1jaGFyX21hcmtlZDsKLQotICBtY2hhcl9tYXJrZWQgPSBtY2hhcl9z
bzsKLQotICBkZWJ1ZzMoIk1hcmtSZXdyaXRlICVkLCAlZC0lZFxuIiwgcnksIHhzLCB4ZSk7Ci0g
IG1hcmtkYXRhID0gKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOwotICBmb3JlID0g
bWFya2RhdGEtPm1kX3dpbmRvdzsKLSAgeSA9IEQyVyhyeSk7Ci0gIG1sID0gV0lOKHkpOworCWlu
dCBkeCwgeCwgeSwgc3QsIGVuLCB0LCBybTsKKwl1bnNpZ25lZCBjaGFyICppOworCXN0cnVjdCBt
bGluZSAqbWw7CisJc3RydWN0IG1jaGFyIG1jaGFyX21hcmtlZDsKKworCW1jaGFyX21hcmtlZCA9
IG1jaGFyX3NvOworCisJZGVidWczKCJNYXJrUmV3cml0ZSAlZCwgJWQtJWRcbiIsIHJ5LCB4cywg
eGUpOworCW1hcmtkYXRhID0gKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOworCWZv
cmUgPSBtYXJrZGF0YS0+bWRfd2luZG93OworCXkgPSBEMlcocnkpOworCW1sID0gV0lOKHkpOwog
I2lmZGVmIFVURjgKLSAgaWYgKGZvcmUtPndfZW5jb2RpbmcgJiYgZm9yZS0+d19lbmNvZGluZyAh
PSBVVEY4ICYmIERfZW5jb2RpbmcgPT0gVVRGOCAmJiBDb250YWluc1NwZWNpYWxEZWZmb250KG1s
LCB4cywgeGUsIGZvcmUtPndfZW5jb2RpbmcpKQotICAgIHJldHVybiBFWFBFTlNJVkU7CisJaWYg
KGZvcmUtPndfZW5jb2RpbmcgJiYgZm9yZS0+d19lbmNvZGluZyAhPSBVVEY4ICYmIERfZW5jb2Rp
bmcgPT0gVVRGOCAmJiBDb250YWluc1NwZWNpYWxEZWZmb250KG1sLCB4cywgeGUsIGZvcmUtPndf
ZW5jb2RpbmcpKQorCQlyZXR1cm4gRVhQRU5TSVZFOwogI2VuZGlmCi0gIGR4ID0geGUgLSB4cyAr
IDE7Ci0gIGlmIChkb2l0KQotICAgIHsKLSAgICAgIGkgPSBtbC0+aW1hZ2UgKyB4czsKLSAgICAg
IHdoaWxlIChkeC0tKQotICAgICAgICBQVVRDSEFSKCppKyspOwotICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gIGlmIChtYXJrZGF0YS0+c2Vjb25kID09IDApCi0gICAgc3QgPSBlbiA9IC0xOwot
ICBlbHNlCi0gICAgewotICAgICAgc3QgPSBtYXJrZGF0YS0+eTEgKiBmb3JlLT53X3dpZHRoICsg
bWFya2RhdGEtPngxOwotICAgICAgZW4gPSBtYXJrZGF0YS0+Y3kgKiBmb3JlLT53X3dpZHRoICsg
bWFya2RhdGEtPmN4OwotICAgICAgaWYgKHN0ID4gZW4pCi0gICAgICAgIHsKLSAgICAgICAgICB0
ID0gc3Q7IHN0ID0gZW47IGVuID0gdDsKLSAgICAgICAgfQotICAgIH0KLSAgdCA9IHkgKiBmb3Jl
LT53X3dpZHRoICsgeHM7Ci0gIGZvciAocm0gPSBmb3JlLT53X3dpZHRoLCBpID0gbWwtPmltYWdl
ICsgZm9yZS0+d193aWR0aDsgcm0gPj0gMDsgcm0tLSkKLSAgICBpZiAoKmktLSAhPSAnICcpCi0g
ICAgICBicmVhazsKLSAgaWYgKHJtID4gbWFya2RhdGEtPnJpZ2h0X21hcikKLSAgICBybSA9IG1h
cmtkYXRhLT5yaWdodF9tYXI7Ci0gIHggPSB4czsKLSAgd2hpbGUgKGR4LS0pCi0gICAgewotICAg
ICAgaWYgKHQgPj0gc3QgJiYgdCA8PSBlbiAmJiB4ID49IG1hcmtkYXRhLT5sZWZ0X21hciAmJiB4
IDw9IHJtKQotICAgICAgICB7CisJZHggPSB4ZSAtIHhzICsgMTsKKwlpZiAoZG9pdCkgeworCQlp
ID0gbWwtPmltYWdlICsgeHM7CisJCXdoaWxlIChkeC0tKQorCQkJUFVUQ0hBUigqaSsrKTsKKwkJ
cmV0dXJuIDA7CisJfQorCisJaWYgKG1hcmtkYXRhLT5zZWNvbmQgPT0gMCkKKwkJc3QgPSBlbiA9
IC0xOworCWVsc2UgeworCQlzdCA9IG1hcmtkYXRhLT55MSAqIGZvcmUtPndfd2lkdGggKyBtYXJr
ZGF0YS0+eDE7CisJCWVuID0gbWFya2RhdGEtPmN5ICogZm9yZS0+d193aWR0aCArIG1hcmtkYXRh
LT5jeDsKKwkJaWYgKHN0ID4gZW4pIHsKKwkJCXQgPSBzdDsKKwkJCXN0ID0gZW47CisJCQllbiA9
IHQ7CisJCX0KKwl9CisJdCA9IHkgKiBmb3JlLT53X3dpZHRoICsgeHM7CisJZm9yIChybSA9IGZv
cmUtPndfd2lkdGgsIGkgPSBtbC0+aW1hZ2UgKyBmb3JlLT53X3dpZHRoOyBybSA+PSAwOyBybS0t
KQorCQlpZiAoKmktLSAhPSAnICcpCisJCQlicmVhazsKKwlpZiAocm0gPiBtYXJrZGF0YS0+cmln
aHRfbWFyKQorCQlybSA9IG1hcmtkYXRhLT5yaWdodF9tYXI7CisJeCA9IHhzOworCXdoaWxlIChk
eC0tKSB7CisJCWlmICh0ID49IHN0ICYmIHQgPD0gZW4gJiYgeCA+PSBtYXJrZGF0YS0+bGVmdF9t
YXIgJiYgeCA8PSBybSkgewogI2lmZGVmIEZPTlQKLQkgIGlmIChwYXN0ZWZvbnQpCi0JICAgIHsK
LQkgICAgICBtY2hhcl9tYXJrZWQuZm9udCA9IG1sLT5mb250W3hdOwotCSAgICAgIG1jaGFyX21h
cmtlZC5mb250eCA9IG1sLT5mb250eFt4XTsKLQkgICAgfQorCQkJaWYgKHBhc3RlZm9udCkgewor
CQkJCW1jaGFyX21hcmtlZC5mb250ID0gbWwtPmZvbnRbeF07CisJCQkJbWNoYXJfbWFya2VkLmZv
bnR4ID0gbWwtPmZvbnR4W3hdOworCQkJfQogI2VuZGlmCi0JICByZW5kLT5pbWFnZSA9IG1jaGFy
X21hcmtlZC5pbWFnZTsKLQkgIGlmICghY21wX21jaGFyKHJlbmQsICZtY2hhcl9tYXJrZWQpKQot
CSAgICByZXR1cm4gRVhQRU5TSVZFOwotICAgICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIHsK
LQkgIHJlbmQtPmltYWdlID0gbWwtPmltYWdlW3hdOwotCSAgaWYgKCFjbXBfbWNoYXJfbWxpbmUo
cmVuZCwgbWwsIHgpKQotCSAgICByZXR1cm4gRVhQRU5TSVZFOwotICAgICAgICB9Ci0gICAgICB4
Kys7Ci0gICAgfQotICByZXR1cm4geGUgLSB4cyArIDE7CisJCQlyZW5kLT5pbWFnZSA9IG1jaGFy
X21hcmtlZC5pbWFnZTsKKwkJCWlmICghY21wX21jaGFyKHJlbmQsICZtY2hhcl9tYXJrZWQpKQor
CQkJCXJldHVybiBFWFBFTlNJVkU7CisJCX0gZWxzZSB7CisJCQlyZW5kLT5pbWFnZSA9IG1sLT5p
bWFnZVt4XTsKKwkJCWlmICghY21wX21jaGFyX21saW5lKHJlbmQsIG1sLCB4KSkKKwkJCQlyZXR1
cm4gRVhQRU5TSVZFOworCQl9CisJCXgrKzsKKwl9CisJcmV0dXJuIHhlIC0geHMgKyAxOwogfQog
Ci0KIC8qCiAgKiBzY3JvbGwgdGhlIHNjcmVlbiBjb250ZW50cyB1cC9kb3duLgogICovCi1zdGF0
aWMgaW50IE1hcmtTY3JvbGxVcERpc3BsYXkobikKLWludCBuOworc3RhdGljIGludAorTWFya1Nj
cm9sbFVwRGlzcGxheShpbnQgbikKIHsKLSAgaW50IGk7CisJaW50IGk7CiAKLSAgZGVidWcxKCJN
YXJrU2Nyb2xsVXBEaXNwbGF5KCVkKVxuIiwgbik7Ci0gIGlmIChuIDw9IDApCi0gICAgcmV0dXJu
IDA7Ci0gIGlmIChuID4gZm9yZS0+d19oaXN0aGVpZ2h0IC0gbWFya2RhdGEtPmhpc3Rfb2Zmc2V0
KQotICAgIG4gPSBmb3JlLT53X2hpc3RoZWlnaHQgLSBtYXJrZGF0YS0+aGlzdF9vZmZzZXQ7Ci0g
IG1hcmtkYXRhLT5oaXN0X29mZnNldCArPSBuOwotICBpID0gKG4gPCBmbGF5ZXItPmxfaGVpZ2h0
KSA/IG4gOiAoZmxheWVyLT5sX2hlaWdodCk7Ci0gIExTY3JvbGxWKGZsYXllciwgaSwgMCwgZmxh
eWVyLT5sX2hlaWdodCAtIDEsIDApOwotICB3aGlsZSAoaS0tID4gMCkKLSAgICBNYXJrUmVkaXNw
bGF5TGluZShmbGF5ZXItPmxfaGVpZ2h0IC0gaSAtIDEsIDAsIGZsYXllci0+bF93aWR0aCAtIDEs
IDEpOwotICByZXR1cm4gbjsKKwlkZWJ1ZzEoIk1hcmtTY3JvbGxVcERpc3BsYXkoJWQpXG4iLCBu
KTsKKwlpZiAobiA8PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAobiA+IGZvcmUtPndfaGlzdGhlaWdo
dCAtIG1hcmtkYXRhLT5oaXN0X29mZnNldCkKKwkJbiA9IGZvcmUtPndfaGlzdGhlaWdodCAtIG1h
cmtkYXRhLT5oaXN0X29mZnNldDsKKworCW1hcmtkYXRhLT5oaXN0X29mZnNldCArPSBuOworCWkg
PSAobiA8IGZsYXllci0+bF9oZWlnaHQpID8gbiA6IChmbGF5ZXItPmxfaGVpZ2h0KTsKKwlMU2Ny
b2xsVihmbGF5ZXIsIGksIDAsIGZsYXllci0+bF9oZWlnaHQgLSAxLCAwKTsKKwl3aGlsZSAoaS0t
ID4gMCkKKwkJTWFya1JlZGlzcGxheUxpbmUoZmxheWVyLT5sX2hlaWdodCAtIGkgLSAxLCAwLCBm
bGF5ZXItPmxfd2lkdGggLSAxLCAxKTsKKwlyZXR1cm4gbjsKIH0KIAogc3RhdGljIGludAotTWFy
a1Njcm9sbERvd25EaXNwbGF5KG4pCi1pbnQgbjsKK01hcmtTY3JvbGxEb3duRGlzcGxheShpbnQg
bikKIHsKLSAgaW50IGk7CisJaW50IGk7CiAKLSAgZGVidWcxKCJNYXJrU2Nyb2xsRG93bkRpc3Bs
YXkoJWQpXG4iLCBuKTsKLSAgaWYgKG4gPD0gMCkKLSAgICByZXR1cm4gMDsKLSAgaWYgKG4gPiBt
YXJrZGF0YS0+aGlzdF9vZmZzZXQpCi0gICAgbiA9IG1hcmtkYXRhLT5oaXN0X29mZnNldDsKLSAg
bWFya2RhdGEtPmhpc3Rfb2Zmc2V0IC09IG47Ci0gIGkgPSAobiA8IGZsYXllci0+bF9oZWlnaHQp
ID8gbiA6IChmbGF5ZXItPmxfaGVpZ2h0KTsKLSAgTFNjcm9sbFYoZmxheWVyLCAtaSwgMCwgZm9y
ZS0+d19oZWlnaHQgLSAxLCAwKTsKLSAgd2hpbGUgKGktLSA+IDApCi0gICAgTWFya1JlZGlzcGxh
eUxpbmUoaSwgMCwgZmxheWVyLT5sX3dpZHRoIC0gMSwgMSk7Ci0gIHJldHVybiBuOworCWRlYnVn
MSgiTWFya1Njcm9sbERvd25EaXNwbGF5KCVkKVxuIiwgbik7CisJaWYgKG4gPD0gMCkKKwkJcmV0
dXJuIDA7CisJaWYgKG4gPiBtYXJrZGF0YS0+aGlzdF9vZmZzZXQpCisJCW4gPSBtYXJrZGF0YS0+
aGlzdF9vZmZzZXQ7CisJbWFya2RhdGEtPmhpc3Rfb2Zmc2V0IC09IG47CisJaSA9IChuIDwgZmxh
eWVyLT5sX2hlaWdodCkgPyBuIDogKGZsYXllci0+bF9oZWlnaHQpOworCUxTY3JvbGxWKGZsYXll
ciwgLWksIDAsIGZvcmUtPndfaGVpZ2h0IC0gMSwgMCk7CisJd2hpbGUgKGktLSA+IDApCisJCU1h
cmtSZWRpc3BsYXlMaW5lKGksIDAsIGZsYXllci0+bF93aWR0aCAtIDEsIDEpOworCXJldHVybiBu
OwogfQogCiB2b2lkCi1NYWtlUGFzdGVyKHBhLCBidWYsIGxlbiwgYnVmaXNjb3B5KQotc3RydWN0
IHBhc3RlciAqcGE7Ci1jaGFyICpidWY7Ci1pbnQgbGVuOwotaW50IGJ1ZmlzY29weTsKK01ha2VQ
YXN0ZXIoc3RydWN0IHBhc3RlciAqcGEsIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IGJ1ZmlzY29w
eSkKIHsKLSAgRnJlZVBhc3RlcihwYSk7Ci0gIHBhLT5wYV9wYXN0ZXB0ciA9IGJ1ZjsKLSAgcGEt
PnBhX3Bhc3RlbGVuID0gbGVuOwotICBpZiAoYnVmaXNjb3B5KQotICAgIHBhLT5wYV9wYXN0ZWJ1
ZiA9IGJ1ZjsKLSAgcGEtPnBhX3Bhc3RlbGF5ZXIgPSBmbGF5ZXI7Ci0gIERvUHJvY2VzcyhMYXll
cjJXaW5kb3coZmxheWVyKSwgJnBhLT5wYV9wYXN0ZXB0ciwgJnBhLT5wYV9wYXN0ZWxlbiwgcGEp
OworCUZyZWVQYXN0ZXIocGEpOworCXBhLT5wYV9wYXN0ZXB0ciA9IGJ1ZjsKKwlwYS0+cGFfcGFz
dGVsZW4gPSBsZW47CisJaWYgKGJ1ZmlzY29weSkKKwkJcGEtPnBhX3Bhc3RlYnVmID0gYnVmOwor
CXBhLT5wYV9wYXN0ZWxheWVyID0gZmxheWVyOworCURvUHJvY2VzcyhMYXllcjJXaW5kb3coZmxh
eWVyKSwgJnBhLT5wYV9wYXN0ZXB0ciwgJnBhLT5wYV9wYXN0ZWxlbiwgcGEpOwogfQogCiB2b2lk
Ci1GcmVlUGFzdGVyKHBhKQotc3RydWN0IHBhc3RlciAqcGE7CitGcmVlUGFzdGVyKHN0cnVjdCBw
YXN0ZXIgKnBhKQogewotICBpZiAocGEtPnBhX3Bhc3RlYnVmKQotICAgIGZyZWUocGEtPnBhX3Bh
c3RlYnVmKTsKLSAgcGEtPnBhX3Bhc3RlYnVmID0gMDsKLSAgcGEtPnBhX3Bhc3RlcHRyID0gMDsK
LSAgcGEtPnBhX3Bhc3RlbGVuID0gMDsKLSAgcGEtPnBhX3Bhc3RlbGF5ZXIgPSAwOwotICBldmRl
cSgmcGEtPnBhX3Nsb3dldik7CisJaWYgKHBhLT5wYV9wYXN0ZWJ1ZikKKwkJZnJlZShwYS0+cGFf
cGFzdGVidWYpOworCXBhLT5wYV9wYXN0ZWJ1ZiA9IDA7CisJcGEtPnBhX3Bhc3RlcHRyID0gMDsK
KwlwYS0+cGFfcGFzdGVsZW4gPSAwOworCXBhLT5wYV9wYXN0ZWxheWVyID0gMDsKKwlldmRlcSgm
cGEtPnBhX3Nsb3dldik7CiB9CiAKICNlbmRpZiAvKiBDT1BZX1BBU1RFICovCmRpZmYgLXVyIHNj
cmVlbi5vcmlnL21pc2MuYyBzY3JlZW4vbWlzYy5jCi0tLSBzY3JlZW4ub3JpZy9taXNjLmMJMjAy
My0wNi0wMSAxNDo1ODoxNy4yNDI2NjUwMzQgKzAzMDAKKysrIHNjcmVlbi9taXNjLmMJMjAyMi0w
MS0yOCAxNzowNjowMi42OTA2MTIwOTcgKzAzMDAKQEAgLTM3OCw5ICszNzgsNyBAQAogICAgIGYg
PSBybC5ybGltX21heDsKICAgZWxzZQogI2VuZGlmIC8qIFNWUjQgKi8KLSNpZmRlZiBfU0NfT1BF
Tl9NQVgKLSAgZiA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKLSNlbGlmIGRlZmluZWQoU1lTVikg
JiYgZGVmaW5lZChOT0ZJTEUpICYmICFkZWZpbmVkKElTQykKKyNpZiBkZWZpbmVkKFNZU1YpICYm
IGRlZmluZWQoTk9GSUxFKSAmJiAhZGVmaW5lZChJU0MpCiAgIGYgPSBOT0ZJTEU7CiAgIHdoaWxl
ICgtLWYgPiAyKQogICAgIGlmIChmICE9IGV4Y2VwdCkKQEAgLTQzNyw3ICs0MzUsNiBAQAogICAg
IHJldHVybiAxOwogICBVc2Vyc2lnY2xkID0gc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpOwogICBk
ZWJ1ZygiVXNlckNvbnRleHQ6IGZvcmtpbmcuXG4iKTsKLSAgZmZsdXNoKE5VTEwpOwogICBzd2l0
Y2ggKFVzZXJQSUQgPSBmb3JrKCkpCiAgICAgewogICAgIGNhc2UgLTE6CmRpZmYgLXVyIHNjcmVl
bi5vcmlnL05FV1MuMy41IHNjcmVlbi9ORVdTLjMuNQotLS0gc2NyZWVuLm9yaWcvTkVXUy4zLjUJ
MjAyMy0wNi0wMSAxNDo1ODoxNy4yMjk2NjUwMDQgKzAzMDAKKysrIHNjcmVlbi9ORVdTLjMuNQky
MDIyLTAxLTI4IDE3OjA2OjAyLjY2MjYxMTQwMyArMDMwMApAQCAtMjcsNyArMjcsNyBAQAogICBQ
bGVhc2UgcnVuIHRoZSAnbmV3c3ludGF4JyBzY3JpcHQgb24geW91ciBvbGQgc2NyZWVucmMgZmls
ZXMhCiAKICogRW1hY3Mgc3R5bGUgaXNlYXJjaCBhZGRlZCB0byBjb3B5IG1vZGUuIFRyeSBeQSBF
U0MgXlIgc2NyZWVuIF5SIF5SCi0gIHRvIGxvY2F0ZSB0aGUgbGFzdCB0aHJlZSBvY2N1cmVuY2Vz
IG9mIHRoZSB3b3JkICdzY3JlZW4nIGluIHRoZQorICB0byBsb2NhdGUgdGhlIGxhc3QgdGhyZWUg
b2NjdXJyZW5jZXMgb2YgdGhlIHdvcmQgJ3NjcmVlbicgaW4gdGhlCiAgIGhpc3RvcnkgYnVmZmVy
LgogCiAqIE5ldyBjb21tYW5kICdzaWxlbmNlJy4gQWxhcm1zIHRoZSB1c2VyIHdoZW5ldmVyIHRo
ZXJlIHdhcyBpbmFjdGl2aXR5CmRpZmYgLXVyIHNjcmVlbi5vcmlnL29zZGVmLmguaW4gc2NyZWVu
L29zZGVmLmguaW4KLS0tIHNjcmVlbi5vcmlnL29zZGVmLmguaW4JMjAyMy0wNi0wMSAxNDo1ODox
Ny4yNDM2NjUwMzYgKzAzMDAKKysrIHNjcmVlbi9vc2RlZi5oLmluCTIwMjItMDEtMjggMTc6MDY6
MDIuNjkwNjEyMDk3ICswMzAwCkBAIC05NSw2ICs5NSw5IEBACiBleHRlcm4gaW50ICAgc2V0ZWdp
ZCBfX1AoKGludCkpOwogI2VuZGlmCiAKK2V4dGVybiBjaGFyICpjcnlwdCBfX1AoKGNoYXIgKiwg
Y2hhciAqKSk7CitleHRlcm4gaW50ICAgcHV0ZW52IF9fUCgoY2hhciAqKSk7CisKIGV4dGVybiBp
bnQgICB0Z2V0ZW50IF9fUCgoY2hhciAqLCBjaGFyICopKTsKIGV4dGVybiBjaGFyICp0Z2V0c3Ry
IF9fUCgoY2hhciAqLCBjaGFyICoqKSk7CiBleHRlcm4gaW50ICAgdGdldG51bSBfX1AoKGNoYXIg
KikpOwpAQCAtMTA4LDcgKzExMSw3IEBACiBleHRlcm4gaW50ICAgc2V0cGdpZCBfX1AoKGludCwg
aW50KSk7CiBleHRlcm4gaW50ICAgdGNzZXRwZ3JwIF9fUCgoaW50LCBpbnQpKTsKICNlbmRpZgot
ZXh0ZXJuIGludCAgIGlvY3RsIF9fUCgoaW50LCBpbnQsIGNoYXIgKikpOworZXh0ZXJuIGludCAg
IGlvY3RsIF9fUCgoaW50LCB1bnNpZ25lZCBsb25nLCBjaGFyICopKTsKIAogZXh0ZXJuIGludCAg
IGtpbGwgX19QKChpbnQsIGludCkpOwogCmRpZmYgLXVyIHNjcmVlbi5vcmlnL29zZGVmLnNoIHNj
cmVlbi9vc2RlZi5zaAotLS0gc2NyZWVuLm9yaWcvb3NkZWYuc2gJMjAyMy0wNi0wMSAxNDo1ODox
Ny4yNDM2NjUwMzYgKzAzMDAKKysrIHNjcmVlbi9vc2RlZi5zaAkyMDIyLTAxLTI4IDE3OjA2OjAy
LjY5MDYxMjA5NyArMDMwMApAQCAtMjcsNyArMjcsNiBAQAogI2lmZGVmIGxpbnV4CiAjaW5jbHVk
ZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+CiAj
ZW5kaWYKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaWZuZGVmIE5PU1lTTE9HCmRpZmYgLXVy
IHNjcmVlbi5vcmlnL29zLmggc2NyZWVuL29zLmgKLS0tIHNjcmVlbi5vcmlnL29zLmgJMjAyMy0w
Ni0wMSAxNDo1ODoxNy4yNDM2NjUwMzYgKzAzMDAKKysrIHNjcmVlbi9vcy5oCTIwMjItMDEtMjgg
MTc6MDY6MDIuNjkwNjEyMDk3ICswMzAwCkBAIC0yODEsNyArMjgxLDcgQEAKICMgICBpZmRlZiBf
UEFUSF9VVE1QCiAjICAgIGRlZmluZSBVVE1QRklMRQlfUEFUSF9VVE1QCiAjICAgZWxzZQotIyAg
ICBkZWZpbmUgVVRNUEZJTEUJIi92YXIvcnVuL3V0bXAiCisjICAgIGRlZmluZSBVVE1QRklMRQki
L2V0Yy91dG1wIgogIyAgIGVuZGlmIC8qIF9QQVRIX1VUTVAgKi8KICMgIGVuZGlmCiAjIGVuZGlm
CmRpZmYgLXVyIHNjcmVlbi5vcmlnL3BhdGNobGV2ZWwuaCBzY3JlZW4vcGF0Y2hsZXZlbC5oCi0t
LSBzY3JlZW4ub3JpZy9wYXRjaGxldmVsLmgJMjAyMy0wNi0wMSAxNDo1ODoxNy4yNDM2NjUwMzYg
KzAzMDAKKysrIHNjcmVlbi9wYXRjaGxldmVsLmgJMjAyMi0wMS0yOCAxNzowNjowMi42OTA2MTIw
OTcgKzAzMDAKQEAgLTUzMiw3ICs1MzIsNyBAQAogCiAjZGVmaW5lIE9SSUdJTiAiR05VIgogI2Rl
ZmluZSBSRVYgNAotI2RlZmluZSBWRVJTIDgKKyNkZWZpbmUgVkVSUyA5CiAjZGVmaW5lIFBBVENI
TEVWRUwgMAotI2RlZmluZSBEQVRFICIwNS1GZWItMjAiCisjZGVmaW5lIERBVEUgIjMwLUphbi0y
MiIKICNkZWZpbmUgU1RBVEUgIiIKZGlmZiAtdXIgc2NyZWVuLm9yaWcvcHJvY2Vzcy5jIHNjcmVl
bi9wcm9jZXNzLmMKLS0tIHNjcmVlbi5vcmlnL3Byb2Nlc3MuYwkyMDIzLTA2LTAxIDE0OjU4OjE3
LjI0NTY2NTA0MSArMDMwMAorKysgc2NyZWVuL3Byb2Nlc3MuYwkyMDIyLTAxLTI4IDE3OjA2OjAy
LjY5NDYxMjE5NiArMDMwMApAQCAtMjc0MSw3ICsyNzQxLDcgQEAKICNpZmRlZiBDT1BZX1BBU1RF
CiAgICAgY2FzZSBSQ19CVUZGRVJGSUxFOgogICAgICAgaWYgKCphcmdzID09IDApCi0JQnVmZmVy
RmlsZSA9IFNhdmVTdHIoYnVmZmVyZmlsZSk7CisJQnVmZmVyRmlsZSA9IFNhdmVTdHIoREVGQVVM
VF9CVUZGRVJGSUxFKTsKICAgICAgIGVsc2UgaWYgKFBhcnNlU2F2ZVN0cihhY3QsICZCdWZmZXJG
aWxlKSkKICAgICAgICAgYnJlYWs7CiAgICAgICBpZiAobXNnb2spCkBAIC01NDAxLDYgKzU0MDEs
NyBAQAogc3RhdGljIGludAogTW9yZVdpbmRvd3MoKQogeworICBjaGFyICptID0gIk5vIG90aGVy
IHdpbmRvdy4iOwogICBpZiAod2luZG93cyAmJiAoZm9yZSA9PSAwIHx8IHdpbmRvd3MtPndfbmV4
dCkpCiAgICAgcmV0dXJuIDE7CiAgIGlmIChmb3JlID09IDApCkBAIC01NDA4LDcgKzU0MDksNyBA
QAogICAgICAgTXNnKDAsICJObyB3aW5kb3cgYXZhaWxhYmxlIik7CiAgICAgICByZXR1cm4gMDsK
ICAgICB9Ci0gIE1zZygwLCAiTm8gb3RoZXIgd2luZG93JXMuIiwgZm9yZS0+d19udW1iZXIgPiAx
ID8gInMiIDogIiIpOworICBNc2coMCwgbSwgZm9yZS0+d19udW1iZXIpOwkvKiBvdGhlciBhcmcg
Zm9yIG5ldGhhY2sgKi8KICAgcmV0dXJuIDA7CiB9CiAKQEAgLTYyNzMsOCArNjI3NCw3IEBACiAg
IGlmIChrdGFiWyhpbnQpKHVuc2lnbmVkIGNoYXIpKmJ1Zl0ubnIgIT0gUkNfUE9XX0RFVEFDSCkK
ICAgICB7CiAgICAgICBpZiAoZGlzcGxheSkKLSAgICAgICAgaWYgKHdyaXRlKERfdXNlcmZkLCAi
XDAwNyIsIDEpIDwgMSkKLSAgICAgICAgICA7CisgICAgICAgIHdyaXRlKERfdXNlcmZkLCAiXDAw
NyIsIDEpOwogICAgICAgTXNnKDAsICJEZXRhY2ggYWJvcnRlZC4iKTsKICAgICB9CiAgIGVsc2UK
ZGlmZiAtdXIgc2NyZWVuLm9yaWcvcHR5LmMgc2NyZWVuL3B0eS5jCi0tLSBzY3JlZW4ub3JpZy9w
dHkuYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjI0NTY2NTA0MSArMDMwMAorKysgc2NyZWVuL3B0eS5j
CTIwMjItMDEtMjggMTc6MDY6MDIuNjk0NjEyMTk2ICswMzAwCkBAIC0zMSw2ICszMSwxMCBAQAog
I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKKyNpZiBkZWZpbmVkKF9f
T3BlbkJTRF9fKQorI2luY2x1ZGUgPHV0aWxzLmg+ICAvKiBmb3Igb3BlbnB0eSgpICovCisjZW5k
aWYKKwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgInNjcmVlbi5oIgogCkBAIC03Nywx
MCArODEsNyBAQAogZXh0ZXJuIGludCBlZmZfdWlkOwogCiAvKiB1c2VkIGZvciBvcGVuaW5nIGEg
bmV3IHB0eS1wYWlyOiAqLwotI2lmbmRlZiBIQVZFX0dFVFBUCi1zdGF0aWMgY2hhciBQdHlOYW1l
WzMyXTsKLSNlbmRpZgotc3RhdGljIGNoYXIgVHR5TmFtZVszMl07CitzdGF0aWMgY2hhciBQdHlO
YW1lWzMyXSwgVHR5TmFtZVszMl07CiAKICNpZiAhKGRlZmluZWQoc2VxdWVudCkgfHwgZGVmaW5l
ZChfU0VRVUVOVF8pIHx8IGRlZmluZWQoSEFWRV9TVlI0X1BUWVMpKQogIyBpZmRlZiBocHV4CkBA
IC0yNjIsMTAgKzI2MywxMCBAQAogI2VuZGlmCiAgIHNpZ3JldF90ICgqc2lnY2xkKV9fUChTSUdQ
Uk9UT0FSRyk7CiAKKyAgc3RyY3B5KFB0eU5hbWUsICIvZGV2L3B0bXgiKTsKICNpZiBkZWZpbmVk
KEhBVkVfR0VUUFQpICYmIChkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKF9fR0xJQkNfXykpCiAg
IGlmICgoZiA9IGdldHB0KCkpID09IC0xKQogI2Vsc2UKLSAgc3RyY3B5KFB0eU5hbWUsICIvZGV2
L3B0bXgiKTsKICAgaWYgKChmID0gb3BlbihQdHlOYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSkpID09
IC0xKQogI2VuZGlmCiAgICAgcmV0dXJuIC0xOwpkaWZmIC11ciBzY3JlZW4ub3JpZy9yZXNpemUu
YyBzY3JlZW4vcmVzaXplLmMKLS0tIHNjcmVlbi5vcmlnL3Jlc2l6ZS5jCTIwMjMtMDYtMDEgMTQ6
NTg6MTcuMjQ1NjY1MDQxICswMzAwCisrKyBzY3JlZW4vcmVzaXplLmMJMjAyMi0wMS0yOCAxNzow
NjowMi42OTQ2MTIxOTYgKzAzMDAKQEAgLTY4MywxNyArNjgzLDYgQEAKICAgICAgIGhlID0gTUFY
V0lEVEg7CiAgICAgfQogCi0gIGlmICh3aSA+IDEwMDApCi0gICAgewotICAgICAgTXNnKDAsICJX
aW5kb3cgd2lkdGggdG9vIGxhcmdlLCB0cnVuY2F0ZWQiKTsKLSAgICAgIHdpID0gMTAwMDsKLSAg
ICB9Ci0gIGlmIChoZSA+IDEwMDApCi0gICAgewotICAgICAgTXNnKDAsICJXaW5kb3cgaGVpZ2h0
IHRvbyBsYXJnZSwgdHJ1bmNhdGVkIik7Ci0gICAgICBoZSA9IDEwMDA7Ci0gICAgfQotCiAgIGlm
IChwLT53X3dpZHRoID09IHdpICYmIHAtPndfaGVpZ2h0ID09IGhlICYmIHAtPndfaGlzdGhlaWdo
dCA9PSBoaSkKICAgICB7CiAgICAgICBkZWJ1ZygiQ2hhbmdlV2luZG93U2l6ZTogTm8gY2hhbmdl
LlxuIik7CmRpZmYgLXVyIHNjcmVlbi5vcmlnL3NjaGVkLmMgc2NyZWVuL3NjaGVkLmMKLS0tIHNj
cmVlbi5vcmlnL3NjaGVkLmMJMjAyMy0wNi0wMSAxNDo1ODoxNy4yNDU2NjUwNDEgKzAzMDAKKysr
IHNjcmVlbi9zY2hlZC5jCTIwMjItMDEtMjggMTc6MDY6MDIuNjk0NjEyMTk2ICswMzAwCkBAIC00
NywyNDQgKzQ3LDIyNiBAQAogI2VuZGlmCiAKIHZvaWQKLWV2ZW5xKGV2KQotc3RydWN0IGV2ZW50
ICpldjsKK2V2ZW5xKHN0cnVjdCBldmVudCAqZXYpCiB7Ci0gIHN0cnVjdCBldmVudCAqZXZwLCAq
KmV2cHA7Ci0gIGRlYnVnMygiTmV3IGV2ZW50IGZkICVkIHR5cGUgJWQgcXVldWVkICVkXG4iLCBl
di0+ZmQsIGV2LT50eXBlLCBldi0+cXVldWVkKTsKLSAgaWYgKGV2LT5xdWV1ZWQpCi0gICAgcmV0
dXJuOwotICBldnBwID0gJmV2czsKLSAgaWYgKGV2LT50eXBlID09IEVWX1RJTUVPVVQpCi0gICAg
ewotICAgICAgY2FsY3RpbWVvdXQgPSAxOwotICAgICAgZXZwcCA9ICZ0ZXZzOwotICAgIH0KLSAg
Zm9yICg7IChldnAgPSAqZXZwcCk7IGV2cHAgPSAmZXZwLT5uZXh0KQotICAgIGlmIChldi0+cHJp
ID4gZXZwLT5wcmkpCi0gICAgICBicmVhazsKLSAgZXYtPm5leHQgPSBldnA7Ci0gICpldnBwID0g
ZXY7Ci0gIGV2LT5xdWV1ZWQgPSAxOworCXN0cnVjdCBldmVudCAqZXZwLCAqKmV2cHA7CisJZGVi
dWczKCJOZXcgZXZlbnQgZmQgJWQgdHlwZSAlZCBxdWV1ZWQgJWRcbiIsIGV2IC0+IGZkLCBldiAt
PiB0eXBlLCBldiAtPiBxdWV1ZWQpOworCWlmIChldi0+cXVldWVkKQorCQlyZXR1cm47CisJZXZw
cCA9ICZldnM7CisJaWYgKGV2LT50eXBlID09IEVWX1RJTUVPVVQpIHsKKwkJY2FsY3RpbWVvdXQg
PSAxOworCQlldnBwID0gJnRldnM7CisJfQorCWZvciAoOyAoZXZwID0gKmV2cHApOyBldnBwID0g
JmV2cC0+bmV4dCkKKwkJaWYgKGV2LT5wcmkgPiBldnAtPnByaSkKKwkJCWJyZWFrOworCWV2LT5u
ZXh0ID0gZXZwOworCSpldnBwID0gZXY7CisJZXYtPnF1ZXVlZCA9IDE7CiB9CiAKIHZvaWQKLWV2
ZGVxKGV2KQotc3RydWN0IGV2ZW50ICpldjsKK2V2ZGVxKHN0cnVjdCBldmVudCAqZXYpCiB7Ci0g
IHN0cnVjdCBldmVudCAqZXZwLCAqKmV2cHA7Ci0gIGRlYnVnMygiRGVxIGV2ZW50IGZkICVkIHR5
cGUgJWQgcXVldWVkICVkXG4iLCBldi0+ZmQsIGV2LT50eXBlLCBldi0+cXVldWVkKTsKLSAgaWYg
KCFldi0+cXVldWVkKQotICAgIHJldHVybjsKLSAgZXZwcCA9ICZldnM7Ci0gIGlmIChldi0+dHlw
ZSA9PSBFVl9USU1FT1VUKQotICAgIHsKLSAgICAgIGNhbGN0aW1lb3V0ID0gMTsKLSAgICAgIGV2
cHAgPSAmdGV2czsKLSAgICB9Ci0gIGZvciAoOyAoZXZwID0gKmV2cHApOyBldnBwID0gJmV2cC0+
bmV4dCkKLSAgICBpZiAoZXZwID09IGV2KQotICAgICAgYnJlYWs7Ci0gIEFTU0VSVChldnApOwot
ICAqZXZwcCA9IGV2LT5uZXh0OwotICBldi0+cXVldWVkID0gMDsKLSAgaWYgKGV2ID09IG5leHRl
dikKLSAgICBuZXh0ZXYgPSBuZXh0ZXYtPm5leHQ7CisJc3RydWN0IGV2ZW50ICpldnAsICoqZXZw
cDsKKwlkZWJ1ZzMoIkRlcSBldmVudCBmZCAlZCB0eXBlICVkIHF1ZXVlZCAlZFxuIiwgZXYgLT4g
ZmQsIGV2IC0+IHR5cGUsIGV2IC0+IHF1ZXVlZCk7CisJaWYgKCFldi0+cXVldWVkKQorCQlyZXR1
cm47CisJZXZwcCA9ICZldnM7CisJaWYgKGV2LT50eXBlID09IEVWX1RJTUVPVVQpIHsKKwkJY2Fs
Y3RpbWVvdXQgPSAxOworCQlldnBwID0gJnRldnM7CisJfQorCWZvciAoOyAoZXZwID0gKmV2cHAp
OyBldnBwID0gJmV2cC0+bmV4dCkKKwkJaWYgKGV2cCA9PSBldikKKwkJCWJyZWFrOworCUFTU0VS
VChldnApOworCSpldnBwID0gZXYtPm5leHQ7CisJZXYtPnF1ZXVlZCA9IDA7CisJaWYgKGV2ID09
IG5leHRldikKKwkJbmV4dGV2ID0gbmV4dGV2LT5uZXh0OwogfQogCiBzdGF0aWMgc3RydWN0IGV2
ZW50ICoKIGNhbGN0aW1vKCkKIHsKLSAgc3RydWN0IGV2ZW50ICpldiwgKm1pbjsKLSAgbG9uZyBt
aW5zOworCXN0cnVjdCBldmVudCAqZXYsICptaW47CisJbG9uZyBtaW5zOwogCi0gIGlmICgobWlu
ID0gdGV2cykgPT0gMCkKLSAgICByZXR1cm4gMDsKLSAgbWlucyA9IG1pbi0+dGltZW91dC50dl9z
ZWM7Ci0gIGZvciAoZXYgPSB0ZXZzLT5uZXh0OyBldjsgZXYgPSBldi0+bmV4dCkKLSAgICB7Ci0g
ICAgICBBU1NFUlQoZXYtPnR5cGUgPT0gRVZfVElNRU9VVCk7Ci0gICAgICBpZiAobWlucyA8IGV2
LT50aW1lb3V0LnR2X3NlYykKLQljb250aW51ZTsKLSAgICAgIGlmIChtaW5zID4gZXYtPnRpbWVv
dXQudHZfc2VjIHx8IG1pbi0+dGltZW91dC50dl91c2VjID4gZXYtPnRpbWVvdXQudHZfdXNlYykK
LQl7Ci0JICBtaW4gPSBldjsKLQkgIG1pbnMgPSBldi0+dGltZW91dC50dl9zZWM7CisJaWYgKCht
aW4gPSB0ZXZzKSA9PSAwKQorCQlyZXR1cm4gMDsKKwltaW5zID0gbWluLT50aW1lb3V0LnR2X3Nl
YzsKKwlmb3IgKGV2ID0gdGV2cy0+bmV4dDsgZXY7IGV2ID0gZXYtPm5leHQpIHsKKwkJQVNTRVJU
KGV2LT50eXBlID09IEVWX1RJTUVPVVQpOworCQlpZiAobWlucyA8IGV2LT50aW1lb3V0LnR2X3Nl
YykKKwkJCWNvbnRpbnVlOworCQlpZiAobWlucyA+IGV2LT50aW1lb3V0LnR2X3NlYyB8fCBtaW4t
PnRpbWVvdXQudHZfdXNlYyA+IGV2LT50aW1lb3V0LnR2X3VzZWMpIHsKKwkJCW1pbiA9IGV2Owor
CQkJbWlucyA9IGV2LT50aW1lb3V0LnR2X3NlYzsKKwkJfQogCX0KLSAgICB9Ci0gIHJldHVybiBt
aW47CisJcmV0dXJuIG1pbjsKIH0KIAogdm9pZAogc2NoZWQoKQogewotICBzdHJ1Y3QgZXZlbnQg
KmV2OwotICBmZF9zZXQgciwgdywgKnNldDsKLSAgc3RydWN0IGV2ZW50ICp0aW1lb3V0ZXYgPSAw
OwotICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwotICBpbnQgbnNlbDsKLQotICBmb3IgKDs7KQot
ICAgIHsKLSAgICAgIGlmIChjYWxjdGltZW91dCkKLQl0aW1lb3V0ZXYgPSBjYWxjdGltbygpOwot
ICAgICAgaWYgKHRpbWVvdXRldikKLQl7Ci0JICBnZXR0aW1lb2ZkYXkoJnRpbWVvdXQsIE5VTEwp
OwotCSAgLyogdHAgLSB0aW1lb3V0ICovCi0JICB0aW1lb3V0LnR2X3NlYyA9IHRpbWVvdXRldi0+
dGltZW91dC50dl9zZWMgLSB0aW1lb3V0LnR2X3NlYzsKLQkgIHRpbWVvdXQudHZfdXNlYyA9IHRp
bWVvdXRldi0+dGltZW91dC50dl91c2VjIC0gdGltZW91dC50dl91c2VjOwotCSAgaWYgKHRpbWVv
dXQudHZfdXNlYyA8IDApCi0JICAgIHsKLQkgICAgICB0aW1lb3V0LnR2X3VzZWMgKz0gMTAwMDAw
MDsKLQkgICAgICB0aW1lb3V0LnR2X3NlYy0tOwotCSAgICB9Ci0JICBpZiAodGltZW91dC50dl9z
ZWMgPCAwKQotCSAgICB7Ci0JICAgICAgdGltZW91dC50dl91c2VjID0gMDsKLQkgICAgICB0aW1l
b3V0LnR2X3NlYyA9IDA7Ci0JICAgIH0KLQl9CisJc3RydWN0IGV2ZW50ICpldjsKKwlmZF9zZXQg
ciwgdywgKnNldDsKKwlzdHJ1Y3QgZXZlbnQgKnRpbWVvdXRldiA9IDA7CisJc3RydWN0IHRpbWV2
YWwgdGltZW91dDsKKwlpbnQgbnNlbDsKKworCWZvciAoOzspIHsKKwkJaWYgKGNhbGN0aW1lb3V0
KQorCQkJdGltZW91dGV2ID0gY2FsY3RpbW8oKTsKKwkJaWYgKHRpbWVvdXRldikgeworCQkJZ2V0
dGltZW9mZGF5KCZ0aW1lb3V0LCBOVUxMKTsKKwkJCS8qIHRwIC0gdGltZW91dCAqLworCQkJdGlt
ZW91dC50dl9zZWMgPSB0aW1lb3V0ZXYtPnRpbWVvdXQudHZfc2VjIC0gdGltZW91dC50dl9zZWM7
CisJCQl0aW1lb3V0LnR2X3VzZWMgPSB0aW1lb3V0ZXYtPnRpbWVvdXQudHZfdXNlYyAtIHRpbWVv
dXQudHZfdXNlYzsKKworCQkJaWYgKHRpbWVvdXQudHZfdXNlYyA8IDApIHsKKwkJCQl0aW1lb3V0
LnR2X3VzZWMgKz0gMTAwMDAwMDsKKwkJCQl0aW1lb3V0LnR2X3NlYy0tOworCQkJfQorCQkJaWYg
KHRpbWVvdXQudHZfc2VjIDwgMCkgeworCQkJCXRpbWVvdXQudHZfdXNlYyA9IDA7CisJCQkJdGlt
ZW91dC50dl9zZWMgPSAwOworCQkJfQorCQl9CiAjaWZkZWYgREVCVUcKLSAgICAgIGRlYnVnKCJ3
YWl0aW5nIGZvciBldmVudHMiKTsKLSAgICAgIGlmICh0aW1lb3V0ZXYpCi0gICAgICAgIGRlYnVn
MigiIHRpbWVvdXQgJWxkIHNlY3MgJWxkIHVzZWNzIiwgdGltZW91dC50dl9zZWMsIHRpbWVvdXQu
dHZfdXNlYyk7Ci0gICAgICBkZWJ1ZygiOlxuIik7Ci0gICAgICBmb3IgKGV2ID0gZXZzOyBldjsg
ZXYgPSBldi0+bmV4dCkKLSAgICAgICAgZGVidWczKCIgLSBmZCAlZCB0eXBlICVkIHByaSAlZFxu
IiwgZXYtPmZkLCBldi0+dHlwZSwgZXYtPnByaSk7Ci0gICAgICBpZiAodGV2cykKLSAgICAgICAg
ZGVidWcoInRpbWVkIGV2ZW50czpcbiIpOwotICAgICAgZm9yIChldiA9IHRldnM7IGV2OyBldiA9
IGV2LT5uZXh0KQotICAgICAgICBkZWJ1ZzMoIiAtIHByaSAlZCBzZWMgJWxkIHVzZWMgJWxkXG4i
LCBldi0+cHJpLCBldi0+dGltZW91dC50dl9zZWMsIGV2LT50aW1lb3V0LnR2X3VzZWMpOwotI2Vu
ZGlmCi0KLSAgICAgIEZEX1pFUk8oJnIpOwotICAgICAgRkRfWkVSTygmdyk7Ci0gICAgICBmb3Ig
KGV2ID0gZXZzOyBldjsgZXYgPSBldi0+bmV4dCkKLSAgICAgICAgewotCSAgaWYgKGV2LT5jb25k
cG9zICYmICpldi0+Y29uZHBvcyA8PSAoZXYtPmNvbmRuZWcgPyAqZXYtPmNvbmRuZWcgOiAwKSkK
LQkgICAgewotCSAgICAgIGRlYnVnMigiIC0gY29uZCBldiBmZCAlZCB0eXBlICVkIGZhaWxlZFxu
IiwgZXYtPmZkLCBldi0+dHlwZSk7Ci0JICAgICAgY29udGludWU7Ci0JICAgIH0KLQkgIGlmIChl
di0+dHlwZSA9PSBFVl9SRUFEKQotCSAgICBGRF9TRVQoZXYtPmZkLCAmcik7Ci0JICBlbHNlIGlm
IChldi0+dHlwZSA9PSBFVl9XUklURSkKLQkgICAgRkRfU0VUKGV2LT5mZCwgJncpOwotICAgICAg
ICB9CisJCWRlYnVnKCJ3YWl0aW5nIGZvciBldmVudHMiKTsKKwkJaWYgKHRpbWVvdXRldikKKwkJ
CWRlYnVnMigiIHRpbWVvdXQgJWQgc2VjcyAlZCB1c2VjcyIsIHRpbWVvdXQudHZfc2VjLCB0aW1l
b3V0LnR2X3VzZWMpOworCQlkZWJ1ZygiOlxuIik7CisJCWZvciAoZXYgPSBldnM7IGV2OyBldiA9
IGV2LT5uZXh0KQorCQkJZGVidWczKCIgLSBmZCAlZCB0eXBlICVkIHByaSAlZFxuIiwgZXYtPmZk
LCBldi0+dHlwZSwgZXYtPnByaSk7CisJCWlmICh0ZXZzKQorCQkJZGVidWcoInRpbWVkIGV2ZW50
czpcbiIpOworCQlmb3IgKGV2ID0gdGV2czsgZXY7IGV2ID0gZXYtPm5leHQpCisJCQlkZWJ1ZzMo
IiAtIHByaSAlZCBzZWMgJWQgdXNlYyAlZFxuIiwgZXYtPnByaSwKKwkJCSAgICBldi0+dGltZW91
dC50dl9zZWMsIGV2LT50aW1lb3V0LnR2X3VzZWMpOworI2VuZGlmCisKKwkJRkRfWkVSTygmcik7
CisJCUZEX1pFUk8oJncpOworCQlmb3IgKGV2ID0gZXZzOyBldjsgZXYgPSBldi0+bmV4dCkgewor
CQkJaWYgKGV2LT5jb25kcG9zICYmICpldi0+Y29uZHBvcyA8PSAoZXYtPmNvbmRuZWcgPyAqZXYt
PmNvbmRuZWcgOiAwKSkgeworCQkJCWRlYnVnMigiIC0gY29uZCBldiBmZCAlZCB0eXBlICVkIGZh
aWxlZFxuIiwgZXYtPmZkLCBldi0+dHlwZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAo
ZXYtPnR5cGUgPT0gRVZfUkVBRCkKKwkJCQlGRF9TRVQoZXYtPmZkLCAmcik7CisJCQllbHNlIGlm
IChldi0+dHlwZSA9PSBFVl9XUklURSkKKwkJCQlGRF9TRVQoZXYtPmZkLCAmdyk7CisJCX0KIAog
I2lmZGVmIERFQlVHCi0gICAgICBkZWJ1ZygicmVhZGZkczoiKTsKLSAgICAgIGZvciAobnNlbCA9
IDA7IG5zZWwgPCBGRF9TRVRTSVpFOyBuc2VsKyspCi0JaWYgKEZEX0lTU0VUKG5zZWwsICZyKSkK
LQkgIGRlYnVnMSgiICVkIiwgbnNlbCk7Ci0gICAgICBkZWJ1ZygiXG4iKTsKLSAgICAgIGRlYnVn
KCJ3cml0ZWZkczoiKTsKLSAgICAgIGZvciAobnNlbCA9IDA7IG5zZWwgPCBGRF9TRVRTSVpFOyBu
c2VsKyspCi0JaWYgKEZEX0lTU0VUKG5zZWwsICZ3KSkKLQkgIGRlYnVnMSgiICVkIiwgbnNlbCk7
Ci0gICAgICBkZWJ1ZygiXG4iKTsKLSNlbmRpZgotCi0gICAgICBuc2VsID0gc2VsZWN0KEZEX1NF
VFNJWkUsICZyLCAmdywgKGZkX3NldCAqKTAsIHRpbWVvdXRldiA/ICZ0aW1lb3V0IDogKHN0cnVj
dCB0aW1ldmFsICopIDApOwotICAgICAgaWYgKG5zZWwgPCAwKQotCXsKLQkgIGlmIChlcnJubyAh
PSBFSU5UUikKLQkgICAgeworCQlkZWJ1ZygicmVhZGZkczoiKTsKKwkJZm9yIChuc2VsID0gMDsg
bnNlbCA8IEZEX1NFVFNJWkU7IG5zZWwrKykKKwkJCWlmIChGRF9JU1NFVChuc2VsLCAmcikpCisJ
CQkJZGVidWcxKCIgJWQiLCBuc2VsKTsKKwkJZGVidWcoIlxuIik7CisJCWRlYnVnKCJ3cml0ZWZk
czoiKTsKKwkJZm9yIChuc2VsID0gMDsgbnNlbCA8IEZEX1NFVFNJWkU7IG5zZWwrKykKKwkJCWlm
IChGRF9JU1NFVChuc2VsLCAmdykpCisJCQkJZGVidWcxKCIgJWQiLCBuc2VsKTsKKwkJZGVidWco
IlxuIik7CisjZW5kaWYKKworCQluc2VsID0gc2VsZWN0KEZEX1NFVFNJWkUsICZyLCAmdywgKGZk
X3NldCAqKTAsIHRpbWVvdXRldiA/ICZ0aW1lb3V0IDogKHN0cnVjdCB0aW1ldmFsICopMCk7CisJ
CWlmIChuc2VsIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CiAjaWYgZGVmaW5lZChz
Z2kpICYmIGRlZmluZWQoU1ZSNCkKLQkgICAgICBpZiAoZXJybm8gPT0gRUlPICYmIHNnaWhhY2so
KSkKLQkJY29udGludWU7CisJCQkJaWYgKGVycm5vID09IEVJTyAmJiBzZ2loYWNrKCkpCisJCQkJ
CWNvbnRpbnVlOwogI2VuZGlmCiAjaWYgZGVmaW5lZChfX29zZl9fKSB8fCBkZWZpbmVkKE1fVU5J
WCkKLQkgICAgICAvKiBPU0YvMSAzLngsIFNDTyBidWc6IEVCQURGICovCi0JICAgICAgLyogT1NG
LzEgNC54IGJ1ZzogRUlPICovCi0JICAgICAgaWYgKChlcnJubyA9PSBFSU8gfHwgZXJybm8gPT0g
RUJBREYpICYmIHNnaWhhY2soKSkKLQkJY29udGludWU7Ci0jZW5kaWYKLQkgICAgICBQYW5pYyhl
cnJubywgInNlbGVjdCIpOwotCSAgICB9Ci0JICBuc2VsID0gMDsKLQl9Ci0gICAgICBlbHNlIGlm
IChuc2VsID09IDApCS8qIHRpbWVvdXQgKi8KLQl7Ci0JICBkZWJ1ZygiVElNRU9VVCFcbiIpOwot
CSAgQVNTRVJUKHRpbWVvdXRldik7Ci0JICBldmRlcSh0aW1lb3V0ZXYpOwotCSAgdGltZW91dGV2
LT5oYW5kbGVyKHRpbWVvdXRldiwgdGltZW91dGV2LT5kYXRhKTsKLQl9CisJCQkJLyogT1NGLzEg
My54LCBTQ08gYnVnOiBFQkFERiAqLworCQkJCS8qIE9TRi8xIDQueCBidWc6IEVJTyAqLworCQkJ
CWlmICgoZXJybm8gPT0gRUlPIHx8IGVycm5vID09IEVCQURGKSAmJiBzZ2loYWNrKCkpCisJCQkJ
CWNvbnRpbnVlOworI2VuZGlmCisJCQkJUGFuaWMoZXJybm8sICJzZWxlY3QiKTsKKwkJCX0KKwkJ
CW5zZWwgPSAwOworCQl9IGVsc2UgaWYgKG5zZWwgPT0gMCkgewkJLyogdGltZW91dCAqLworCQkJ
ZGVidWcoIlRJTUVPVVQhXG4iKTsKKwkJCUFTU0VSVCh0aW1lb3V0ZXYpOworCQkJZXZkZXEodGlt
ZW91dGV2KTsKKwkJCXRpbWVvdXRldi0+aGFuZGxlcih0aW1lb3V0ZXYsIHRpbWVvdXRldi0+ZGF0
YSk7CisJCX0KICNpZmRlZiBTRUxFQ1RfQlJPS0VOCiAgICAgICAvKgogICAgICAgICogU2VxdWVu
dHMgc2VsZWN0IGVtdWxhdGlvbiBjb3VudHMgYSBkZXNjcmlwdG9yIHdoaWNoIGlzCiAgICAgICAg
KiByZWFkYWJsZSBhbmQgd3JpdGVhYmxlIG9ubHkgYXMgb25lIGhpdC4gV2FhYWFhLgogICAgICAg
ICovCi0gICAgICBpZiAobnNlbCkKLSAgICAgICAgbnNlbCA9IDIgKiBGRF9TRVRTSVpFOworCQlp
ZiAobnNlbCkKKwkJCW5zZWwgPSAyICogRkRfU0VUU0laRTsKICNlbmRpZgogCi0gICAgICBmb3Ig
KGV2ID0gZXZzOyBldjsgZXYgPSBuZXh0ZXYpCi0gICAgICAgIHsKLSAgICAgICAgICBuZXh0ZXYg
PSBldi0+bmV4dDsKLQkgIGlmIChldi0+dHlwZSAhPSBFVl9BTFdBWVMpCi0JICAgIHsKLQkgICAg
ICBzZXQgPSBldi0+dHlwZSA9PSBFVl9SRUFEID8gJnIgOiAmdzsKLQkgICAgICBpZiAobnNlbCA9
PSAwIHx8ICFGRF9JU1NFVChldi0+ZmQsIHNldCkpCi0JCWNvbnRpbnVlOwotCSAgICAgIG5zZWwt
LTsKLQkgICAgfQotCSAgaWYgKGV2LT5jb25kcG9zICYmICpldi0+Y29uZHBvcyA8PSAoZXYtPmNv
bmRuZWcgPyAqZXYtPmNvbmRuZWcgOiAwKSkKLQkgICAgY29udGludWU7Ci0JICBkZWJ1ZzIoIiAr
IGhpdCBldiBmZCAlZCB0eXBlICVkIVxuIiwgZXYtPmZkLCBldi0+dHlwZSk7Ci0JICBldi0+aGFu
ZGxlcihldiwgZXYtPmRhdGEpOwotICAgICAgICB9Ci0gICAgfQorCQlmb3IgKGV2ID0gZXZzOyBl
djsgZXYgPSBuZXh0ZXYpIHsKKwkJCW5leHRldiA9IGV2LT5uZXh0OworCQkJaWYgKGV2LT50eXBl
ICE9IEVWX0FMV0FZUykgeworCQkJCXNldCA9IGV2LT50eXBlID09IEVWX1JFQUQgPyAmciA6ICZ3
OworCQkJCWlmIChuc2VsID09IDAgfHwgIUZEX0lTU0VUKGV2LT5mZCwgc2V0KSkKKwkJCQkJY29u
dGludWU7CisJCQkJbnNlbC0tOworCQkJfQorCQkJaWYgKGV2LT5jb25kcG9zICYmCisJCQkgICAg
KmV2LT5jb25kcG9zIDw9IChldi0+Y29uZG5lZyA/ICpldi0+Y29uZG5lZyA6IDApKQorCQkJCWNv
bnRpbnVlOworCQkJZGVidWcyKCIgKyBoaXQgZXYgZmQgJWQgdHlwZSAlZCFcbiIsIGV2LT5mZCwg
ZXYtPnR5cGUpOworCQkJZXYtPmhhbmRsZXIoZXYsIGV2LT5kYXRhKTsKKwkJfQorCX0KIH0KIAog
dm9pZAotU2V0VGltZW91dChldiwgdGltbykKLXN0cnVjdCBldmVudCAqZXY7Ci1pbnQgdGltbzsK
LXsKLSAgQVNTRVJUKGV2LT50eXBlID09IEVWX1RJTUVPVVQpOwotICBkZWJ1ZzIoImV2ZW50ICVw
IG5ldyB0aW1lb3V0ICVkIG1zXG4iLCBldiwgdGltbyk7Ci0gIGdldHRpbWVvZmRheSgmZXYtPnRp
bWVvdXQsIE5VTEwpOwotICBldi0+dGltZW91dC50dl9zZWMgICs9IHRpbW8gLyAxMDAwOwotICBl
di0+dGltZW91dC50dl91c2VjICs9ICh0aW1vICUgMTAwMCkgKiAxMDAwOwotICBpZiAoZXYtPnRp
bWVvdXQudHZfdXNlYyA+IDEwMDAwMDApCi0gICAgewotICAgICAgZXYtPnRpbWVvdXQudHZfdXNl
YyAtPSAxMDAwMDAwOwotICAgICAgZXYtPnRpbWVvdXQudHZfc2VjKys7Ci0gICAgfQotICBpZiAo
ZXYtPnF1ZXVlZCkKLSAgICBjYWxjdGltZW91dCA9IDE7CitTZXRUaW1lb3V0KHN0cnVjdCBldmVu
dCAqZXYsIGludCB0aW1vKQoreworCUFTU0VSVChldi0+dHlwZSA9PSBFVl9USU1FT1VUKTsKKwlk
ZWJ1ZzIoImV2ZW50ICV4IG5ldyB0aW1lb3V0ICVkIG1zXG4iLCBldiwgdGltbyk7CisJZ2V0dGlt
ZW9mZGF5KCZldi0+dGltZW91dCwgTlVMTCk7CisJZXYtPnRpbWVvdXQudHZfc2VjICs9IHRpbW8g
LyAxMDAwOworCWV2LT50aW1lb3V0LnR2X3VzZWMgKz0gKHRpbW8gJSAxMDAwKSAqIDEwMDA7CisK
KwlpZiAoZXYtPnRpbWVvdXQudHZfdXNlYyA+IDEwMDAwMDApIHsKKwkJZXYtPnRpbWVvdXQudHZf
dXNlYyAtPSAxMDAwMDAwOworCQlldi0+dGltZW91dC50dl9zZWMrKzsKKwl9CisJaWYgKGV2LT5x
dWV1ZWQpCisJCWNhbGN0aW1lb3V0ID0gMTsKIH0KIAotCiAjaWYgKGRlZmluZWQoc2dpKSAmJiBk
ZWZpbmVkKFNWUjQpKSB8fCBkZWZpbmVkKF9fb3NmX18pIHx8IGRlZmluZWQoTV9VTklYKQotCisv
KiBkbyB3ZSBzdGlsbCBuZWVkIGl0PworICAgICAgICAgICAgICAgICAgICBAYW5hdW1vdiAqLwog
ZXh0ZXJuIHN0cnVjdCBkaXNwbGF5ICpkaXNwbGF5LCAqZGlzcGxheXM7Ci1zdGF0aWMgaW50IHNn
aWhhY2soKQorc3RhdGljIGludAorc2dpaGFjaygpCiB7Ci0gIGZkX3NldCByLCB3OwotICBzdHJ1
Y3QgdGltZXZhbCB0djsKKwlmZF9zZXQgciwgdzsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKIAotICBk
ZWJ1ZygiSVJJWDUuMiB3b3JrYXJvdW5kOiBzZWFyY2hpbmcgZm9yIGJhZCBkaXNwbGF5XG4iKTsK
LSAgZm9yIChkaXNwbGF5ID0gZGlzcGxheXM7IGRpc3BsYXk7ICkKLSAgICB7Ci0gICAgICBGRF9a
RVJPKCZyKTsKLSAgICAgIEZEX1pFUk8oJncpOwotICAgICAgRkRfU0VUKERfdXNlcmZkLCAmcik7
Ci0gICAgICBGRF9TRVQoRF91c2VyZmQsICZ3KTsKLSAgICAgIHR2LnR2X3NlYyA9IHR2LnR2X3Vz
ZWMgPSAwOwotICAgICAgaWYgKHNlbGVjdChGRF9TRVRTSVpFLCAmciwgJncsIChmZF9zZXQgKikw
LCAmdHYpID09IC0xKQotCXsKLQkgIGlmIChlcnJubyA9PSBFSU5UUikKLQkgICAgY29udGludWU7
Ci0JICBIYW5ndXAoKTsJLyogZ29vZGJ5ZSBkaXNwbGF5ICovCi0JICByZXR1cm4gMTsKLQl9Ci0g
ICAgICBkaXNwbGF5ID0gZGlzcGxheS0+ZF9uZXh0OwotICAgIH0KLSAgcmV0dXJuIDA7CisJZGVi
dWcoIklSSVg1LjIgd29ya2Fyb3VuZDogc2VhcmNoaW5nIGZvciBiYWQgZGlzcGxheVxuIik7CisJ
Zm9yIChkaXNwbGF5ID0gZGlzcGxheXM7IGRpc3BsYXk7KSB7CisJCUZEX1pFUk8oJnIpOworCQlG
RF9aRVJPKCZ3KTsKKwkJRkRfU0VUKERfdXNlcmZkLCAmcik7CisJCUZEX1NFVChEX3VzZXJmZCwg
JncpOworCQl0di50dl9zZWMgPSB0di50dl91c2VjID0gMDsKKwkJaWYgKHNlbGVjdChGRF9TRVRT
SVpFLCAmciwgJncsIChmZF9zZXQgKikwLCAmdHYpID09IC0xKSB7CisJCQlpZiAoZXJybm8gPT0g
RUlOVFIpCisJCQkJY29udGludWU7CisJCQlIYW5ndXAoKTsJLyogZ29vZGJ5ZSBkaXNwbGF5ICov
CisJCQlyZXR1cm4gMTsKKwkJfQorCQlkaXNwbGF5ID0gZGlzcGxheS0+ZF9uZXh0OworCX0KKwly
ZXR1cm4gMDsKIH0KIAogI2VuZGlmCmRpZmYgLXVyIHNjcmVlbi5vcmlnL3NjcmVlbi5jIHNjcmVl
bi9zY3JlZW4uYwotLS0gc2NyZWVuLm9yaWcvc2NyZWVuLmMJMjAyMy0wNi0wMSAxNDo1ODoxNy4y
NDY2NjUwNDMgKzAzMDAKKysrIHNjcmVlbi9zY3JlZW4uYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY5
NDYxMjE5NiArMDMwMApAQCAtMTIyLDcgKzEyMiw2IEBACiBGSUxFICpkZnA7CiAjZW5kaWYKIAot
Y2hhciBidWZmZXJmaWxlW01BWFBBVEhMRU5dOwogCiBleHRlcm4gY2hhciBUZXJtW10sIHNjcmVl
bnRlcm1bXSwgKiplbnZpcm9uLCBUZXJtY2FwW107CiBpbnQgZm9yY2VfdnQgPSAxOwpAQCAtMTU0
LDkgKzE1Myw3IEBACiBzdGF0aWMgdm9pZCAgU2lnQ2hsZEhhbmRsZXIgX19QKCh2b2lkKSk7CiBz
dGF0aWMgc2lncmV0X3QgU2lnQ2hsZCBfX1AoU0lHUFJPVE9BUkcpOwogc3RhdGljIHNpZ3JldF90
IFNpZ0ludCBfX1AoU0lHUFJPVE9BUkcpOwotI2lmIDAKIHN0YXRpYyBzaWdyZXRfdCBDb3JlRHVt
cCBfX1AoU0lHUFJPVE9BUkcpOwotI2VuZGlmCiBzdGF0aWMgc2lncmV0X3QgRmluaXRIYW5kbGVy
IF9fUChTSUdQUk9UT0FSRyk7CiBzdGF0aWMgdm9pZCAgRG9XYWl0IF9fUCgodm9pZCkpOwogc3Rh
dGljIHZvaWQgIHNlcnZfcmVhZF9mbiBfX1AoKHN0cnVjdCBldmVudCAqLCBjaGFyICopKTsKQEAg
LTIzOSw3ICsyMzYsNyBAQAogCiBjaGFyIEhvc3ROYW1lW01BWFNUUl07CiBpbnQgTWFzdGVyUGlk
LCBQYW5pY1BpZDsKLWludCByZWFsX3VpZCwgcmVhbF9naWQsIGVmZl91aWQsIGVmZl9naWQsIGlu
aXRfZWZmX2dpZDsKK2ludCByZWFsX3VpZCwgcmVhbF9naWQsIGVmZl91aWQsIGVmZl9naWQ7CiBp
bnQgZGVmYXVsdF9zdGFydHVwOwogaW50IFpvbWJpZUtleV9kZXN0cm95LCBab21iaWVLZXlfcmVz
dXJyZWN0LCBab21iaWVLZXlfb25lcnJvcjsKIGNoYXIgKnByZXNlbGVjdCA9IE5VTEw7CQkvKiBv
bmx5IHVzZWQgaW4gQXR0YWNoKCkgKi8KQEAgLTI3MSw3ICsyNjgsNyBAQAogICovCiAjaW5jbHVk
ZSAiZXh0ZXJuLmgiCiAKLWNvbnN0IGNoYXIgc3Rybm9tZW1bXSA9ICJPdXQgb2YgbWVtb3J5LiI7
CitjaGFyIHN0cm5vbWVtW10gPSAiT3V0IG9mIG1lbW9yeS4iOwogCiBzdGF0aWMgaW50IEludGVy
cnVwdFBsZWFzZTsKIHN0YXRpYyBpbnQgR290U2lnQ2hsZDsKQEAgLTQ3MCw2ICs0NjcsOSBAQAog
ICB0aW1lc3RyaW5nID0gU2F2ZVN0cigiJWM6JXMgJU0gJWQgJUglPyAlbCU/Iik7CiAgIHdsaXN0
dGl0ID0gU2F2ZVN0cigiIE51bSBOYW1lJT1GbGFncyIpOwogICB3bGlzdHN0ciA9IFNhdmVTdHIo
IiU0biAldCU9JWYiKTsKKyNpZmRlZiBDT1BZX1BBU1RFCisgIEJ1ZmZlckZpbGUgPSBTYXZlU3Ry
KERFRkFVTFRfQlVGRkVSRklMRSk7CisjZW5kaWYKICAgU2hlbGxQcm9nID0gTlVMTDsKICNpZmRl
ZiBQT1dfREVUQUNICiAgIFBvd0RldGFjaFN0cmluZyA9IDA7CkBAIC01MDksNyArNTA5LDcgQEAK
ICAgcmVhbF91aWQgPSBnZXR1aWQoKTsKICAgcmVhbF9naWQgPSBnZXRnaWQoKTsKICAgZWZmX3Vp
ZCA9IGdldGV1aWQoKTsKLSAgaW5pdF9lZmZfZ2lkID0gZWZmX2dpZCA9IGdldGVnaWQoKTsKKyAg
ZWZmX2dpZCA9IGdldGVnaWQoKTsKIAogICBsb2dyZW9wZW5fcmVnaXN0ZXIobGZfc2VjcmVvcGVu
KTsKIApAQCAtNzc4LDYgKzc3OCwxMCBAQAogICAgICAgICAgICAgICBpZiAoLS1hYyA9PSAwKQog
ICAgICAgICAgICAgICAgIGV4aXRfd2l0aF91c2FnZShteW5hbWUsICJTcGVjaWZ5IHNlc3Npb24t
bmFtZSB3aXRoIC1TIiwgTlVMTCk7CiAgICAgICAgICAgICAgIFNvY2tNYXRjaCA9ICorK2F2Owor
ICAgICAgICAgICAgICBkZWJ1ZzEoIlNvY2tNYXRjaDogJyVzJ1xuIiwgU29ja01hdGNoKTsKKyAg
ICAgICAgICAgICAgZGVidWcxKCJTb2NrTWF0Y2ggbGVuOiAnJWQnXG4iLCAoaW50KXN0cmxlbihT
b2NrTWF0Y2gpKTsKKyAgICAgICAgICAgICAgaWYgKHN0cmxlbihTb2NrTWF0Y2gpID4gODApCisg
ICAgICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlKG15bmFtZSwgIlNlc3Npb24tbmFtZSBpcyB0
b28gbG9uZyAobWF4IGxlbmd0aCBpcyA4MCBzeW1ib2xzKSIsIE5VTEwpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKCEqU29ja01hdGNoKQogICAgICAgICAgICAgICBleGl0X3dpdGhf
dXNhZ2UobXluYW1lLCAiRW1wdHkgc2Vzc2lvbi1uYW1lPyIsIE5VTEwpOwpAQCAtODA2LDE5ICs4
MTAsMTEgQEAKICAgICAgIGJyZWFrOwogICB9CiAKLSNpZiAwCi0gIGlmIChlZmZfdWlkICE9IHJl
YWxfdWlkKQotICAgIHsKLSAgICAgIC8qIGlmIHJ1bm5pbmcgd2l0aCBzLWJpdCwgd2UgbXVzdCBp
bnN0YWxsIGEgc3BlY2lhbCBzaWduYWwKLSAgICAgICAqIGhhbmRsZXIgcm91dGluZSB0aGF0IHJl
c2V0cyB0aGUgcy1iaXQsIHNvIHRoYXQgd2UgZ2V0IGEKLSAgICAgICAqIGNvcmUgZmlsZSBhbnl3
YXkuCi0gICAgICAgKi8KICNpZmRlZiBTSUdCVVMgLyogT09QUywgbGludXggaGFzIG5vIGJ1cyBl
cnJvcnMhICovCiAgIHNpZ25hbChTSUdCVVMsIENvcmVEdW1wKTsKICNlbmRpZiAvKiBTSUdCVVMg
Ki8KICAgc2lnbmFsKFNJR1NFR1YsIENvcmVEdW1wKTsKIAotI2VuZGlmCiAKICNpZmRlZiBVU0Vf
TE9DQUxFCiAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKQEAgLTEwNDIsMTEgKzEwMzgsNiBAQAog
I2VuZGlmIC8qIERFQlVHICovCiAgICAgfQogCi0jaWZkZWYgQ09QWV9QQVNURQotICAgIHNucHJp
bnRmKGJ1ZmZlcmZpbGUsIHNpemVvZihidWZmZXJmaWxlKSwgIiVzLy5zY3JlZW4tZXhjaGFuZ2Ui
LCBob21lKTsKLSAgICBCdWZmZXJGaWxlID0gU2F2ZVN0cihidWZmZXJmaWxlKTsKLSNlbmRpZgot
CiAjaWZkZWYgX01PREVfVAogICAgIG91bWFzayA9IHVtYXNrKDApOwkJLyogd2VsbCwgdW5zaWdu
ZWQgbmV2ZXIgZmFpbHM/IGp3LiAqLwogI2Vsc2UKQEAgLTExMzAsNiArMTEyMSw3IEBACiAgICAg
ICBpZiAoYWNjZXNzKFNvY2tQYXRoLCBGX09LKSkgewogICAgICAgICBpZiAobWtkaXIoU29ja1Bh
dGgsIDA3MDApID09IC0xICYmIGVycm5vICE9IEVFWElTVCkKICAgICAgICAgICBQYW5pYyhlcnJu
bywgIkNhbm5vdCBtYWtlIGRpcmVjdG9yeSAnJXMnIiwgU29ja1BhdGgpOworICAgICAgICAodm9p
ZCkgY2hvd24oU29ja1BhdGgsIHJlYWxfdWlkLCByZWFsX2dpZCk7CiAgICAgICB9CiAgICAgfQog
I2VuZGlmCkBAIC0xMjAzLDExICsxMTk1LDI1IEBACiAgICAgZWV4aXQoMCk7CiAgIH0KICAgc2ln
bmFsKFNJR19CWUUsIEF0dGFjaGVyRmluaXQpOwkvKiBwcmV2ZW50IHJhY2VzICovCisKICAgaWYg
KGNtZGZsYWcpIHsKKworI2lmZGVmIE1VTFRJVVNFUgorICAgIGlmIChtdWx0aSkKKyAgICAgIHJl
YWxfdWlkID0gbXVsdGlfdWlkOworI2VuZGlmCisKICAgICAvKiBhdHRhY2hfdHR5IGlzIG5vdCBt
YW5kYXRvcnkgKi8KICAgICBTZXRUdHluYW1lKGZhbHNlLCAmc3QpOwogICAgIGlmICghKmF2KQog
ICAgICAgUGFuaWMoMCwgIlBsZWFzZSBzcGVjaWZ5IGEgY29tbWFuZC4iKTsKKyAgICBpZiAoIXN0
cm5jbXAoInNlc3Npb25uYW1lIiwgKmF2LCAxMSkpIHsKKyAgICAgIGlmICghKisrYXYpCisgICAg
ICAgIFBhbmljKDAsICJQbGVhc2Ugc3BlY2lmeSBhIHBhcmFtZXRlci4iKTsKKyAgICAgIGlmIChz
dHJsZW4oKmF2KSA+IDgwKQorICAgICAgICBQYW5pYygwLCAiUGFyYW1ldGVyIG9mIGNvbW1hbmQg
J3Nlc3Npb25uYW1lJyBpcyB0b28gbG9uZy4iKTsKKyAgICAqLS1hdjsKKyAgICB9CiAgICAgU0VU
X0dVSUQoKTsKICAgICBTZW5kQ21kTWVzc2FnZShzdHksIFNvY2tNYXRjaCwgYXYsIHF1ZXJ5Zmxh
ZyA+PSAwKTsKICAgICBleGl0KDApOwpAQCAtMTI0NCwxMCArMTI1MCw3IEBACiAgIG53aW5fY29t
cG9zZSgmbndpbl9kZWZhdWx0LCAmbndpbl9vcHRpb25zLCAmbndpbl9kZWZhdWx0KTsKIAogICBp
ZiAoIWRldGFjaGVkIHx8IGRmbGFnICE9IDIpCi0gICAgewotICAgICAgZmZsdXNoKE5VTEwpOwot
ICAgICAgTWFzdGVyUGlkID0gZm9yaygpOwotICAgIH0KKyAgICBNYXN0ZXJQaWQgPSBmb3JrKCk7
CiAgIGVsc2UKICAgICBNYXN0ZXJQaWQgPSAwOwogCkBAIC0xMzIwLDQwICsxMzIzLDE0IEBACiAg
IH0KICAgZWxzZQogICAgIG4gPSAtMTsKLQotICB7Ci0gICAgY29uc3QgY2hhciBkZXZudWxsW10g
PSAiL2Rldi9udWxsIjsKLSAgICBpbnQgbnVsbGZkciwgbnVsbGZkdzsKLQotICAgIGlmIChmZmx1
c2goTlVMTCkpCi0gICAgICBQYW5pYyhlcnJubywgIkNhbm5vdCBmbHVzaCBzdGRpbyBzdHJlYW1z
Iik7Ci0KLSAgICBudWxsZmRyID0gb3BlbihkZXZudWxsLCBPX1JET05MWXxPX05PQ1RUWXxPX05P
Rk9MTE9XfE9fTk9OQkxPQ0spOwotICAgIGlmIChudWxsZmRyIDwgMCkKLSAgICAgIFBhbmljKGVy
cm5vLCAiQ2Fubm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIsIGRldm51bGwpOwotCi0gICAgbnVs
bGZkdyA9IG9wZW4oZGV2bnVsbCwgT19XUk9OTFl8T19OT0NUVFl8T19OT0ZPTExPV3xPX05PTkJM
T0NLKTsKLSAgICBpZiAobnVsbGZkdyA8IDApCi0gICAgICBQYW5pYyhlcnJubywgIkNhbm5vdCBv
cGVuICclcycgZm9yIHdyaXRpbmciLCBkZXZudWxsKTsKLQotICAgIGlmIChkdXAyKG51bGxmZHIs
IGZpbGVubyhzdGRpbikpIDwgMCkKLSAgICAgIFBhbmljKGVycm5vLCAiQ2Fubm90IHJlZGl0ZWN0
ICclcycgdG8gJyVzJyIsICJzdGRpbiIsIGRldm51bGwpOwotCi0gICAgY2xvc2UobnVsbGZkcik7
Ci0KLSAgICBpZiAoZHVwMihudWxsZmR3LCBmaWxlbm8oc3Rkb3V0KSkgPCAwKQotICAgICAgUGFu
aWMoZXJybm8sICJDYW5ub3QgcmVkaXRlY3QgJyVzJyB0byAnJXMnIiwgInN0ZG91dCIsIGRldm51
bGwpOworICBmcmVvcGVuKCIvZGV2L251bGwiLCAiciIsIHN0ZGluKTsKKyAgZnJlb3BlbigiL2Rl
di9udWxsIiwgInciLCBzdGRvdXQpOwogCiAjaWZkZWYgREVCVUcKICAgaWYgKGRmcCAhPSBzdGRl
cnIpCiAjZW5kaWYKLSAgICBpZiAoZHVwMihudWxsZmR3LCBmaWxlbm8oc3RkZXJyKSkgPCAwKQot
ICAgICAgUGFuaWMoZXJybm8sICJDYW5ub3QgcmVkaXRlY3QgJyVzJyB0byAnJXMnIiwgInN0ZGVy
ciIsIGRldm51bGwpOwotCi0gICAgY2xvc2UobnVsbGZkdyk7Ci0KLSAgICBkZWJ1ZygiLS0gc2Ny
ZWVuLmJhY2sgZGVidWcgc3RhcnRlZFxuIik7Ci0gIH0KKyAgZnJlb3BlbigiL2Rldi9udWxsIiwg
InciLCBzdGRlcnIpOworICBkZWJ1ZygiLS0gc2NyZWVuLmJhY2sgZGVidWcgc3RhcnRlZFxuIik7
CiAKICAgLyogIFRoaXMgZ3VhcmFudGVlcyB0aGF0IHRoZSBzZXNzaW9uIG93bmVyIGlzIGxpc3Rl
ZCwgZXZlbiB3aGVuIHdlCiAgICAqICBzdGFydCBkZXRhY2hlZC4gRnJvbSBub3cgb24gd2Ugc2hv
dWxkIG5vdCByZWZlciB0byAnTG9naW5OYW1lJwpAQCAtMTY3Miw3ICsxNjQ5LDYgQEAKICAgU0lH
UkVUVVJOOwogfQogCi0jaWYgMAogc3RhdGljIHNpZ3JldF90IENvcmVEdW1wIFNJR0RFRkFSRwog
ewogICAvKiBpZiBydW5uaW5nIHdpdGggcy1iaXQsIHdlIG11c3QgcmVzZXQgdGhlIHMtYml0LCBz
byB0aGF0IHdlIGdldCBhCkBAIC0xNzIzLDcgKzE2OTksNiBAQAogCiAgIFNJR1JFVFVSTjsKIH0K
LSNlbmRpZgogCiBzdGF0aWMgdm9pZCBEb1dhaXQoKQogewpAQCAtMTg5Niw3ICsxODcxLDcgQEAK
IHsKICAgaWYgKGRpc3BsYXkgPT0gMCkKICAgICByZXR1cm47Ci0gIGRlYnVnMSgiSGFuZ3VwICVw
XG4iLCBkaXNwbGF5KTsKKyAgZGVidWcxKCJIYW5ndXAgJXhcbiIsIGRpc3BsYXkpOwogICBpZiAo
RF91c2VyZmQgPj0gMCkgewogICAgIGNsb3NlKERfdXNlcmZkKTsKICAgICBEX3VzZXJmZCA9IC0x
OwpAQCAtMjEwOCwyOSArMjA4MywyMCBAQAogI2VuZGlmCiAKICNkZWZpbmUJUFJPQ0VTU19NRVNT
QUdFKEIpIGRvIHsgXAorICAgIGNoYXIgKnAgPSBCOwlcCiAgICAgVkFfTElTVChhcCkJXAotICAg
IHNzaXplX3QgbGVuOyBcCi0gICAgY29uc3QgaW50IGVycmxlbiA9IGVyciA/IDEwMCA6IDA7IFwK
ICAgICBWQV9TVEFSVChhcCwgZm10KTsJXAogICAgIGZtdCA9IERvTkxTKGZtdCk7CVwKLSAgICBs
ZW4gPSB2c25wcmludGYoQiwgc2l6ZW9mKEIpIC0gZXJybGVuLCBmbXQsIFZBX0FSR1MoYXApKTsJ
XAorICAgICh2b2lkKXZzbnByaW50ZihwLCBzaXplb2YoQikgLSAxMDAsIGZtdCwgVkFfQVJHUyhh
cCkpOwlcCiAgICAgVkFfRU5EKGFwKTsJXAotICAgIGlmIChsZW4gPCAwKSBcCi0gICAgeyBcCi0g
ICAgICBzdHJuY3B5KEIsIGZtdCwgc2l6ZW9mKEIpIC0gZXJybGVuKTsJXAotICAgICAgQltzaXpl
b2YoQikgLSBlcnJsZW4gLSAxXSA9IDA7CVwKLSAgICAgIGxlbiA9IHN0cmxlbihCKTsJXAotICAg
IH0gXAogICAgIGlmIChlcnIpCVwKLSAgICB7IFwKLQljb25zdCBjaGFyICpzdHJlcnIgPSBzdHJl
cnJvcihlcnIpOyBcCi0JaWYgKHN0cmVycikgXAotCXsgXAotCSAgc3RybmNhdChCLCAiOiAiLCAy
KTsgXAotCSAgc3RybmNhdChCLCBzdHJlcnIsIGVycmxlbiAtIDMpOyBcCi0JICBsZW4gPSBzdHJs
ZW4oQik7IFwKLQl9IFwKLSAgICB9IFwKKyAgICAgIHsJXAorCXAgKz0gc3RybGVuKHApOwlcCisJ
KnArKyA9ICc6JzsJXAorCSpwKysgPSAnICc7CVwKKwlzdHJuY3B5KHAsIHN0cmVycm9yKGVyciks
IEIgKyBzaXplb2YoQikgLSBwIC0gMSk7CVwKKwlCW3NpemVvZihCKSAtIDFdID0gMDsJXAorICAg
ICAgfQlcCiAgIH0gd2hpbGUgKDApCiAKIERFRklORV9WQVJBUkdTX0ZOKE1zZykKQEAgLTIxNTcs
MTIgKzIxMjMsNyBAQAogICAgIGRpc3BsYXkgPSBvbGRkaXNwbGF5OwogICB9CiAgIGVsc2UKLSAg
ICB7Ci0gICAgICBzc2l6ZV90IGxlbiA9IHN0cmxlbihidWYpOwotICAgICAgaWYgKHdyaXRlKGZp
bGVubyhzdGRlcnIpLCBidWYsIGxlbikgPiAwKQotCWlmICh3cml0ZShmaWxlbm8oc3RkZXJyKSwg
IlxyXG4iLCAyKSA+IDApCi0JICA7Ci0gICAgfQorICAgIHByaW50ZigiJXNcclxuIiwgYnVmKTsK
IAogICBpZiAocXVlcnlmbGFnID49IDApCiAgICAgd3JpdGUocXVlcnlmbGFnLCBidWYsIHN0cmxl
bihidWYpKTsKQEAgLTIxNzUsMTUgKzIxMzYsMTIgQEAKIHsKICAgY2hhciBidWZbTUFYUEFUSExF
TioyXTsKICAgUFJPQ0VTU19NRVNTQUdFKGJ1Zik7Ci0gIHNzaXplX3QgbGVuID0gc3RybGVuKGJ1
Zik7CiAKLSAgZGVidWczKCJQYW5pYygnJXMnKTsgZGlzcGxheT0lcCBkaXNwbGF5cz0lcFxuIiwg
YnVmLCBkaXNwbGF5LCBkaXNwbGF5cyk7CisgIGRlYnVnMygiUGFuaWMoJyVzJyk7IGRpc3BsYXk9
JXggZGlzcGxheXM9JXhcbiIsIGJ1ZiwgZGlzcGxheSwgZGlzcGxheXMpOwogICBpZiAoZGlzcGxh
eXMgPT0gMCAmJiBkaXNwbGF5ID09IDApIHsKLSAgICBpZiAod3JpdGUoZmlsZW5vKHN0ZGVyciks
IGJ1ZiwgbGVuKSA+IDApCi0gICAgICBpZiAod3JpdGUoZmlsZW5vKHN0ZGVyciksICJcclxuIiwg
MikgPiAwKQotCTsKLSAgICAgIGlmIChQYW5pY1BpZCkKLQlLaWxsKFBhbmljUGlkLCBTSUdfQllF
KTsKKyAgICBwcmludGYoIiVzXHJcbiIsIGJ1Zik7CisgICAgaWYgKFBhbmljUGlkKQorICAgICAg
S2lsbChQYW5pY1BpZCwgU0lHX0JZRSk7CiAgIH0KICAgZWxzZSBpZiAoZGlzcGxheXMgPT0gMCkg
ewogICAgICAgLyogbm8gZGlzcGxheXMgYnV0IGEgZGlzcGxheSAtIG11c3QgaGF2ZSBmb3JrZWQu
CkBAIC0yMjA2LDkgKzIxNjQsOCBAQAogI2VuZGlmCiAgICAgICBTZXRUVFkoRF91c2VyZmQsICZE
X09sZE1vZGUpOwogICAgICAgZmNudGwoRF91c2VyZmQsIEZfU0VURkwsIDApOwotICAgICAgaWYg
KHdyaXRlKERfdXNlcmZkLCBidWYsIGxlbikgPiAwKQotICAgICAgICBpZiAod3JpdGUoRF91c2Vy
ZmQsICJcbiIsIDEpID4gMCkKLSAgICAgICAgICA7CisgICAgICB3cml0ZShEX3VzZXJmZCwgYnVm
LCBzdHJsZW4oYnVmKSk7CisgICAgICB3cml0ZShEX3VzZXJmZCwgIlxuIiwgMSk7CiAgICAgICBm
cmVldHR5KCk7CiAgICAgICBpZiAoRF91c2VycGlkKQogICAgICAgICBLaWxsKERfdXNlcnBpZCwg
U0lHX0JZRSk7CkBAIC0yODE2LDYgKzI3NzMsMTggQEAKICAgICAgIHAgKz0gc3RybGVuKHApIC0g
MTsKICAgICAgIGJyZWFrOwogCisjaWZkZWYgRU5DT0RJTkdTCisgICAgY2FzZSAnZSc6CisgICAg
ICAqcCA9IDA7CisgICAgICBEX2VuY29kaW5nID0gbndpbl9vcHRpb25zLmVuY29kaW5nID4gMCA/
IG53aW5fb3B0aW9ucy5lbmNvZGluZyA6IDA7CisgICAgICBpZiAod2luICYmIHdpbi0+d19lbmNv
ZGluZykgeworICAgICAgICAqcCsrID0gJyAnOworICAgICAgICBzdHJjcHkocCwgRW5jb2RpbmdO
YW1lKHdpbi0+d19lbmNvZGluZykpOworICAgICAgfQorICAgICAgcCArPSBzdHJsZW4ocCkgLSAx
OworICAgICAgYnJlYWs7CisjZW5kaWYKKwogICAgIGNhc2UgJ3snOgogICAgIHsKICAgICAgIGNo
YXIgcmJ1ZlsxMjhdOwpAQCAtMzA2NSw3ICszMDM0LDcgQEAKICAgICBlbHNlCiAgICAgICBub3cu
dHZfc2VjICs9IHRpY2sgLSAobm93LnR2X3NlYyAlIHRpY2spOwogICAgIGV2LT50aW1lb3V0ID0g
bm93OwotICAgIGRlYnVnMigiTkVXIHRpbWVvdXQgJWxkICVkXG4iLCBldi0+dGltZW91dC50dl9z
ZWMsIHRpY2spOworICAgIGRlYnVnMigiTkVXIHRpbWVvdXQgJWQgJWRcbiIsIGV2LT50aW1lb3V0
LnR2X3NlYywgdGljayk7CiAgIH0KICAgcmV0dXJuIHdpbm1zZ19idWY7CiB9CkBAIC0zMTkzLDE1
ICszMTYyLDEyIEBACiAKIAogI2lmZGVmIFBTRVVET1MKLSAgICAgIGlmICh3cml0ZShXX1VXUChm
b3JlKSA/IGZvcmUtPndfcHdpbi0+cF9wdHlmZCA6IGZvcmUtPndfcHR5ZmQsICZpYnVmLCAxKSA9
PSAxKSB7Ci0gICAgICAgIGRlYnVnMSgiQmFja2VuZCB3cm90ZSBpbnRlcnJ1cHQgdG8gJWQiLCBm
b3JlLT53X251bWJlcik7Ci0gICAgICAgIGRlYnVnMSgiJXNcbiIsIFdfVVdQKGZvcmUpID8gIiAo
cHNldWRvd2luKSIgOiAiIik7Ci0gICAgICB9CisgICAgICB3cml0ZShXX1VXUChmb3JlKSA/IGZv
cmUtPndfcHdpbi0+cF9wdHlmZCA6IGZvcmUtPndfcHR5ZmQsICZpYnVmLCAxKTsKKyAgICAgIGRl
YnVnMSgiQmFja2VuZCB3cm90ZSBpbnRlcnJ1cHQgdG8gJWQiLCBmb3JlLT53X251bWJlcik7Cisg
ICAgICBkZWJ1ZzEoIiVzXG4iLCBXX1VXUChmb3JlKSA/ICIgKHBzZXVkb3dpbikiIDogIiIpOwog
I2Vsc2UKLSAgICAgIGlmICh3cml0ZShmb3JlLT53X3B0eWZkLCAmaWJ1ZiwgMSkgPT0gMSkKLSAg
ICAgICAgZGVidWcxKCJCYWNrZW5kIHdyb3RlIGludGVycnVwdCB0byAlZFxuIiwgZm9yZS0+d19u
dW1iZXIpOwotICAgICAgZWxzZQotICAgICAgICBkZWJ1ZzEoIkJhY2tlbmQgRkFJTEVEIHRvIHdy
aXRlIGludGVycnVwdCB0byAlZFxuIiwgZm9yZS0+d19udW1iZXIpOworICAgICAgd3JpdGUoZm9y
ZS0+d19wdHlmZCwgJmlidWYsIDEpOworICAgICAgZGVidWcxKCJCYWNrZW5kIHdyb3RlIGludGVy
cnVwdCB0byAlZFxuIiwgZm9yZS0+d19udW1iZXIpOwogI2VuZGlmCiAgICAgfQogICAgIEludGVy
cnVwdFBsZWFzZSA9IDA7CmRpZmYgLXVyIHNjcmVlbi5vcmlnL3NjcmVlbi5oIHNjcmVlbi9zY3Jl
ZW4uaAotLS0gc2NyZWVuLm9yaWcvc2NyZWVuLmgJMjAyMy0wNi0wMSAxNDo1ODoxNy4yNDY2NjUw
NDMgKzAzMDAKKysrIHNjcmVlbi9zY3JlZW4uaAkyMDIyLTAxLTI4IDE3OjA2OjAyLjY5NDYxMjE5
NiArMDMwMApAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgImxheWVyLmgiCiAjaW5jbHVkZSAi
dGVybS5oIgogCi1leHRlcm4gY2hhciBidWZmZXJmaWxlW01BWFBBVEhMRU5dOwogCiAjaWZkZWYg
REVCVUcKICMgZGVmaW5lIFNUQVRJQwkJLyogYSBmdW5jdGlvbiB0aGF0IHRoZSBkZWJ1Z2dlciBz
aG91bGQgc2VlICovCkBAIC0xMDQsNiArMTAzLDExIEBACiAgKi8KICNkZWZpbmUgTUFYSElTVEhF
SUdIVAkJMzAwMAogI2RlZmluZSBERUZBVUxUSElTVEhFSUdIVAkxMDAKKyNpZiBkZWZpbmVkKE5B
TUVfTUFYKSAmJiBOQU1FX01BWCA8IDE2CisjIGRlZmluZSBERUZBVUxUX0JVRkZFUkZJTEUgICAg
ICIvdG1wL3NjcmVlbi14Y2hnIgorI2Vsc2UKKyMgZGVmaW5lIERFRkFVTFRfQlVGRkVSRklMRQki
L3RtcC9zY3JlZW4tZXhjaGFuZ2UiCisjZW5kaWYKIAogCiAjaWYgZGVmaW5lZChocHV4KSAmJiAh
KGRlZmluZWQoVlNVU1ApICYmIGRlZmluZWQoVkRTVVNQKSAmJiBkZWZpbmVkKFZXRVJBU0UpICYm
IGRlZmluZWQoVkxORVhUKSkKQEAgLTI3NSw3ICsyNzksNyBAQAogI2RlZmluZSBTSUxFTkNFX0ZP
VU5EICAgMiAvKiBXaW5kb3cgaXMgc2lsZW50ICovCiAjZGVmaW5lIFNJTEVOQ0VfRE9ORSAgICAz
IC8qIFdpbmRvdyBpcyBzaWxlbnQgYW5kIHVzZXIgaXMgbm90aWZpZWQgKi8KIAotZXh0ZXJuIGNv
bnN0IGNoYXIgc3Rybm9tZW1bXTsKK2V4dGVybiBjaGFyIHN0cm5vbWVtW107CiAKIC8qCiAgKiBs
aW5lIG1vZGVzIHVzZWQgYnkgSW5wdXQoKQpkaWZmIC11ciBzY3JlZW4ub3JpZy9zZWFyY2guYyBz
Y3JlZW4vc2VhcmNoLmMKLS0tIHNjcmVlbi5vcmlnL3NlYXJjaC5jCTIwMjMtMDYtMDEgMTQ6NTg6
MTcuMjQ2NjY1MDQzICswMzAwCisrKyBzY3JlZW4vc2VhcmNoLmMJMjAyMi0wMS0yOCAxNzowNjow
Mi42OTQ2MTIxOTYgKzAzMDAKQEAgLTQ2LDkyICs0Niw4MCBAQAogICogIFZJIHN0eWxlIFNlYXJj
aAogICovCiAKLXN0YXRpYyBpbnQgIG1hdGNod29yZCBfX1AoKGNoYXIgKiwgaW50LCBpbnQsIGlu
dCkpOwotc3RhdGljIHZvaWQgc2VhcmNoZW5kIF9fUCgoY2hhciAqLCBpbnQsIGNoYXIgKikpOwot
c3RhdGljIHZvaWQgYmFja3NlYXJjaGVuZCBfX1AoKGNoYXIgKiwgaW50LCBjaGFyICopKTsKK3N0
YXRpYyBpbnQgIG1hdGNod29yZCBfX1AoKGNoYXIqLCBpbnQsIGludCwgaW50KSk7CitzdGF0aWMg
dm9pZCBzZWFyY2hlbmQgX19QKChjaGFyKiwgaW50LCBjaGFyICopKTsKK3N0YXRpYyB2b2lkIGJh
Y2tzZWFyY2hlbmQgX19QKChjaGFyKiwgaW50LCBjaGFyICopKTsKIAogdm9pZAotU2VhcmNoKGRp
cikKLWludCBkaXI7CitTZWFyY2goaW50IGRpcikKIHsKLSAgc3RydWN0IG1hcmtkYXRhICptYXJr
ZGF0YTsKLSAgaWYgKGRpciA9PSAwKQotICAgIHsKLSAgICAgIG1hcmtkYXRhID0gKHN0cnVjdCBt
YXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOwotICAgICAgaWYgKG1hcmtkYXRhLT5pc2RpciA+IDAp
Ci0Jc2VhcmNoZW5kKDAsIDAsIE5VTEwpOwotICAgICAgZWxzZSBpZiAobWFya2RhdGEtPmlzZGly
IDwgMCkKLQliYWNrc2VhcmNoZW5kKDAsIDAsIE5VTEwpOwotICAgICAgZWxzZQotCUxNc2coMCwg
Ik5vIHByZXZpb3VzIHBhdHRlcm4iKTsKLSAgICB9Ci0gIGVsc2UKLSAgICBJbnB1dCgoZGlyID4g
MCA/ICIvIiA6ICI/IiksIHNpemVvZihtYXJrZGF0YS0+aXNzdHIpLTEsIElOUF9DT09LRUQsCi0g
ICAgICAgICAgKGRpciA+IDAgPyBzZWFyY2hlbmQgOiBiYWNrc2VhcmNoZW5kKSwgTlVMTCwgMCk7
CisJc3RydWN0IG1hcmtkYXRhICptYXJrZGF0YTsKKwlpZiAoZGlyID09IDApIHsKKwkJbWFya2Rh
dGEgPSAoc3RydWN0IG1hcmtkYXRhICopZmxheWVyLT5sX2RhdGE7CisJCWlmIChtYXJrZGF0YS0+
aXNkaXIgPiAwKQorCQkJc2VhcmNoZW5kKDAsIDAsIE5VTEwpOworCQllbHNlIGlmIChtYXJrZGF0
YS0+aXNkaXIgPCAwKQorCQkJYmFja3NlYXJjaGVuZCgwLCAwLCBOVUxMKTsKKwkJZWxzZQorCQkJ
TE1zZygwLCAiTm8gcHJldmlvdXMgcGF0dGVybiIpOworCX0gZWxzZQorCQlJbnB1dCgoZGlyID4g
MCA/ICIvIiA6ICI/IiksIHNpemVvZihtYXJrZGF0YS0+aXNzdHIpIC0gMSwKKwkJICAgIElOUF9D
T09LRUQsIChkaXIgPiAwID8gc2VhcmNoZW5kIDogYmFja3NlYXJjaGVuZCksIE5VTEwsIDApOwog
fQogCiBzdGF0aWMgdm9pZAotc2VhcmNoZW5kKGJ1ZiwgbGVuLCBkYXRhKQotY2hhciAqYnVmOwot
aW50IGxlbjsKLWNoYXIgKmRhdGE7CS8qIGR1bW15ICovCitzZWFyY2hlbmQoY2hhciAqYnVmLCBp
bnQgbGVuLCBjaGFyICpkYXRhKQogewotICBpbnQgeCA9IDAsIHN4LCBleCwgeTsKLSAgc3RydWN0
IG1hcmtkYXRhICptYXJrZGF0YTsKLSAgc3RydWN0IHdpbiAqcDsKLQotICBtYXJrZGF0YSA9IChz
dHJ1Y3QgbWFya2RhdGEgKilmbGF5ZXItPmxfZGF0YTsKLSAgcCA9IG1hcmtkYXRhLT5tZF93aW5k
b3c7Ci0gIG1hcmtkYXRhLT5pc2RpciA9IDE7Ci0gIGlmIChsZW4pCi0gICAgc3RyY3B5KG1hcmtk
YXRhLT5pc3N0ciwgYnVmKTsKLSAgc3ggPSBtYXJrZGF0YS0+Y3ggKyAxOwotICBleCA9IGZsYXll
ci0+bF93aWR0aCAtIDE7Ci0gIGZvciAoeSA9IG1hcmtkYXRhLT5jeTsgeSA8IHAtPndfaGlzdGhl
aWdodCArIGZsYXllci0+bF9oZWlnaHQ7IHkrKywgc3ggPSAwKQotICAgIHsKLSAgICAgIGlmICgo
eCA9IG1hdGNod29yZChtYXJrZGF0YS0+aXNzdHIsIHksIHN4LCBleCkpID49IDApCi0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgaWYgKHkgPj0gcC0+d19oaXN0aGVpZ2h0ICsgZmxheWVyLT5sX2hl
aWdodCkKLSAgICB7Ci0gICAgICBMR290b1BvcyhmbGF5ZXIsIG1hcmtkYXRhLT5jeCwgVzJEKG1h
cmtkYXRhLT5jeSkpOwotICAgICAgTE1zZygwLCAiUGF0dGVybiBub3QgZm91bmQiKTsKLSAgICB9
Ci0gIGVsc2UKLSAgICByZXZ0byh4LCB5KTsKKwlpbnQgeCA9IDAsIHN4LCBleCwgeTsKKwlzdHJ1
Y3QgbWFya2RhdGEgKm1hcmtkYXRhOworCXN0cnVjdCB3aW4gKnA7CisKKwltYXJrZGF0YSA9IChz
dHJ1Y3QgbWFya2RhdGEgKilmbGF5ZXItPmxfZGF0YTsKKwlwID0gbWFya2RhdGEtPm1kX3dpbmRv
dzsKKwltYXJrZGF0YS0+aXNkaXIgPSAxOworCWlmIChsZW4pCisJCXN0cmNweShtYXJrZGF0YS0+
aXNzdHIsIGJ1Zik7CisJc3ggPSBtYXJrZGF0YS0+Y3ggKyAxOworCWV4ID0gZmxheWVyLT5sX3dp
ZHRoIC0gMTsKKwlmb3IgKHkgPSBtYXJrZGF0YS0+Y3k7IHkgPCBwLT53X2hpc3RoZWlnaHQgKyBm
bGF5ZXItPmxfaGVpZ2h0OworCSAgICB5KyssIHN4ID0gMCkgeworCQlpZiAoKHggPSBtYXRjaHdv
cmQobWFya2RhdGEtPmlzc3RyLCB5LCBzeCwgZXgpKSA+PSAwKQorCQkJYnJlYWs7CisJfQorCWlm
ICh5ID49IHAtPndfaGlzdGhlaWdodCArIGZsYXllci0+bF9oZWlnaHQpIHsKKwkJTEdvdG9Qb3Mo
ZmxheWVyLCBtYXJrZGF0YS0+Y3gsIFcyRChtYXJrZGF0YS0+Y3kpKTsKKwkJTE1zZygwLCAiUGF0
dGVybiBub3QgZm91bmQiKTsKKwl9IGVsc2UKKwkJcmV2dG8oeCwgeSk7CiB9CiAKIHN0YXRpYyB2
b2lkCi1iYWNrc2VhcmNoZW5kKGJ1ZiwgbGVuLCBkYXRhKQotY2hhciAqYnVmOwotaW50IGxlbjsK
LWNoYXIgKmRhdGE7CS8qIGR1bW15ICovCitiYWNrc2VhcmNoZW5kKGNoYXIgKmJ1ZiwgaW50IGxl
biwgY2hhciAqZGF0YSkKIHsKLSAgaW50IHN4LCBleCwgeCA9IC0xLCB5OwotICBzdHJ1Y3QgbWFy
a2RhdGEgKm1hcmtkYXRhOworCWludCBzeCwgZXgsIHggPSAtMSwgeTsKKwlzdHJ1Y3QgbWFya2Rh
dGEgKm1hcmtkYXRhOwogCi0gIG1hcmtkYXRhID0gKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+
bF9kYXRhOwotICBtYXJrZGF0YS0+aXNkaXIgPSAtMTsKLSAgaWYgKGxlbikKLSAgICBzdHJjcHko
bWFya2RhdGEtPmlzc3RyLCBidWYpOwotICBleCA9IG1hcmtkYXRhLT5jeCAtIDE7Ci0gIGZvciAo
eSA9IG1hcmtkYXRhLT5jeTsgeSA+PSAwOyB5LS0sIGV4ID0gZmxheWVyLT5sX3dpZHRoIC0gMSkK
LSAgICB7Ci0gICAgICBzeCA9IDA7Ci0gICAgICB3aGlsZSAoKHN4ID0gbWF0Y2h3b3JkKG1hcmtk
YXRhLT5pc3N0ciwgeSwgc3gsIGV4KSkgPj0gMCkKLQl4ID0gc3grKzsKLSAgICAgIGlmICh4ID49
IDApCi0JYnJlYWs7Ci0gICAgfQotICBpZiAoeSA8IDApCi0gICAgewotICAgICAgTEdvdG9Qb3Mo
ZmxheWVyLCBtYXJrZGF0YS0+Y3gsIFcyRChtYXJrZGF0YS0+Y3kpKTsKLSAgICAgIExNc2coMCwg
IlBhdHRlcm4gbm90IGZvdW5kIik7Ci0gICAgfQotICBlbHNlCi0gICAgcmV2dG8oeCwgeSk7Ci19
CisJbWFya2RhdGEgPSAoc3RydWN0IG1hcmtkYXRhICopZmxheWVyLT5sX2RhdGE7CisJbWFya2Rh
dGEtPmlzZGlyID0gLTE7CisKKwlpZiAobGVuKQorCQlzdHJjcHkobWFya2RhdGEtPmlzc3RyLCBi
dWYpOworCWV4ID0gbWFya2RhdGEtPmN4IC0gMTsKKworCWZvciAoeSA9IG1hcmtkYXRhLT5jeTsg
eSA+PSAwOyB5LS0sIGV4ID0gZmxheWVyLT5sX3dpZHRoIC0gMSkgeworCQlzeCA9IDA7CisJCXdo
aWxlICgoc3ggPSBtYXRjaHdvcmQobWFya2RhdGEtPmlzc3RyLCB5LCBzeCwgZXgpKSA+PSAwKQor
CQkJeCA9IHN4Kys7CisJCWlmICh4ID49IDApCisJCQlicmVhazsKKwl9CiAKKwlpZiAoeSA8IDAp
IHsKKwkJTEdvdG9Qb3MoZmxheWVyLCBtYXJrZGF0YS0+Y3gsIFcyRChtYXJrZGF0YS0+Y3kpKTsK
KwkJTE1zZygwLCAiUGF0dGVybiBub3QgZm91bmQiKTsKKwl9IGVsc2UKKwkJcmV2dG8oeCwgeSk7
Cit9CiAKIC8qCiAgKiBTZWFyY2ggZm9yIGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyBwYXR0ZXJuLiAg
VGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUKQEAgLTE0MSwyNTkgKzEyOSwyNTUgQEAKICAqIG9y
IC0xIGlmIHRoZXJlJ3Mgbm8gbWF0Y2guCiAgKi8KIHN0YXRpYyBpbnQKLW1hdGNod29yZChwYXR0
ZXJuLCB5LCBzeCwgZXgpCi1jaGFyICpwYXR0ZXJuOwotaW50IHksIHN4LCBleDsKK21hdGNod29y
ZChjaGFyICpwYXR0ZXJuLCBpbnQgeSwgaW50IHN4LCBpbnQgZXgpCiB7Ci0gIHVuc2lnbmVkIGNo
YXIgKmlwLCAqY3AsICpwcCwgKmNwZTsKLSAgaW50IGN5OworCXVuc2lnbmVkIGNoYXIgKmNwLCAq
cHAsICpjcGU7CisJaW50IGN5OwogCi0gIGZvcmUgPSAoKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXll
ci0+bF9kYXRhKS0+bWRfd2luZG93OworCWZvcmUgPSAoKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXll
ci0+bF9kYXRhKS0+bWRfd2luZG93OwogCi0gIGZvciAoO3N4IDw9IGV4OyBzeCsrKQotICAgIHsK
LQkJCWN5ID0geTsKLQkJCWNwID0gV0lOKGN5KS0+aW1hZ2UgKyBzeDsKLQkJCWNwZSA9IFdJTihj
eSktPmltYWdlICsgZmxheWVyLT5sX3dpZHRoOwotICAgICAgcHAgPSAodW5zaWduZWQgY2hhciAq
KXBhdHRlcm47Ci0gICAgICBmb3IgKDs7KQotCXsKLQkgIGlmICgqY3AgIT0gKnBwKQotCSAgICBp
ZiAoIXNlYXJjaF9pYyB8fCAoKCpjcCBeICpwcCkgJiAweGRmKSB8fCAoKmNwIHwgMHgyMCkgPCAn
YScgfHwgKCpjcCB8IDB4MjApID4gJ3onKQotCSAgICAgIGJyZWFrOwotCSAgY3ArKzsKLQkgIHBw
Kys7Ci0JICBpZiAoKnBwID09IDApCi0JICAgIHJldHVybiBzeDsKLQkJaWYgKGNwID09IGNwZSkg
eworCWZvciAoOyBzeCA8PSBleDsgc3grKykgeworCQljeSA9IHk7CisJCWNwID0gV0lOKGN5KS0+
aW1hZ2UgKyBzeDsKKwkJY3BlID0gV0lOKGN5KS0+aW1hZ2UgKyBmbGF5ZXItPmxfd2lkdGg7CisJ
CXBwID0gKHVuc2lnbmVkIGNoYXIgKilwYXR0ZXJuOworCQlmb3IgKDs7KSB7CisJCQlpZiAoKmNw
ICE9ICpwcCkKKwkJCQlpZiAoIXNlYXJjaF9pYyB8fCAoKCpjcCBeICpwcCkgJiAweGRmKSB8fAor
CQkJCSAgICAoKmNwIHwgMHgyMCkgPCAnYScgfHwgKCpjcCB8IDB4MjApID4gJ3onKQorCQkJCQli
cmVhazsKKwkJCWNwKys7CisJCQlwcCsrOworCQkJaWYgKCpwcCA9PSAwKQorCQkJCXJldHVybiBz
eDsKKwkJCWlmIChjcCA9PSBjcGUpIHsKIAkJLyoKIAkJKiBXZSBoYXZlIGEgcGFydGlhbCBtYXRj
aCwgYnV0IHdlJ3ZlIGhpdAogCQkqIHRoZSBlbmQgb2YgdGhpcyBsaW5lLiAgRG9lcyBpdCB3cmFw
IG9udG8KIAkJKiB0aGUgZm9sbG93aW5nIGxpbmU/ICBJZiBub3QsIHdlJ3JlIGRvbmUuCiAJCSov
Ci0JCWlmICgqY3AgPT0gJyAnIHx8IGN5ID49IGZvcmUtPndfaGlzdGhlaWdodCArIGZsYXllci0+
bF9oZWlnaHQgLSAxKQotCQkJYnJlYWs7CisJCQkJaWYgKCpjcCA9PSAnICcgfHwKKwkJCQkgICAg
Y3kgPj0KKwkJCQkgICAgZm9yZS0+d19oaXN0aGVpZ2h0ICsgZmxheWVyLT5sX2hlaWdodCAtIDEp
CisJCQkJCWJyZWFrOwogCiAJCS8qCiAJCSogVGhpcyBsaW5lIGRvZXMgd3JhcCwgc28gbG9vayBv
biB0aGUgbmV4dAogCQkqIGxpbmUgZm9yIHRoZSByZXN0IG9mIG91ciBtYXRjaC4KIAkJKi8KLQkJ
Y3krKzsKLQkJY3AgPSBXSU4oY3kpLT5pbWFnZTsKLQkJY3BlID0gV0lOKGN5KS0+aW1hZ2UgKyBm
bGF5ZXItPmxfd2lkdGg7CisJCQkJY3krKzsKKwkJCQljcCA9IFdJTihjeSktPmltYWdlOworCQkJ
CWNwZSA9IFdJTihjeSktPmltYWdlICsgZmxheWVyLT5sX3dpZHRoOworCQkJfQogCQl9CiAJfQot
ICAgIH0KLSAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIH0KIAotCiAvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAq
ICBFbWFjcyBzdHlsZSBJU2VhcmNoCiAgKi8KIAogc3RhdGljIGNoYXIgKmlzcHJvbXB0c1tdID0g
ewotICAiSS1zZWFyY2ggYmFja3dhcmQ6ICIsICJmYWlsaW5nIEktc2VhcmNoIGJhY2t3YXJkOiAi
LAotICAiSS1zZWFyY2g6ICIsICJmYWlsaW5nIEktc2VhcmNoOiAiCisJIkktc2VhcmNoIGJhY2t3
YXJkOiAiLCAiZmFpbGluZyBJLXNlYXJjaCBiYWNrd2FyZDogIiwKKwkiSS1zZWFyY2g6ICIsICJm
YWlsaW5nIEktc2VhcmNoOiAiCiB9OwogCi0KLXN0YXRpYyBpbnQgIGlzX3JlZG8gX19QKChzdHJ1
Y3QgbWFya2RhdGEgKikpOwotc3RhdGljIHZvaWQgaXNfcHJvY2VzcyBfX1AoKGNoYXIgKiwgaW50
LCBjaGFyICopKTsKLXN0YXRpYyBpbnQgIGlzX2JtIF9fUCgoY2hhciAqLCBpbnQsIGludCwgaW50
LCBpbnQpKTsKLQorc3RhdGljIGludCAgaXNfcmVkbyBfX1AoKHN0cnVjdCBtYXJrZGF0YSopKTsK
K3N0YXRpYyB2b2lkIGlzX3Byb2Nlc3MgX19QKChjaGFyKiwgaW50LCBjaGFyICopKTsKK3N0YXRp
YyBpbnQgIGlzX2JtIF9fUCgoY2hhciosIGludCwgaW50LCBpbnQsIGludCkpOwogCiBzdGF0aWMg
aW50Ci1pc19ibShzdHIsIGwsIHAsIGVuZCwgZGlyKQotY2hhciAqc3RyOwotaW50IGwsIHAsIGVu
ZCwgZGlyOworaXNfYm0oY2hhciAqc3RyLCBpbnQgbCwgaW50IHAsIGludCBlbmQsIGludCBkaXIp
CiB7Ci0gIGludCB0YWJbMjU2XTsKLSAgaW50IGksIHE7Ci0gIHVuc2lnbmVkIGNoYXIgKnMsIGM7
Ci0gIGludCB3ID0gZmxheWVyLT5sX3dpZHRoOworCWludCB0YWJbMjU2XTsKKwlpbnQgaSwgcTsK
Kwl1bnNpZ25lZCBjaGFyICpzLCBjOworCWludCB3ID0gZmxheWVyLT5sX3dpZHRoOwogCiAgIC8q
ICpzaWdoKiB0byBtYWtlIFdJTiB3b3JrICovCi0gIGZvcmUgPSAoKHN0cnVjdCBtYXJrZGF0YSAq
KWZsYXllci0+bF9uZXh0LT5sX2RhdGEpLT5tZF93aW5kb3c7Ci0gIGRlYnVnMigiaXNfYm06IHNl
YXJjaGluZyBmb3IgJXMgbGVuICVkXG4iLCBzdHIsIGwpOwotICBkZWJ1ZzMoInN0YXJ0IGF0ICVk
IGVuZCAlZCBkaXIgJWRcbiIsIHAsIGVuZCwgZGlyKTsKLSAgaWYgKHAgPCAwIHx8IHAgKyBsID4g
ZW5kKQotICAgIHJldHVybiAtMTsKLSAgaWYgKGwgPT0gMCkKLSAgICByZXR1cm4gcDsKLSAgaWYg
KGRpciA8IDApCi0gICAgc3RyICs9IGwgLSAxOwotICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKysp
Ci0gICAgdGFiW2ldID0gbCAqIGRpcjsKLSAgZm9yIChpID0gMDsgaSA8IGwgLSAxOyBpKyssIHN0
ciArPSBkaXIpCi0gICAgewotICAgICAgcSA9ICoodW5zaWduZWQgY2hhciAqKXN0cjsKLSAgICAg
IHRhYltxXSA9IChsIC0gMSAtIGkpICogZGlyOwotICAgICAgaWYgKHNlYXJjaF9pYyAmJiAocSB8
IDB4MjApID49ICdhJyAmJiAoKHEgfCAweDIwKSA8PSAneicpKQotICAgICAgICB0YWJbcSBeIDB4
MjBdID0gKGwgLSAxIC0gaSkgKiBkaXI7Ci0gICAgfQotICBpZiAoZGlyID4gMCkKLSAgICBwICs9
IGwgLSAxOwotICBkZWJ1ZzEoImZpcnN0IGNoYXIgdG8gbWF0Y2g6ICVjXG4iLCAqc3RyKTsKLSAg
d2hpbGUgKHAgPj0gMCAmJiBwIDwgZW5kKQotICAgIHsKLSAgICAgIHEgPSBwOwotICAgICAgcyA9
ICh1bnNpZ25lZCBjaGFyICopc3RyOwotICAgICAgZm9yIChpID0gMDs7KQotCXsKLSAgICAgICAg
ICBjID0gKFdJTihxIC8gdykpLT5pbWFnZVtxICUgd107Ci0JICBpZiAoaSA9PSAwKQotICAgICAg
ICAgICAgcCArPSB0YWJbKGludCkodW5zaWduZWQgY2hhcikgY107Ci0JICBpZiAoYyAhPSAqcykK
LQkgICAgaWYgKCFzZWFyY2hfaWMgfHwgKChjIF4gKnMpICYgMHhkZikgfHwgKGMgfCAweDIwKSA8
ICdhJyB8fCAoYyB8IDB4MjApID4gJ3onKQotCSAgICAgIGJyZWFrOwotCSAgcSAtPSBkaXI7Ci0J
ICBzIC09IGRpcjsKLQkgIGlmICgrK2kgPT0gbCkKLQkgICAgcmV0dXJuIHEgKyAoZGlyID4gMCA/
IDEgOiAtbCk7CisJZm9yZSA9ICgoc3RydWN0IG1hcmtkYXRhICopZmxheWVyLT5sX25leHQtPmxf
ZGF0YSktPm1kX3dpbmRvdzsKKwlkZWJ1ZzIoImlzX2JtOiBzZWFyY2hpbmcgZm9yICVzIGxlbiAl
ZFxuIiwgc3RyLCBsKTsKKwlkZWJ1ZzMoInN0YXJ0IGF0ICVkIGVuZCAlZCBkaXIgJWRcbiIsIHAs
IGVuZCwgZGlyKTsKKworCWlmIChwIDwgMCB8fCBwICsgbCA+IGVuZCkKKwkJcmV0dXJuIC0xOwor
CWlmIChsID09IDApCisJCXJldHVybiBwOworCWlmIChkaXIgPCAwKQorCQlzdHIgKz0gbCAtIDE7
CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorCQl0YWJbaV0gPSBsICogZGlyOworCisJZm9y
IChpID0gMDsgaSA8IGwgLSAxOyBpKyssIHN0ciArPSBkaXIpIHsKKwkJcSA9ICoodW5zaWduZWQg
Y2hhciAqKXN0cjsKKwkJdGFiW3FdID0gKGwgLSAxIC0gaSkgKiBkaXI7CisJCWlmIChzZWFyY2hf
aWMgJiYgKHEgfCAweDIwKSA+PSAnYScgJiYgKChxIHwgMHgyMCkgPD0gJ3onKSkKKwkJCXRhYltx
IF4gMHgyMF0gPSAobCAtIDEgLSBpKSAqIGRpcjsKIAl9Ci0gICAgfQotICByZXR1cm4gLTE7Ci19
CiAKKwlpZiAoZGlyID4gMCkKKwkJcCArPSBsIC0gMTsKKworCWRlYnVnMSgiZmlyc3QgY2hhciB0
byBtYXRjaDogJWNcbiIsICpzdHIpOworCisJd2hpbGUgKHAgPj0gMCAmJiBwIDwgZW5kKSB7CisJ
CXEgPSBwOworCQlzID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJCWZvciAoaSA9IDA7Oykgewor
CQkJYyA9IChXSU4ocSAvIHcpKS0+aW1hZ2VbcSAlIHddOworCQkJaWYgKGkgPT0gMCkKKwkJCQlw
ICs9IHRhYlsoaW50KSh1bnNpZ25lZCBjaGFyKWNdOworCQkJaWYgKGMgIT0gKnMpCisJCQkJaWYg
KCFzZWFyY2hfaWMgfHwgKChjIF4gKnMpICYgMHhkZikgfHwKKwkJCQkgICAgKGMgfCAweDIwKSA8
ICdhJyB8fCAoYyB8IDB4MjApID4gJ3onKQorCQkJCQlicmVhazsKKwkJCXEgLT0gZGlyOworCQkJ
cyAtPSBkaXI7CisJCQlpZiAoKytpID09IGwpCisJCQkJcmV0dXJuIHEgKyAoZGlyID4gMCA/IDEg
OiAtbCk7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQogCiAvKkFSR1NVU0VEKi8KIHN0YXRpYyB2
b2lkCi1pc19wcm9jZXNzKHAsIG4sIGRhdGEpCS8qIGktc2VhcmNoICovCi1jaGFyICpwOwotaW50
IG47Ci1jaGFyICpkYXRhOwkvKiBkdW1teSAqLworaXNfcHJvY2VzcyhjaGFyICpwLCBpbnQgbiwg
Y2hhciAqZGF0YSkJLyogaS1zZWFyY2ggKi8KIHsKLSAgaW50IHBvcywgeCwgeSwgZGlyOwotICBz
dHJ1Y3QgbWFya2RhdGEgKm1hcmtkYXRhOworCWludCBwb3MsIHgsIHksIGRpcjsKKwlzdHJ1Y3Qg
bWFya2RhdGEgKm1hcmtkYXRhOwogCi0gIGlmIChuID09IDApCi0gICAgcmV0dXJuOwotICBBU1NF
UlQocCk7Ci0gIG1hcmtkYXRhID0gKHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9uZXh0LT5s
X2RhdGE7Ci0KLSAgcG9zID0gbWFya2RhdGEtPmN4ICsgbWFya2RhdGEtPmN5ICogZmxheWVyLT5s
X3dpZHRoOwotICBMR290b1BvcyhmbGF5ZXIsIG1hcmtkYXRhLT5jeCwgVzJEKG1hcmtkYXRhLT5j
eSkpOwotCi0gIHN3aXRjaCAoKnApCi0gICAgewotICAgIGNhc2UgJ1wwMDcnOgkvKiBDVFJMLUcg
Ki8KLSAgICAgIHBvcyA9IG1hcmtkYXRhLT5pc3N0YXJ0cG9zOworCWlmIChuID09IDApCisJCXJl
dHVybjsKKwlBU1NFUlQocCk7CisJbWFya2RhdGEgPSAoc3RydWN0IG1hcmtkYXRhICopZmxheWVy
LT5sX25leHQtPmxfZGF0YTsKKworCXBvcyA9IG1hcmtkYXRhLT5jeCArIG1hcmtkYXRhLT5jeSAq
IGZsYXllci0+bF93aWR0aDsKKwlMR290b1BvcyhmbGF5ZXIsIG1hcmtkYXRhLT5jeCwgVzJEKG1h
cmtkYXRhLT5jeSkpOworCisJc3dpdGNoICgqcCkgeworCWNhc2UgJ1wwMDcnOgkvKiBDVFJMLUcg
Ki8KKwkJcG9zID0gbWFya2RhdGEtPmlzc3RhcnRwb3M7CiAgICAgICAvKkZBTExUSFJPVUdIKi8K
LSAgICBjYXNlICdcMDMzJzoJLyogRVNDICovCi0gICAgICAqcCA9IDA7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlICdcMDEzJzoJLyogQ1RSTC1LICovCi0gICAgY2FzZSAnXDAyNyc6CS8qIENUUkwt
VyAqLwotICAgICAgbWFya2RhdGEtPmlzaXN0cmwgPSAxOworCWNhc2UgJ1wwMzMnOgkvKiBFU0Mg
Ki8KKwkJKnAgPSAwOworCQlicmVhazsKKwljYXNlICdcMDEzJzoJLyogQ1RSTC1LICovCisJY2Fz
ZSAnXDAyNyc6CS8qIENUUkwtVyAqLworCQltYXJrZGF0YS0+aXNpc3RybCA9IDE7CiAgICAgICAv
KkZBTExUSFJPVUdIKi8KLSAgICBjYXNlICdcYic6Ci0gICAgY2FzZSAnXDE3Nyc6Ci0gICAgICBp
ZiAobWFya2RhdGEtPmlzaXN0cmwgPT0gMCkKLQlyZXR1cm47Ci0gICAgICBtYXJrZGF0YS0+aXNp
c3RybC0tOwotICAgICAgcG9zID0gaXNfcmVkbyhtYXJrZGF0YSk7Ci0gICAgICAqcCA9ICdcYic7
Ci0gICAgICBicmVhazsKLSAgICBjYXNlICdcMDIzJzoJLyogQ1RSTC1TICovCi0gICAgY2FzZSAn
XDAyMic6IAkvKiBDVFJMLVIgKi8KLSAgICAgIGlmIChtYXJrZGF0YS0+aXNpc3RybCA+PSAoaW50
KXNpemVvZihtYXJrZGF0YS0+aXNpc3RyKSkKLQlyZXR1cm47Ci0gICAgICBkaXIgPSAoKnAgPT0g
J1wwMjMnKSA/IDEgOiAtMTsKLSAgICAgIHBvcyArPSBkaXI7Ci0gICAgICBpZiAobWFya2RhdGEt
PmlzZGlyID09IGRpciAmJiBtYXJrZGF0YS0+aXNpc3RybCA9PSAwKQotCXsKLQkgIHN0cmNweSht
YXJrZGF0YS0+aXNpc3RyLCBtYXJrZGF0YS0+aXNzdHIpOwotCSAgbWFya2RhdGEtPmlzaXN0cmwg
PSBtYXJrZGF0YS0+aXNzdHJsID0gc3RybGVuKG1hcmtkYXRhLT5pc3N0cik7Ci0JICBicmVhazsK
KwljYXNlICdcYic6CisJY2FzZSAnXDE3Nyc6CisJCWlmIChtYXJrZGF0YS0+aXNpc3RybCA9PSAw
KQorCQkJcmV0dXJuOworCQltYXJrZGF0YS0+aXNpc3RybC0tOworCQlwb3MgPSBpc19yZWRvKG1h
cmtkYXRhKTsKKwkJKnAgPSAnXGInOworCQlicmVhazsKKwljYXNlICdcMDIzJzoJLyogQ1RSTC1T
ICovCisJY2FzZSAnXDAyMic6IAkvKiBDVFJMLVIgKi8KKwkJaWYgKG1hcmtkYXRhLT5pc2lzdHJs
ID49IChpbnQpc2l6ZW9mKG1hcmtkYXRhLT5pc2lzdHIpKQorCQkJcmV0dXJuOworCQlkaXIgPSAo
KnAgPT0gJ1wwMjMnKSA/IDEgOiAtMTsKKwkJcG9zICs9IGRpcjsKKwkJaWYgKG1hcmtkYXRhLT5p
c2RpciA9PSBkaXIgJiYgbWFya2RhdGEtPmlzaXN0cmwgPT0gMCkgeworCQkJc3RyY3B5KG1hcmtk
YXRhLT5pc2lzdHIsIG1hcmtkYXRhLT5pc3N0cik7CisJCQltYXJrZGF0YS0+aXNpc3RybCA9IG1h
cmtkYXRhLT5pc3N0cmwgPSBzdHJsZW4obWFya2RhdGEtPmlzc3RyKTsKKwkJCWJyZWFrOworCQl9
CisJCW1hcmtkYXRhLT5pc2RpciA9IGRpcjsKKwkJbWFya2RhdGEtPmlzaXN0clttYXJrZGF0YS0+
aXNpc3RybCsrXSA9ICpwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoKnAgPCAnICcgfHwK
KwkJICAgIG1hcmtkYXRhLT5pc2lzdHJsID49CisJCSAgICAoaW50KXNpemVvZihtYXJrZGF0YS0+
aXNpc3RyKSB8fAorCQkgICAgbWFya2RhdGEtPmlzc3RybCA+PSAoaW50KXNpemVvZihtYXJrZGF0
YS0+aXNzdHIpIC0gMSkKKwkJCXJldHVybjsKKwkJbWFya2RhdGEtPmlzc3RyW21hcmtkYXRhLT5p
c3N0cmwrK10gPSAqcDsKKwkJbWFya2RhdGEtPmlzaXN0clttYXJrZGF0YS0+aXNpc3RybCsrXSA9
ICpwOworCQltYXJrZGF0YS0+aXNzdHJbbWFya2RhdGEtPmlzc3RybF0gPSAwOworCQlkZWJ1ZzIo
Ik5ldyBjaGFyOiAlYyAtIGxlZnQgJWRcbiIsICpwLAorCQkgICAgKGludClzaXplb2YobWFya2Rh
dGEtPmlzaXN0cikgLSBtYXJrZGF0YS0+aXNpc3RybCk7CiAJfQotICAgICAgbWFya2RhdGEtPmlz
ZGlyID0gZGlyOwotICAgICAgbWFya2RhdGEtPmlzaXN0clttYXJrZGF0YS0+aXNpc3RybCsrXSA9
ICpwOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGlmICgqcCA8ICcgJyB8fCBt
YXJrZGF0YS0+aXNpc3RybCA+PSAoaW50KXNpemVvZihtYXJrZGF0YS0+aXNpc3RyKQotCSAgfHwg
bWFya2RhdGEtPmlzc3RybCA+PSAoaW50KXNpemVvZihtYXJrZGF0YS0+aXNzdHIpIC0gMSkKLQly
ZXR1cm47Ci0gICAgICBtYXJrZGF0YS0+aXNzdHJbbWFya2RhdGEtPmlzc3RybCsrXSA9ICpwOwot
ICAgICAgbWFya2RhdGEtPmlzaXN0clttYXJrZGF0YS0+aXNpc3RybCsrXSA9ICpwOwotICAgICAg
bWFya2RhdGEtPmlzc3RyW21hcmtkYXRhLT5pc3N0cmxdID0gMDsKLSAgICAgIGRlYnVnMigiTmV3
IGNoYXI6ICVjIC0gbGVmdCAlZFxuIiwgKnAsIChpbnQpc2l6ZW9mKG1hcmtkYXRhLT5pc2lzdHIp
IC0gbWFya2RhdGEtPmlzaXN0cmwpOwotICAgIH0KLSAgaWYgKCpwICYmICpwICE9ICdcYicpCi0g
ICAgcG9zID0gaXNfYm0obWFya2RhdGEtPmlzc3RyLCBtYXJrZGF0YS0+aXNzdHJsLCBwb3MsIGZs
YXllci0+bF93aWR0aCAqIChtYXJrZGF0YS0+bWRfd2luZG93LT53X2hpc3RoZWlnaHQgKyBmbGF5
ZXItPmxfaGVpZ2h0KSwgbWFya2RhdGEtPmlzZGlyKTsKLSAgaWYgKHBvcyA+PSAwKQotICAgIHsK
LSAgICAgIHggPSBwb3MgJSBmbGF5ZXItPmxfd2lkdGg7Ci0gICAgICB5ID0gcG9zIC8gZmxheWVy
LT5sX3dpZHRoOwotICAgICAgTEFZX0NBTExfVVAKLQkoCi0gICAgICAgICAgTGF5UmVkaXNwbGF5
TGluZShJTlBVVExJTkUsIDAsIGZsYXllci0+bF93aWR0aCAtIDEsIDApOwotICAgICAgICAgIHJl
dnRvKHgsIHkpOwotICAgICAgICAgIGlmIChXMkQobWFya2RhdGEtPmN5KSA9PSBJTlBVVExJTkUp
Ci0JICAgIHJldnRvX2xpbmUobWFya2RhdGEtPmN4LCBtYXJrZGF0YS0+Y3ksIElOUFVUTElORSA+
IDAgPyBJTlBVVExJTkUgLSAxIDogMSk7Ci0gICAgICAgICk7Ci0gICAgfQotICBpZiAoKnApCi0g
ICAgaW5wX3NldHByb21wdChpc3Byb21wdHNbbWFya2RhdGEtPmlzZGlyICsgKHBvcyA8IDApICsg
MV0sIG1hcmtkYXRhLT5pc3N0cmwgPyBtYXJrZGF0YS0+aXNzdHIgOiAiIik7Ci0gIGZsYXllci0+
bF94ID0gbWFya2RhdGEtPmN4OwotICBmbGF5ZXItPmxfeSA9IFcyRChtYXJrZGF0YS0+Y3kpOwot
ICBMR290b1BvcyhmbGF5ZXIsIGZsYXllci0+bF94LCBmbGF5ZXItPmxfeSk7Ci0gIGlmICghKnAp
Ci0gICAgeworCWlmICgqcCAmJiAqcCAhPSAnXGInKQorCQlwb3MgPSBpc19ibShtYXJrZGF0YS0+
aXNzdHIsIG1hcmtkYXRhLT5pc3N0cmwsIHBvcywKKwkJICAgIGZsYXllci0+bF93aWR0aCAqCisJ
CSAgICAobWFya2RhdGEtPm1kX3dpbmRvdy0+d19oaXN0aGVpZ2h0ICsgZmxheWVyLT5sX2hlaWdo
dCksCisJCSAgICBtYXJrZGF0YS0+aXNkaXIpOworCWlmIChwb3MgPj0gMCkgeworCQl4ID0gcG9z
ICUgZmxheWVyLT5sX3dpZHRoOworCQl5ID0gcG9zIC8gZmxheWVyLT5sX3dpZHRoOworCQlMQVlf
Q0FMTF9VUChMYXlSZWRpc3BsYXlMaW5lKElOUFVUTElORSwgMCwgZmxheWVyIC0+IGxfd2lkdGgg
LSAxLAorCQkwKSA7IHJldnRvKHgsIHkpIDsgaWYoVzJEKG1hcmtkYXRhIC0+IGN5KSA9PSBJTlBV
VExJTkUpIHJldnRvX2xpbmUobWFya2RhdGEKKwkJLT4gY3gsIG1hcmtkYXRhIC0+IGN5LCBJTlBV
VExJTkUgPiAwID8gSU5QVVRMSU5FIC0gMSA6IDEpIDspOworCX0KKwlpZiAoKnApCisJCWlucF9z
ZXRwcm9tcHQoaXNwcm9tcHRzW21hcmtkYXRhLT5pc2RpciArIChwb3MgPCAwKSArIDFdLAorCQkg
ICAgbWFya2RhdGEtPmlzc3RybCA/IG1hcmtkYXRhLT5pc3N0ciA6ICIiKTsKKwlmbGF5ZXItPmxf
eCA9IG1hcmtkYXRhLT5jeDsKKwlmbGF5ZXItPmxfeSA9IFcyRChtYXJrZGF0YS0+Y3kpOworCUxH
b3RvUG9zKGZsYXllciwgZmxheWVyLT5sX3gsIGZsYXllci0+bF95KTsKKwlpZiAoISpwKSB7CiAg
ICAgICAvKiB3ZSBhcmUgYWJvdXQgdG8gZmluaXNoLCBrZWVwIGN1cnNvciBwb3NpdGlvbiAqLwot
ICAgICAgZmxheWVyLT5sX25leHQtPmxfeCA9IG1hcmtkYXRhLT5jeDsKLSAgICAgIGZsYXllci0+
bF9uZXh0LT5sX3kgPSBXMkQobWFya2RhdGEtPmN5KTsKLSAgICB9CisJCWZsYXllci0+bF9uZXh0
LT5sX3ggPSBtYXJrZGF0YS0+Y3g7CisJCWZsYXllci0+bF9uZXh0LT5sX3kgPSBXMkQobWFya2Rh
dGEtPmN5KTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQKLWlzX3JlZG8obWFya2RhdGEpCi1zdHJ1Y3Qg
bWFya2RhdGEgKm1hcmtkYXRhOworaXNfcmVkbyhzdHJ1Y3QgbWFya2RhdGEgKm1hcmtkYXRhKQog
ewotICBpbnQgaSwgcG9zLCBucG9zLCBkaXI7Ci0gIGNoYXIgYzsKKwlpbnQgaSwgcG9zLCBucG9z
LCBkaXI7CisJY2hhciBjOwogCi0gIG5wb3MgPSBwb3MgPSBtYXJrZGF0YS0+aXNzdGFydHBvczsK
LSAgZGlyID0gbWFya2RhdGEtPmlzc3RhcnRkaXI7Ci0gIG1hcmtkYXRhLT5pc3N0cmwgPSAwOwot
ICBmb3IgKGkgPSAwOyBpIDwgbWFya2RhdGEtPmlzaXN0cmw7IGkrKykKLSAgICB7Ci0gICAgICBj
ID0gbWFya2RhdGEtPmlzaXN0cltpXTsKLSAgICAgIGlmIChjID09ICdcMDIyJykJCS8qIF5SICov
Ci0JcG9zICs9IChkaXIgPSAtMSk7Ci0gICAgICBlbHNlIGlmIChjID09ICdcMDIzJykJLyogXlMg
Ki8KLQlwb3MgKz0gKGRpciA9IDEpOwotICAgICAgZWxzZQotCW1hcmtkYXRhLT5pc3N0clttYXJr
ZGF0YS0+aXNzdHJsKytdID0gYzsKLSAgICAgIGlmIChwb3MgPj0gMCkKLQl7Ci0gICAgICAgICAg
bnBvcyA9IGlzX2JtKG1hcmtkYXRhLT5pc3N0ciwgbWFya2RhdGEtPmlzc3RybCwgcG9zLCBmbGF5
ZXItPmxfd2lkdGggKiAobWFya2RhdGEtPm1kX3dpbmRvdy0+d19oaXN0aGVpZ2h0ICsgZmxheWVy
LT5sX2hlaWdodCksIGRpcik7Ci0JICBpZiAobnBvcyA+PSAwKQotCSAgICBwb3MgPSBucG9zOwor
CW5wb3MgPSBwb3MgPSBtYXJrZGF0YS0+aXNzdGFydHBvczsKKwlkaXIgPSBtYXJrZGF0YS0+aXNz
dGFydGRpcjsKKwltYXJrZGF0YS0+aXNzdHJsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBtYXJr
ZGF0YS0+aXNpc3RybDsgaSsrKSB7CisJCWMgPSBtYXJrZGF0YS0+aXNpc3RyW2ldOworCQlpZiAo
YyA9PSAnXDAyMicpCQkvKiBeUiAqLworCQkJcG9zICs9IChkaXIgPSAtMSk7CisJCWVsc2UgaWYg
KGMgPT0gJ1wwMjMnKQkvKiBeUyAqLworCQkJcG9zICs9IChkaXIgPSAxKTsKKwkJZWxzZQorCQkJ
bWFya2RhdGEtPmlzc3RyW21hcmtkYXRhLT5pc3N0cmwrK10gPSBjOworCQlpZiAocG9zID49IDAp
IHsKKwkJCW5wb3MgPSBpc19ibShtYXJrZGF0YS0+aXNzdHIsIG1hcmtkYXRhLT5pc3N0cmwsIHBv
cywKKwkJCSAgICBmbGF5ZXItPmxfd2lkdGggKgorCQkJICAgIChtYXJrZGF0YS0+bWRfd2luZG93
LT53X2hpc3RoZWlnaHQgKworCQkJICAgICBmbGF5ZXItPmxfaGVpZ2h0KSwgZGlyKTsKKwkJCWlm
IChucG9zID49IDApCisJCQkJcG9zID0gbnBvczsKKwkJfQogCX0KLSAgICB9Ci0gIG1hcmtkYXRh
LT5pc3N0clttYXJrZGF0YS0+aXNzdHJsXSA9IDA7Ci0gIG1hcmtkYXRhLT5pc2RpciA9IGRpcjsK
LSAgcmV0dXJuIG5wb3M7CisJbWFya2RhdGEtPmlzc3RyW21hcmtkYXRhLT5pc3N0cmxdID0gMDsK
KwltYXJrZGF0YS0+aXNkaXIgPSBkaXI7CisJcmV0dXJuIG5wb3M7CiB9CiAKIHZvaWQKLUlTZWFy
Y2goZGlyKQotaW50IGRpcjsKK0lTZWFyY2goaW50IGRpcikKIHsKLSAgc3RydWN0IG1hcmtkYXRh
ICptYXJrZGF0YTsKKwlzdHJ1Y3QgbWFya2RhdGEgKm1hcmtkYXRhOwogCi0gIG1hcmtkYXRhID0g
KHN0cnVjdCBtYXJrZGF0YSAqKWZsYXllci0+bF9kYXRhOwotICBtYXJrZGF0YS0+aXNkaXIgPSBt
YXJrZGF0YS0+aXNzdGFydGRpciA9IGRpcjsKLSAgbWFya2RhdGEtPmlzc3RhcnRwb3MgPSBtYXJr
ZGF0YS0+Y3ggKyBtYXJrZGF0YS0+Y3kgKiBmbGF5ZXItPmxfd2lkdGg7Ci0gIG1hcmtkYXRhLT5p
c2lzdHJsID0gbWFya2RhdGEtPmlzc3RybCA9IDA7Ci0gIGlmIChXMkQobWFya2RhdGEtPmN5KSA9
PSBJTlBVVExJTkUpCi0gICAgcmV2dG9fbGluZShtYXJrZGF0YS0+Y3gsIG1hcmtkYXRhLT5jeSwg
SU5QVVRMSU5FID4gMCA/IElOUFVUTElORSAtIDEgOiAxKTsKLSAgSW5wdXQoaXNwcm9tcHRzW2Rp
ciArIDFdLCBzaXplb2YobWFya2RhdGEtPmlzc3RyKSAtIDEsIElOUF9SQVcsCi0gICAgICAgIGlz
X3Byb2Nlc3MsIE5VTEwsIDApOwotICBMR290b1BvcyhmbGF5ZXIsIG1hcmtkYXRhLT5jeCwgVzJE
KG1hcmtkYXRhLT5jeSkpOwotICBmbGF5ZXItPmxfeCA9IG1hcmtkYXRhLT5jeDsKLSAgZmxheWVy
LT5sX3kgPSBXMkQobWFya2RhdGEtPmN5KTsKKwltYXJrZGF0YSA9IChzdHJ1Y3QgbWFya2RhdGEg
KilmbGF5ZXItPmxfZGF0YTsKKwltYXJrZGF0YS0+aXNkaXIgPSBtYXJrZGF0YS0+aXNzdGFydGRp
ciA9IGRpcjsKKwltYXJrZGF0YS0+aXNzdGFydHBvcyA9IG1hcmtkYXRhLT5jeCArIG1hcmtkYXRh
LT5jeSAqIGZsYXllci0+bF93aWR0aDsKKwltYXJrZGF0YS0+aXNpc3RybCA9IG1hcmtkYXRhLT5p
c3N0cmwgPSAwOworCisJaWYgKFcyRChtYXJrZGF0YS0+Y3kpID09IElOUFVUTElORSkKKwkJcmV2
dG9fbGluZShtYXJrZGF0YS0+Y3gsIG1hcmtkYXRhLT5jeSwKKwkJICAgIElOUFVUTElORSA+IDAg
PyBJTlBVVExJTkUgLSAxIDogMSk7CisKKwlJbnB1dChpc3Byb21wdHNbZGlyICsgMV0sIHNpemVv
ZihtYXJrZGF0YS0+aXNzdHIpIC0gMSwgSU5QX1JBVywKKwkgICAgaXNfcHJvY2VzcywgTlVMTCwg
MCk7CisKKwlMR290b1BvcyhmbGF5ZXIsIG1hcmtkYXRhLT5jeCwgVzJEKG1hcmtkYXRhLT5jeSkp
OworCWZsYXllci0+bF94ID0gbWFya2RhdGEtPmN4OworCWZsYXllci0+bF95ID0gVzJEKG1hcmtk
YXRhLT5jeSk7CiB9CiAKICNlbmRpZiAvKiBDT1BZX1BBU1RFICovCmRpZmYgLXVyIHNjcmVlbi5v
cmlnL3NvY2tldC5jIHNjcmVlbi9zb2NrZXQuYwotLS0gc2NyZWVuLm9yaWcvc29ja2V0LmMJMjAy
My0wNi0wMSAxNDo1ODoxNy4yNDc2NjUwNDYgKzAzMDAKKysrIHNjcmVlbi9zb2NrZXQuYwkyMDIy
LTAxLTI4IDE3OjA2OjAyLjY5ODYxMjI5NSArMDMwMApAQCAtMzkzLDEwICszOTMsMTEgQEAKICAg
ICB9CiAgIGlmIChuZGVhZCAmJiAhcXVpZXRmbGFnKQogICAgIHsKKyAgICAgIGNoYXIgKm0gPSAi
UmVtb3ZlIGRlYWQgc2NyZWVucyB3aXRoICdzY3JlZW4gLXdpcGUnLiI7CiAgICAgICBpZiAod2lw
ZWZsYWcpCiAgICAgICAgIE1zZygwLCAiJWQgc29ja2V0JXMgd2lwZWQgb3V0LiIsIG53aXBlLCBu
d2lwZSA+IDEgPyAicyIgOiAiIik7CiAgICAgICBlbHNlCi0gICAgICAgIE1zZygwLCAiUmVtb3Zl
IGRlYWQgc2NyZWVuJXMgd2l0aCAnc2NyZWVuIC13aXBlJy4iLCBuZGVhZCA+IDEgPyAicyIgOiAi
Iik7CisgICAgICAgIE1zZygwLCBtLCBuZGVhZCA+IDEgPyAicyIgOiAiIiwgbmRlYWQgPiAxID8g
IiIgOiAiZXMiKTsJLyogb3RoZXIgYXJncyBmb3IgbmV0aGFjayAqLwogICAgIH0KICAgaWYgKGZp
cnN0cyAhPSAtMSkKICAgICB7CkBAIC00NjIsNyArNDYzLDcgQEAKICMgaWZkZWYgVVNFX1NFVEVV
SUQKICAgKHZvaWQpIHVubGluayhTb2NrUGF0aCk7CiAgIGlmIChta2ZpZm8oU29ja1BhdGgsIFNP
Q0tNT0RFKSA8IDApCi0gICAgUGFuaWMoZXJybm8sICJta2ZpZm8gJXMgZmFpbGVkIiwgU29ja1Bh
dGgpOworICAgIFBhbmljKDAsICJta2ZpZm8gJXMgZmFpbGVkIiwgU29ja1BhdGgpOwogIyAgaWZk
ZWYgQlJPS0VOX1BJUEUKICAgcyA9IG9wZW4oU29ja1BhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0ss
IDApOwogIyAgZWxzZQpAQCAtNzUzLDExICs3NTQsNyBAQAogICBtLm1fdHR5W3NpemVvZihtLm1f
dHR5KSAtIDFdID0gMDsKICAgbS5wcm90b2NvbF9yZXZpc2lvbiA9IE1TR19SRVZJU0lPTjsKICAg
ZGVidWcxKCJTZW5kRXJyb3JNc2coKTogd3JpdGluZyB0byAnJXMnXG4iLCBTb2NrUGF0aCk7Ci0g
IGlmICh3cml0ZShzLCAmbSwgc2l6ZW9mKG0pKSA8IHNpemVvZihtKSkKLSAgICB7Ci0gICAgICBj
bG9zZShzKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICh2b2lkKSB3cml0ZShzLCAoY2hh
ciAqKSAmbSwgc2l6ZW9mIG0pOwogICBjbG9zZShzKTsKICAgcmV0dXJuIDA7CiB9CkBAIC0xODc5
LDcgKzE4NzYsNyBAQAogICAgIHsKICAgICAgIGNoYXIgKm9sZHJjbmFtZSA9IHJjX25hbWU7CiAg
ICAgICByY19uYW1lID0gIi1YIjsKLSAgICAgIGRlYnVnMygiUnVubmluZyBjb21tYW5kIG9uIGRp
c3BsYXkgJXAgd2luZG93ICVwICglZClcbiIsIGRpc3BsYXksIGZvcmUsIGZvcmUgPyBmb3JlLT53
X251bWJlciA6IC0xKTsKKyAgICAgIGRlYnVnMygiUnVubmluZyBjb21tYW5kIG9uIGRpc3BsYXkg
JXggd2luZG93ICV4ICglZClcbiIsIGRpc3BsYXksIGZvcmUsIGZvcmUgPyBmb3JlLT53X251bWJl
ciA6IC0xKTsKICAgICAgIGZsYXllciA9IGZvcmUgPyAmZm9yZS0+d19sYXllciA6IDA7CiAgICAg
ICBpZiAoZm9yZSAmJiBmb3JlLT53X3NhdmVsYXllciAmJiAoZm9yZS0+d19ibG9ja2VkIHx8IGZv
cmUtPndfc2F2ZWxheWVyLT5sX2N2bGlzdCA9PSAwKSkKIAlmbGF5ZXIgPSBmb3JlLT53X3NhdmVs
YXllcjsKZGlmZiAtdXIgc2NyZWVuLm9yaWcvdGVsbi5jIHNjcmVlbi90ZWxuLmMKLS0tIHNjcmVl
bi5vcmlnL3RlbG4uYwkyMDIzLTA2LTAxIDE0OjU4OjE3LjI0NzY2NTA0NiArMDMwMAorKysgc2Ny
ZWVuL3RlbG4uYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY5ODYxMjI5NSArMDMwMApAQCAtMjgwLDcg
KzI4MCw3IEBACiAJICAgICAgYnJlYWs7CiAJICAgIH0KIAkgIGlmIChsKQotCSAgICBtZW1tb3Zl
KHAgKyAxLCBwLCBsKTsKKwkgICAgYmNvcHkocCwgcCArIDEsIGwpOwogCSAgaWYgKGMgPT0gVENf
SUFDKQogCSAgICAqcCsrID0gYzsKIAkgIGVsc2UgaWYgKGMgPT0gJ1xyJykKQEAgLTM2OSw3ICsz
NjksNyBAQAogCSAgICAgIGlmIChmcmVlLS0gPiAwKQogCQl7CiAJCSAgaWYgKGxlbikKLQkJICAg
IG1lbW1vdmUocnAgKyAxLCBycCwgbGVuKTsKKwkJICAgIGJjb3B5KHJwLCBycCArIDEsIGxlbik7
CiAJCSAgcnArKzsKIAkJICAqd3ArKyA9ICdccic7CiAJCX0KQEAgLTM5Nyw3ICszOTcsNyBAQAog
ICAgICAgTXNnKDAsICJXYXJuaW5nOiB0ZWxuZXQgcHJvdG9jb2wgb3ZlcnJ1biEiKTsKICAgICAg
IHJldHVybjsKICAgICB9Ci0gIG1lbWNweShwLT53X2luYnVmICsgcC0+d19pbmxlbiwgc3RyLCBs
ZW4pOworICBiY29weShzdHIsIHAtPndfaW5idWYgKyBwLT53X2lubGVuLCBsZW4pOwogICBwLT53
X2lubGVuICs9IGxlbjsKIH0KIApkaWZmIC11ciBzY3JlZW4ub3JpZy90ZXJtY2FwLmMgc2NyZWVu
L3Rlcm1jYXAuYwotLS0gc2NyZWVuLm9yaWcvdGVybWNhcC5jCTIwMjMtMDYtMDEgMTQ6NTg6MTcu
MjQ3NjY1MDQ2ICswMzAwCisrKyBzY3JlZW4vdGVybWNhcC5jCTIwMjItMDEtMjggMTc6MDY6MDIu
Njk4NjEyMjk1ICswMzAwCkBAIC0xMDY4LDcgKzEwNjgsNyBAQAogCXsKIAkgIGlmIChpID49IFRf
S0VZUEFEKQkvKiBkb24ndCBwdXQga2V5cGFkIGNvZGVzIGluIFRFUk1DQVAgKi8KIAkgICAgY29u
dGludWU7CQkvKiAtIG1ha2VzIGl0IHRvbyBiaWcgKi8KLSNpZiAoVEVSTUNBUF9CVUYgPCAxMDI0
KQorI2lmIChURVJNQ0FQX0JVRlNJWkUgPCAxMDI0KQogICAgICAgICAgIGlmIChpID49IFRfRkVY
VFJBICYmIGkgPCBUX0JBQ0tUQUIpIC8qIGFsc28gc2tpcCBleHRyYSB2dDIyMCBrZXlzICovCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICBpZiAoaSA+IFRfQkFDS1RBQiAmJiBpIDwg
VF9OQVZJR0FURSkgLyogbW9yZSB2dDIyMCBrZXlzICovCtCi0L7Qu9GM0LrQviDQsiBzY3JlZW4u
b3JpZy91dGY4ZW5jb2RpbmdzOiBhMwpkaWZmIC11ciBzY3JlZW4ub3JpZy91dG1wLmMgc2NyZWVu
L3V0bXAuYwotLS0gc2NyZWVuLm9yaWcvdXRtcC5jCTIwMjMtMDYtMDEgMTQ6NTg6MTcuMjUyNjY1
MDU3ICswMzAwCisrKyBzY3JlZW4vdXRtcC5jCTIwMjItMDEtMjggMTc6MDY6MDIuNjk4NjEyMjk1
ICswMzAwCkBAIC01MDUsMTEgKzUwNSw3IEBACiAgIHNsb3RfdCBzbG90OwogCiAgIHNsb3QgPSB3
aS0+d19zbG90OwotI2lmZGVmIEdFVFVURU5UCi0gIGRlYnVnMSgiUmVtb3ZlVXRtcCBzbG90PSVw
XG4iLCBzbG90KTsKLSNlbHNlCiAgIGRlYnVnMSgiUmVtb3ZlVXRtcCBzbG90PSUjeFxuIiwgc2xv
dCk7Ci0jZW5kaWYKICAgaWYgKCF1dG1wb2spCiAgICAgcmV0dXJuIC0xOwogICBpZiAoc2xvdCA9
PSAoc2xvdF90KTAgfHwgc2xvdCA9PSAoc2xvdF90KS0xKQpAQCAtNTgxLDExICs1NzcsMTIgQEAK
ICNpZmRlZiBIQVZFX1VURU1QVEVSCiAgIGlmIChlZmZfdWlkICYmIHdpICYmIHdpLT53X3B0eWZk
ICE9IC0xKQogICAgIHsKLSAgICAgIHV0ZW1wdGVyX3NldF9oZWxwZXIgKCIvdXNyL2xpYi9zY3Jl
ZW4vdXRlbXB0ZXIiKTsgLyogJV9saWJleGVjZGlyICovCisgICAgICAvKiBzaWdoLCBsaW51eCBo
YWNrZXJzIG1hZGUgdGhlIGhlbHBlciBmdW5jdGlvbnMgdm9pZCAqLwogICAgICAgaWYgKFNMT1Rf
VVNFRCh1KSkKLQlyZXR1cm4gdXRlbXB0ZXJfYWRkX3JlY29yZCAod2ktPndfcHR5ZmQsIGhvc3Qp
OworCWFkZFRvVXRtcCh3aS0+d190dHksIGhvc3QsIHdpLT53X3B0eWZkKTsKICAgICAgIGVsc2UK
LQlyZXR1cm4gdXRlbXB0ZXJfcmVtb3ZlX3JlY29yZCAod2ktPndfcHR5ZmQpOworCXJlbW92ZUxp
bmVGcm9tVXRtcCh3aS0+d190dHksIHdpLT53X3B0eWZkKTsKKyAgICAgIHJldHVybiAxOwkvKiBw
cmF5IGZvciBzdWNjZXNzICovCiAgICAgfQogI2VuZGlmCiAgIHNldHV0ZW50KCk7CmRpZmYgLXVy
IHNjcmVlbi5vcmlnL3dpbmRvdy5jIHNjcmVlbi93aW5kb3cuYwotLS0gc2NyZWVuLm9yaWcvd2lu
ZG93LmMJMjAyMy0wNi0wMSAxNDo1ODoxNy4yNTI2NjUwNTcgKzAzMDAKKysrIHNjcmVlbi93aW5k
b3cuYwkyMDIyLTAxLTI4IDE3OjA2OjAyLjY5ODYxMjI5NSArMDMwMApAQCAtOTc5LDEwICs5Nzks
OCBAQAogICBpZiAod3AtPndfdHlwZSA9PSBXX1RZUEVfUFRZKQogICAgIHsKICAgICAgIC8qIHB0
eSA0IFNBTEUgKi8KLSAgICAgIGlmIChmY2hvd24od3AtPndfcHR5ZmQsIDAsIDApIDwgMCkKLQk7
Ci0gICAgICBpZiAoZmNobW9kKHdwLT53X3B0eWZkLCAwNjY2KSA8IDApCi0JOworICAgICAgKHZv
aWQpY2htb2Qod3AtPndfdHR5LCAwNjY2KTsKKyAgICAgICh2b2lkKWNob3duKHdwLT53X3R0eSwg
MCwgMCk7CiAgICAgfQogICBjbG9zZSh3cC0+d19wdHlmZCk7CiAgIHdwLT53X3B0eWZkID0gLTE7
CkBAIC0xMjQ3LDcgKzEyNDUsOCBAQAogICAgICAgYXJncyA9IFNoZWxsQXJnczsKICAgICAgIHBy
b2MgPSAqYXJnczsKICAgICB9Ci0gIGZmbHVzaChOVUxMKTsKKyAgZmZsdXNoKHN0ZG91dCk7Cisg
IGZmbHVzaChzdGRlcnIpOwogICBzd2l0Y2ggKHBpZCA9IGZvcmsoKSkKICAgICB7CiAgICAgY2Fz
ZSAtMToKQEAgLTEyOTQsMTYgKzEyOTMsMTEgQEAKICNlbmRpZgogICAgICAgaWYgKHNsYXZlICE9
IC0xKQogCXsKLQkgIC8qIHByZXNlcnZlciBzbGF2ZSBhY3Jvc3MgY2xvc2VhbGxmaWxlcygpLCBh
bG9uZyB3aXRoIHdfcHR5ZmQgKi8KLQkgIGlmIChkdXAyKHNsYXZlLCAwKSA8IDApCi0JICAgIFBh
bmljKGVycm5vLCAiRm9ya1dpbmRvdyBkdXAyIik7Ci0JICBpZiAoc2xhdmUgPiAwKQotCSAgICBj
bG9zZShzbGF2ZSk7CisJICBjbG9zZSgwKTsKKwkgIGR1cChzbGF2ZSk7CisJICBjbG9zZShzbGF2
ZSk7CiAJICBjbG9zZWFsbGZpbGVzKHdpbi0+d19wdHlmZCk7Ci0JICBpZiAoZHVwMigwLCBzbGF2
ZSkgPCAwKQotCSAgICBQYW5pYyhlcnJubywgIkZvcmtXaW5kb3cgZHVwMiIpOwotCSAgaWYgKHNs
YXZlID4gMCkKLQkgICAgY2xvc2UoMCk7CisJICBzbGF2ZSA9IGR1cCgwKTsKIAl9CiAgICAgICBl
bHNlCiAgICAgICAgIGNsb3NlYWxsZmlsZXMod2luLT53X3B0eWZkKTsKQEAgLTEzMjAsMTAgKzEz
MTQsMTQgQEAKIAl9CiAgICAgICBkZWJ1ZzEoIj09PSBGb3JrV2luZG93OiBwaWQgJWRcbiIsIChp
bnQpZ2V0cGlkKCkpOwogI2VuZGlmCisgICAgICAvKiBDbG9zZSB0aGUgdGhyZWUgL2Rldi9udWxs
IGRlc2NyaXB0b3JzICovCisgICAgICBjbG9zZSgwKTsKKyAgICAgIGNsb3NlKDEpOworICAgICAg
Y2xvc2UoMik7CisgICAgICBuZXdmZCA9IC0xOwogICAgICAgLyoKICAgICAgICAqIGRpc3RyaWJ1
dGUgZmlsZWRlc2NyaXB0b3JzIGJldHdlZW4gdGhlIHR0eXMKICAgICAgICAqLwotICAgICAgbmV3
ZmQgPSAtMTsKICNpZmRlZiBQU0VVRE9TCiAgICAgICBwYXQgPSBwd2luID8gcHdpbi0+cF9mZHBh
dCA6IAogCQkgICAoKEZfUEZST05UPDwoRl9QU0hJRlQqMikpIHwgKEZfUEZST05UPDxGX1BTSElG
VCkgfCBGX1BGUk9OVCk7CkBAIC0xMzQ2LDEzICsxMzQ0LDEyIEBACiAJCSAgaWYgKG5ld2ZkIDwg
MCkKIAkJICAgIFBhbmljKGVycm5vLCAiQ2Fubm90IG9wZW4gJXMiLCB0dHluKTsKIAkJfQotCSAg
ICAgIGlmIChkdXAyKG5ld2ZkLCBpKSA8IDApCi0JCVBhbmljKGVycm5vLCAiQ2Fubm90IGR1cGxp
Y2F0ZSAlcyIsIHR0eW4pOworCSAgICAgIGVsc2UKKwkJZHVwKG5ld2ZkKTsKIAkgICAgfQogCSAg
ZWxzZQogCSAgICB7Ci0JICAgICAgaWYgKGR1cDIod2luLT53X3B0eWZkLCBpKSA8IDApCi0JCVBh
bmljKGVycm5vLCAiQ2Fubm90IGR1cGxpY2F0ZSAlcyIsIHdpbi0+d190dHkpOworCSAgICAgIGR1
cCh3aW4tPndfcHR5ZmQpOwogCSAgICAgIHdmZHVzZWQgPSAxOwogCSAgICB9CiAJfQpAQCAtMTM3
NSwxOCArMTM3MiwxMyBAQAogIyBlbHNlCiAgICAgICBuZXdmZCA9IG9wZW4odHR5biwgT19SRFdS
KTsKICMgZW5kaWYKLSAgICAgIGlmIChuZXdmZCA8IDApCisgICAgICBpZiAobmV3ZmQgIT0gMCkK
IAlQYW5pYyhlcnJubywgIkNhbm5vdCBvcGVuICVzIiwgdHR5bik7Ci0gICAgICBpZiAoZHVwMihu
ZXdmZCwgMCkgPCAwKQotCVBhbmljKGVycm5vLCAiQ2Fubm90IGR1cGxpY2F0ZSAlcyIsIHR0eW4p
OwotICAgICAgaWYgKGR1cDIobmV3ZmQsIDEpIDwgMCkKLQlQYW5pYyhlcnJubywgIkNhbm5vdCBk
dXBsaWNhdGUgJXMiLCB0dHluKTsKLSAgICAgIGlmIChkdXAyKG5ld2ZkLCAyKSA8IDApCi0JUGFu
aWMoZXJybm8sICJDYW5ub3QgZHVwbGljYXRlICVzIiwgdHR5bik7CisgICAgICBkdXAoMCk7Cisg
ICAgICBkdXAoMCk7CiAjZW5kaWYgLyogUFNFVURPUyAqLwotICAgICAgaWYgKHdpbi0+d19wdHlm
ZCA+IDIpCi0gICAgICAgIGNsb3NlKHdpbi0+d19wdHlmZCk7Ci0gICAgICBpZiAoc2xhdmUgPiAy
KQorICAgICAgY2xvc2Uod2luLT53X3B0eWZkKTsKKyAgICAgIGlmIChzbGF2ZSAhPSAtMSkKICAg
ICAgICAgY2xvc2Uoc2xhdmUpOwogICAgICAgaWYgKG5ld2ZkID49IDApCiAJewpAQCAtMTQzMiw4
ICsxNDI0LDYgQEAKIAkgIC8qIEFsd2F5cyB0dXJuIG9mZiBub25ibG9ja2luZyBtb2RlICovCiAJ
ICAodm9pZClmY250bChuZXdmZCwgRl9TRVRGTCwgMCk7CiAJfQotICAgICAgaWYgKG5ld2ZkID4g
MikKLQljbG9zZShuZXdmZCk7CiAjaWZuZGVmIFRJT0NTV0lOU1oKICAgICAgIHNwcmludGYobGli
dWYsICJMSU5FUz0lZCIsIGgpOwogICAgICAgc3ByaW50Zihjb2J1ZiwgIkNPTFVNTlM9JWQiLCB3
KTsKQEAgLTE3MTAsMTAgKzE3MDAsOCBAQAogICAgIH0KICNlbmRpZgogICAvKiBzaG91bGQgYmUg
YWJsZSB0byB1c2UgQ2xvc2VEZXZpY2UoKSBoZXJlICovCi0gIGlmIChmY2hvd24ocHdpbi0+cF9w
dHlmZCwgMCwgMCkgPCAwKQotICAgIDsKLSAgaWYgKGZjaG1vZChwd2luLT5wX3B0eWZkLCAwNjY2
KSA8IDApCi0gICAgOworICAodm9pZCljaG1vZChwd2luLT5wX3R0eSwgMDY2Nik7CisgICh2b2lk
KWNob3duKHB3aW4tPnBfdHR5LCAwLCAwKTsKICAgaWYgKHB3aW4tPnBfcHR5ZmQgPj0gMCkKICAg
ICBjbG9zZShwd2luLT5wX3B0eWZkKTsKICAgZXZkZXEoJnB3aW4tPnBfcmVhZGV2KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13359</attachid>
            <date>2023-06-01 15:54:05 +0300</date>
            <delta_ts>2023-06-01 15:54:05 +0300</delta_ts>
            <desc>Патч для spec-файла (4.9.0)</desc>
            <filename>screen-update-spec.patch</filename>
            <type>text/plain</type>
            <size>645</size>
            <attacher name="Danil Nazarov">idaniel959</attacher>
            
              <data encoding="base64">LS0tIHNjcmVlbi5zcGVjLm9yaWcJMjAyMy0wNi0wMSAxNDo0MjozNy4yNzcwNjU0MDIgKzAzMDAK
KysrIHNjcmVlbi5zcGVjCTIwMjMtMDUtMjggMjE6NTA6NDguMzAzNjk5NDAzICswMzAwCkBAIC0x
LDUgKzEsNSBAQAogTmFtZTogc2NyZWVuCi1WZXJzaW9uOiA0LjguMAorVmVyc2lvbjogNC45LjAK
IFJlbGVhc2U6IGFsdDIKIAogU3VtbWFyeTogQSBzY3JlZW4gbWFuYWdlciB0aGF0IHN1cHBvcnRz
IG11bHRpcGxlIHNlc3Npb25zIG9uIG9uZSB0ZXJtaW5hbApAQCAtMTE3LDYgKzExNyw5IEBACiAl
ZG9jIHNyYy9ORVdTIHNyYy9SRUFETUUgc3JjL0ZBUSBzcmMvZG9jL1JFQURNRS5ET1RTQ1JFRU4g
c3JjL2RvYy8qLnBzLioKIAogJWNoYW5nZWxvZworKiBTdW4gTWF5IDI4IDIwMjMgRGFuaWwgTmF6
YXJvdiA8aWRhbmllbDk1OUB5YW5kZXgucnU+IDQuOS4wLWFsdDIKKy0gVXBkYXRlZCB0byB2NC45
LjAKKwogKiBUaHUgTm92IDExIDIwMjEgVmxhZGltaXIgRC4gU2VsZXpuZXYgPHZzZWxlem52QGFs
dGxpbnV4Lm9yZz4gNC44LjAtYWx0MgogLSBBcHBsaWVkIFNVU0UgY29tYmNoYXIuZGlmZiB0byBw
cmV2ZW50IERvUyB2aWEgY3JhZnRlZCBVVEYtOCBjaGFyYWN0ZXIKICAgc2VxdWVuY2UgKGZpeGVz
IENWRS0yMDIxLTI2OTM3KS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>