<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>6670</bug_id>
          
          <creation_ts>2006-01-19 03:46:18 -0800</creation_ts>
          <short_desc>split html_miscimpl.* and move html_elementimpl.*</short_desc>
          <delta_ts>2006-01-20 02:22:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>28905</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-19 03:46:18 -0800</bug_when>
    <thetext>split html_miscimpl.* and move html_elementimpl.*

html_miscimpl.* becomes:
HTMLFormCollectionImpl.*
HTMLCollectionImpl.*
HTMLBaseFontElementImpl.*
HTMLNameCollectionImpl.*

html_elementimpl.* moves to HTMLElementImpl.*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28906</commentid>
    <comment_count>1</comment_count>
      <attachid>5781</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-19 03:47:48 -0800</bug_when>
    <thetext>Created attachment 5781
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28907</commentid>
    <comment_count>2</comment_count>
      <attachid>5781</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-01-19 03:48:43 -0800</bug_when>
    <thetext>Comment on attachment 5781
proposed patch.

I just used my split script like always... then went back through and fixe the
headers.  I also cleaned up a couple uses of namespace DOM and namespace khtml
while I was in there and removed a couple kdDebug calls.  That&apos;s it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>28920</commentid>
    <comment_count>3</comment_count>
      <attachid>5781</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-01-19 10:41:56 -0800</bug_when>
    <thetext>Comment on attachment 5781
proposed patch.

+template &lt;class T&gt; class QPtrVector;

I prefer &quot;typename T&quot; to &quot;class T&quot; in such lines and we&apos;ve been using that
syntax as much as possible.

Looks great, r=me.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5781</attachid>
            <date>2006-01-19 03:47:48 -0800</date>
            <delta_ts>2006-01-19 10:41:56 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>moves.patch</filename>
            <type>text/plain</type>
            <size>246241</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwv
eG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC94bWwvZG9t
Ml9yYW5nZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSAiZG9tL2RvbV9leGNlcHRpb24uaCIKICNpbmNsdWRlICJkb21fdGV4dGltcGwuaCIKICNpbmNs
dWRlICJkb21feG1saW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgImVkaXRpbmcvbWFya3VwLmgi
CiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmgiCkluZGV4OiBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIyMzYpCisr
KyBraHRtbC94bWwvRG9jdW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMs
NyBAQAogI2luY2x1ZGUgPHFwYWludGRldmljZW1ldHJpY3MuaD4KICNpbmNsdWRlIDxxcHRyc3Rh
Y2suaD4KICNpbmNsdWRlIDxxcmVnZXhwLmg+CisjaW5jbHVkZSAiSFRNTE5hbWVDb2xsZWN0aW9u
SW1wbC5oIgogCiAvLyBGSVhNRTogV2Ugd2FudCB0byBjdXQgdGhlIHJlbWFpbmluZyBIVE1MIGRl
cGVuZGVuY2llcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBmaWxlcy4K
ICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50SW1wbC5oIgpAQCAtNzEsNiArNzIsNyBAQAogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWlt
cGwuaCIKICNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
CiAjaWZkZWYgS0hUTUxfWFNMVAogI2luY2x1ZGUgInhzbF9zdHlsZXNoZWV0aW1wbC5oIgpJbmRl
eDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwveG1s
L2RvbV9lbGVtZW50aW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwveG1sL2RvbV9l
bGVtZW50aW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJodG1scGFyc2VyLmgiCiAjaW5jbHVkZSAicmVuZGVyX2NhbnZhcy5oIgogI2luY2x1ZGUgPHF0
ZXh0c3RyZWFtLmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApJbmRleDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJkb20y
X3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImRvbV90
ZXh0aW1wbC5oIgotI2luY2x1ZGUgImh0bWxfZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJIVE1M
RWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAi
aHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJodG1sbmFtZXMuaCIKSW5kZXg6IGtodG1sL2VkaXRp
bmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvZWRpdGluZy9h
cHBseV9zdHlsZV9jb21tYW5kLmNwcAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC9lZGl0aW5n
L2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBA
CiAjaW5jbHVkZSAiZG9tMl9yYW5nZWltcGwuaCIKICNpbmNsdWRlICJkb21fc3RyaW5nLmgiCiAj
aW5jbHVkZSAiZG9tX3RleHRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbF9lbGVtZW50aW1wbC5oIgor
I2luY2x1ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2Uu
aCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImh0bWxuYW1lcy5oIgpJbmRl
eDoga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2VkaXRpbmcv
bWFya3VwLmNwcAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJjc3MvY3NzX3ZhbHVl
aW1wbC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUg
ImVkaXRpbmcvdmlzaWJsZV91bml0cy5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1w
bC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fcG9z
aXRpb24uaCIKICNpbmNsdWRlICJ4bWwvZG9tX3htbGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9yYW5nZWltcGwuaCIKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCShyZXZpc2lvbiAxMjIzNikK
KysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEx
MCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQotICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0jaWZu
ZGVmIEhUTUxfRUxFTUVOVElNUExfSAotI2RlZmluZSBIVE1MX0VMRU1FTlRJTVBMX0gKLQotI2lu
Y2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJodG1sbmFtZXMuaCIKLQot
bmFtZXNwYWNlIERPTSB7Ci0KLWNsYXNzIERvY3VtZW50RnJhZ21lbnRJbXBsOwotY2xhc3MgRE9N
U3RyaW5nOwotY2xhc3MgSFRNTENvbGxlY3Rpb25JbXBsOwotCi1lbnVtIEhUTUxUYWdTdGF0dXMg
eyBUYWdTdGF0dXNPcHRpb25hbCwgVGFnU3RhdHVzUmVxdWlyZWQsIFRhZ1N0YXR1c0ZvcmJpZGRl
biB9OwotICAgICAgICAgICAgICAgICAgICAgICAKLWNsYXNzIEhUTUxFbGVtZW50SW1wbCA6IHB1
YmxpYyBTdHlsZWRFbGVtZW50SW1wbAotewotcHVibGljOgotICAgIEhUTUxFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudEltcGwgKmRvYyk7Ci0gICAgdmly
dHVhbCB+SFRNTEVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVO
YW1lKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwq
IGF0dHIpOwotCi0gICAgdmlydHVhbCBOb2RlSW1wbCogY2xvbmVOb2RlKGJvb2wgZGVlcCk7Ci0K
LSAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBjaGlsZHJlbigpOwotICAgIAotICAgIERP
TVN0cmluZyBpZCgpIGNvbnN0OwotICAgIHZvaWQgc2V0SWQoY29uc3QgRE9NU3RyaW5nICZ2YWx1
ZSk7Ci0gICAgRE9NU3RyaW5nIHRpdGxlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUaXRsZShjb25z
dCBET01TdHJpbmcgJnZhbHVlKTsKLSAgICBET01TdHJpbmcgbGFuZygpIGNvbnN0OwotICAgIHZv
aWQgc2V0TGFuZyhjb25zdCBET01TdHJpbmcgJnZhbHVlKTsKLSAgICBET01TdHJpbmcgZGlyKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXREaXIoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSk7Ci0gICAgRE9N
U3RyaW5nIGNsYXNzTmFtZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0Q2xhc3NOYW1lKGNvbnN0IERP
TVN0cmluZyAmdmFsdWUpOwotCi0gICAgRE9NU3RyaW5nIGlubmVySFRNTCgpIGNvbnN0OwotICAg
IERPTVN0cmluZyBvdXRlckhUTUwoKSBjb25zdDsKLSAgICBET01TdHJpbmcgaW5uZXJUZXh0KCkg
Y29uc3Q7Ci0gICAgRE9NU3RyaW5nIG91dGVyVGV4dCgpIGNvbnN0OwotICAgIERvY3VtZW50RnJh
Z21lbnRJbXBsICpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgRE9NU3RyaW5nICZodG1s
KTsKLSAgICB2b2lkIHNldElubmVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhj
ZXB0aW9uKTsKLSAgICB2b2lkIHNldE91dGVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGlu
dCAmZXhjZXB0aW9uKTsKLSAgICB2b2lkIHNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRl
eHQsIGludCAmZXhjZXB0aW9uKTsKLSAgICB2b2lkIHNldE91dGVyVGV4dChjb25zdCBET01TdHJp
bmcgJnRleHQsIGludCAmZXhjZXB0aW9uKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1
c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBjb250ZW50RWRpdGFibGUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50RWRpdGFibGUoY29uc3QgRE9NU3RyaW5nICZl
bmFibGVkKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGljayhib29sIHNlbmRNb3VzZUV2ZW50cyA9
IGZhbHNlLCBib29sIHNob3dQcmVzc2VkTG9vayA9IHRydWUpOwotICAgIHZpcnR1YWwgdm9pZCBh
Y2Nlc3NLZXlBY3Rpb24oYm9vbCBzZW5kVG9BbnlFbGVtZW50KTsKLQotICAgIHZpcnR1YWwgYm9v
bCBpc0dlbmVyaWNGb3JtRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2
aXJ0dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwotCi0gICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKE5vZGVJbXBsKiBu
ZXdDaGlsZCk7IC8vIEVycm9yLWNoZWNraW5nIGR1cmluZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRo
ZSBEVEQKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0aGUgRFREIGZvciBhIGdp
dmVuIGNoaWxkIG5vZGUuCi0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBs
KiBuZXdDaGlsZCk7Ci0gICAgc3RhdGljIGJvb2wgaW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCk7Ci0gICAgc3RhdGljIGJvb2wgaW5JbmxpbmVUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7Ci0gICAgc3RhdGljIGJvb2wgaW5CbG9ja1RhZ0xpc3QoY29uc3Qg
Tm9kZUltcGwqIG5ld0NoaWxkKTsKLSAgICBzdGF0aWMgYm9vbCBpc1JlY29nbml6ZWRUYWdOYW1l
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpOwotCi0gICAgdm9pZCBzZXRIVE1MRXZlbnRM
aXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQXR0cmlidXRlSW1wbCopOwot
Ci1wcm90ZWN0ZWQ6Ci0KLSAgICAvLyBmb3IgSU1HLCBPQkpFQ1QgYW5kIEFQUExFVAotICAgIHZv
aWQgYWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGVJbXBsKiBodG1sQXR0cik7Ci19Owot
Ci19IC8vbmFtZXNwYWNlCi0KLSNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9IVE1MQ29sbGVjdGlv
bkltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxDb2xsZWN0aW9uSW1wbC5oCShy
ZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjAsNDMg
KzIxLDI0IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5k
ZWYgSFRNTF9NSVNDSU1QTF9ICi0jZGVmaW5lIEhUTUxfTUlTQ0lNUExfSAorI2lmbmRlZiBIVE1M
Q29sbGVjdGlvbkltcGxfSAorI2RlZmluZSBIVE1MQ29sbGVjdGlvbkltcGxfSAogCi0jaW5jbHVk
ZSAiaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1ZGUgPHFw
dHJ2ZWN0b3IuaD4KICNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAKLW5hbWVzcGFjZSBE
T00gewordGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFFQdHJWZWN0b3I7Cit0ZW1wbGF0ZSA8Y2xh
c3MgVD4gY2xhc3MgUVZhbHVlTGlzdDsKIAotY2xhc3MgTm9kZTsKLWNsYXNzIERPTVN0cmluZzsK
LWNsYXNzIEhUTUxDb2xsZWN0aW9uOwotCi1jbGFzcyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6
IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MQmFzZUZvbnRFbGVt
ZW50SW1wbChEb2N1bWVudEltcGwgKmRvYyk7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KLQotICAgIERPTVN0cmluZyBjb2xvcigpIGNvbnN0OwotICAgIHZvaWQg
c2V0Q29sb3IoY29uc3QgRE9NU3RyaW5nICYpOwotCi0gICAgRE9NU3RyaW5nIGZhY2UoKSBjb25z
dDsKLSAgICB2b2lkIHNldEZhY2UoY29uc3QgRE9NU3RyaW5nICYpOwotCi0gICAgRE9NU3RyaW5n
IHNpemUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgRE9NU3RyaW5nICYpOwotfTsK
LQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgTm9kZUltcGw7CitjbGFzcyBET01TdHJpbmc7
CitjbGFzcyBET01TdHJpbmdJbXBsOworY2xhc3MgQXRvbWljU3RyaW5nOwogCiBjbGFzcyBIVE1M
Q29sbGVjdGlvbkltcGwgOiBwdWJsaWMgU2hhcmVkPEhUTUxDb2xsZWN0aW9uSW1wbD4KIHsKLSAg
ICBmcmllbmQgY2xhc3MgRE9NOjpIVE1MQ29sbGVjdGlvbjsKIHB1YmxpYzoKICAgICBlbnVtIFR5
cGUgewogICAgICAgICAvLyBmcm9tIEhUTUxEb2N1bWVudApAQCAtMTM3LDQ0ICsxMTksNiBAQCBw
cm90ZWN0ZWQ6CiAgICAgbXV0YWJsZSBib29sIG1fb3duc0luZm87CiB9OwogCi1jbGFzcyBIVE1M
TmFtZUNvbGxlY3Rpb25JbXBsIDogcHVibGljIEhUTUxDb2xsZWN0aW9uSW1wbAotewotcHVibGlj
OgotICAgIEhUTUxOYW1lQ29sbGVjdGlvbkltcGwoRG9jdW1lbnRJbXBsKiBfYmFzZSwgaW50IF90
eXBlLCBET01TdHJpbmcgJm5hbWUpOwotICAgIAotICAgIHZpcnR1YWwgTm9kZUltcGwgKnRyYXZl
cnNlTmV4dEl0ZW0oTm9kZUltcGwgKnN0YXJ0KSBjb25zdDsKLSBwcml2YXRlOgotICAgIERPTVN0
cmluZyBtX25hbWU7Ci19OwotCi0vLyB0aGlzIHdob2xlIGNsYXNzIGlzIGp1c3QgYSBiaWcgaGFj
ayB0byBmaW5kIGZvcm0gZWxlbWVudHMgZXZlbiBpbgotLy8gbWFsZm9ybWVkIEhUTUwgZWxlbWVu
dHMKLS8vIHRoZSBmYW1vdXMgPHRhYmxlPjx0cj48Zm9ybT48dGQ+IHByb2JsZW0KLWNsYXNzIEhU
TUxGb3JtQ29sbGVjdGlvbkltcGwgOiBwdWJsaWMgSFRNTENvbGxlY3Rpb25JbXBsCi17Ci1wdWJs
aWM6Ci0gICAgLy8gYmFzZSBtdXN0IGluaGVyaXQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwg
b3IgdGhpcyB3b24ndCB3b3JrCi0gICAgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbChOb2RlSW1wbCog
X2Jhc2UpOwotICAgIH5IVE1MRm9ybUNvbGxlY3Rpb25JbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIE5v
ZGVJbXBsICppdGVtICggdW5zaWduZWQgaW5kZXggKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJ
bXBsICpmaXJzdEl0ZW0oKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpuZXh0SXRlbSgp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqbmFtZWRJdGVtICggY29uc3QgRE9NU3Ry
aW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlICkgY29uc3Q7Ci0gICAgdmlydHVh
bCBOb2RlSW1wbCAqbmV4dE5hbWVkSXRlbSggY29uc3QgRE9NU3RyaW5nICZuYW1lICkgY29uc3Q7
Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTmFtZUNhY2hlKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYWxjTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBO
b2RlSW1wbCAqZ2V0TmFtZWRJdGVtKE5vZGVJbXBsKiBjdXJyZW50LCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhdHRyTmFtZSwgY29uc3QgRE9NU3RyaW5nJiBuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUp
IGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKm5leHROYW1lZEl0ZW1JbnRlcm5hbCggY29u
c3QgRE9NU3RyaW5nICZuYW1lICkgY29uc3Q7Ci1wcml2YXRlOgotICAgIE5vZGVJbXBsKiBnZXRO
YW1lZEZvcm1JdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBjb25zdCBET01TdHJp
bmcmIG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3Q7
Ci0gICAgbXV0YWJsZSBpbnQgY3VycmVudFBvczsKLX07Ci0KLQotfTsgLy9uYW1lc3BhY2UKK30g
Ly9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJKHJldmlzaW9uIDEy
MjM2KQorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsMTQgKzQyLDE0IEBACiAjaW5jbHVkZSAiY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaCIKICNpbmNs
dWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5o
IgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8a3VybC5oPgotI2luY2x1ZGUg
PGtkZWJ1Zy5oPgogCi11c2luZyBuYW1lc3BhY2UgRE9NOworbmFtZXNwYWNlIFdlYkNvcmUgewor
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7
Ci11c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxCYXNlRWxlbWVudEltcGw6OkhUTUxCYXNl
RWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MpCiAgICAgOiBIVE1MRWxlbWVudEltcGwoYmFz
ZVRhZywgZG9jKQpAQCAtMjc0LDEzICsyNzQsOSBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6
OnJlbW92ZWRGcm9tRG9jCiAKIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0U3R5bGVTaGVl
dChjb25zdCBET006OkRPTVN0cmluZyAmdXJsLCBjb25zdCBET006OkRPTVN0cmluZyAmc2hlZXRT
dHIpCiB7Ci0vLyAgICBrZERlYnVnKCA2MDMwICkgPDwgIkhUTUxMaW5rRWxlbWVudDo6c2V0U3R5
bGVTaGVldCgpIiA8PCBlbmRsOwotLy8gICAga2REZWJ1ZyggNjAzMCApIDw8ICIqKioqIGN1cnJl
bnQgbWVkaXVtOiAiIDw8IG1fbWVkaWEgPDwgZW5kbDsKLQogICAgIGlmIChtX3NoZWV0KQogICAg
ICAgICBtX3NoZWV0LT5kZXJlZigpOwogICAgIG1fc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldElt
cGwodGhpcywgdXJsKTsKLSAgICBrZERlYnVnKCA2MDMwICkgPDwgInN0eWxlIHNoZWV0IHBhcnNl
IG1vZGUgc3RyaWN0ID0gIiA8PCAoICFnZXREb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSApIDw8
IGVuZGw7CiAgICAgbV9zaGVldC0+cmVmKCk7CiAgICAgbV9zaGVldC0+cGFyc2VTdHJpbmcoIHNo
ZWV0U3RyLCAhZ2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkgKTsKIApAQCAtMjk2LDEwICsy
OTIsOCBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNldFN0eWxlU2hlZXQoCiAKIGJvb2wg
SFRNTExpbmtFbGVtZW50SW1wbDo6aXNMb2FkaW5nKCkgY29uc3QKIHsKLS8vICAgIGtkRGVidWco
IDYwMzAgKSA8PCAibGluazogY2hlY2tpbmcgaWYgbG9hZGluZyEiIDw8IGVuZGw7CiAgICAgaWYo
bV9sb2FkaW5nKSByZXR1cm4gdHJ1ZTsKICAgICBpZighbV9zaGVldCkgcmV0dXJuIGZhbHNlOwot
ICAgIC8vaWYoIW1fc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsICo+KG1fc2hlZXQpLT5pc0xvYWRp
bmcoKTsKIH0KIApAQCAtODg3LDMgKzg4MSw1IEBAIHZvaWQgSFRNTFRpdGxlRWxlbWVudEltcGw6
OnNldFRleHQoY29uc3QKICAgICAgICAgYXBwZW5kQ2hpbGQoZ2V0RG9jdW1lbnQoKS0+Y3JlYXRl
VGV4dE5vZGUodmFsdWUuaW1wbCgpKSwgZXhjZXB0aW9uY29kZSk7CiAgICAgfQogfQorCit9Cklu
ZGV4OiBraHRtbC9odG1sL0hUTUxMZWdlbmRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2h0bWwvaHRtbC9IVE1MTGVnZW5kRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjIzNikKKysr
IGtodG1sL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTAgKzI4LDkgQEAKICNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudEltcGwuaCIKIAogI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfZm9ybS5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
Ci11c2luZyBuYW1lc3BhY2Uga2h0bWw7Ci0KLW5hbWVzcGFjZSBET00geworbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCkluZGV4OiBraHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1w
bC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDE2IEBACiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgi
CiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgImxvYWRlci5oIgotI2luY2x1
ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgot
I2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiZG9tX3N0cmluZy5oIgorI2lu
Y2x1ZGUgImRvbTJfZXZlbnRzaW1wbC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNs
dWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPGt1cmwuaD4KICNpbmNsdWRlIDxrZGVidWcu
aD4KIAotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFt
ZXM7Ci11c2luZyBuYW1lc3BhY2Uga2h0bWw7CituYW1lc3BhY2UgV2ViQ29yZSB7Cit1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxC
b2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MpCkBA
IC0xMDA0LDMgKzEwMDQsNSBAQCB2b2lkIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6c2V0V2lkdGgo
Y29uCiB7CiAgICAgc2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgdmFsdWUpOwogfQorCit9CkluZGV4
OiBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1s
L2h0bWwvSFRNTEZvcm1FbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwv
aHRtbC9IVE1MRm9ybUVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50SW1w
bC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtQ29sbGVjdGlvbkltcGwuaCIKICNpbmNsdWRlICJodG1s
X2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAi
Y3NzaGVscGVyLmgiIC8vIEZvciBrdGhtbDo6cGFyc2VVUkwKQEAgLTM3LDEwICszOCw5IEBACiAj
aW5jbHVkZSAiRnJhbWUuaCIKIAogI2luY2x1ZGUgPHF0ZXh0Y29kZWMuaD4KKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIGtodG1sOwotCi1uYW1lc3BhY2UgRE9NIHsK
K25hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJKHJldmlzaW9u
IDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDcgQEAKICNpbmNsdWRlICJjc3N2YWx1ZXMuaCIKICNpbmNsdWRlICJodG1s
X2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcl9pbWFnZS5oIgotCi0vLyAjZGVmaW5l
IElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgJKHJldmlz
aW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNywxMyArMjcsMTMgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50SW1wbC5oIgogI2lu
Y2x1ZGUgIkNhY2hlZE9iamVjdENsaWVudC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1w
bC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uSW1wbC5oIgogI2luY2x1ZGUgPGt4bWxjb3Jl
L0hhc2hNYXAuaD4KIAogY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgUVN0cmluZzsKIAotbmFtZXNw
YWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxFbGVtZW50SW1wbDsK
IApJbmRleDoga2h0bWwvaHRtbC9IVE1MQnV0dG9uRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtodG1sL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIyMzYp
CisrKyBraHRtbC9odG1sL0hUTUxCdXR0b25FbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCw5IEBACiAjaW5jbHVkZSAicmVuZGVyX2J1dHRvbi5oIgogCiAjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCi11c2luZyBuYW1lc3Bh
Y2Uga2h0bWw7Ci0KLW5hbWVzcGFjZSBET00geworbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0
bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MjIgKzAsMCBAQAotLyoq
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0g
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0g
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vI2RlZmluZSBERUJVRwotLy8jZGVmaW5lIERFQlVHX0xBWU9VVAotLy8jZGVmaW5lIFBB
Ul9ERUJVRwotLy8jZGVmaW5lIEVWRU5UX0RFQlVHCi0vLyNkZWZpbmUgVU5TVVBQT1JURURfQVRU
UgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
aHRtbHRva2VuaXplci5oIgotI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCi0KLSNpbmNsdWRlIDxr
eG1sY29yZS9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3RleHQuaCIKLQot
I2luY2x1ZGUgIkZyYW1lLmgiCi0KLSNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgotI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCi0jaW5jbHVkZSAicmVuZGVyaW5nL3Jl
bmRlcl9yZXBsYWNlZC5oIgotI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCi0jaW5jbHVk
ZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgotI2luY2x1ZGUgImNzc3Byb3BlcnRpZXMuaCIK
LSNpbmNsdWRlICJjc3N2YWx1ZXMuaCIKLSNpbmNsdWRlICJjc3MvY3NzX3J1bGVpbXBsLmgiCi0j
aW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgotI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2lt
cGwuaCIKLSNpbmNsdWRlICJ4bWwvRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgImVkaXRpbmcvbWFy
a3VwLmgiCi0KLSNpbmNsdWRlIDxrZGVidWcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVz
aW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFtZXM7Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwotdXNpbmcgbmFtZXNwYWNlIGtodG1sOwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEVsZW1lbnRJ
bXBsOjpIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRJbXBsICpkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCi17Ci19
Ci0KLUhUTUxFbGVtZW50SW1wbDo6fkhUTUxFbGVtZW50SW1wbCgpCi17Ci19Ci0KLURPTVN0cmlu
ZyBIVE1MRWxlbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV291
bGQgYmUgbmljZSB0byBoYXZlIGFuIGF0b21pY3N0cmluZyBsb29rdXAgYmFzZWQgb2ZmIHVwcGVy
Y2FzZSBjaGFycyB0aGF0IGRvZXMgbm90IGhhdmUgdG8gY29weQotICAgIC8vIHRoZSBzdHJpbmcg
b24gYSBoaXQgaW4gdGhlIGhhc2guCi0gICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpCi0gICAgICAgIHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkuaW1wbCgpLT51cHBl
cigpOwotICAgIHJldHVybiBFbGVtZW50SW1wbDo6bm9kZU5hbWUoKTsKLX0KLSAgICAKLUhUTUxU
YWdTdGF0dXMgSFRNTEVsZW1lbnRJbXBsOjplbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGhhc0xvY2FsTmFtZShkdFRhZykgfHwgaGFzTG9jYWxOYW1lKGRkVGFnKSkKLSAgICAg
ICAgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOwotCi0gICAgLy8gU2FtZSB2YWx1ZXMgYXMgPHNw
YW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZlIGxpa2Ug
aW5saW5lIHNwYW5zLgotICAgIHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsKLX0KLQotaW50IEhU
TUxFbGVtZW50SW1wbDo6dGFnUHJpb3JpdHkoKSBjb25zdAotewotICAgIGlmIChoYXNMb2NhbE5h
bWUoYWRkcmVzc1RhZykgfHwgaGFzTG9jYWxOYW1lKGRkVGFnKSB8fCBoYXNMb2NhbE5hbWUoZHRU
YWcpIHx8IGhhc0xvY2FsTmFtZShub3NjcmlwdFRhZykpCi0gICAgICAgIHJldHVybiAzOwotICAg
IGlmIChoYXNMb2NhbE5hbWUoY2VudGVyVGFnKSB8fCBoYXNMb2NhbE5hbWUobm9iclRhZykpCi0g
ICAgICAgIHJldHVybiA1OwotICAgIGlmIChoYXNMb2NhbE5hbWUobm9lbWJlZFRhZykgfHwgaGFz
TG9jYWxOYW1lKG5vZnJhbWVzVGFnKSkKLSAgICAgICAgcmV0dXJuIDEwOwotCi0gICAgLy8gU2Ft
ZSB2YWx1ZXMgYXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdp
bGwgYmVoYXZlIGxpa2UgaW5saW5lIHNwYW5zLgotICAgIHJldHVybiAxOwotfQotCi1Ob2RlSW1w
bCAqSFRNTEVsZW1lbnRJbXBsOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQotewotICAgIEhUTUxFbGVt
ZW50SW1wbCAqY2xvbmUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KG1f
dGFnTmFtZS5sb2NhbE5hbWUoKSwgZ2V0RG9jdW1lbnQoKSwgMCwgZmFsc2UpOwotICAgIGlmICgh
Y2xvbmUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG5hbWVkQXR0ck1hcCkKLSAgICAg
ICAgKmNsb25lLT5hdHRyaWJ1dGVzKCkgPSAqbmFtZWRBdHRyTWFwOwotCi0gICAgaWYgKG1faW5s
aW5lU3R5bGVEZWNsKQotICAgICAgICAqY2xvbmUtPmdldElubGluZVN0eWxlRGVjbCgpID0gKm1f
aW5saW5lU3R5bGVEZWNsOwotCi0gICAgY2xvbmUtPmNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVz
KHRoaXMpOwotCi0gICAgaWYgKGRlZXApCi0gICAgICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7
Ci0KLSAgICByZXR1cm4gY2xvbmU7Ci19Ci0KLWJvb2wgSFRNTEVsZW1lbnRJbXBsOjptYXBUb0Vu
dHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAotewotICAgIGlmIChhdHRyTmFtZSA9PSBhbGlnbkF0dHIgfHwKLSAgICAg
ICAgYXR0ck5hbWUgPT0gY29udGVudGVkaXRhYmxlQXR0cikgewotICAgICAgICByZXN1bHQgPSBl
VW5pdmVyc2FsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhdHRyTmFt
ZSA9PSBkaXJBdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGhhc1RhZ05hbWUoYmRvVGFnKSA/IGVC
RE8gOiBlVW5pdmVyc2FsOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIFN0eWxlZEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotfQot
ICAgIAotdm9pZCBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpCi17Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9PSBpZEF0dHIgfHwg
YXR0ci0+bmFtZSgpID09IGNsYXNzQXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gc3R5bGVBdHRyKQot
ICAgICAgICByZXR1cm4gU3R5bGVkRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwotCi0gICAgRE9NU3RyaW5nIGluZGV4c3RyaW5nOwotICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAibWlkZGxlIikpCi0gICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9URVhUX0FMSUdOLCAiY2VudGVyIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1RFWFRfQUxJR04sIGF0dHItPnZhbHVlKCkpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGNvbnRlbnRlZGl0YWJsZUF0dHIpIHsKLSAgICAg
ICAgc2V0Q29udGVudEVkaXRhYmxlKGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IHRhYmluZGV4QXR0cikgewotICAgICAgICBpbmRleHN0cmluZyA9IGdldEF0dHJpYnV0ZSh0
YWJpbmRleEF0dHIpOwotICAgICAgICBpZiAoaW5kZXhzdHJpbmcubGVuZ3RoKCkpCi0gICAgICAg
ICAgICBzZXRUYWJJbmRleChpbmRleHN0cmluZy50b0ludCgpKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBsYW5nQXR0cikgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZGlyQXR0cikgewotICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9ESVJFQ1RJT04sIGF0dHItPnZhbHVlKCkpOwotICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9VTklDT0RFX0JJREksIGhhc1RhZ05hbWUo
YmRvVGFnKSA/IENTU19WQUxfQklESV9PVkVSUklERSA6IENTU19WQUxfRU1CRUQpOwotICAgIH0K
LS8vIHN0YW5kYXJkIGV2ZW50cwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNsaWNr
QXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihjbGlja0V2ZW50LCBhdHRyKTsK
LSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNvbnRleHRtZW51QXR0cikgewotICAg
IAlzZXRIVE1MRXZlbnRMaXN0ZW5lcihjb250ZXh0bWVudUV2ZW50LCBhdHRyKTsKLSAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRibGNsaWNrQXR0cikgewotCXNldEhUTUxFdmVudExp
c3RlbmVyKGtodG1sRGJsY2xpY2tFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gb25tb3VzZWRvd25BdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVy
KG1vdXNlZG93bkV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bm1vdXNlbW92ZUF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIobW91c2Vtb3Zl
RXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdXRB
dHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKG1vdXNlb3V0RXZlbnQsIGF0dHIp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ubW91c2VvdmVyQXR0cikgewotICAg
ICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihtb3VzZW92ZXJFdmVudCwgYXR0cik7Ci0gICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25tb3VzZXVwQXR0cikgewotICAgICAgICBzZXRIVE1M
RXZlbnRMaXN0ZW5lcihtb3VzZXVwRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9ubW91c2V3aGVlbEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIobW91c2V3aGVlbEV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmZvY3VzQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihET01Gb2N1c0lu
RXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmx1ckF0dHIp
IHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoRE9NRm9jdXNPdXRFdmVudCwgYXR0cik7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25rZXlkb3duQXR0cikgewotICAgICAg
ICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihrZXlkb3duRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9ua2V5cHJlc3NBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVu
dExpc3RlbmVyKGtleXByZXNzRXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9ua2V5dXBBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGtleXVw
RXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uc2Nyb2xsQXR0
cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzY3JvbGxFdmVudCwgYXR0cik7Ci0g
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVjdXRBdHRyKSB7Ci0gICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKGJlZm9yZWN1dEV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBvbmN1dEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlz
dGVuZXIoY3V0RXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
YmVmb3JlY29weUF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYmVmb3JlY29w
eUV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmNvcHlBdHRy
KSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGNvcHlFdmVudCwgYXR0cik7Ci0gICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVwYXN0ZUF0dHIpIHsKLSAgICAgICAg
c2V0SFRNTEV2ZW50TGlzdGVuZXIoYmVmb3JlcGFzdGVFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25wYXN0ZUF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50
TGlzdGVuZXIocGFzdGVFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gb25kcmFnZW50ZXJBdHRyKSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdl
bnRlckV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdv
dmVyQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihkcmFnb3ZlckV2ZW50LCBh
dHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdsZWF2ZUF0dHIpIHsK
LSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ2xlYXZlRXZlbnQsIGF0dHIpOwotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uZHJvcEF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoZHJvcEV2ZW50LCBhdHRyKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmRyYWdzdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
ZHJhZ3N0YXJ0RXZlbnQsIGF0dHIpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9u
ZHJhZ0F0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZHJhZ0V2ZW50LCBhdHRy
KTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmRyYWdlbmRBdHRyKSB7Ci0gICAg
ICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGRyYWdlbmRFdmVudCwgYXR0cik7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gb25zZWxlY3RzdGFydEF0dHIpIHsKLSAgICAgICAgc2V0SFRN
TEV2ZW50TGlzdGVuZXIoc2VsZWN0c3RhcnRFdmVudCwgYXR0cik7Ci0gICAgfSAKLX0KLQotRE9N
U3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6aW5uZXJIVE1MKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y3JlYXRlTWFya3VwKHRoaXMsIENoaWxkcmVuT25seSk7Ci19Ci0KLURPTVN0cmluZyBIVE1MRWxl
bWVudEltcGw6Om91dGVySFRNTCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0
aGlzKTsKLX0KLQotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6aW5uZXJUZXh0KCkgY29uc3QK
LXsKLSAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSBsYXlvdXQsIHNpbmNlIHBsYWluVGV4dCB1c2Vz
IGxpbmUgYm94ZXMgaW4gdGhlIHJlbmRlciB0cmVlLgotICAgIGdldERvY3VtZW50KCktPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBwbGFpblRleHQo
cmFuZ2VPZkNvbnRlbnRzKGNvbnN0X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHRoaXMpKS5nZXQo
KSk7Ci19Ci0KLURPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om91dGVyVGV4dCgpIGNvbnN0Ci17
Ci0gICAgLy8gR2V0dGluZyBvdXRlclRleHQgaXMgdGhlIHNhbWUgYXMgZ2V0dGluZyBpbm5lclRl
eHQsIG9ubHkKLSAgICAvLyBzZXR0aW5nIGlzIGRpZmZlcmVudC4gWW91IHdvdWxkIHRoaW5rIHRo
aXMgc2hvdWxkIGdldCB0aGUgcGxhaW4KLSAgICAvLyB0ZXh0IGZvciB0aGUgb3V0ZXIgcmFuZ2Us
IGJ1dCB0aGlzIGlzIHdyb25nLCA8YnI+IGZvciBpbnN0YW5jZQotICAgIC8vIHdvdWxkIHJldHVy
biBkaWZmZXJlbnQgdmFsdWVzIGZvciBpbm5lciBhbmQgb3V0ZXIgdGV4dCBieSBzdWNoCi0gICAg
Ly8gYSBydWxlLCBidXQgaXQgZG9lc24ndCBpbiBXaW5JRSwgYW5kIHdlIHdhbnQgdG8gbWF0Y2gg
dGhhdC4KLSAgICByZXR1cm4gaW5uZXJUZXh0KCk7Ci19Ci0KLURvY3VtZW50RnJhZ21lbnRJbXBs
ICpIVE1MRWxlbWVudEltcGw6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBET01TdHJp
bmcgJmh0bWwpCi17Ci0gICAgLy8gdGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRhbmNlIHdpdGgg
dGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRQotICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgp
ID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaGFz
TG9jYWxOYW1lKGNvbFRhZykgfHwgaGFzTG9jYWxOYW1lKGNvbGdyb3VwVGFnKSB8fCBoYXNMb2Nh
bE5hbWUoZnJhbWVzZXRUYWcpIHx8Ci0gICAgICAgIGhhc0xvY2FsTmFtZShoZWFkVGFnKSB8fCBo
YXNMb2NhbE5hbWUoc3R5bGVUYWcpIHx8IGhhc0xvY2FsTmFtZSh0aXRsZVRhZykpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERv
Y3VtZW50RnJhZ21lbnRJbXBsKGdldERvY3VtZW50KCkpOwotICAgIGZyYWdtZW50LT5yZWYoKTsK
LSAgICAKLSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAg
IHBhcnNlSFRNTERvY3VtZW50RnJhZ21lbnQoaHRtbCwgZnJhZ21lbnQpOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAoIXBhcnNlWE1MRG9jdW1lbnRGcmFnbWVudChodG1sLCBmcmFnbWVudCwgdGhp
cykpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvcGFnYXRlIGEgc3ludGF4
IGVycm9yIGV4Y2VwdGlvbiBvdXQgaGVyZS4KLSAgICAgICAgICAgIGZyYWdtZW50LT5kZXJlZigp
OwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBFeGNl
cHRpb25zIGFyZSBpZ25vcmVkIGJlY2F1c2Ugbm9uZSBvdWdodCB0byBoYXBwZW4gaGVyZS4KLSAg
ICBpbnQgaWdub3JlZEV4Y2VwdGlvbkNvZGU7Ci0KLSAgICAvLyB3ZSBuZWVkIHRvIHBvcCA8aHRt
bD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFjY29t
bW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUK
LSAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgotCi0gICAgTm9kZUltcGwgKm5leHROb2RlOwot
ICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlICE9
IE5VTEw7IG5vZGUgPSBuZXh0Tm9kZSkgewotICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7Ci0Jbm9kZS0+cmVmKCk7Ci0gICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGh0
bWxUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpIHsKLQkgICAgTm9kZUltcGwgKmZp
cnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBpZiAoZmlyc3RDaGls
ZCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwotICAg
ICAgICAgICAgfQotCSAgICBOb2RlSW1wbCAqbmV4dENoaWxkOwotICAgICAgICAgICAgZm9yIChO
b2RlSW1wbCAqY2hpbGQgPSBmaXJzdENoaWxkOyBjaGlsZCAhPSBOVUxMOyBjaGlsZCA9IG5leHRD
aGlsZCkgewotCQluZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAg
ICAgICBjaGlsZC0+cmVmKCk7Ci0gICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlQ2hpbGQoY2hp
bGQsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQkJZnJhZ21lbnQtPmluc2VydEJlZm9yZShjaGls
ZCwgbm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotICAgICAgICAgICAgICAgIGNoaWxkLT5k
ZXJlZigpOwotCSAgICB9Ci0gICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZSwg
aWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShoZWFk
VGFnKSkKLQkgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25D
b2RlKTsKLQotICAgICAgICAvLyBJbXBvcnRhbnQgdG8gZG8gdGhpcyBkZXJlZiBhZnRlciByZW1v
dmVDaGlsZCwgYmVjYXVzZSBpZiB0aGUgb25seSB0aGluZwotICAgICAgICAvLyBrZWVwaW5nIGEg
bm9kZSBhcm91bmQgaXMgYSBwYXJlbnQgdGhhdCBpcyBub24tMCwgcmVtb3ZlQ2hpbGQgd2lsbCBu
b3QKLSAgICAgICAgLy8gZGVsZXRlIHRoZSBub2RlLiBUaGlzIHdvcmtzIGZpbmUgaW4gSmF2YVNj
cmlwdCBiZWNhdXNlIHRoZXJlJ3MgYWx3YXlzCi0gICAgICAgIC8vIGEgcmVmIG9mIHRoZSBub2Rl
LCBidXQgaGVyZSBpbiBDKysgd2UgbmVlZCB0byBkbyBpdCBleHBsaWNpdGx5LgotICAgICAgICBu
b2RlLT5kZXJlZigpOwotICAgIH0KLQotICAgIC8vIFRyaWNrIHRvIGdldCB0aGUgZnJhZ21lbnQg
YmFjayB0byB0aGUgZmxvYXRpbmcgc3RhdGUsIHdpdGggMAotICAgIC8vIHJlZnMgYnV0IG5vdCBk
ZXN0cm95ZWQuCi0gICAgZnJhZ21lbnQtPnNldFBhcmVudCh0aGlzKTsKLSAgICBmcmFnbWVudC0+
ZGVyZWYoKTsKLSAgICBmcmFnbWVudC0+c2V0UGFyZW50KDApOwotCi0gICAgcmV0dXJuIGZyYWdt
ZW50OwotfQotCi12b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJIVE1MKGNvbnN0IERPTVN0
cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pCi17Ci0gICAgRG9jdW1lbnRGcmFnbWVudEltcGwg
KmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOwotICAgIGlmIChmcmFn
bWVudCA9PSBOVUxMKSB7Ci0JZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZW1vdmVDaGls
ZHJlbigpOwotICAgIGFwcGVuZENoaWxkKGZyYWdtZW50LCBleGNlcHRpb24pOwotfQotCi12b2lk
IEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNvbnN0IERPTVN0cmluZyAmaHRtbCwgaW50
ICZleGNlcHRpb24pCi17Ci0gICAgTm9kZUltcGwgKnAgPSBwYXJlbnQoKTsKLSAgICBpZiAoIXAg
fHwgIXAtPmlzSFRNTEVsZW1lbnQoKSkgewotCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9f
TU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEhU
TUxFbGVtZW50SW1wbCAqcGFyZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHAp
OwotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50KGh0bWwpOwotCi0gICAgaWYgKCFmcmFnbWVudCkgewotCWV4Y2VwdGlv
biA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIHJlZigpOwotICAgIHBhcmVudC0+cmVwbGFjZUNoaWxk
KGZyYWdtZW50LCB0aGlzLCBleGNlcHRpb24pOwotICAgIGRlcmVmKCk7Ci19Ci0KLQotdm9pZCBI
VE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAm
ZXhjZXB0aW9uKQotewotICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYgKGVu
ZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7Ci0JZXhjZXB0aW9uID0g
RE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaGFzTG9jYWxOYW1lKGNvbFRhZykgfHwgaGFzTG9jYWxOYW1l
KGNvbGdyb3VwVGFnKSB8fCBoYXNMb2NhbE5hbWUoZnJhbWVzZXRUYWcpIHx8Ci0gICAgICAgIGhh
c0xvY2FsTmFtZShoZWFkVGFnKSB8fCBoYXNMb2NhbE5hbWUoaHRtbFRhZykgfHwgaGFzTG9jYWxO
YW1lKHRhYmxlVGFnKSB8fCAKLSAgICAgICAgaGFzTG9jYWxOYW1lKHRib2R5VGFnKSB8fCBoYXNM
b2NhbE5hbWUodGZvb3RUYWcpIHx8IGhhc0xvY2FsTmFtZSh0aGVhZFRhZykgfHwKLSAgICAgICAg
aGFzTG9jYWxOYW1lKHRyVGFnKSkgewotICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246
Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHJlbW92ZUNoaWxkcmVuKCk7Ci0gICAgYXBwZW5kQ2hpbGQobmV3IFRleHRJbXBsKGdldERv
Y3VtZW50KCksIHRleHQpLCBleGNlcHRpb24pOwotfQotCi12b2lkIEhUTUxFbGVtZW50SW1wbDo6
c2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pCi17Ci0g
ICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQo
KSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pIHsKLQlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChoYXNMb2NhbE5hbWUoY29sVGFnKSB8fCBoYXNMb2NhbE5hbWUoY29sZ3JvdXBUYWcpIHx8
IGhhc0xvY2FsTmFtZShmcmFtZXNldFRhZykgfHwKLSAgICAgICAgaGFzTG9jYWxOYW1lKGhlYWRU
YWcpIHx8IGhhc0xvY2FsTmFtZShodG1sVGFnKSB8fCBoYXNMb2NhbE5hbWUodGFibGVUYWcpIHx8
IAotICAgICAgICBoYXNMb2NhbE5hbWUodGJvZHlUYWcpIHx8IGhhc0xvY2FsTmFtZSh0Zm9vdFRh
ZykgfHwgaGFzTG9jYWxOYW1lKHRoZWFkVGFnKSB8fAotICAgICAgICBoYXNMb2NhbE5hbWUodHJU
YWcpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTm9kZUltcGwgKnBh
cmVudCA9IHBhcmVudE5vZGUoKTsKLQotICAgIGlmICghcGFyZW50KSB7Ci0gICAgICAgIGV4Y2Vw
dGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgVGV4dEltcGwgKnQgPSBuZXcgVGV4dEltcGwoZ2V0RG9j
dW1lbnQoKSwgdGV4dCk7Ci0gICAgcmVmKCk7Ci0gICAgcGFyZW50LT5yZXBsYWNlQ2hpbGQodCwg
dGhpcywgZXhjZXB0aW9uKTsKLSAgICBkZXJlZigpOwotICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIGlzIHByZXZpb3VzIG5vZGUgYSB0ZXh0IG5vZGU/IGlmIHNv
LCBtZXJnZSBpbnRvIGl0Ci0gICAgTm9kZUltcGwgKnByZXYgPSB0LT5wcmV2aW91c1NpYmxpbmco
KTsKLSAgICBpZiAocHJldiAmJiBwcmV2LT5pc1RleHROb2RlKCkpIHsKLQlUZXh0SW1wbCAqdGV4
dFByZXYgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihwcmV2KTsKLQl0ZXh0UHJldi0+YXBwZW5k
RGF0YSh0LT5kYXRhKCksIGV4Y2VwdGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIHQtPnJlbW92ZShleGNlcHRpb24pOwotICAgICAgICBp
ZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuOwotCXQgPSB0ZXh0UHJldjsKLSAgICB9
Ci0KLSAgICAvLyBpcyBuZXh0IG5vZGUgYSB0ZXh0IG5vZGU/IGlmIHNvLCBtZXJnZSBpdCBpbgot
ICAgIE5vZGVJbXBsICpuZXh0ID0gdC0+bmV4dFNpYmxpbmcoKTsKLSAgICBpZiAobmV4dCAmJiBu
ZXh0LT5pc1RleHROb2RlKCkpIHsKLQlUZXh0SW1wbCAqdGV4dE5leHQgPSBzdGF0aWNfY2FzdDxU
ZXh0SW1wbCAqPihuZXh0KTsKLQl0LT5hcHBlbmREYXRhKHRleHROZXh0LT5kYXRhKCksIGV4Y2Vw
dGlvbik7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHRleHROZXh0LT5yZW1vdmUoZXhjZXB0aW9uKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgSFRNTEVsZW1lbnRJbXBsOjph
ZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpCi17Ci0gICAgLy8gdmVy
dGljYWwgYWxpZ25tZW50IHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCBiYXNlbGluZSBvZiB0
aGUgdGV4dAotICAgIC8vIHJpZ2h0IG9yIGxlZnQgbWVhbnMgZmxvYXRpbmcgaW1hZ2VzCi0gICAg
aW50IHByb3BmbG9hdCA9IC0xOwotICAgIGludCBwcm9wdmFsaWduID0gLTE7Ci0gICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlnbm1lbnQgPSBhdHRyLT52YWx1ZSgpOwotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShhbGlnbm1lbnQsICJhYnNtaWRkbGUiKSkgewotICAgICAgICBwcm9wdmFsaWdu
ID0gQ1NTX1ZBTF9NSURETEU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGln
bm1lbnQsICJhYnNib3R0b20iKSkgewotICAgICAgICBwcm9wdmFsaWduID0gQ1NTX1ZBTF9CT1RU
T007Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGlnbm1lbnQsICJsZWZ0Iikp
IHsKLQlwcm9wZmxvYXQgPSBDU1NfVkFMX0xFRlQ7Ci0JcHJvcHZhbGlnbiA9IENTU19WQUxfVE9Q
OwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAicmlnaHQiKSkg
ewotCXByb3BmbG9hdCA9IENTU19WQUxfUklHSFQ7Ci0JcHJvcHZhbGlnbiA9IENTU19WQUxfVE9Q
OwotICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYWxpZ25tZW50LCAidG9wIikpIHsK
LQlwcm9wdmFsaWduID0gQ1NTX1ZBTF9UT1A7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhbGlnbm1lbnQsICJtaWRkbGUiKSkgewotCXByb3B2YWxpZ24gPSBDU1NfVkFMX19LSFRN
TF9CQVNFTElORV9NSURETEU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhbGln
bm1lbnQsICJjZW50ZXIiKSkgewotCXByb3B2YWxpZ24gPSBDU1NfVkFMX01JRERMRTsKLSAgICB9
IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGFsaWdubWVudCwgImJvdHRvbSIpKSB7Ci0JcHJv
cHZhbGlnbiA9IENTU19WQUxfQkFTRUxJTkU7Ci0gICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShhbGlnbm1lbnQsICJ0ZXh0dG9wIikpIHsKLQlwcm9wdmFsaWduID0gQ1NTX1ZBTF9URVhU
X1RPUDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCBwcm9wZmxvYXQgIT0gLTEgKQotCWFkZENTU1By
b3BlcnR5KCBhdHRyLCBDU1NfUFJPUF9GTE9BVCwgcHJvcGZsb2F0ICk7Ci0gICAgaWYgKCBwcm9w
dmFsaWduICE9IC0xICkKLQlhZGRDU1NQcm9wZXJ0eSggYXR0ciwgQ1NTX1BST1BfVkVSVElDQUxf
QUxJR04sIHByb3B2YWxpZ24gKTsKLX0KLQotYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzRm9jdXNh
YmxlKCkgY29uc3QKLXsKLSAgICAvLyBBZGRlZCB0aGUgY2hlY2sgZm9yICFwYXJlbnQoKSBzbyBz
aGFkb3cgZWxlbWVudHMsIGxpa2UgdGhvc2UgaW4gZW5naW5lLWJhc2VkIHRleHRmaWVsZHMsIGNh
biBnZXQgZm9jdXMuCi0gICAgLy8gV2UgbWF5IHJlZXZhbHVhdGUgdGhpcyB3aGVuIHdlIHJlc29s
dmUgb3V0c3RhbmRpbmcgZm9jdXMgaXNzdWVzIHdpdGggdGhlc2Ugc2hhZG93IGVsZW1lbnRzLgot
ICAgIHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZSgpICYmICgocGFyZW50KCkgJiYgIXBhcmVudCgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB8fCAhcGFyZW50KCkpOwotfQotCi1ib29sIEhUTUxFbGVt
ZW50SW1wbDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCAKLXsKLSAgICBpZiAoZ2V0RG9jdW1l
bnQoKS0+ZnJhbWUoKSAmJiBnZXREb2N1bWVudCgpLT5mcmFtZSgpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGdldERvY3VtZW50KCktPnVwZGF0ZVJl
bmRlcmluZygpOwotCi0gICAgaWYgKCFyZW5kZXJlcigpKSB7Ci0gICAgICAgIGlmIChwYXJlbnRO
b2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJs
ZSgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9X
UklURTsKLX0KLQotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6Y29udGVudEVkaXRhYmxlKCkg
Y29uc3QgCi17Ci0gICAgZ2V0RG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7Ci0KLSAgICBp
ZiAoIXJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiAiZmFsc2UiOwotICAgIAotICAgIHN3aXRj
aCAocmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpKSB7Ci0gICAgICAgIGNhc2UgUkVB
RF9XUklURToKLSAgICAgICAgICAgIHJldHVybiAidHJ1ZSI7Ci0gICAgICAgIGNhc2UgUkVBRF9P
TkxZOgotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gImluaGVyaXQiOwotICAgIH0KLSAgICByZXR1cm4gImluaGVyaXQiOwot
fQotCi12b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0Q29udGVudEVkaXRhYmxlKE1hcHBlZEF0dHJp
YnV0ZUltcGwqIGF0dHIpIAotewotICAgIEZyYW1lICpmcmFtZSA9IGdldERvY3VtZW50KCktPmZy
YW1lKCk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBlbmFibGVkID0gYXR0ci0+dmFsdWUoKTsK
LSAgICBpZiAoZW5hYmxlZC5pc0VtcHR5KCkgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZW5hYmxlZCwg
InRydWUiKSkgewotICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fS0hUTUxf
VVNFUl9NT0RJRlksIENTU19WQUxfUkVBRF9XUklURSk7Ci0gICAgICAgIGlmIChmcmFtZSkKLSAg
ICAgICAgICAgIGZyYW1lLT5hcHBseUVkaXRpbmdTdHlsZVRvRWxlbWVudCh0aGlzKTsgICAgCi0g
ICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmFibGVkLCAiZmFsc2UiKSkgewotICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9fS0hUTUxfVVNFUl9NT0RJRlksIENT
U19WQUxfUkVBRF9PTkxZKTsKLSAgICAgICAgaWYgKGZyYW1lKQotICAgICAgICAgICAgZnJhbWUt
PnJlbW92ZUVkaXRpbmdTdHlsZUZyb21FbGVtZW50KHRoaXMpOyAgICAKLSAgICB9IGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKGVuYWJsZWQsICJpbmhlcml0IikpIHsKLSAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfX0tIVE1MX1VTRVJfTU9ESUZZLCBDU1NfVkFMX0lOSEVS
SVQpOwotICAgICAgICBpZiAoZnJhbWUpCi0gICAgICAgICAgICBmcmFtZS0+cmVtb3ZlRWRpdGlu
Z1N0eWxlRnJvbUVsZW1lbnQodGhpcyk7ICAgIAotICAgIH0KLX0KLQotdm9pZCBIVE1MRWxlbWVu
dEltcGw6OnNldENvbnRlbnRFZGl0YWJsZShjb25zdCBET01TdHJpbmcgJmVuYWJsZWQpCi17Ci0g
ICAgaWYgKGVuYWJsZWQgPT0gImluaGVyaXQiKSB7Ci0gICAgICAgIGludCBleGNlcHRpb25Db2Rl
OwotICAgICAgICByZW1vdmVBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0ciwgZXhjZXB0aW9u
Q29kZSk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgc2V0QXR0cmlidXRlKGNvbnRlbnRlZGl0
YWJsZUF0dHIsIGVuYWJsZWQuaXNFbXB0eSgpID8gInRydWUiIDogZW5hYmxlZCk7Ci19Ci0KLXZv
aWQgSFRNTEVsZW1lbnRJbXBsOjpjbGljayhib29sIHNlbmRNb3VzZUV2ZW50cywgYm9vbCBzaG93
UHJlc3NlZExvb2spCi17Ci0gICAgLy8gc2VuZCBtb3VzZWRvd24gYW5kIG1vdXNldXAgYmVmb3Jl
IHRoZSBjbGljaywgaWYgcmVxdWVzdGVkCi0gICAgaWYgKHNlbmRNb3VzZUV2ZW50cykKLSAgICAg
ICAgZGlzcGF0Y2hTaW11bGF0ZWRNb3VzZUV2ZW50KG1vdXNlZG93bkV2ZW50KTsKLSAgICBzZXRB
Y3RpdmUodHJ1ZSwgc2hvd1ByZXNzZWRMb29rKTsKLSAgICBpZiAoc2VuZE1vdXNlRXZlbnRzKQot
ICAgICAgICBkaXNwYXRjaFNpbXVsYXRlZE1vdXNlRXZlbnQobW91c2V1cEV2ZW50KTsKLSAgICBz
ZXRBY3RpdmUoZmFsc2UpOwotCi0gICAgLy8gYWx3YXlzIHNlbmQgY2xpY2sKLSAgICBkaXNwYXRj
aFNpbXVsYXRlZE1vdXNlRXZlbnQoY2xpY2tFdmVudCk7Ci19Ci0KLS8vIGFjY2Vzc0tleUFjdGlv
biBpcyB1c2VkIGJ5IHRoZSBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgY29kZQotLy8gdG8gc2VuZCBl
dmVudHMgdG8gZWxlbWVudHMgdGhhdCBvdXIgSmF2YVNjcmlwdCBjYWxsZXIgZG9lcwotLy8gZG9l
cyBub3QuICBUaGUgZWxlbWVudHMgSlMgaXMgaW50ZXJlc3RlZCBpbiBoYXZlIHN1YmNsYXNzZXMK
LS8vIHRoYXQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gZGlyZWN0IHRoZSBjbGljayBhcHByb3By
aWF0ZWx5LgotLy8gSGVyZSBpbiB0aGUgYmFzZSBjbGFzcywgdGhlbiwgd2Ugb25seSBzZW5kIHRo
ZSBjbGljayBpZgotLy8gdGhlIGNhbGxlciB3YW50cyBpdCB0byBnbyB0byBhbnkgSFRNTEVsZW1l
bnRJbXBsLCBhbmQgd2Ugc2F5Ci0vLyB0byBzZW5kIHRoZSBtb3VzZSBldmVudHMgaW4gYWRkaXRp
b24gdG8gdGhlIGNsaWNrLgotdm9pZCBIVE1MRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdGlvbihi
b29sIHNlbmRUb0FueUVsZW1lbnQpCi17Ci0gICAgaWYgKHNlbmRUb0FueUVsZW1lbnQpCi0gICAg
ICAgIGNsaWNrKHRydWUpOwotfQotCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmlu
ZygpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNDaGlsZE5vZGVzKCkgJiYgZ2V0RG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSkgewotCURPTVN0cmluZyByZXN1bHQgPSBvcGVuVGFnU3RhcnRUb1N0
cmluZygpOwotCXJlc3VsdCArPSAiPiI7Ci0KLQlpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBU
YWdTdGF0dXNSZXF1aXJlZCkgewotCSAgICByZXN1bHQgKz0gIjwvIjsKLQkgICAgcmVzdWx0ICs9
IG5vZGVOYW1lKCk7Ci0JICAgIHJlc3VsdCArPSAiPiI7Ci0JfQotCi0JcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gRWxlbWVudEltcGw6OnRvU3RyaW5nKCk7Ci19Ci0KLURPTVN0
cmluZyBIVE1MRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGlkQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJZChjb25zdCBET01T
dHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShpZEF0dHIsIHZhbHVlKTsKLX0KLQot
RE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6dGl0bGUoKSBjb25zdAotewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKLX0KLQotdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldFRp
dGxlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKHRpdGxlQXR0
ciwgdmFsdWUpOwotfQotCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpsYW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGxhbmdBdHRyKTsKLX0KLQotdm9pZCBIVE1MRWxl
bWVudEltcGw6OnNldExhbmcoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRy
aWJ1dGUobGFuZ0F0dHIsIHZhbHVlKTsKLX0KLQotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6
ZGlyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGRpckF0dHIpOwotfQotCi12
b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0RGlyKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCi17Ci0g
ICAgc2V0QXR0cmlidXRlKGRpckF0dHIsIHZhbHVlKTsKLX0KLQotRE9NU3RyaW5nIEhUTUxFbGVt
ZW50SW1wbDo6Y2xhc3NOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNs
YXNzQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRDbGFzc05hbWUoY29uc3Qg
RE9NU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCB2YWx1ZSk7
Ci19Ci0KLVJlZlB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW50SW1wbDo6Y2hpbGRy
ZW4oKQotewotICAgIHJldHVybiBSZWZQdHI8SFRNTENvbGxlY3Rpb25JbXBsPihuZXcgSFRNTENv
bGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTikpOwot
fQotCi0vLyBET00gU2VjdGlvbiAxLjEuMQotYm9vbCBIVE1MRWxlbWVudEltcGw6OmNoaWxkQWxs
b3dlZChOb2RlSW1wbCAqbmV3Q2hpbGQpCi17Ci0gICAgaWYgKCFFbGVtZW50SW1wbDo6Y2hpbGRB
bGxvd2VkKG5ld0NoaWxkKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIFhN
TCBkb2N1bWVudHMsIHdlIGFyZSBub24tdmFsaWRhdGluZyBhbmQgZG8gbm90IGNoZWNrIGFnYWlu
c3QgYSBEVEQsIGV2ZW4gZm9yIEhUTUwgZWxlbWVudHMuCi0gICAgaWYgKCFnZXREb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIEZ1dHVy
ZS1wcm9vZiBmb3IgWE1MIGNvbnRlbnQgaW5zaWRlIEhUTUwgZG9jdW1lbnRzICh3ZSBtYXkgYWxs
b3cgdGhpcyBzb21lIGRheSkuCi0gICAgaWYgKG5ld0NoaWxkLT5pc0VsZW1lbnROb2RlKCkgJiYg
IW5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
Ly8gRWxlbWVudHMgd2l0aCBmb3JiaWRkZW4gdGFnIHN0YXR1cyBjYW4gbmV2ZXIgaGF2ZSBjaGls
ZHJlbgotICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ29tbWVudCBub2RlcyBhcmUgYWx3YXlz
IGFsbG93ZWQuCi0gICAgaWYgKG5ld0NoaWxkLT5pc0NvbW1lbnROb2RlKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgLy8gTm93IGNhbGwgY2hlY2tEVEQuCi0gICAgcmV0dXJuIGNoZWNr
RFREKG5ld0NoaWxkKTsKLX0KLQotLy8gRFREIFN0dWZmCi0vLyBUaGlzIHVuZm9ydHVuYXRlIGZ1
bmN0aW9uIGlzIG9ubHkgbmVlZGVkIHdoZW4gY2hlY2tpbmcgYWdhaW5zdCB0aGUgRFRELiAgT3Ro
ZXIgbGFuZ3VhZ2VzIChsaWtlIFNWRykgd29uJ3QgbmVlZCB0aGlzLgotYm9vbCBIVE1MRWxlbWVu
dEltcGw6OmlzUmVjb2duaXplZFRhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkK
LXsKLSAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3Ry
aW5nSW1wbCo+ID4gdGFnTGlzdDsKLSAgICBpZiAodGFnTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgI2RlZmluZSBJTlNFUlRfVEFHKG5hbWUpIHRhZ0xpc3QuaW5zZXJ0KG5hbWUjI1RhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOwotICAgICAgICBET01fSFRNTE5BTUVTX0ZPUl9FQUNIX1RBRyhJTlNF
UlRfVEFHKQotICAgIH0KLSAgICByZXR1cm4gdGFnTGlzdC5jb250YWlucyh0YWdOYW1lLmxvY2Fs
TmFtZSgpLmltcGwoKSk7Ci19Ci0KLS8vIFRoZSB0ZXJtcyBpbmxpbmUgYW5kIGJsb2NrIGFyZSB1
c2VkIGhlcmUgbG9vc2VseS4gIERvbid0IG1ha2UgdGhlIG1pc3Rha2Ugb2YgYXNzdW1pbmcgYWxs
IGlubGluZXMgb3IgYWxsIGJsb2NrcwotLy8gbmVlZCB0byBiZSBpbiB0aGVzZSB0d28gbGlzdHMu
Ci1IYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiog
aW5saW5lVGFnTGlzdCgpCi17Ci0gICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBv
aW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7Ci0gICAgaWYgKHRhZ0xpc3QuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHR0VGFnLmxvY2FsTmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoYlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0
YWdMaXN0Lmluc2VydCh1VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KHNUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQo
c3RyaWtlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGJp
Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzbWFsbFRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChlbVRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzdHJvbmdUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoZGZuVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGNvZGVUYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoc2FtcFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChrYmRUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAg
ICAgICAgdGFnTGlzdC5pbnNlcnQodmFyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KGNpdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFn
TGlzdC5pbnNlcnQoYWJiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0
Lmluc2VydChhY3JvbnltVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGFUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQo
Y2FudmFzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlt
Z1RhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChhcHBsZXRU
YWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQob2JqZWN0VGFn
LmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGVtYmVkVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGZvbnRUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYmFzZWZvbnRUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYnJUYWcubG9jYWxOYW1lKCku
aW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoc2NyaXB0VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG1hcFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkp
OwotICAgICAgICB0YWdMaXN0Lmluc2VydChxVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KHN1YlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0
YWdMaXN0Lmluc2VydChzdXBUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlz
dC5pbnNlcnQoc3BhblRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmlu
c2VydChiZG9UYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQo
aWZyYW1lVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGlu
cHV0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGtleWdl
blRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChzZWxlY3RU
YWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQodGV4dGFyZWFU
YWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQobGFiZWxUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoYnV0dG9uVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGluc1RhZy5sb2NhbE5h
bWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChkZWxUYWcubG9jYWxOYW1lKCku
aW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQobm9iclRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydCh3YnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsK
LSAgICB9Ci0gICAgcmV0dXJuICZ0YWdMaXN0OwotfQotCi1IYXNoU2V0PERPTVN0cmluZ0ltcGwq
LCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiogYmxvY2tUYWdMaXN0KCkKLXsKLSAgICBz
dGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+
ID4gdGFnTGlzdDsKLSAgICBpZiAodGFnTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgdGFnTGlz
dC5pbnNlcnQocFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2Vy
dChoMVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoMlRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoM1RhZy5sb2Nh
bE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoNFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoNVRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoNlRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwot
ICAgICAgICB0YWdMaXN0Lmluc2VydCh1bFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAg
ICB0YWdMaXN0Lmluc2VydChvbFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdM
aXN0Lmluc2VydChkaXJUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5p
bnNlcnQobWVudVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2Vy
dChwcmVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQocGxh
aW50ZXh0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KHht
cFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChkbFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChkaXZUYWcubG9jYWxO
YW1lKCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQobGF5ZXJUYWcubG9jYWxOYW1l
KCkuaW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoY2VudGVyVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG5vc2NyaXB0VGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG5vZnJhbWVzVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KG5vZW1iZWRUYWcubG9jYWxOYW1lKCku
aW1wbCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQobm9sYXllclRhZy5sb2NhbE5hbWUoKS5p
bXBsKCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChibG9ja3F1b3RlVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0KGZvcm1UYWcubG9jYWxOYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgdGFnTGlzdC5pbnNlcnQoaXNpbmRleFRhZy5sb2NhbE5hbWUoKS5pbXBs
KCkpOwotICAgICAgICB0YWdMaXN0Lmluc2VydChoclRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwot
ICAgICAgICB0YWdMaXN0Lmluc2VydCh0YWJsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAg
ICAgICB0YWdMaXN0Lmluc2VydChmaWVsZHNldFRhZy5sb2NhbE5hbWUoKS5pbXBsKCkpOwotICAg
ICAgICB0YWdMaXN0Lmluc2VydChhZGRyZXNzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KGxpVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KGRkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KGR0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSk7Ci0gICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KG1hcnF1ZWVUYWcubG9jYWxOYW1lKCkuaW1wbCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuICZ0YWdM
aXN0OwotfQotCi1ib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKLXsKLSAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIAotICAgIGlmIChuZXdDaGlsZC0+aXNIVE1MRWxl
bWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCogY2hpbGQgPSBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihuZXdDaGlsZCk7Ci0gICAgICAgIGlmIChpbmxp
bmVUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lKCkuaW1wbCgp
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoYmxvY2tUYWdMaXN0KCkt
PmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lKCkuaW1wbCgpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gIWlzUmVjb2duaXplZFRhZ05hbWUoY2hp
bGQtPnRhZ05hbWUoKSk7IC8vIEFjY2VwdCBjdXN0b20gaHRtbCB0YWdzCi0gICAgfQotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEhUTUxFbGVtZW50SW1wbDo6aW5JbmxpbmVUYWdMaXN0
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKLXsKLSAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5v
ZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAobmV3Q2hpbGQtPmlzSFRNTEVs
ZW1lbnQoKSkgewotICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGNoaWxkID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hpbGQpOwotICAgICAgICBpZiAoaW5s
aW5lVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+dGFnTmFtZSgpLmxvY2FsTmFtZSgpLmltcGwo
KSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuICFpc1JlY29nbml6
ZWRUYWdOYW1lKGNoaWxkLT50YWdOYW1lKCkpOyAvLyBBY2NlcHQgY3VzdG9tIGh0bWwgdGFncwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBIVE1MRWxlbWVudEltcGw6Omlu
QmxvY2tUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKLXsKLSAgICBpZiAobmV3Q2hp
bGQtPmlzVGV4dE5vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAg
ICBpZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICBjb25zdCBIVE1MRWxl
bWVudEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3
Q2hpbGQpOwotICAgICAgICByZXR1cm4gKGJsb2NrVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+
dGFnTmFtZSgpLmxvY2FsTmFtZSgpLmltcGwoKSkpOwotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBIVE1MRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBu
ZXdDaGlsZCkKLXsKLSAgICBpZiAoaGFzVGFnTmFtZShhZGRyZXNzVGFnKSAmJiBuZXdDaGlsZC0+
aGFzVGFnTmFtZShwVGFnKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGluRWl0
aGVyVGFnTGlzdChuZXdDaGlsZCk7Ci19Ci0KLXZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRIVE1M
RXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgQXR0cmlidXRlSW1w
bCogYXR0cikKLXsKLSAgICBFbGVtZW50SW1wbDo6c2V0SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRU
eXBlLCBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgp
LCB0aGlzKSk7Ci19CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRt
bC9odG1sL2h0bWxfbWlzY2ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxODAgKzAsMCBAQAot
LyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
LSAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLSNp
Zm5kZWYgSFRNTF9NSVNDSU1QTF9ICi0jZGVmaW5lIEhUTUxfTUlTQ0lNUExfSAotCi0jaW5jbHVk
ZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIlNoYXJlZC5oIgotI2luY2x1ZGUgPHFw
dHJ2ZWN0b3IuaD4KLSNpbmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+Ci0KLW5hbWVzcGFjZSBE
T00gewotCi1jbGFzcyBOb2RlOwotY2xhc3MgRE9NU3RyaW5nOwotY2xhc3MgSFRNTENvbGxlY3Rp
b247Ci0KLWNsYXNzIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50
SW1wbAotewotcHVibGljOgotICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKERvY3VtZW50SW1w
bCAqZG9jKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQotCi0gICAgRE9NU3RyaW5nIGNvbG9yKCkg
Y29uc3Q7Ci0gICAgdm9pZCBzZXRDb2xvcihjb25zdCBET01TdHJpbmcgJik7Ci0KLSAgICBET01T
dHJpbmcgZmFjZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RmFjZShjb25zdCBET01TdHJpbmcgJik7
Ci0KLSAgICBET01TdHJpbmcgc2l6ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U2l6ZShjb25zdCBE
T01TdHJpbmcgJik7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxDb2xs
ZWN0aW9uSW1wbCA6IHB1YmxpYyBTaGFyZWQ8SFRNTENvbGxlY3Rpb25JbXBsPgotewotICAgIGZy
aWVuZCBjbGFzcyBET006OkhUTUxDb2xsZWN0aW9uOwotcHVibGljOgotICAgIGVudW0gVHlwZSB7
Ci0gICAgICAgIC8vIGZyb20gSFRNTERvY3VtZW50Ci0gICAgICAgIERPQ19JTUFHRVMgPSAwLCAv
LyBhbGwgSU1HIGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudAotICAgICAgICBET0NfQVBQTEVUUywg
ICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAgICAgRE9DX0VNQkVEUywg
ICAgLy8gYWxsIEVNQkVEIGVsZW1lbnRzCi0gICAgICAgIERPQ19PQkpFQ1RTLCAgIC8vIGFsbCBP
QkpFQ1QgZWxlbWVudHMKLSAgICAgICAgRE9DX0ZPUk1TLCAgICAgLy8gYWxsIEZPUk1TCi0gICAg
ICAgIERPQ19MSU5LUywgICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZh
bHVlIGZvciBocmVmCi0gICAgICAgIERPQ19BTkNIT1JTLCAgICAgIC8vIGFsbCBBIGVsZW1lbnRz
IHdpdGggYSB2YWx1ZSBmb3IgbmFtZQotICAgICAgICAvLyBmcm9tIEhUTUxUYWJsZSwgSFRNTFRh
YmxlU2VjdGlvbiwgSFRNTFRhYmxlUm93Ci0gICAgICAgIFRBQkxFX1JPV1MsICAgIC8vIGFsbCBy
b3dzIGluIHRoaXMgdGFibGUgb3IgdGFibGVzZWN0aW9uCi0gICAgICAgIFRBQkxFX1RCT0RJRVMs
IC8vIGFsbCBUQk9EWSBlbGVtZW50cyBpbiB0aGlzIHRhYmxlCi0gICAgICAgIFRTRUNUSU9OX1JP
V1MsIC8vIGFsbCByb3dzIGVsZW1lbnRzIGluIHRoaXMgdGFibGUgc2VjdGlvbgotICAgICAgICBU
Ul9DRUxMUywgICAgICAvLyBhbGwgQ0VMTFMgaW4gdGhpcyByb3cKLSAgICAgICAgLy8gZnJvbSBT
RUxFQ1QKLSAgICAgICAgU0VMRUNUX09QVElPTlMsCi0gICAgICAgIC8vIGZyb20gSFRNTE1hcAot
ICAgICAgICBNQVBfQVJFQVMsCi0gICAgICAgIERPQ19BTEwsICAgICAgICAvLyAiYWxsIiBlbGVt
ZW50cyAoSUUpCi0gICAgICAgIE5PREVfQ0hJTERSRU4sICAgLy8gZmlyc3QtbGV2ZWwgY2hpbGRy
ZW4gKElFKQotICAgICAgICBXSU5ET1dfTkFNRURfSVRFTVMsCi0gICAgICAgIERPQ1VNRU5UX05B
TUVEX0lURU1TCi0gICAgfTsKLQotICAgIGVudW0gewotICAgICAgICBOVU1fQ0FDSEVBQkxFX1RZ
UEVTID0gTk9ERV9DSElMRFJFTiArIDEKLSAgICB9OwotCi0gICAgSFRNTENvbGxlY3Rpb25JbXBs
KE5vZGVJbXBsICpfYmFzZSwgaW50IF90eXBlKTsKLSAgICB2aXJ0dWFsIH5IVE1MQ29sbGVjdGlv
bkltcGwoKTsKLSAgICAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICAKLSAgICB2
aXJ0dWFsIE5vZGVJbXBsICppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICB2aXJ0dWFs
IE5vZGVJbXBsICpmaXJzdEl0ZW0oKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpuZXh0
SXRlbSgpIGNvbnN0OwotCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqbmFtZWRJdGVtKGNvbnN0IERP
TVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSkgY29uc3Q7Ci0gICAgLy8g
SW4gY2FzZSBvZiBtdWx0aXBsZSBpdGVtcyBuYW1lZCB0aGUgc2FtZSB3YXkKLSAgICB2aXJ0dWFs
IE5vZGVJbXBsICpuZXh0TmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgY29uc3Q7Ci0K
LSAgICBRVmFsdWVMaXN0PCBSZWZQdHI8Tm9kZUltcGw+ID4gbmFtZWRJdGVtcyhjb25zdCBBdG9t
aWNTdHJpbmcgJm5hbWUpIGNvbnN0OwotCi0gICAgTm9kZUltcGwgKmJhc2UoKSB7IHJldHVybiBt
X2Jhc2UuZ2V0KCk7IH0KLQotICAgIHN0cnVjdCBDb2xsZWN0aW9uSW5mbyB7Ci0gICAgICAgIENv
bGxlY3Rpb25JbmZvKCk7Ci0gICAgICAgIH5Db2xsZWN0aW9uSW5mbygpOwotICAgICAgICB2b2lk
IHJlc2V0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGludCB2ZXJzaW9uOwotICAgICAgICBOb2RlSW1w
bCAqY3VycmVudDsKLSAgICAgICAgdW5zaWduZWQgaW50IHBvc2l0aW9uOwotICAgICAgICB1bnNp
Z25lZCBpbnQgbGVuZ3RoOwotICAgICAgICBpbnQgZWxlbWVudHNBcnJheVBvc2l0aW9uOwotICAg
ICAgICBIYXNoTWFwPERPTVN0cmluZ0ltcGwqLCBRUHRyVmVjdG9yPE5vZGVJbXBsPiosIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IGlkQ2FjaGU7Ci0gICAgICAgIEhhc2hNYXA8RE9NU3Ry
aW5nSW1wbCosIFFQdHJWZWN0b3I8Tm9kZUltcGw+KiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1w
bCo+ID4gbmFtZUNhY2hlOwotICAgICAgICBib29sIGhhc2xlbmd0aDsKLSAgICAgICAgYm9vbCBo
YXNOYW1lQ2FjaGU7Ci0gICAgIH07Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlTmFtZUNhY2hlKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE5vZGVJbXBsICp0cmF2ZXJzZU5l
eHRJdGVtKE5vZGVJbXBsICpzdGFydCkgY29uc3Q7Ci0gICAgYm9vbCBjaGVja0Zvck5hbWVNYXRj
aChOb2RlSW1wbCAqbm9kZSwgYm9vbCBjaGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhbGNMZW5n
dGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzZXRDb2xsZWN0aW9uSW5mbygpIGNvbnN0
OwotICAgIC8vIHRoZSBiYXNlIG5vZGUsIHRoZSBjb2xsZWN0aW9uIHJlZmVycyB0bwotICAgIFJl
ZlB0cjxOb2RlSW1wbD4gbV9iYXNlOwotICAgIC8vIFRoZSBjb2xsZWN0aW9uIGxpc3QgdGhlIGZv
bGxvd2luZyBlbGVtZW50cwotICAgIGludCB0eXBlOwotICAgIG11dGFibGUgQ29sbGVjdGlvbklu
Zm8gKmluZm87Ci0KLSAgICAvLyBGb3IgbmV4dE5hbWVkSXRlbSgpCi0gICAgbXV0YWJsZSBib29s
IGlkc0RvbmU7Ci0KLSAgICBtdXRhYmxlIGJvb2wgbV9vd25zSW5mbzsKLX07Ci0KLWNsYXNzIEhU
TUxOYW1lQ29sbGVjdGlvbkltcGwgOiBwdWJsaWMgSFRNTENvbGxlY3Rpb25JbXBsCi17Ci1wdWJs
aWM6Ci0gICAgSFRNTE5hbWVDb2xsZWN0aW9uSW1wbChEb2N1bWVudEltcGwqIF9iYXNlLCBpbnQg
X3R5cGUsIERPTVN0cmluZyAmbmFtZSk7Ci0gICAgCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqdHJh
dmVyc2VOZXh0SXRlbShOb2RlSW1wbCAqc3RhcnQpIGNvbnN0OwotIHByaXZhdGU6Ci0gICAgRE9N
U3RyaW5nIG1fbmFtZTsKLX07Ci0KLS8vIHRoaXMgd2hvbGUgY2xhc3MgaXMganVzdCBhIGJpZyBo
YWNrIHRvIGZpbmQgZm9ybSBlbGVtZW50cyBldmVuIGluCi0vLyBtYWxmb3JtZWQgSFRNTCBlbGVt
ZW50cwotLy8gdGhlIGZhbW91cyA8dGFibGU+PHRyPjxmb3JtPjx0ZD4gcHJvYmxlbQotY2xhc3Mg
SFRNTEZvcm1Db2xsZWN0aW9uSW1wbCA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbkltcGwKLXsKLXB1
YmxpYzoKLSAgICAvLyBiYXNlIG11c3QgaW5oZXJpdCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCBvciB0aGlzIHdvbid0IHdvcmsKLSAgICBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsKE5vZGVJbXBs
KiBfYmFzZSk7Ci0gICAgfkhUTUxGb3JtQ29sbGVjdGlvbkltcGwoKTsKLQotICAgIHZpcnR1YWwg
Tm9kZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBpbmRleCApIGNvbnN0OwotICAgIHZpcnR1YWwgTm9k
ZUltcGwgKmZpcnN0SXRlbSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKm5leHRJdGVt
KCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpuYW1lZEl0ZW0gKCBjb25zdCBET01T
dHJpbmcgJm5hbWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUgKSBjb25zdDsKLSAgICB2aXJ0
dWFsIE5vZGVJbXBsICpuZXh0TmFtZWRJdGVtKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKSBjb25z
dDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhbGNMZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IE5vZGVJbXBsICpnZXROYW1lZEl0ZW0oTm9kZUltcGwqIGN1cnJlbnQsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJOYW1lLCBjb25zdCBET01TdHJpbmcmIG5hbWUsIGJvb2wgY2FzZVNlbnNpdGl2
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqbmV4dE5hbWVkSXRlbUludGVybmFsKCBj
b25zdCBET01TdHJpbmcgJm5hbWUgKSBjb25zdDsKLXByaXZhdGU6Ci0gICAgTm9kZUltcGwqIGdl
dE5hbWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IERPTVN0
cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25z
dDsKLSAgICBtdXRhYmxlIGludCBjdXJyZW50UG9zOwotfTsKLQotCi19OyAvL25hbWVzcGFjZQot
Ci0jZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5oCShyZXZpc2lvbiAx
MjIzNikKKysrIGtodG1sL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEyMiArMjEs
MTUgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBI
VE1MX01JU0NJTVBMX0gKLSNkZWZpbmUgSFRNTF9NSVNDSU1QTF9ICisjaWZuZGVmIEhUTUxOYW1l
Q29sbGVjdGlvbkltcGxfSAorI2RlZmluZSBIVE1MTmFtZUNvbGxlY3Rpb25JbXBsX0gKIAotI2lu
Y2x1ZGUgImh0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJTaGFyZWQuaCIKLSNpbmNsdWRl
IDxxcHRydmVjdG9yLmg+Ci0jaW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5oPgorI2luY2x1ZGUg
IkhUTUxDb2xsZWN0aW9uSW1wbC5oIgorI2luY2x1ZGUgImRvbV9zdHJpbmcuaCIKIAotbmFtZXNw
YWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE5vZGU7Ci1jbGFzcyBET01T
dHJpbmc7Ci1jbGFzcyBIVE1MQ29sbGVjdGlvbjsKLQotY2xhc3MgSFRNTEJhc2VGb250RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6Ci0gICAgSFRNTEJhc2VG
b250RWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MpOwotCi0gICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlk
ZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9
Ci0KLSAgICBET01TdHJpbmcgY29sb3IoKSBjb25zdDsKLSAgICB2b2lkIHNldENvbG9yKGNvbnN0
IERPTVN0cmluZyAmKTsKLQotICAgIERPTVN0cmluZyBmYWNlKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRGYWNlKGNvbnN0IERPTVN0cmluZyAmKTsKLQotICAgIERPTVN0cmluZyBzaXplKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IERPTVN0cmluZyAmKTsKLX07Ci0KLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotY2xhc3MgSFRNTENvbGxlY3Rpb25JbXBsIDogcHVibGljIFNoYXJlZDxIVE1M
Q29sbGVjdGlvbkltcGw+Ci17Ci0gICAgZnJpZW5kIGNsYXNzIERPTTo6SFRNTENvbGxlY3Rpb247
Ci1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgLy8gZnJvbSBIVE1MRG9jdW1lbnQK
LSAgICAgICAgRE9DX0lNQUdFUyA9IDAsIC8vIGFsbCBJTUcgZWxlbWVudHMgaW4gdGhlIGRvY3Vt
ZW50Ci0gICAgICAgIERPQ19BUFBMRVRTLCAgIC8vIGFsbCBPQkpFQ1QgYW5kIEFQUExFVCBlbGVt
ZW50cwotICAgICAgICBET0NfRU1CRURTLCAgICAvLyBhbGwgRU1CRUQgZWxlbWVudHMKLSAgICAg
ICAgRE9DX09CSkVDVFMsICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAgICAgICBET0NfRk9S
TVMsICAgICAvLyBhbGwgRk9STVMKLSAgICAgICAgRE9DX0xJTktTLCAgICAgLy8gYWxsIEEgX2Fu
ZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIGhyZWYKLSAgICAgICAgRE9DX0FOQ0hP
UlMsICAgICAgLy8gYWxsIEEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lCi0gICAgICAg
IC8vIGZyb20gSFRNTFRhYmxlLCBIVE1MVGFibGVTZWN0aW9uLCBIVE1MVGFibGVSb3cKLSAgICAg
ICAgVEFCTEVfUk9XUywgICAgLy8gYWxsIHJvd3MgaW4gdGhpcyB0YWJsZSBvciB0YWJsZXNlY3Rp
b24KLSAgICAgICAgVEFCTEVfVEJPRElFUywgLy8gYWxsIFRCT0RZIGVsZW1lbnRzIGluIHRoaXMg
dGFibGUKLSAgICAgICAgVFNFQ1RJT05fUk9XUywgLy8gYWxsIHJvd3MgZWxlbWVudHMgaW4gdGhp
cyB0YWJsZSBzZWN0aW9uCi0gICAgICAgIFRSX0NFTExTLCAgICAgIC8vIGFsbCBDRUxMUyBpbiB0
aGlzIHJvdwotICAgICAgICAvLyBmcm9tIFNFTEVDVAotICAgICAgICBTRUxFQ1RfT1BUSU9OUywK
LSAgICAgICAgLy8gZnJvbSBIVE1MTWFwCi0gICAgICAgIE1BUF9BUkVBUywKLSAgICAgICAgRE9D
X0FMTCwgICAgICAgIC8vICJhbGwiIGVsZW1lbnRzIChJRSkKLSAgICAgICAgTk9ERV9DSElMRFJF
TiwgICAvLyBmaXJzdC1sZXZlbCBjaGlsZHJlbiAoSUUpCi0gICAgICAgIFdJTkRPV19OQU1FRF9J
VEVNUywKLSAgICAgICAgRE9DVU1FTlRfTkFNRURfSVRFTVMKLSAgICB9OwotCi0gICAgZW51bSB7
Ci0gICAgICAgIE5VTV9DQUNIRUFCTEVfVFlQRVMgPSBOT0RFX0NISUxEUkVOICsgMQotICAgIH07
Ci0KLSAgICBIVE1MQ29sbGVjdGlvbkltcGwoTm9kZUltcGwgKl9iYXNlLCBpbnQgX3R5cGUpOwot
ICAgIHZpcnR1YWwgfkhUTUxDb2xsZWN0aW9uSW1wbCgpOwotICAgIAotICAgIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0odW5zaWduZWQg
aW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmZpcnN0SXRlbSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgTm9kZUltcGwgKm5leHRJdGVtKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpuYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRp
dmUgPSB0cnVlKSBjb25zdDsKLSAgICAvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGl0ZW1zIG5hbWVk
IHRoZSBzYW1lIHdheQotICAgIHZpcnR1YWwgTm9kZUltcGwgKm5leHROYW1lZEl0ZW0oY29uc3Qg
RE9NU3RyaW5nICZuYW1lKSBjb25zdDsKLQotICAgIFFWYWx1ZUxpc3Q8IFJlZlB0cjxOb2RlSW1w
bD4gPiBuYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyAmbmFtZSkgY29uc3Q7Ci0KLSAgICBO
b2RlSW1wbCAqYmFzZSgpIHsgcmV0dXJuIG1fYmFzZS5nZXQoKTsgfQotCi0gICAgc3RydWN0IENv
bGxlY3Rpb25JbmZvIHsKLSAgICAgICAgQ29sbGVjdGlvbkluZm8oKTsKLSAgICAgICAgfkNvbGxl
Y3Rpb25JbmZvKCk7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgaW50
IHZlcnNpb247Ci0gICAgICAgIE5vZGVJbXBsICpjdXJyZW50OwotICAgICAgICB1bnNpZ25lZCBp
bnQgcG9zaXRpb247Ci0gICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci0gICAgICAgIGludCBl
bGVtZW50c0FycmF5UG9zaXRpb247Ci0gICAgICAgIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCosIFFQ
dHJWZWN0b3I8Tm9kZUltcGw+KiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gaWRDYWNo
ZTsKLSAgICAgICAgSGFzaE1hcDxET01TdHJpbmdJbXBsKiwgUVB0clZlY3RvcjxOb2RlSW1wbD4q
LCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiBuYW1lQ2FjaGU7Ci0gICAgICAgIGJvb2wg
aGFzbGVuZ3RoOwotICAgICAgICBib29sIGhhc05hbWVDYWNoZTsKLSAgICAgfTsKLQotcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsKLQotICAgIHZp
cnR1YWwgTm9kZUltcGwgKnRyYXZlcnNlTmV4dEl0ZW0oTm9kZUltcGwgKnN0YXJ0KSBjb25zdDsK
LSAgICBib29sIGNoZWNrRm9yTmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFt
ZSwgY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0OwotICAg
IHZpcnR1YWwgdW5zaWduZWQgY2FsY0xlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBy
ZXNldENvbGxlY3Rpb25JbmZvKCkgY29uc3Q7Ci0gICAgLy8gdGhlIGJhc2Ugbm9kZSwgdGhlIGNv
bGxlY3Rpb24gcmVmZXJzIHRvCi0gICAgUmVmUHRyPE5vZGVJbXBsPiBtX2Jhc2U7Ci0gICAgLy8g
VGhlIGNvbGxlY3Rpb24gbGlzdCB0aGUgZm9sbG93aW5nIGVsZW1lbnRzCi0gICAgaW50IHR5cGU7
Ci0gICAgbXV0YWJsZSBDb2xsZWN0aW9uSW5mbyAqaW5mbzsKLQotICAgIC8vIEZvciBuZXh0TmFt
ZWRJdGVtKCkKLSAgICBtdXRhYmxlIGJvb2wgaWRzRG9uZTsKLQotICAgIG11dGFibGUgYm9vbCBt
X293bnNJbmZvOwotfTsKK2NsYXNzIERvY3VtZW50SW1wbDsKIAogY2xhc3MgSFRNTE5hbWVDb2xs
ZWN0aW9uSW1wbCA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbkltcGwKIHsKQEAgLTE0NywzNCArNDEs
NiBAQCBwdWJsaWM6CiAgICAgRE9NU3RyaW5nIG1fbmFtZTsKIH07CiAKLS8vIHRoaXMgd2hvbGUg
Y2xhc3MgaXMganVzdCBhIGJpZyBoYWNrIHRvIGZpbmQgZm9ybSBlbGVtZW50cyBldmVuIGluCi0v
LyBtYWxmb3JtZWQgSFRNTCBlbGVtZW50cwotLy8gdGhlIGZhbW91cyA8dGFibGU+PHRyPjxmb3Jt
Pjx0ZD4gcHJvYmxlbQotY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbCA6IHB1YmxpYyBIVE1M
Q29sbGVjdGlvbkltcGwKLXsKLXB1YmxpYzoKLSAgICAvLyBiYXNlIG11c3QgaW5oZXJpdCBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbCBvciB0aGlzIHdvbid0IHdvcmsKLSAgICBIVE1MRm9ybUNv
bGxlY3Rpb25JbXBsKE5vZGVJbXBsKiBfYmFzZSk7Ci0gICAgfkhUTUxGb3JtQ29sbGVjdGlvbklt
cGwoKTsKLQotICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0gKCB1bnNpZ25lZCBpbmRleCApIGNv
bnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmZpcnN0SXRlbSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgTm9kZUltcGwgKm5leHRJdGVtKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpu
YW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRy
dWUgKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpuZXh0TmFtZWRJdGVtKCBjb25zdCBE
T01TdHJpbmcgJm5hbWUgKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNhbGNMZW5ndGgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpnZXROYW1lZEl0ZW0oTm9kZUltcGwqIGN1
cnJlbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBjb25zdCBET01TdHJpbmcmIG5h
bWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqbmV4
dE5hbWVkSXRlbUludGVybmFsKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKSBjb25zdDsKLXByaXZh
dGU6Ci0gICAgTm9kZUltcGwqIGdldE5hbWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0ck5hbWUsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwgYm9v
bCBjYXNlU2Vuc2l0aXZlKSBjb25zdDsKLSAgICBtdXRhYmxlIGludCBjdXJyZW50UG9zOwotfTsK
LQotCiB9OyAvL25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkocmV2aXNpb24g
MTIyMzYpCisrKyBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NiwxMiArMzYsMTAgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfYmxvY2tpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2NhbnZhc2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRp
bXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9pbmxpbmVpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2xpc3Rp
bXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9o
dG1sX3RhYmxlaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCiAjaW5j
bHVkZSAiSFRNTEZvcm1FbGVtZW50SW1wbC5oIgpJbmRleDoga2h0bWwvaHRtbC9IVE1MQmFzZUZv
bnRFbGVtZW50SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MQmFzZUZvbnRF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MQmFzZUZv
bnRFbGVtZW50SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKgogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yMSwyMSArMjEsMTEgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoK
ICAqLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
Imh0bWwvaHRtbF9taXNjaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIK
LSNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1s
X29iamVjdGltcGwuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnRJbXBsLmgiCi0jaW5jbHVk
ZSAiSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJIVE1MQmFzZUZvbnRF
bGVtZW50SW1wbC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCi0jaW5jbHVkZSAiZG9tL2Rv
bV9ub2RlLmgiCi0KLSNpbmNsdWRlIDxrZGVidWcuaD4KLSNpbmNsdWRlIDxreG1sY29yZS9IYXNo
U2V0Lmg+Ci0KLW5hbWVzcGFjZSBET00geworbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogCkBAIC03NCw2OTcgKzY0LDQgQEAgdm9pZCBIVE1MQmFzZUZv
bnRFbGVtZW50SW1wbDo6c2V0U2l6ZShjbwogICAgIHNldEF0dHJpYnV0ZShzaXplQXR0ciwgdmFs
dWUpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxDb2xsZWN0aW9uSW1wbDo6SFRN
TENvbGxlY3Rpb25JbXBsKE5vZGVJbXBsICpfYmFzZSwgaW50IF90eXBlKQotICAgIDogbV9iYXNl
KF9iYXNlKSwKLSAgICAgIHR5cGUoX3R5cGUpLAotICAgICAgaW5mbygwKSwKLSAgICAgIGlkc0Rv
bmUoZmFsc2UpLAotICAgICAgbV9vd25zSW5mbyhmYWxzZSkKLXsKLSAgICBpZiAoX2Jhc2UtPmlz
RG9jdW1lbnROb2RlKCkgJiYgX2Jhc2UtPmdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkp
Ci0gICAgICAgIGluZm8gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oX2Jhc2UtPmdl
dERvY3VtZW50KCkpLT5jb2xsZWN0aW9uSW5mbyh0eXBlKTsKLX0KLQotSFRNTENvbGxlY3Rpb25J
bXBsOjp+SFRNTENvbGxlY3Rpb25JbXBsKCkKLXsKLSAgICBpZiAobV9vd25zSW5mbykKLSAgICAg
ICAgZGVsZXRlIGluZm87Ci19Ci0KLUhUTUxDb2xsZWN0aW9uSW1wbDo6Q29sbGVjdGlvbkluZm86
OkNvbGxlY3Rpb25JbmZvKCkgOgotICAgIHZlcnNpb24oMCkKLXsKLSAgICByZXNldCgpOwotfQot
Ci1IVE1MQ29sbGVjdGlvbkltcGw6OkNvbGxlY3Rpb25JbmZvOjp+Q29sbGVjdGlvbkluZm8oKQot
ewotICAgIGRlbGV0ZUFsbFZhbHVlcyhpZENhY2hlKTsKLSAgICBkZWxldGVBbGxWYWx1ZXMobmFt
ZUNhY2hlKTsKLX0KLQotdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6OkNvbGxlY3Rpb25JbmZvOjpy
ZXNldCgpCi17Ci0gICAgY3VycmVudCA9IDA7Ci0gICAgcG9zaXRpb24gPSAwOwotICAgIGxlbmd0
aCA9IDA7Ci0gICAgaGFzbGVuZ3RoID0gZmFsc2U7Ci0gICAgZWxlbWVudHNBcnJheVBvc2l0aW9u
ID0gMDsKLSAgICBkZWxldGVBbGxWYWx1ZXMoaWRDYWNoZSk7Ci0gICAgaWRDYWNoZS5jbGVhcigp
OwotICAgIGRlbGV0ZUFsbFZhbHVlcyhuYW1lQ2FjaGUpOwotICAgIG5hbWVDYWNoZS5jbGVhcigp
OwotICAgIGhhc05hbWVDYWNoZSA9IGZhbHNlOwotfQotCi12b2lkIEhUTUxDb2xsZWN0aW9uSW1w
bDo6cmVzZXRDb2xsZWN0aW9uSW5mbygpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgaW50IGRvY3Zl
cnNpb24gPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4obV9iYXNlLT5nZXREb2N1bWVu
dCgpKS0+ZG9tVHJlZVZlcnNpb24oKTsKLQotICAgIGlmICghaW5mbykgewotICAgICAgICBpbmZv
ID0gbmV3IENvbGxlY3Rpb25JbmZvOwotICAgICAgICBtX293bnNJbmZvID0gdHJ1ZTsKLSAgICAg
ICAgaW5mby0+dmVyc2lvbiA9IGRvY3ZlcnNpb247Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoaW5mby0+dmVyc2lvbiAhPSBkb2N2ZXJzaW9uKSB7Ci0gICAgICAgIGluZm8tPnJl
c2V0KCk7Ci0gICAgICAgIGluZm8tPnZlcnNpb24gPSBkb2N2ZXJzaW9uOwotICAgIH0KLX0KLQot
Ci1Ob2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5leHRJdGVtKE5vZGVJbXBs
ICpjdXJyZW50KSBjb25zdAotewotICAgIGFzc2VydChjdXJyZW50KTsKLQotICAgIGlmICh0eXBl
ID09IE5PREVfQ0hJTERSRU4gJiYgbV9iYXNlLmdldCgpICE9IGN1cnJlbnQpCi0gICAgICAgIGN1
cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgIGVsc2UKLSAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKLQotICAgIHdoaWxl
IChjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGJvb2wgZGVlcCA9IHRy
dWU7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwgKj4oY3VycmVudCk7Ci0gICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAg
ICAgICAgY2FzZSBET0NfSU1BR0VTOgotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoaW1nVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0gICAgICAgICAgICAg
ICAgaWYoZS0+aGFzTG9jYWxOYW1lKGZvcm1UYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRBQkxF
X1RCT0RJRVM6Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZSh0Ym9keVRhZykp
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmIChlLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpKQotICAgICAgICAgICAgICAgICAgICBkZWVw
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRSX0NF
TExTOgotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUodGRUYWcpIHx8IGUtPmhh
c0xvY2FsTmFtZSh0aFRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUodGFibGVUYWcpKQotICAgICAg
ICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFRBQkxFX1JPV1M6Ci0gICAgICAgICAgICBjYXNlIFRTRUNUSU9OX1JPV1M6
Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZSh0clRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNM
b2NhbE5hbWUodGFibGVUYWcpKQotICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgot
ICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBNQVBfQVJFQVM6Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFt
ZShhcmVhVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfQVBQTEVUUzogICAvLyBhbGwgT0JK
RUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKG9iamVjdFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFwcGxldFRhZykpCi0gICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgRE9DX0VNQkVEUzogICAvLyBhbGwgRU1CRUQgZWxlbWVudHMKLSAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKGVtYmVkVGFnKSkKLSAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBE
T0NfT0JKRUNUUzogICAvLyBhbGwgT0JKRUNUIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYg
KGUtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19MSU5L
UzogICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBocmVm
Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShhVGFnKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoYXJlYVRhZykpCi0gICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRl
KGhyZWZBdHRyKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0FOQ0hPUlM6
ICAgICAgLy8gYWxsIEEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lIG9yIGFuIGlkIGF0
dHJpYnV0ZQotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYVRhZykpCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKS5pc051bGwoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0FMTDoKLSAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE5PREVfQ0hJ
TERSRU46Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGRl
ZXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAga2REZWJ1ZyggNjAzMCApIDw8ICJFcnJvciBpbiBIVE1MQ29sbGVj
dGlvbiwgd3JvbmcgdGFnSWQhIiA8PCBlbmRsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAg
ICBpZiAoZGVlcCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJz
ZU5leHROb2RlKG1fYmFzZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9IAotICAgICAgICB9Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJz
ZU5leHRTaWJsaW5nKG1fYmFzZS5nZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0K
LXVuc2lnbmVkIEhUTUxDb2xsZWN0aW9uSW1wbDo6Y2FsY0xlbmd0aCgpIGNvbnN0Ci17Ci0gICAg
dW5zaWduZWQgbGVuID0gMDsKLQotICAgIGZvciAoTm9kZUltcGwgKmN1cnJlbnQgPSB0cmF2ZXJz
ZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IGN1cnJlbnQ7IGN1cnJlbnQgPSB0cmF2ZXJzZU5leHRJ
dGVtKGN1cnJlbnQpKSB7Ci0gICAgICAgIGxlbisrOwotICAgIH0KLQotICAgIHJldHVybiBsZW47
Ci19Ci0KLS8vIHNpbmNlIHRoZSBjb2xsZWN0aW9ucyBhcmUgdG8gYmUgImxpdmUiLCB3ZSBoYXZl
IHRvIGRvIHRoZQotLy8gY2FsY3VsYXRpb24gZXZlcnkgdGltZSBpZiBhbnl0aGluZyBoYXMgY2hh
bmdlZAotdW5zaWduZWQgSFRNTENvbGxlY3Rpb25JbXBsOjpsZW5ndGgoKSBjb25zdAotewotICAg
IHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLSAgICBpZiAoIWluZm8tPmhhc2xlbmd0aCkgewotICAg
ICAgICBpbmZvLT5sZW5ndGggPSBjYWxjTGVuZ3RoKCk7Ci0gICAgICAgIGluZm8tPmhhc2xlbmd0
aCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBpbmZvLT5sZW5ndGg7Ci19Ci0KLU5vZGVJbXBs
ICpIVE1MQ29sbGVjdGlvbkltcGw6Oml0ZW0oIHVuc2lnbmVkIGluZGV4ICkgY29uc3QKLXsKLSAg
ICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwotICAgICBpZiAoaW5mby0+Y3VycmVudCAmJiBpbmZv
LT5wb3NpdGlvbiA9PSBpbmRleCkgewotICAgICAgICAgcmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci0g
ICAgIH0KLSAgICAgaWYgKGluZm8tPmhhc2xlbmd0aCAmJiBpbmZvLT5sZW5ndGggPD0gaW5kZXgp
IHsKLSAgICAgICAgIHJldHVybiAwOwotICAgICB9Ci0gICAgIGlmICghaW5mby0+Y3VycmVudCB8
fCBpbmZvLT5wb3NpdGlvbiA+IGluZGV4KSB7Ci0gICAgICAgICBpbmZvLT5jdXJyZW50ID0gdHJh
dmVyc2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOwotICAgICAgICAgaW5mby0+cG9zaXRpb24gPSAw
OwotICAgICAgICAgaWYgKCFpbmZvLT5jdXJyZW50KQotICAgICAgICAgICAgIHJldHVybiAwOwot
ICAgICB9Ci0gICAgIE5vZGVJbXBsICpub2RlID0gaW5mby0+Y3VycmVudDsKLSAgICAgZm9yICh1
bnNpZ25lZCBwb3MgPSBpbmZvLT5wb3NpdGlvbjsgbm9kZSAmJiBwb3MgPCBpbmRleDsgcG9zKysp
IHsKLSAgICAgICAgIG5vZGUgPSB0cmF2ZXJzZU5leHRJdGVtKG5vZGUpOwotICAgICB9ICAgICAK
LSAgICAgaW5mby0+Y3VycmVudCA9IG5vZGU7Ci0gICAgIGluZm8tPnBvc2l0aW9uID0gaW5kZXg7
Ci0gICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwotfQotCi1Ob2RlSW1wbCAqSFRNTENvbGxlY3Rp
b25JbXBsOjpmaXJzdEl0ZW0oKSBjb25zdAotewotICAgICByZXR1cm4gaXRlbSgwKTsKLX0KLQot
Tm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmV4dEl0ZW0oKSBjb25zdAotewotICAgICBy
ZXNldENvbGxlY3Rpb25JbmZvKCk7Ci0gCi0gICAgIC8vIExvb2sgZm9yIHRoZSAnc2Vjb25kJyBp
dGVtLiBUaGUgZmlyc3Qgb25lIGlzIGN1cnJlbnRJdGVtLCBhbHJlYWR5IGdpdmVuIGJhY2suCi0g
ICAgIE5vZGVJbXBsICpyZXR2YWwgPSB0cmF2ZXJzZU5leHRJdGVtKGluZm8tPmN1cnJlbnQpOwot
ICAgICBpbmZvLT5jdXJyZW50ID0gcmV0dmFsOwotICAgICBpbmZvLT5wb3NpdGlvbisrOwotICAg
ICByZXR1cm4gcmV0dmFsOwotfQotCi1ib29sIEhUTUxDb2xsZWN0aW9uSW1wbDo6Y2hlY2tGb3JO
YW1lTWF0Y2goTm9kZUltcGwgKm5vZGUsIGJvb2wgY2hlY2tOYW1lLCBjb25zdCBET01TdHJpbmcg
Jm5hbWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKLXsKLSAgICBpZiAoIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEhUTUxFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOwotICAgIGlmIChj
YXNlU2Vuc2l0aXZlKSB7Ci0gICAgICAgIGlmIChjaGVja05hbWUpIHsKLSAgICAgICAgICAgIC8v
IGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0
cyBhbmQgZW1iZWRzCi0gICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBi
eSBpZCkKLSAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAg
ICAgIShlLT5oYXNMb2NhbE5hbWUoaW1nVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9ybVRhZykg
fHwKLSAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhcHBsZXRUYWcpIHx8IGUtPmhh
c0xvY2FsTmFtZShvYmplY3RUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5h
bWUoZW1iZWRUYWcpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG5hbWUgJiYgZS0+Z2V0QXR0
cmlidXRlKGlkQXR0cikgIT0gbmFtZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXR1
cm4gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoY2hlY2tOYW1lKSB7Ci0gICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBv
bmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwotICAgICAgICAg
ICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCi0gICAgICAgICAgICBpZiAo
dHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKGlt
Z1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgICBl
LT5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8
fAotICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGVtYmVkVGFnKSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmli
dXRlKG5hbWVBdHRyKS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIoKSAmJgotICAg
ICAgICAgICAgICAgIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpLmRvbVN0cmluZygpLmxvd2VyKCkg
IT0gbmFtZS5sb3dlcigpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIGUt
PmdldEF0dHJpYnV0ZShpZEF0dHIpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gbmFtZS5sb3dlcigp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLU5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6
Om5hbWVkSXRlbShjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29u
c3QKLXsKLSAgICAvLyBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL3dvcmtzaG9wL2F1dGhvci9k
aHRtbC9yZWZlcmVuY2UvbWV0aG9kcy9uYW1lZGl0ZW0uYXNwCi0gICAgLy8gVGhpcyBtZXRob2Qg
Zmlyc3Qgc2VhcmNoZXMgZm9yIGFuIG9iamVjdCB3aXRoIGEgbWF0Y2hpbmcgaWQKLSAgICAvLyBh
dHRyaWJ1dGUuIElmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLCB0aGUgbWV0aG9kIHRoZW4gc2VhcmNo
ZXMgZm9yIGFuCi0gICAgLy8gb2JqZWN0IHdpdGggYSBtYXRjaGluZyBuYW1lIGF0dHJpYnV0ZSwg
YnV0IG9ubHkgb24gdGhvc2UgZWxlbWVudHMKLSAgICAvLyB0aGF0IGFyZSBhbGxvd2VkIGEgbmFt
ZSBhdHRyaWJ1dGUuCi0gICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwotICAgIGlkc0RvbmUgPSBm
YWxzZTsKLQotICAgIE5vZGVJbXBsICpuOwotICAgIGZvciAobiA9IHRyYXZlcnNlTmV4dEl0ZW0o
bV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4dEl0ZW0obikpIHsKLSAgICAgICAgaWYg
KGNoZWNrRm9yTmFtZU1hdGNoKG4sIGlkc0RvbmUsIG5hbWUsIGNhc2VTZW5zaXRpdmUpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKLSAgICBpbmZvLT5jdXJyZW50ID0gbjsK
LSAgICBpZihpbmZvLT5jdXJyZW50KQotICAgICAgICByZXR1cm4gaW5mby0+Y3VycmVudDsKLSAg
ICBpZHNEb25lID0gdHJ1ZTsKLQotICAgIGZvciAobiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNl
LmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4dEl0ZW0obikpIHsKLSAgICAgICAgaWYgKGNoZWNr
Rm9yTmFtZU1hdGNoKG4sIGlkc0RvbmUsIG5hbWUsIGNhc2VTZW5zaXRpdmUpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaW5mby0+Y3VycmVudCA9IG47Ci0gICAgcmV0dXJuIGlu
Zm8tPmN1cnJlbnQ7Ci19Ci0KLUhUTUxOYW1lQ29sbGVjdGlvbkltcGw6OkhUTUxOYW1lQ29sbGVj
dGlvbkltcGwoRG9jdW1lbnRJbXBsKiBfYmFzZSwgaW50IF90eXBlLCBET01TdHJpbmcgJm5hbWUp
Ci0gICAgOiBIVE1MQ29sbGVjdGlvbkltcGwoX2Jhc2UsIF90eXBlKSwKLSAgICAgIG1fbmFtZShu
YW1lKQotewotfQotICAgIAotTm9kZUltcGwgKkhUTUxOYW1lQ29sbGVjdGlvbkltcGw6OnRyYXZl
cnNlTmV4dEl0ZW0oTm9kZUltcGwgKmN1cnJlbnQpIGNvbnN0Ci17Ci0gICAgYXNzZXJ0KGN1cnJl
bnQpOwotCi0gICAgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdl
dCgpKTsKLQotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pc0Vs
ZW1lbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oY3VycmVudCk7
Ci0gICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgY2FzZSBXSU5ET1dfTkFN
RURfSVRFTVM6Ci0gICAgICAgICAgICAgICAgLy8gZmluZCBvbmx5IGltYWdlcywgZm9ybXMsIGFw
cGxldHMsIGVtYmVkcyBhbmQgb2JqZWN0cyBieSBuYW1lLCAKLSAgICAgICAgICAgICAgICAvLyBi
dXQgYW55dGhpbmcgYnkgaWQKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShpbWdU
YWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwKLSAg
ICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBl
LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZTsKLSAgICAgICAgICAgICAgICBmb3Vu
ZCB8PSBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ1VNRU5UX05BTUVEX0lURU1TOgotICAgICAgICAg
ICAgICAgIC8vIGZpbmQgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgZW1iZWRzLCBvYmplY3RzIGFu
ZCBpZnJhbWVzIGJ5IG5hbWUsIAotICAgICAgICAgICAgICAgIC8vIGJ1dCBvbmx5IGFwcGxldHMg
YW5kIG9iamVjdCBieSBpZCAodGhpcyBzdHJhbmdlIHJ1bGUgbWF0Y2hlcyBJRSkKLSAgICAgICAg
ICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShpbWdUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IGUtPmhhc1RhZ05hbWUoZm9ybVRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFn
TmFtZShlbWJlZFRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShpZnJh
bWVUYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShuYW1l
QXR0cikgPT0gbV9uYW1lOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUo
YXBwbGV0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpID09IG1fbmFtZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgZS0+Z2V0QXR0
cmlidXRlKGlkQXR0cikgPT0gbV9uYW1lOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhh
c1RhZ05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAoZS0+Z2V0
QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikg
PT0gbV9uYW1lKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9i
amVjdEVsZW1lbnRJbXBsICo+KGUpLT5pc0RvY05hbWVkSXRlbSgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBhc3NlcnQoMCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY3VycmVudDsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+
dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0K
LQotdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIHZvaWQgYXBwZW5kVG9WZWN0b3IoUVB0clZlY3Rv
cjxUPiAqdmVjLCBUICppdGVtKQotewotICAgIHVuc2lnbmVkIHNpemUgPSB2ZWMtPnNpemUoKTsK
LSAgICB1bnNpZ25lZCBjb3VudCA9IHZlYy0+Y291bnQoKTsKLSAgICBpZiAoc2l6ZSA9PSBjb3Vu
dCkKLSAgICAgICAgdmVjLT5yZXNpemUoc2l6ZSA9PSAwID8gOCA6IChpbnQpKHNpemUgKiAxLjUp
KTsKLSAgICB2ZWMtPmluc2VydChjb3VudCwgaXRlbSk7Ci19Ci0KLXZvaWQgSFRNTENvbGxlY3Rp
b25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAotewotICAgIGlmIChpbmZvLT5oYXNOYW1l
Q2FjaGUpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBmb3IgKE5vZGVJbXBsICpuID0gdHJh
dmVyc2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VOZXh0SXRlbShuKSkg
ewotICAgICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBIVE1MRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwqPihuKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRB
dHRyaWJ1dGUoaWRBdHRyKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZh
bCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7Ci0gICAgICAgIGlmICghaWRBdHRyVmFsLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCi0gICAgICAgICAgICBR
UHRyVmVjdG9yPE5vZGVJbXBsPiAqaWRWZWN0b3IgPSBpbmZvLT5pZENhY2hlLmdldChpZEF0dHJW
YWwuaW1wbCgpKTsKLSAgICAgICAgICAgIGlmICghaWRWZWN0b3IpIHsKLSAgICAgICAgICAgICAg
ICBpZFZlY3RvciA9IG5ldyBRUHRyVmVjdG9yPE5vZGVJbXBsPjsKLSAgICAgICAgICAgICAgICBp
bmZvLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rvcik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBhcHBlbmRUb1ZlY3RvcihpZFZlY3Rvciwgbik7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVB
dHRyVmFsCi0gICAgICAgICAgICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAgICAgICAg
ICAgIChlLT5oYXNMb2NhbE5hbWUoaW1nVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoZm9ybVRhZykg
fHwKLSAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGFwcGxldFRhZykgfHwgZS0+aGFz
TG9jYWxOYW1lKG9iamVjdFRhZykgfHwKLSAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KGVtYmVkVGFnKSkpKSB7Ci0gICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQotICAgICAg
ICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1lQ2FjaGUu
Z2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsK
LSAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8Tm9kZUltcGw+Owot
ICAgICAgICAgICAgICAgIGluZm8tPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBu
YW1lVmVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFRvVmVjdG9yKG5h
bWVWZWN0b3IsIG4pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW5mby0+aGFzTmFtZUNhY2hl
ID0gdHJ1ZTsKLX0KLQotUVZhbHVlTGlzdDwgUmVmUHRyPE5vZGVJbXBsPiA+IEhUTUxDb2xsZWN0
aW9uSW1wbDo6bmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0g
ICAgUVZhbHVlTGlzdDwgUmVmUHRyPE5vZGVJbXBsPiA+IHJlc3VsdDsKLQotICAgIGlmIChuYW1l
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIHJlc2V0Q29sbGVjdGlv
bkluZm8oKTsKLSAgICB1cGRhdGVOYW1lQ2FjaGUoKTsKLSAgICAKLSAgICBRUHRyVmVjdG9yPE5v
ZGVJbXBsPiAqaWRSZXN1bHRzID0gaW5mby0+aWRDYWNoZS5nZXQobmFtZS5pbXBsKCkpOwotICAg
IFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpuYW1lUmVzdWx0cyA9IGluZm8tPm5hbWVDYWNoZS5nZXQo
bmFtZS5pbXBsKCkpOwotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGlkUmVzdWx0cyAm
JiBpIDwgaWRSZXN1bHRzLT5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChS
ZWZQdHI8Tm9kZUltcGw+KGlkUmVzdWx0cy0+YXQoaSkpKTsKLSAgICB9Ci0KLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBuYW1lUmVzdWx0cyAmJiBpIDwgbmFtZVJlc3VsdHMtPmNvdW50KCk7ICsr
aSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKFJlZlB0cjxOb2RlSW1wbD4obmFtZVJlc3VsdHMt
PmF0KGkpKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotCi1Ob2RlSW1wbCAq
SFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0TmFtZWRJdGVtKGNvbnN0IERPTVN0cmluZyAmbmFtZSkg
Y29uc3QKLXsKLSAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7Ci0KLSAgICBmb3IgKE5vZGVJbXBs
ICpuID0gdHJhdmVyc2VOZXh0SXRlbShpbmZvLT5jdXJyZW50ID8gaW5mby0+Y3VycmVudCA6IG1f
YmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIGlmIChj
aGVja0Zvck5hbWVNYXRjaChuLCBpZHNEb25lLCBuYW1lLCB0cnVlKSkgewotICAgICAgICAgICAg
aW5mby0+Y3VycmVudCA9IG47Ci0gICAgICAgICAgICByZXR1cm4gbjsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICBpZiAoaWRzRG9uZSkgewotICAgICAgICBpbmZvLT5jdXJyZW50ID0gMDsg
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZHNEb25lID0gdHJ1ZTsKLQotICAgIGZv
ciAoTm9kZUltcGwgKm4gPSB0cmF2ZXJzZU5leHRJdGVtKGluZm8tPmN1cnJlbnQgPyBpbmZvLT5j
dXJyZW50IDogbV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4dEl0ZW0obikpIHsKLSAg
ICAgICAgaWYgKGNoZWNrRm9yTmFtZU1hdGNoKG4sIGlkc0RvbmUsIG5hbWUsIHRydWUpKSB7Ci0g
ICAgICAgICAgICBpbmZvLT5jdXJyZW50ID0gbjsKLSAgICAgICAgICAgIHJldHVybiBuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLUhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OkhUTUxGb3JtQ29sbGVjdGlvbkltcGwoTm9k
ZUltcGwqIF9iYXNlKQotICAgIDogSFRNTENvbGxlY3Rpb25JbXBsKF9iYXNlLCAwKQotewotICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1CYXNlID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCo+KG1fYmFzZS5nZXQoKSk7Ci0gICAgaWYgKCFmb3JtQmFzZS0+Y29sbGVjdGlvbklu
Zm8pIHsKLSAgICAgICAgZm9ybUJhc2UtPmNvbGxlY3Rpb25JbmZvID0gbmV3IENvbGxlY3Rpb25J
bmZvKCk7Ci0gICAgfQotICAgIGluZm8gPSBmb3JtQmFzZS0+Y29sbGVjdGlvbkluZm87Ci19Ci0K
LUhUTUxGb3JtQ29sbGVjdGlvbkltcGw6On5IVE1MRm9ybUNvbGxlY3Rpb25JbXBsKCkKLXsKLX0K
LQotdW5zaWduZWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Y2FsY0xlbmd0aCgpIGNvbnN0Ci17
Ci0gICAgUVB0clZlY3RvcjxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbD4gJmwgPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKS0+Zm9ybUVsZW1lbnRzOwot
Ci0gICAgaW50IGxlbiA9IDA7Ci0gICAgZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBsLmNvdW50
KCk7IGkrKyApCi0gICAgICAgIGlmICggbC5hdCggaSApLT5pc0VudW1lcmF0YWJsZSgpICkKLSAg
ICAgICAgICAgICsrbGVuOwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQotTm9kZUltcGwgKkhUTUxG
b3JtQ29sbGVjdGlvbkltcGw6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmVz
ZXRDb2xsZWN0aW9uSW5mbygpOwotCi0gICAgaWYgKGluZm8tPmN1cnJlbnQgJiYgaW5mby0+cG9z
aXRpb24gPT0gaW5kZXgpIHsKLSAgICAgICAgcmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci0gICAgfQot
ICAgIGlmIChpbmZvLT5oYXNsZW5ndGggJiYgaW5mby0+bGVuZ3RoIDw9IGluZGV4KSB7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWluZm8tPmN1cnJlbnQgfHwgaW5mby0+cG9z
aXRpb24gPiBpbmRleCkgewotICAgICAgICBpbmZvLT5jdXJyZW50ID0gMDsKLSAgICAgICAgaW5m
by0+cG9zaXRpb24gPSAwOwotICAgICAgICBpbmZvLT5lbGVtZW50c0FycmF5UG9zaXRpb24gPSAw
OwotICAgIH0KLQotICAgIFFQdHJWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw+ICZs
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSktPmZvcm1F
bGVtZW50czsKLSAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXggPSBpbmZvLT5wb3NpdGlvbjsKLSAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmZvLT5lbGVtZW50c0FycmF5UG9zaXRpb247IGkg
PCBsLmNvdW50KCk7IGkrKykgewotICAgICAgICBpZiAobFtpXS0+aXNFbnVtZXJhdGFibGUoKSAp
IHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBjdXJyZW50SW5kZXgpIHsKLSAgICAgICAgICAg
ICAgICBpbmZvLT5wb3NpdGlvbiA9IGluZGV4OwotICAgICAgICAgICAgICAgIGluZm8tPmN1cnJl
bnQgPSBsW2ldOwotICAgICAgICAgICAgICAgIGluZm8tPmVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9
IGk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxbaV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGN1cnJlbnRJbmRleCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7
Ci19Ci0KLU5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW1lZEl0ZW0oTm9k
ZUltcGwqLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uc3QgRE9NU3RyaW5nJiBu
YW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci17Ci0gICAgaW5mby0+cG9zaXRpb24gPSAw
OwotICAgIHJldHVybiBnZXROYW1lZEZvcm1JdGVtKGF0dHJOYW1lLCBuYW1lLCAwLCBjYXNlU2Vu
c2l0aXZlKTsKLX0KLQotTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVk
Rm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IERPTVN0cmluZyYg
bmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAotewot
ICAgIGlmIChtX2Jhc2UtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICBIVE1MRWxlbWVudElt
cGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obV9iYXNlLmdl
dCgpKTsKLSAgICAgICAgYm9vbCBmb3VuZElucHV0RWxlbWVudHMgPSBmYWxzZTsKLSAgICAgICAg
aWYgKGJhc2VFbGVtZW50LT5oYXNMb2NhbE5hbWUoZm9ybVRhZykpIHsKLSAgICAgICAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
YmFzZUVsZW1lbnQpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZv
cm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgICAgICAgICBp
ZiAoZS0+aXNFbnVtZXJhdGFibGUoKSkgewotICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5k
OwotICAgICAgICAgICAgICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lOwotICAg
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUt
PmdldEF0dHJpYnV0ZShhdHRyTmFtZSkuZG9tU3RyaW5nKCkubG93ZXIoKSA9PSBuYW1lLmxvd2Vy
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZm91bmRJbnB1dEVsZW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghZHVwbGljYXRlTnVtYmVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlOwotICAgICAgICAgICAgICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWZvdW5kSW5wdXRFbGVtZW50cykgewotICAgICAgICAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihi
YXNlRWxlbWVudCk7Ci0KLSAgICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmlt
Z0VsZW1lbnRzLmNvdW50KCk7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCogZSA9IGYtPmltZ0VsZW1lbnRzW2ldOwotICAgICAgICAgICAg
ICAgIGJvb2wgZm91bmQ7Ci0gICAgICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpCi0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1l
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlLT5n
ZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gbmFtZS5sb3dlcigp
OwotICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
IWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAg
ICAgICAgICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJ
bXBsICogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Zmlyc3RJdGVtKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaXRlbSgwKTsKLX0KLQotTm9kZUltcGwgKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpu
ZXh0SXRlbSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGl0ZW0oaW5mby0+cG9zaXRpb24gKyAxKTsK
LX0KLQotTm9kZUltcGwgKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpuZXh0TmFtZWRJdGVtSW50
ZXJuYWwoY29uc3QgRE9NU3RyaW5nICZuYW1lKSBjb25zdAotewotICAgIE5vZGVJbXBsICpyZXR2
YWwgPSBnZXROYW1lZEZvcm1JdGVtKCBpZHNEb25lID8gbmFtZUF0dHIgOiBpZEF0dHIsIG5hbWUs
ICsraW5mby0+cG9zaXRpb24sIHRydWUgKTsKLSAgICBpZiAocmV0dmFsKQotICAgICAgICByZXR1
cm4gcmV0dmFsOwotICAgIGlmIChpZHNEb25lKSAvLyB3ZSdyZSBkb25lCi0gICAgICAgIHJldHVy
biAwOwotICAgIC8vIEFmdGVyIGRvaW5nIGlkLCBkbyBuYW1lCi0gICAgaWRzRG9uZSA9IHRydWU7
Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbShtX2Jhc2UtPmZpcnN0Q2hpbGQoKSwgbmFtZUF0dHIs
IG5hbWUsIHRydWUpOwotfQotCi1Ob2RlSW1wbCAqSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6bmFt
ZWRJdGVtKCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSApIGNvbnN0
Ci17Ci0gICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9hdXRob3IvZGh0
bWwvcmVmZXJlbmNlL21ldGhvZHMvbmFtZWRpdGVtLmFzcAotICAgIC8vIFRoaXMgbWV0aG9kIGZp
cnN0IHNlYXJjaGVzIGZvciBhbiBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIGlkCi0gICAgLy8gYXR0
cmlidXRlLiBJZiBhIG1hdGNoIGlzIG5vdCBmb3VuZCwgdGhlIG1ldGhvZCB0aGVuIHNlYXJjaGVz
IGZvciBhbgotICAgIC8vIG9iamVjdCB3aXRoIGEgbWF0Y2hpbmcgbmFtZSBhdHRyaWJ1dGUsIGJ1
dCBvbmx5IG9uIHRob3NlIGVsZW1lbnRzCi0gICAgLy8gdGhhdCBhcmUgYWxsb3dlZCBhIG5hbWUg
YXR0cmlidXRlLgotICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLSAgICBpZHNEb25lID0gZmFs
c2U7Ci0gICAgaW5mby0+Y3VycmVudCA9IGdldE5hbWVkSXRlbShtX2Jhc2UtPmZpcnN0Q2hpbGQo
KSwgaWRBdHRyLCBuYW1lLCB0cnVlKTsKLSAgICBpZihpbmZvLT5jdXJyZW50KQotICAgICAgICBy
ZXR1cm4gaW5mby0+Y3VycmVudDsKLSAgICBpZHNEb25lID0gdHJ1ZTsKLSAgICBpbmZvLT5jdXJy
ZW50ID0gZ2V0TmFtZWRJdGVtKG1fYmFzZS0+Zmlyc3RDaGlsZCgpLCBuYW1lQXR0ciwgbmFtZSwg
dHJ1ZSk7Ci0gICAgcmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci19Ci0KLQotTm9kZUltcGwgKkhUTUxG
b3JtQ29sbGVjdGlvbkltcGw6Om5leHROYW1lZEl0ZW0oIGNvbnN0IERPTVN0cmluZyAmbmFtZSAp
IGNvbnN0Ci17Ci0gICAgLy8gbmV4dE5hbWVkSXRlbUludGVybmFsIGNhbiByZXR1cm4gYW4gaXRl
bSB0aGF0IGhhcyBib3RoIGlkPTxuYW1lPiBhbmQgbmFtZT08bmFtZT4KLSAgICAvLyBIZXJlLCB3
ZSBoYXZlIHRvIGZpbHRlciBvdXQgc3VjaCBjYXNlcy4KLSAgICBOb2RlSW1wbCAqaW1wbCA9IG5l
eHROYW1lZEl0ZW1JbnRlcm5hbCggbmFtZSApOwotICAgIGlmICghaWRzRG9uZSkgLy8gbG9va2lu
ZyBmb3IgaWQ9PG5hbWU+IC0+IG5vIGZpbHRlcmluZwotICAgICAgICByZXR1cm4gaW1wbDsKLSAg
ICAvLyBsb29raW5nIGZvciBuYW1lPTxuYW1lPiAtPiBmaWx0ZXIgb3V0IGlmIGlkPTxuYW1lPgot
ICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICB3aGlsZSAoaW1wbCAmJiAhb2spCi0gICAgewotICAg
ICAgICBpZihpbXBsLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhU
TUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKTsK
LSAgICAgICAgICAgIG9rID0gKGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpICE9IG5hbWUpOwotICAg
ICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICBpbXBsID0gbmV4dE5hbWVkSXRlbUlu
dGVybmFsKCBuYW1lICk7Ci0gICAgICAgIH0gZWxzZSAvLyBjYW4ndCBoYXBwZW4KLSAgICAgICAg
ICAgIG9rID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGltcGw7Ci19Ci0KLXZvaWQgSFRNTEZv
cm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKLXsKLSAgICBpZiAoaW5m
by0+aGFzTmFtZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBIYXNoU2V0PERPTVN0cmlu
Z0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiBmb3VuZElucHV0RWxlbWVudHM7
Ci0KLSAgICBpZiAoIW1fYmFzZS0+aGFzVGFnTmFtZShmb3JtVGFnKSkgewotICAgICAgICBpbmZv
LT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSFRN
TEVsZW1lbnRJbXBsKiBiYXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+
KG1fYmFzZS5nZXQoKSk7Ci0KLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZi0+Zm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewotICAgICAgICBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAg
aWYgKGUtPmlzRW51bWVyYXRhYmxlKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cik7Ci0gICAgICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsK
LSAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IC8vIGFkZCB0byBpZCBjYWNoZQotICAgICAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+
ICppZFZlY3RvciA9IGluZm8tPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwotICAgICAg
ICAgICAgICAgIGlmICghaWRWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgaWRWZWN0b3Ig
PSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmlk
Q2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCksIGlkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9WZWN0b3IoaWRWZWN0b3IsIHN0YXRpY19jYXN0PE5v
ZGVJbXBsICo+KGUpKTsKLSAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVudHMuaW5zZXJ0
KGlkQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFuYW1l
QXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRyVmFsKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKLSAgICAgICAgICAgICAgICBRUHRyVmVjdG9y
PE5vZGVJbXBsPiAqbmFtZVZlY3RvciA9IGluZm8tPm5hbWVDYWNoZS5nZXQobmFtZUF0dHJWYWwu
aW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBRUHRyVmVjdG9yPE5vZGVJbXBsPjsKLSAgICAgICAg
ICAgICAgICAgICAgaW5mby0+bmFtZUNhY2hlLmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG5hbWVW
ZWN0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcHBlbmRUb1ZlY3Rv
cihuYW1lVmVjdG9yLCBzdGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgICAgICAg
ICAgZm91bmRJbnB1dEVsZW1lbnRzLmluc2VydChuYW1lQXR0clZhbC5pbXBsKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGYtPmltZ0VsZW1lbnRzLmNvdW50KCk7ICsraSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50
SW1wbCogZSA9IGYtPmltZ0VsZW1lbnRzW2ldOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOwotICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLSAgICAg
ICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFp
bnMoaWRBdHRyVmFsLmltcGwoKSkpIHsKLSAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQot
ICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkVmVjdG9yID0gaW5mby0+aWRDYWNo
ZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7Ci0g
ICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47Ci0gICAg
ICAgICAgICAgICAgaW5mby0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0b3Ip
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kVG9WZWN0b3IoaWRWZWN0b3IsIHN0
YXRpY19jYXN0PE5vZGVJbXBsICo+KGUpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW5hbWVB
dHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5w
dXRFbGVtZW50cy5jb250YWlucyhuYW1lQXR0clZhbC5pbXBsKCkpKSB7Ci0gICAgICAgICAgICAv
LyBhZGQgdG8gbmFtZSBjYWNoZQotICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5h
bWVWZWN0b3IgPSBpbmZvLT5uYW1lQ2FjaGUuZ2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7Ci0gICAg
ICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0g
bmV3IFFQdHJWZWN0b3I8Tm9kZUltcGw+OwotICAgICAgICAgICAgICAgIGluZm8tPm5hbWVDYWNo
ZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGFwcGVuZFRvVmVjdG9yKG5hbWVWZWN0b3IsIHN0YXRpY19jYXN0PE5vZGVJbXBs
ICo+KGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGluZm8tPmhhc05hbWVDYWNoZSA9IHRy
dWU7Ci19Ci0KIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQor
Kysga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwx
MSArMzgsOSBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCIKICNpbmNsdWRl
ICJ4bWwvRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKLSNp
bmNsdWRlIDxrZGVidWcuaD4KKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAotdXNpbmcgbmFtZXNw
YWNlIGtodG1sOwotCi1uYW1lc3BhY2UgRE9NIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNp
bmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmgJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sX2Jhc2Vp
bXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgSFRNTF9CQVNF
SU1QTF9ICiAjZGVmaW5lIEhUTUxfQkFTRUlNUExfSAogCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Vs
ZW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAia2h0
bWxsYXlvdXQuaCIKIAogI2luY2x1ZGUgPHFzY3JvbGx2aWV3Lmg+CkluZGV4OiBraHRtbC9odG1s
L0hUTUxGb3JtQ29sbGVjdGlvbkltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRN
TEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9I
VE1MRm9ybUNvbGxlY3Rpb25JbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAK
ICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIxLDQwMyArMjEsMjAgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgogICoKICAqLwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFn
ZWltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAi
aHRtbC9odG1sX29iamVjdGltcGwuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnRJbXBsLmgi
CisjaW5jbHVkZSAiSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5oIgogI2luY2x1ZGUgIkhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50SW1wbC5oIgor
I2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCisjaW5j
bHVkZSA8cXB0cnZlY3Rvci5oPgogCi0jaW5jbHVkZSAiZG9tL2RvbV9ub2RlLmgiCi0KLSNpbmNs
dWRlIDxrZGVidWcuaD4KLSNpbmNsdWRlIDxreG1sY29yZS9IYXNoU2V0Lmg+Ci0KLW5hbWVzcGFj
ZSBET00geworbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1IVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6SFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9j
dW1lbnRJbXBsICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoYmFzZWZvbnRUYWcsIGRvYykK
LXsKLX0KLQotRE9NU3RyaW5nIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpjb2xvcigpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb2xvckF0dHIpOwotfQotCi12b2lkIEhUTUxC
YXNlRm9udEVsZW1lbnRJbXBsOjpzZXRDb2xvcihjb25zdCBET01TdHJpbmcgJnZhbHVlKQotewot
ICAgIHNldEF0dHJpYnV0ZShjb2xvckF0dHIsIHZhbHVlKTsKLX0KLQotRE9NU3RyaW5nIEhUTUxC
YXNlRm9udEVsZW1lbnRJbXBsOjpmYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKGZhY2VBdHRyKTsKLX0KLQotdm9pZCBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6c2V0RmFj
ZShjb25zdCBET01TdHJpbmcgJnZhbHVlKQotewotICAgIHNldEF0dHJpYnV0ZShmYWNlQXR0ciwg
dmFsdWUpOwotfQotCi1ET01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OnNpemUoKSBj
b25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2l6ZUF0dHIpOwotfQotCi12b2lkIEhU
TUxCYXNlRm9udEVsZW1lbnRJbXBsOjpzZXRTaXplKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCi17
Ci0gICAgc2V0QXR0cmlidXRlKHNpemVBdHRyLCB2YWx1ZSk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotSFRNTENvbGxlY3Rpb25JbXBsOjpIVE1MQ29sbGVjdGlvbkltcGwoTm9kZUltcGwg
Kl9iYXNlLCBpbnQgX3R5cGUpCi0gICAgOiBtX2Jhc2UoX2Jhc2UpLAotICAgICAgdHlwZShfdHlw
ZSksCi0gICAgICBpbmZvKDApLAotICAgICAgaWRzRG9uZShmYWxzZSksCi0gICAgICBtX293bnNJ
bmZvKGZhbHNlKQotewotICAgIGlmIChfYmFzZS0+aXNEb2N1bWVudE5vZGUoKSAmJiBfYmFzZS0+
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgaW5mbyA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudEltcGwqPihfYmFzZS0+Z2V0RG9jdW1lbnQoKSktPmNvbGxlY3Rpb25J
bmZvKHR5cGUpOwotfQotCi1IVE1MQ29sbGVjdGlvbkltcGw6On5IVE1MQ29sbGVjdGlvbkltcGwo
KQotewotICAgIGlmIChtX293bnNJbmZvKQotICAgICAgICBkZWxldGUgaW5mbzsKLX0KLQotSFRN
TENvbGxlY3Rpb25JbXBsOjpDb2xsZWN0aW9uSW5mbzo6Q29sbGVjdGlvbkluZm8oKSA6Ci0gICAg
dmVyc2lvbigwKQotewotICAgIHJlc2V0KCk7Ci19Ci0KLUhUTUxDb2xsZWN0aW9uSW1wbDo6Q29s
bGVjdGlvbkluZm86On5Db2xsZWN0aW9uSW5mbygpCi17Ci0gICAgZGVsZXRlQWxsVmFsdWVzKGlk
Q2FjaGUpOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhuYW1lQ2FjaGUpOwotfQotCi12b2lkIEhUTUxD
b2xsZWN0aW9uSW1wbDo6Q29sbGVjdGlvbkluZm86OnJlc2V0KCkKLXsKLSAgICBjdXJyZW50ID0g
MDsKLSAgICBwb3NpdGlvbiA9IDA7Ci0gICAgbGVuZ3RoID0gMDsKLSAgICBoYXNsZW5ndGggPSBm
YWxzZTsKLSAgICBlbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOwotICAgIGRlbGV0ZUFsbFZhbHVl
cyhpZENhY2hlKTsKLSAgICBpZENhY2hlLmNsZWFyKCk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG5h
bWVDYWNoZSk7Ci0gICAgbmFtZUNhY2hlLmNsZWFyKCk7Ci0gICAgaGFzTmFtZUNhY2hlID0gZmFs
c2U7Ci19Ci0KLXZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjpyZXNldENvbGxlY3Rpb25JbmZvKCkg
Y29uc3QKLXsKLSAgICB1bnNpZ25lZCBpbnQgZG9jdmVyc2lvbiA9IHN0YXRpY19jYXN0PEhUTUxE
b2N1bWVudEltcGwqPihtX2Jhc2UtPmdldERvY3VtZW50KCkpLT5kb21UcmVlVmVyc2lvbigpOwot
Ci0gICAgaWYgKCFpbmZvKSB7Ci0gICAgICAgIGluZm8gPSBuZXcgQ29sbGVjdGlvbkluZm87Ci0g
ICAgICAgIG1fb3duc0luZm8gPSB0cnVlOwotICAgICAgICBpbmZvLT52ZXJzaW9uID0gZG9jdmVy
c2lvbjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbmZvLT52ZXJzaW9uICE9
IGRvY3ZlcnNpb24pIHsKLSAgICAgICAgaW5mby0+cmVzZXQoKTsKLSAgICAgICAgaW5mby0+dmVy
c2lvbiA9IGRvY3ZlcnNpb247Ci0gICAgfQotfQotCi0KLU5vZGVJbXBsICpIVE1MQ29sbGVjdGlv
bkltcGw6OnRyYXZlcnNlTmV4dEl0ZW0oTm9kZUltcGwgKmN1cnJlbnQpIGNvbnN0Ci17Ci0gICAg
YXNzZXJ0KGN1cnJlbnQpOwotCi0gICAgaWYgKHR5cGUgPT0gTk9ERV9DSElMRFJFTiAmJiBtX2Jh
c2UuZ2V0KCkgIT0gY3VycmVudCkKLSAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJs
aW5nKCk7Ci0gICAgZWxzZQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0
Tm9kZShtX2Jhc2UuZ2V0KCkpOwotCi0gICAgd2hpbGUgKGN1cnJlbnQpIHsKLSAgICAgICAgaWYg
KGN1cnJlbnQtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOwotICAgICAgICAgICAgYm9vbCBkZWVwID0gdHJ1ZTsKLSAgICAgICAgICAgIEhUTUxFbGVt
ZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihjdXJyZW50KTsKLSAg
ICAgICAgICAgIHN3aXRjaCh0eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIERPQ19JTUFHRVM6Ci0g
ICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpKQotICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIERPQ19GT1JNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5oYXNMb2NhbE5hbWUoZm9y
bVRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVEFCTEVfVEJPRElFUzoKLSAgICAgICAgICAgICAg
ICBpZiAoZS0+aGFzTG9jYWxOYW1lKHRib2R5VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZSh0YWJs
ZVRhZykpCi0gICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAgICAgICAgICAgaWYg
KGUtPmhhc0xvY2FsTmFtZSh0ZFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKHRoVGFnKSkKLSAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUt
Pmhhc0xvY2FsTmFtZSh0YWJsZVRhZykpCi0gICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVEFCTEVfUk9XUzoK
LSAgICAgICAgICAgIGNhc2UgVFNFQ1RJT05fUk9XUzoKLSAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKHRyVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZSh0YWJsZVRhZykpCi0gICAg
ICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgU0VMRUNUX09QVElPTlM6Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhh
c0xvY2FsTmFtZShvcHRpb25UYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIE1BUF9BUkVBUzoKLSAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKQotICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5kIEFQUExFVCBlbGVtZW50cwot
ICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fCBlLT5oYXNM
b2NhbE5hbWUoYXBwbGV0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfRU1CRURTOiAgIC8v
IGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUo
ZW1iZWRUYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19PQkpFQ1RTOiAgIC8vIGFsbCBPQkpF
Q1QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG9iamVjdFRh
ZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEgX2FuZF8gQVJF
QSBlbGVtZW50cyB3aXRoIGEgdmFsdWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKGFUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShhcmVhVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBET0NfQU5DSE9SUzogICAgICAvLyBhbGwgQSBlbGVtZW50cyB3
aXRoIGEgdmFsdWUgZm9yIG5hbWUgb3IgYW4gaWQgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAg
aWYgKGUtPmhhc0xvY2FsTmFtZShhVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBE
T0NfQUxMOgotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgTk9ERV9DSElMRFJFTjoKLSAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBrZERlYnVn
KCA2MDMwICkgPDwgIkVycm9yIGluIEhUTUxDb2xsZWN0aW9uLCB3cm9uZyB0YWdJZCEiIDw8IGVu
ZGw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3VycmVudDsKLSAgICAgICAgICAgIGlmIChkZWVwKSB7Ci0gICAgICAgICAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgIH0KLSAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dFNpYmxpbmcobV9iYXNlLmdldCgp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotdW5zaWduZWQgSFRNTENvbGxlY3Rpb25J
bXBsOjpjYWxjTGVuZ3RoKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBsZW4gPSAwOwotCi0gICAg
Zm9yIChOb2RlSW1wbCAqY3VycmVudCA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsg
Y3VycmVudDsgY3VycmVudCA9IHRyYXZlcnNlTmV4dEl0ZW0oY3VycmVudCkpIHsKLSAgICAgICAg
bGVuKys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxlbjsKLX0KLQogLy8gc2luY2UgdGhlIGNvbGxl
Y3Rpb25zIGFyZSB0byBiZSAibGl2ZSIsIHdlIGhhdmUgdG8gZG8gdGhlCiAvLyBjYWxjdWxhdGlv
biBldmVyeSB0aW1lIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkCi11bnNpZ25lZCBIVE1MQ29sbGVj
dGlvbkltcGw6Omxlbmd0aCgpIGNvbnN0Ci17Ci0gICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwot
ICAgIGlmICghaW5mby0+aGFzbGVuZ3RoKSB7Ci0gICAgICAgIGluZm8tPmxlbmd0aCA9IGNhbGNM
ZW5ndGgoKTsKLSAgICAgICAgaW5mby0+aGFzbGVuZ3RoID0gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0
dXJuIGluZm8tPmxlbmd0aDsKLX0KLQotTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6aXRl
bSggdW5zaWduZWQgaW5kZXggKSBjb25zdAotewotICAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7
Ci0gICAgIGlmIChpbmZvLT5jdXJyZW50ICYmIGluZm8tPnBvc2l0aW9uID09IGluZGV4KSB7Ci0g
ICAgICAgICByZXR1cm4gaW5mby0+Y3VycmVudDsKLSAgICAgfQotICAgICBpZiAoaW5mby0+aGFz
bGVuZ3RoICYmIGluZm8tPmxlbmd0aCA8PSBpbmRleCkgewotICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgIH0KLSAgICAgaWYgKCFpbmZvLT5jdXJyZW50IHx8IGluZm8tPnBvc2l0aW9uID4gaW5kZXgp
IHsKLSAgICAgICAgIGluZm8tPmN1cnJlbnQgPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQo
KSk7Ci0gICAgICAgICBpbmZvLT5wb3NpdGlvbiA9IDA7Ci0gICAgICAgICBpZiAoIWluZm8tPmN1
cnJlbnQpCi0gICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgIH0KLSAgICAgTm9kZUltcGwgKm5v
ZGUgPSBpbmZvLT5jdXJyZW50OwotICAgICBmb3IgKHVuc2lnbmVkIHBvcyA9IGluZm8tPnBvc2l0
aW9uOyBub2RlICYmIHBvcyA8IGluZGV4OyBwb3MrKykgewotICAgICAgICAgbm9kZSA9IHRyYXZl
cnNlTmV4dEl0ZW0obm9kZSk7Ci0gICAgIH0gICAgIAotICAgICBpbmZvLT5jdXJyZW50ID0gbm9k
ZTsKLSAgICAgaW5mby0+cG9zaXRpb24gPSBpbmRleDsKLSAgICAgcmV0dXJuIGluZm8tPmN1cnJl
bnQ7Ci19Ci0KLU5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6OmZpcnN0SXRlbSgpIGNvbnN0
Ci17Ci0gICAgIHJldHVybiBpdGVtKDApOwotfQotCi1Ob2RlSW1wbCAqSFRNTENvbGxlY3Rpb25J
bXBsOjpuZXh0SXRlbSgpIGNvbnN0Ci17Ci0gICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLSAK
LSAgICAgLy8gTG9vayBmb3IgdGhlICdzZWNvbmQnIGl0ZW0uIFRoZSBmaXJzdCBvbmUgaXMgY3Vy
cmVudEl0ZW0sIGFscmVhZHkgZ2l2ZW4gYmFjay4KLSAgICAgTm9kZUltcGwgKnJldHZhbCA9IHRy
YXZlcnNlTmV4dEl0ZW0oaW5mby0+Y3VycmVudCk7Ci0gICAgIGluZm8tPmN1cnJlbnQgPSByZXR2
YWw7Ci0gICAgIGluZm8tPnBvc2l0aW9uKys7Ci0gICAgIHJldHVybiByZXR2YWw7Ci19Ci0KLWJv
b2wgSFRNTENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRjaChOb2RlSW1wbCAqbm9kZSwg
Ym9vbCBjaGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZl
KSBjb25zdAotewotICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4obm9kZSk7Ci0gICAgaWYgKGNhc2VTZW5zaXRpdmUpIHsKLSAgICAgICAg
aWYgKGNoZWNrTmFtZSkgewotICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25s
eSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKLSAgICAgICAgICAg
IC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQotICAgICAgICAgICAgaWYgKHR5
cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmhhc0xvY2FsTmFtZShpbWdU
YWcpIHx8IGUtPmhhc0xvY2FsTmFtZShmb3JtVGFnKSB8fAotICAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKGFwcGxldFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykgfHwK
LSAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSAhPSBuYW1lOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRy
KSA9PSBuYW1lOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChjaGVja05hbWUpIHsKLSAgICAg
ICAgICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0
cywgb2JqZWN0cyBhbmQgZW1iZWRzCi0gICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZl
cnl0aGluZyBieSBpZCkKLSAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAg
ICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoaW1nVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUo
Zm9ybVRhZykgfHwKLSAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhcHBsZXRUYWcp
IHx8IGUtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoZW1iZWRUYWcpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpLmRvbVN0cmluZygp
Lmxvd2VyKCkgPT0gbmFtZS5sb3dlcigpICYmCi0gICAgICAgICAgICAgICAgZS0+Z2V0QXR0cmli
dXRlKGlkQXR0cikuZG9tU3RyaW5nKCkubG93ZXIoKSAhPSBuYW1lLmxvd2VyKCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikuZG9t
U3RyaW5nKCkubG93ZXIoKSA9PSBuYW1lLmxvd2VyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LQotTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmFtZWRJdGVtKGNvbnN0IERPTVN0cmlu
ZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAotewotICAgIC8vIGh0dHA6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vd29ya3Nob3AvYXV0aG9yL2RodG1sL3JlZmVyZW5jZS9tZXRob2RzL25h
bWVkaXRlbS5hc3AKLSAgICAvLyBUaGlzIG1ldGhvZCBmaXJzdCBzZWFyY2hlcyBmb3IgYW4gb2Jq
ZWN0IHdpdGggYSBtYXRjaGluZyBpZAotICAgIC8vIGF0dHJpYnV0ZS4gSWYgYSBtYXRjaCBpcyBu
b3QgZm91bmQsIHRoZSBtZXRob2QgdGhlbiBzZWFyY2hlcyBmb3IgYW4KLSAgICAvLyBvYmplY3Qg
d2l0aCBhIG1hdGNoaW5nIG5hbWUgYXR0cmlidXRlLCBidXQgb25seSBvbiB0aG9zZSBlbGVtZW50
cwotICAgIC8vIHRoYXQgYXJlIGFsbG93ZWQgYSBuYW1lIGF0dHJpYnV0ZS4KLSAgICByZXNldENv
bGxlY3Rpb25JbmZvKCk7Ci0gICAgaWRzRG9uZSA9IGZhbHNlOwotCi0gICAgTm9kZUltcGwgKm47
Ci0gICAgZm9yIChuID0gdHJhdmVyc2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJh
dmVyc2VOZXh0SXRlbShuKSkgewotICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2gobiwgaWRz
RG9uZSwgbmFtZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgICAgIAotICAgIGluZm8tPmN1cnJlbnQgPSBuOwotICAgIGlmKGluZm8tPmN1cnJlbnQpCi0g
ICAgICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwotICAgIGlkc0RvbmUgPSB0cnVlOwotCi0gICAg
Zm9yIChuID0gdHJhdmVyc2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VO
ZXh0SXRlbShuKSkgewotICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2gobiwgaWRzRG9uZSwg
bmFtZSwgY2FzZVNlbnNpdGl2ZSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBp
bmZvLT5jdXJyZW50ID0gbjsKLSAgICByZXR1cm4gaW5mby0+Y3VycmVudDsKLX0KLQotSFRNTE5h
bWVDb2xsZWN0aW9uSW1wbDo6SFRNTE5hbWVDb2xsZWN0aW9uSW1wbChEb2N1bWVudEltcGwqIF9i
YXNlLCBpbnQgX3R5cGUsIERPTVN0cmluZyAmbmFtZSkKLSAgICA6IEhUTUxDb2xsZWN0aW9uSW1w
bChfYmFzZSwgX3R5cGUpLAotICAgICAgbV9uYW1lKG5hbWUpCi17Ci19Ci0gICAgCi1Ob2RlSW1w
bCAqSFRNTE5hbWVDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZXh0SXRlbShOb2RlSW1wbCAqY3Vy
cmVudCkgY29uc3QKLXsKLSAgICBhc3NlcnQoY3VycmVudCk7Ci0KLSAgICBjdXJyZW50ID0gY3Vy
cmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotCi0gICAgd2hpbGUgKGN1cnJl
bnQpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzRWxlbWVudE5vZGUoKSkgewotICAgICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihjdXJyZW50KTsKLSAgICAgICAgICAgIHN3aXRjaCh0eXBl
KSB7Ci0gICAgICAgICAgICBjYXNlIFdJTkRPV19OQU1FRF9JVEVNUzoKLSAgICAgICAgICAgICAg
ICAvLyBmaW5kIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgZW1iZWRzIGFuZCBvYmplY3Rz
IGJ5IG5hbWUsIAotICAgICAgICAgICAgICAgIC8vIGJ1dCBhbnl0aGluZyBieSBpZAotICAgICAg
ICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGltZ1RhZykgfHwKLSAgICAgICAgICAgICAgICAg
ICAgZS0+aGFzVGFnTmFtZShmb3JtVGFnKSB8fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNU
YWdOYW1lKGFwcGxldFRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShl
bWJlZFRhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShvYmplY3RUYWcp
KQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikg
PT0gbV9uYW1lOwotICAgICAgICAgICAgICAgIGZvdW5kIHw9IGUtPmdldEF0dHJpYnV0ZShpZEF0
dHIpID09IG1fbmFtZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
RE9DVU1FTlRfTkFNRURfSVRFTVM6Ci0gICAgICAgICAgICAgICAgLy8gZmluZCBpbWFnZXMsIGZv
cm1zLCBhcHBsZXRzLCBlbWJlZHMsIG9iamVjdHMgYW5kIGlmcmFtZXMgYnkgbmFtZSwgCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IG9ubHkgYXBwbGV0cyBhbmQgb2JqZWN0IGJ5IGlkICh0aGlzIHN0
cmFuZ2UgcnVsZSBtYXRjaGVzIElFKQotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1l
KGltZ1RhZykgfHwKLSAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShmb3JtVGFnKSB8
fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fAotICAgICAg
ICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGlmcmFtZVRhZykpCi0gICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWU7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpKQotICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWU7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQotICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1f
bmFtZSB8fCBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSA9PSBtX25hbWUpICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZSktPmlz
RG9jTmFtZWRJdGVtKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKGZvdW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAg
ICB9Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5n
ZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQogCiB0ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0
aWMgdm9pZCBhcHBlbmRUb1ZlY3RvcihRUHRyVmVjdG9yPFQ+ICp2ZWMsIFQgKml0ZW0pCiB7CkBA
IC00MjgsOTggKzQ1LDYgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gc3RhdGljIHZvaWQgYXBwZW5kVG9W
ZQogICAgIHZlYy0+aW5zZXJ0KGNvdW50LCBpdGVtKTsKIH0KIAotdm9pZCBIVE1MQ29sbGVjdGlv
bkltcGw6OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGluZm8tPmhhc05hbWVD
YWNoZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGZvciAoTm9kZUltcGwgKm4gPSB0cmF2
ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7
Ci0gICAgICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIEhUTUxFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCo+KG4pOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0
dHJpYnV0ZShpZEF0dHIpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFs
ID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLSAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKLSAgICAgICAgICAgIFFQ
dHJWZWN0b3I8Tm9kZUltcGw+ICppZFZlY3RvciA9IGluZm8tPmlkQ2FjaGUuZ2V0KGlkQXR0clZh
bC5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKCFpZFZlY3RvcikgewotICAgICAgICAgICAgICAg
IGlkVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8Tm9kZUltcGw+OwotICAgICAgICAgICAgICAgIGlu
Zm8tPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCksIGlkVmVjdG9yKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGFwcGVuZFRvVmVjdG9yKGlkVmVjdG9yLCBuKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0
dHJWYWwKLSAgICAgICAgICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwgCi0gICAgICAgICAgICAg
ICAgKGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShmb3JtVGFnKSB8
fAotICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSB8fCBlLT5oYXNM
b2NhbE5hbWUob2JqZWN0VGFnKSB8fAotICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
ZW1iZWRUYWcpKSkpIHsKLSAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCi0gICAgICAg
ICAgICBRUHRyVmVjdG9yPE5vZGVJbXBsPiAqbmFtZVZlY3RvciA9IGluZm8tPm5hbWVDYWNoZS5n
ZXQobmFtZUF0dHJWYWwuaW1wbCgpKTsKLSAgICAgICAgICAgIGlmICghbmFtZVZlY3Rvcikgewot
ICAgICAgICAgICAgICAgIG5hbWVWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47Ci0g
ICAgICAgICAgICAgICAgaW5mby0+bmFtZUNhY2hlLmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG5h
bWVWZWN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kVG9WZWN0b3IobmFt
ZVZlY3Rvciwgbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmZvLT5oYXNOYW1lQ2FjaGUg
PSB0cnVlOwotfQotCi1RVmFsdWVMaXN0PCBSZWZQdHI8Tm9kZUltcGw+ID4gSFRNTENvbGxlY3Rp
b25JbXBsOjpuYW1lZEl0ZW1zKGNvbnN0IEF0b21pY1N0cmluZyAmbmFtZSkgY29uc3QKLXsKLSAg
ICBRVmFsdWVMaXN0PCBSZWZQdHI8Tm9kZUltcGw+ID4gcmVzdWx0OwotCi0gICAgaWYgKG5hbWUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgcmVzZXRDb2xsZWN0aW9u
SW5mbygpOwotICAgIHVwZGF0ZU5hbWVDYWNoZSgpOwotICAgIAotICAgIFFQdHJWZWN0b3I8Tm9k
ZUltcGw+ICppZFJlc3VsdHMgPSBpbmZvLT5pZENhY2hlLmdldChuYW1lLmltcGwoKSk7Ci0gICAg
UVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVSZXN1bHRzID0gaW5mby0+bmFtZUNhY2hlLmdldChu
YW1lLmltcGwoKSk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaWRSZXN1bHRzICYm
IGkgPCBpZFJlc3VsdHMtPmNvdW50KCk7ICsraSkgewotICAgICAgICByZXN1bHQuYXBwZW5kKFJl
ZlB0cjxOb2RlSW1wbD4oaWRSZXN1bHRzLT5hdChpKSkpOwotICAgIH0KLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IG5hbWVSZXN1bHRzICYmIGkgPCBuYW1lUmVzdWx0cy0+Y291bnQoKTsgKytp
KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoUmVmUHRyPE5vZGVJbXBsPihuYW1lUmVzdWx0cy0+
YXQoaSkpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLU5vZGVJbXBsICpI
VE1MQ29sbGVjdGlvbkltcGw6Om5leHROYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1lKSBj
b25zdAotewotICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLQotICAgIGZvciAoTm9kZUltcGwg
Km4gPSB0cmF2ZXJzZU5leHRJdGVtKGluZm8tPmN1cnJlbnQgPyBpbmZvLT5jdXJyZW50IDogbV9i
YXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4dEl0ZW0obikpIHsKLSAgICAgICAgaWYgKGNo
ZWNrRm9yTmFtZU1hdGNoKG4sIGlkc0RvbmUsIG5hbWUsIHRydWUpKSB7Ci0gICAgICAgICAgICBp
bmZvLT5jdXJyZW50ID0gbjsKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIGlmIChpZHNEb25lKSB7Ci0gICAgICAgIGluZm8tPmN1cnJlbnQgPSAwOyAK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlkc0RvbmUgPSB0cnVlOwotCi0gICAgZm9y
IChOb2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0oaW5mby0+Y3VycmVudCA/IGluZm8tPmN1
cnJlbnQgOiBtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VOZXh0SXRlbShuKSkgewotICAg
ICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2gobiwgaWRzRG9uZSwgbmFtZSwgdHJ1ZSkpIHsKLSAg
ICAgICAgICAgIGluZm8tPmN1cnJlbnQgPSBuOwotICAgICAgICAgICAgcmV0dXJuIG47Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6SFRNTEZvcm1Db2xsZWN0aW9uSW1wbChOb2Rl
SW1wbCogX2Jhc2UpCiAgICAgOiBIVE1MQ29sbGVjdGlvbkltcGwoX2Jhc2UsIDApCiB7CkBAIC02
NzMsNyArMTk4LDYgQEAgTm9kZUltcGwgKkhUTUxGb3JtQ29sbGVjdGlvbkltcGw6Om5hbWVkSQog
ICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwogfQogCi0KIE5vZGVJbXBsICpIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjpuZXh0TmFtZWRJdGVtKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKSBjb25zdAog
ewogICAgIC8vIG5leHROYW1lZEl0ZW1JbnRlcm5hbCBjYW4gcmV0dXJuIGFuIGl0ZW0gdGhhdCBo
YXMgYm90aCBpZD08bmFtZT4gYW5kIG5hbWU9PG5hbWU+CkluZGV4OiBraHRtbC9odG1sL0hUTUxG
b3JtRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVu
dEltcGwuaAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC9odG1sL0hUTUxGb3JtRWxlbWVudElt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOCBAQAogI2lmbmRlZiBIVE1MX0hUTUxG
b3JtRWxlbWVudEltcGxfSAogI2RlZmluZSBIVE1MX0hUTUxGb3JtRWxlbWVudEltcGxfSAogCi0j
aW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX21p
c2NpbXBsLmgiIC8vIGZvciBDb2xsZWN0aW9uSW5mbworI2luY2x1ZGUgIkhUTUxFbGVtZW50SW1w
bC5oIgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uSW1wbC5oIiAKIAogI2luY2x1ZGUgPHFwdHJ2
ZWN0b3IuaD4KIApAQCAtMzgsNiArMzgsNyBAQCBuYW1lc3BhY2UgRE9NIHsKIAogY2xhc3MgSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50SW1wbDsKK2Ns
YXNzIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw7CiAKIGNsYXNzIEhUTUxGb3JtRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxmYWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcAkocmV2aXNpb24g
MTIyMzYpCisrKyBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMTcgKzIzLDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiaHRtbGZhY3Rv
cnkuaCIKIAotI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
aHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1wbC5oIgotI2lu
Y2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfaGVh
ZGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRt
bC9odG1sX2xpc3RpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCi0jaW5j
bHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3Rp
bXBsLmgiCisjaW5jbHVkZSAiaHRtbF9iYXNlaW1wbC5oIgorI2luY2x1ZGUgImh0bWxfYmxvY2tp
bXBsLmgiCisjaW5jbHVkZSAiaHRtbF9jYW52YXNpbXBsLmgiCisjaW5jbHVkZSAiaHRtbF9kb2N1
bWVudGltcGwuaCIKKyNpbmNsdWRlICJodG1sX2hlYWRpbXBsLmgiCisjaW5jbHVkZSAiaHRtbF9p
bWFnZWltcGwuaCIKKyNpbmNsdWRlICJodG1sX2xpc3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbF90
YWJsZWltcGwuaCIKKyNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIKIAorI2luY2x1ZGUgIkhU
TUxDb2xsZWN0aW9uSW1wbC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudEltcGwuaCIKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxl
bWVudEltcGwuaCIKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJIVE1MT3B0R3JvdXBFbGVt
ZW50SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUg
IkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsLmgiCisjaW5jbHVkZSAiSFRNTEJhc2VGb250RWxlbWVu
dEltcGwuaCIKIAogI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KIApJbmRleDoga2h0bWwv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hU
TUxPcHRpb25FbGVtZW50SW1wbC5oCShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvSFRN
TE9wdGlvbkVsZW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNk
ZWZpbmUgSFRNTF9IVE1MT3B0aW9uRWxlbWVudEltcGxfSAogCiAjaW5jbHVkZSAiSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogbmFtZXNwYWNl
IGtodG1sIHsKICAgICBjbGFzcyBSZW5kZXJTZWxlY3Q7CkluZGV4OiBraHRtbC9odG1sL2h0bWx0
b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJ
KHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsMzIgKzI0LDI2IEBACiAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAogICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogKi8KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLS8vIEtERSBI
VE1MIFdpZGdldCAtIFRva2VuaXplcnMKLQotLy8jZGVmaW5lIFRPS0VOX0RFQlVHIDEKLS8vI2Rl
ZmluZSBUT0tFTl9ERUJVRyAyCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWx0b2tlbml6ZXIuaCIKKyNpbmNsdWRlICJodG1sdG9rZW5pemVyLmgiCiAKICNpbmNsdWRl
ICJDYWNoZWRTY3JpcHQuaCIKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJEb2N1
bWVudEZyYWdtZW50SW1wbC5oIgotI2luY2x1ZGUgIkRvY3VtZW50SW1wbC5oIgogI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgImNzc2hlbHBlci5oIgogI2luY2x1ZGUgImh0bWxfZG9jdW1lbnRpbXBsLmgi
CisjaW5jbHVkZSAiSFRNTEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAiaHRtbHBhcnNlci5oIgog
I2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGN0
eXBlLmg+Ci0jaW5jbHVkZSA8a2RlYnVnLmg+CiAjaW5jbHVkZSA8cXZhcmlhbnQuaD4KICNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogLy8gdHVybiBvZmYgaW5s
aW5pbmcgdG8gYWxsb3cgcHJvcGVyIGxpbmtpbmcgb24gbmV3ZXIgZ2NjICh4bWx0b2tlbml6ZXIu
Y3BwIGFsc28gdXNlcyBmaW5kRW50aXR5KCkpCiAjdW5kZWYgX19pbmxpbmUKQEAgLTQwMiw5ICsz
OTYsNiBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5pemVyOjpzY3JpCiAgICAgY3Vy
cmVudFByZXBlbmRpbmdTcmMgPSAmcHJlcGVuZGluZ1NyYzsKICAgICBpZiAoIXBhcnNlci0+c2tp
cE1vZGUoKSAmJiAhZm9sbG93aW5nRnJhbWVzZXQpIHsKICAgICAgICAgaWYgKGNzKSB7Ci0gICAg
ICAgICAgICAgLy9rZERlYnVnKCA2MDM2ICkgPDwgImNhY2hlZHNjcmlwdCBleHRlcm4hIiA8PCBl
bmRsOwotICAgICAgICAgICAgIC8va2REZWJ1ZyggNjAzNiApIDw8ICJzcmM6ICoiIDw8IFFTdHJp
bmcoIHNyYy5jdXJyZW50KCksIHNyYy5sZW5ndGgoKSApLmxhdGluMSgpIDw8ICIqIiA8PCBlbmRs
OwotICAgICAgICAgICAgIC8va2REZWJ1ZyggNjAzNiApIDw8ICJwZW5kaW5nOiAqIiA8PCBwZW5k
aW5nU3JjLmxhdGluMSgpIDw8ICIqIiA8PCBlbmRsOwogCSAgICBpZiAoc2F2ZWRQcmVwZW5kaW5n
U3JjKSB7CiAJCXNhdmVkUHJlcGVuZGluZ1NyYy0+YXBwZW5kKHNyYyk7CiAJICAgIH0gZWxzZSB7
CkBAIC00MzIsNyArNDIzLDYgQEAgSFRNTFRva2VuaXplcjo6U3RhdGUgSFRNTFRva2VuaXplcjo6
c2NyaQogICAgICAgICAgICAgLy9RVGltZSBkdDsKICAgICAgICAgICAgIC8vZHQuc3RhcnQoKTsK
ICAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKGV4U2NyaXB0LCBzdGF0ZSwgUVN0
cmluZzo6bnVsbCwgc2NyaXB0U3RhcnRMaW5lbm8pOwotCSAgICAvL2tkRGVidWcoIDYwMzYgKSA8
PCAic2NyaXB0IGV4ZWN1dGlvbiB0aW1lOiIgPDwgZHQuZWxhcHNlZCgpIDw8IGVuZGw7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTQ0MCw3ICs0MzAsNiBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBI
VE1MVG9rZW5pemVyOjpzY3JpCiAgICAgc2NyaXB0Q29kZVNpemUgPSBzY3JpcHRDb2RlUmVzeW5j
ID0gMDsKIAogICAgIGlmICghbV9leGVjdXRpbmdTY3JpcHQgJiYgIXN0YXRlLmxvYWRpbmdFeHRT
Y3JpcHQoKSkgewotCS8vIGtkRGVidWcoIDYwMzYgKSA8PCAiYWRkaW5nIHBlbmRpbmcgT3V0cHV0
IHRvIHBhcnNlZCBzdHJpbmciIDw8IGVuZGw7CiAJc3JjLmFwcGVuZChwZW5kaW5nU3JjKTsKIAlw
ZW5kaW5nU3JjLmNsZWFyKCk7CiAgICAgfSBlbHNlIGlmICghcHJlcGVuZGluZ1NyYy5pc0VtcHR5
KCkpIHsKQEAgLTUwNyw3ICs0OTYsNiBAQCBIVE1MVG9rZW5pemVyOjpTdGF0ZSBIVE1MVG9rZW5p
emVyOjpzY3JpCiAgICAgc3RhdGUuc2V0SW5TY3JpcHQob2xkc2NyaXB0KTsKIAogICAgIGlmICgh
bV9leGVjdXRpbmdTY3JpcHQgJiYgIXN0YXRlLmxvYWRpbmdFeHRTY3JpcHQoKSkgewotCS8vIGtk
RGVidWcoIDYwMzYgKSA8PCAiYWRkaW5nIHBlbmRpbmcgT3V0cHV0IHRvIHBhcnNlZCBzdHJpbmci
IDw8IGVuZGw7CiAJc3JjLmFwcGVuZChwZW5kaW5nU3JjKTsKIAlwZW5kaW5nU3JjLmNsZWFyKCk7
CiAgICAgfSBlbHNlIGlmICghcHJlcGVuZGluZ1NyYy5pc0VtcHR5KCkpIHsKSW5kZXg6IGtodG1s
L2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxF
bGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MRWxlbWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSwxNSArMjEsOSBAQAogICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyNkZWZp
bmUgREVCVUcKLS8vI2RlZmluZSBERUJVR19MQVlPVVQKLS8vI2RlZmluZSBQQVJfREVCVUcKLS8v
I2RlZmluZSBFVkVOVF9ERUJVRwotLy8jZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgorI2luY2x1
ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwu
aCIKICNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRlICJodG1sZmFjdG9y
eS5oIgpAQCAtNDAsNyArMzQsNiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAKICNpbmNsdWRlICJk
b20vZG9tX2V4Y2VwdGlvbi5oIgotI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0Lmgi
CiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9yZXBsYWNlZC5oIgogI2luY2x1ZGUgImNzcy9j
c3NfdmFsdWVpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgpAQCAt
NTEsMTUgKzQ0LDEyIEBACiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1
ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiZWRpdGluZy9tYXJrdXAuaCIKKyNpbmNs
dWRlICJodG1sbmFtZXMuaCIKIAotI2luY2x1ZGUgPGtkZWJ1Zy5oPgorbmFtZXNwYWNlIFdlYkNv
cmUgewogCi11c2luZyBuYW1lc3BhY2UgRE9NOwotdXNpbmcgbmFtZXNwYWNlIERPTTo6RXZlbnRO
YW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKLXVzaW5nIG5hbWVzcGFjZSBraHRtbDsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxFbGVt
ZW50SW1wbDo6SFRNTEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50SW1wbCAqZG9jKQogICAgIDogU3R5bGVkRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQpA
QCAtODIwLDMgKzgxMCw1IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRIVE1MRXZlbnRMaXN0
ZW4KIHsKICAgICBFbGVtZW50SW1wbDo6c2V0SFRNTEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBn
ZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLCB0aGlz
KSk7CiB9CisKK30KSW5kZXg6IGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudEltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudEltcGwuY3BwCShy
ZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudEltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCArMjksOSBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RF
bGVtZW50SW1wbC5oIgogCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9mb3JtLmgiCisjaW5j
bHVkZSAiaHRtbG5hbWVzLmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBraHRtbDsKLQotbmFtZXNwYWNl
IERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGto
dG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0
bWwvaHRtbF9ibG9ja2ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw4ICsyMSw3IEBACiAg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLS8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vI2RlZmluZSBERUJVRworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiaHRt
bF9ibG9ja2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2RvY3VtZW50aW1wbC5oIgpAQCAtMzAsMTEg
KzI5LDEwIEBACiAKICNpbmNsdWRlICJjc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiY3NzdmFs
dWVzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKLSNpbmNsdWRlIDxrZGVidWcuaD4KK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIGtodG1sOwotdXNpbmcgbmFtZXNw
YWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEhUTUxCbG9ja3F1b3RlRWxl
bWVudEltcGw6OkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRJbXBsICpkb2MpCkBA
IC00MTAsMyArNDA4LDUgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBl
ZAogICAgIH0gZWxzZQogICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwogfQorCit9CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2
KQorKysga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
NzAgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVu
dGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sL2h0
bWxfbWlzY2ltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVk
ZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3Rp
bXBsLmgiCi0jaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50SW1wbC5oIgotI2luY2x1ZGUgIkhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsLmgiCi0KLSNpbmNsdWRlICJkb20vZG9tX25vZGUuaCIKLQot
I2luY2x1ZGUgPGtkZWJ1Zy5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQuaD4KLQotbmFt
ZXNwYWNlIERPTSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLUhUTUxCYXNlRm9u
dEVsZW1lbnRJbXBsOjpIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChiYXNlZm9udFRhZywgZG9jKQotewotfQotCi1ET01TdHJp
bmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGNvbG9yQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVudElt
cGw6OnNldENvbG9yKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRl
KGNvbG9yQXR0ciwgdmFsdWUpOwotfQotCi1ET01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudElt
cGw6OmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZmFjZUF0dHIpOwot
fQotCi12b2lkIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpzZXRGYWNlKGNvbnN0IERPTVN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGZhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLURP
TVN0cmluZyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cik7Ci19Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVu
dEltcGw6OnNldFNpemUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1
dGUoc2l6ZUF0dHIsIHZhbHVlKTsKLX0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MQ29s
bGVjdGlvbkltcGw6OkhUTUxDb2xsZWN0aW9uSW1wbChOb2RlSW1wbCAqX2Jhc2UsIGludCBfdHlw
ZSkKLSAgICA6IG1fYmFzZShfYmFzZSksCi0gICAgICB0eXBlKF90eXBlKSwKLSAgICAgIGluZm8o
MCksCi0gICAgICBpZHNEb25lKGZhbHNlKSwKLSAgICAgIG1fb3duc0luZm8oZmFsc2UpCi17Ci0g
ICAgaWYgKF9iYXNlLT5pc0RvY3VtZW50Tm9kZSgpICYmIF9iYXNlLT5nZXREb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpKQotICAgICAgICBpbmZvID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
SW1wbCo+KF9iYXNlLT5nZXREb2N1bWVudCgpKS0+Y29sbGVjdGlvbkluZm8odHlwZSk7Ci19Ci0K
LUhUTUxDb2xsZWN0aW9uSW1wbDo6fkhUTUxDb2xsZWN0aW9uSW1wbCgpCi17Ci0gICAgaWYgKG1f
b3duc0luZm8pCi0gICAgICAgIGRlbGV0ZSBpbmZvOwotfQotCi1IVE1MQ29sbGVjdGlvbkltcGw6
OkNvbGxlY3Rpb25JbmZvOjpDb2xsZWN0aW9uSW5mbygpIDoKLSAgICB2ZXJzaW9uKDApCi17Ci0g
ICAgcmVzZXQoKTsKLX0KLQotSFRNTENvbGxlY3Rpb25JbXBsOjpDb2xsZWN0aW9uSW5mbzo6fkNv
bGxlY3Rpb25JbmZvKCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMoaWRDYWNoZSk7Ci0gICAgZGVs
ZXRlQWxsVmFsdWVzKG5hbWVDYWNoZSk7Ci19Ci0KLXZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjpD
b2xsZWN0aW9uSW5mbzo6cmVzZXQoKQotewotICAgIGN1cnJlbnQgPSAwOwotICAgIHBvc2l0aW9u
ID0gMDsKLSAgICBsZW5ndGggPSAwOwotICAgIGhhc2xlbmd0aCA9IGZhbHNlOwotICAgIGVsZW1l
bnRzQXJyYXlQb3NpdGlvbiA9IDA7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKGlkQ2FjaGUpOwotICAg
IGlkQ2FjaGUuY2xlYXIoKTsKLSAgICBkZWxldGVBbGxWYWx1ZXMobmFtZUNhY2hlKTsKLSAgICBu
YW1lQ2FjaGUuY2xlYXIoKTsKLSAgICBoYXNOYW1lQ2FjaGUgPSBmYWxzZTsKLX0KLQotdm9pZCBI
VE1MQ29sbGVjdGlvbkltcGw6OnJlc2V0Q29sbGVjdGlvbkluZm8oKSBjb25zdAotewotICAgIHVu
c2lnbmVkIGludCBkb2N2ZXJzaW9uID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCo+KG1f
YmFzZS0+Z2V0RG9jdW1lbnQoKSktPmRvbVRyZWVWZXJzaW9uKCk7Ci0KLSAgICBpZiAoIWluZm8p
IHsKLSAgICAgICAgaW5mbyA9IG5ldyBDb2xsZWN0aW9uSW5mbzsKLSAgICAgICAgbV9vd25zSW5m
byA9IHRydWU7Ci0gICAgICAgIGluZm8tPnZlcnNpb24gPSBkb2N2ZXJzaW9uOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGluZm8tPnZlcnNpb24gIT0gZG9jdmVyc2lvbikgewot
ICAgICAgICBpbmZvLT5yZXNldCgpOwotICAgICAgICBpbmZvLT52ZXJzaW9uID0gZG9jdmVyc2lv
bjsKLSAgICB9Ci19Ci0KLQotTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VO
ZXh0SXRlbShOb2RlSW1wbCAqY3VycmVudCkgY29uc3QKLXsKLSAgICBhc3NlcnQoY3VycmVudCk7
Ci0KLSAgICBpZiAodHlwZSA9PSBOT0RFX0NISUxEUkVOICYmIG1fYmFzZS5nZXQoKSAhPSBjdXJy
ZW50KQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICBlbHNl
Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5nZXQo
KSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNFbGVt
ZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAg
ICBib29sIGRlZXAgPSB0cnVlOwotICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwotICAgICAgICAgICAgc3dpdGNo
KHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgRE9DX0lNQUdFUzoKLSAgICAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKGltZ1RhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0ZPUk1T
OgotICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFtZShmb3JtVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBUQUJMRV9UQk9ESUVTOgotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUodGJvZHlUYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBUUl9DRUxMUzoKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1l
KHRkVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUodGhUYWcpKQotICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRh
YmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1dTOgotICAgICAgICAgICAgY2Fz
ZSBUU0VDVElPTl9ST1dTOgotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUodHJU
YWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAg
ZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBT
RUxFQ1RfT1BUSU9OUzoKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgotICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoYXJlYVRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX0FQUExF
VFM6ICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAg
aWYgKGUtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShhcHBsZXRU
YWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19FTUJFRFM6ICAgLy8gYWxsIEVNQkVEIGVsZW1l
bnRzCi0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykpCi0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBET0NfTElOS1M6ICAgICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRzIHdpdGgg
YSB2YWx1ZSBmb3IgaHJlZgotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYVRh
ZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFyZWFUYWcpKQotICAgICAgICAgICAgICAgICAgICBpZiAo
IWUtPmdldEF0dHJpYnV0ZShocmVmQXR0cikuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIERPQ19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3Ig
bmFtZSBvciBhbiBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKGFUYWcpKQotICAgICAgICAgICAgICAgICAgICBpZiAoIWUtPmdldEF0dHJpYnV0ZShuYW1l
QXR0cikuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19BTEw6Ci0gICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBOT0RFX0NISUxEUkVOOgotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJy
b3IgaW4gSFRNTENvbGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaWYgKGZvdW5kKQotICAgICAgICAgICAgICAgIHJldHVybiBjdXJy
ZW50OwotICAgICAgICAgICAgaWYgKGRlZXApIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgfSAKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC0+dHJhdmVyc2VOZXh0U2libGluZyhtX2Jhc2UuZ2V0KCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotCi11bnNpZ25lZCBIVE1MQ29sbGVjdGlvbkltcGw6OmNhbGNMZW5ndGgo
KSBjb25zdAotewotICAgIHVuc2lnbmVkIGxlbiA9IDA7Ci0KLSAgICBmb3IgKE5vZGVJbXBsICpj
dXJyZW50ID0gdHJhdmVyc2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBjdXJyZW50OyBjdXJyZW50
ID0gdHJhdmVyc2VOZXh0SXRlbShjdXJyZW50KSkgewotICAgICAgICBsZW4rKzsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbGVuOwotfQotCi0vLyBzaW5jZSB0aGUgY29sbGVjdGlvbnMgYXJlIHRvIGJl
ICJsaXZlIiwgd2UgaGF2ZSB0byBkbyB0aGUKLS8vIGNhbGN1bGF0aW9uIGV2ZXJ5IHRpbWUgaWYg
YW55dGhpbmcgaGFzIGNoYW5nZWQKLXVuc2lnbmVkIEhUTUxDb2xsZWN0aW9uSW1wbDo6bGVuZ3Ro
KCkgY29uc3QKLXsKLSAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7Ci0gICAgaWYgKCFpbmZvLT5o
YXNsZW5ndGgpIHsKLSAgICAgICAgaW5mby0+bGVuZ3RoID0gY2FsY0xlbmd0aCgpOwotICAgICAg
ICBpbmZvLT5oYXNsZW5ndGggPSB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gaW5mby0+bGVuZ3Ro
OwotfQotCi1Ob2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjppdGVtKCB1bnNpZ25lZCBpbmRl
eCApIGNvbnN0Ci17Ci0gICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLSAgICAgaWYgKGluZm8t
PmN1cnJlbnQgJiYgaW5mby0+cG9zaXRpb24gPT0gaW5kZXgpIHsKLSAgICAgICAgIHJldHVybiBp
bmZvLT5jdXJyZW50OwotICAgICB9Ci0gICAgIGlmIChpbmZvLT5oYXNsZW5ndGggJiYgaW5mby0+
bGVuZ3RoIDw9IGluZGV4KSB7Ci0gICAgICAgICByZXR1cm4gMDsKLSAgICAgfQotICAgICBpZiAo
IWluZm8tPmN1cnJlbnQgfHwgaW5mby0+cG9zaXRpb24gPiBpbmRleCkgewotICAgICAgICAgaW5m
by0+Y3VycmVudCA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsKLSAgICAgICAgIGlu
Zm8tPnBvc2l0aW9uID0gMDsKLSAgICAgICAgIGlmICghaW5mby0+Y3VycmVudCkKLSAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgfQotICAgICBOb2RlSW1wbCAqbm9kZSA9IGluZm8tPmN1cnJl
bnQ7Ci0gICAgIGZvciAodW5zaWduZWQgcG9zID0gaW5mby0+cG9zaXRpb247IG5vZGUgJiYgcG9z
IDwgaW5kZXg7IHBvcysrKSB7Ci0gICAgICAgICBub2RlID0gdHJhdmVyc2VOZXh0SXRlbShub2Rl
KTsKLSAgICAgfSAgICAgCi0gICAgIGluZm8tPmN1cnJlbnQgPSBub2RlOwotICAgICBpbmZvLT5w
b3NpdGlvbiA9IGluZGV4OwotICAgICByZXR1cm4gaW5mby0+Y3VycmVudDsKLX0KLQotTm9kZUlt
cGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6Zmlyc3RJdGVtKCkgY29uc3QKLXsKLSAgICAgcmV0dXJu
IGl0ZW0oMCk7Ci19Ci0KLU5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6Om5leHRJdGVtKCkg
Y29uc3QKLXsKLSAgICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwotIAotICAgICAvLyBMb29rIGZv
ciB0aGUgJ3NlY29uZCcgaXRlbS4gVGhlIGZpcnN0IG9uZSBpcyBjdXJyZW50SXRlbSwgYWxyZWFk
eSBnaXZlbiBiYWNrLgotICAgICBOb2RlSW1wbCAqcmV0dmFsID0gdHJhdmVyc2VOZXh0SXRlbShp
bmZvLT5jdXJyZW50KTsKLSAgICAgaW5mby0+Y3VycmVudCA9IHJldHZhbDsKLSAgICAgaW5mby0+
cG9zaXRpb24rKzsKLSAgICAgcmV0dXJuIHJldHZhbDsKLX0KLQotYm9vbCBIVE1MQ29sbGVjdGlv
bkltcGw6OmNoZWNrRm9yTmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwg
Y29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci17Ci0gICAg
aWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihu
b2RlKTsKLSAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewotICAgICAgICBpZiAoY2hlY2tOYW1lKSB7
Ci0gICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMs
IGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwotICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhv
dWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCi0gICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYm
IAotICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKGltZ1RhZykgfHwgZS0+aGFzTG9j
YWxOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoYXBw
bGV0VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUob2JqZWN0VGFnKSB8fAotICAgICAgICAgICAgICAg
ICAgZS0+aGFzTG9jYWxOYW1lKGVtYmVkVGFnKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBu
YW1lICYmIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpICE9IG5hbWU7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG5hbWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKGNoZWNrTmFtZSkgewotICAgICAgICAgICAgLy8gZG9jdW1l
bnQuYWxsIHJldHVybnMgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBl
bWJlZHMKLSAgICAgICAgICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQot
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUt
Pmhhc0xvY2FsTmFtZShpbWdUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShmb3JtVGFnKSB8fAotICAg
ICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGFwcGxldFRhZykgfHwgZS0+aGFzTG9jYWxO
YW1lKG9iamVjdFRhZykgfHwKLSAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShlbWJl
ZFRhZykpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0
dXJuIGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikuZG9tU3RyaW5nKCkubG93ZXIoKSA9PSBuYW1l
Lmxvd2VyKCkgJiYKLSAgICAgICAgICAgICAgICBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKS5kb21T
dHJpbmcoKS5sb3dlcigpICE9IG5hbWUubG93ZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKS5kb21TdHJpbmcoKS5sb3dlcigp
ID09IG5hbWUubG93ZXIoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCi1Ob2RlSW1wbCAqSFRN
TENvbGxlY3Rpb25JbXBsOjpuYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNh
c2VTZW5zaXRpdmUpIGNvbnN0Ci17Ci0gICAgLy8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93
b3Jrc2hvcC9hdXRob3IvZGh0bWwvcmVmZXJlbmNlL21ldGhvZHMvbmFtZWRpdGVtLmFzcAotICAg
IC8vIFRoaXMgbWV0aG9kIGZpcnN0IHNlYXJjaGVzIGZvciBhbiBvYmplY3Qgd2l0aCBhIG1hdGNo
aW5nIGlkCi0gICAgLy8gYXR0cmlidXRlLiBJZiBhIG1hdGNoIGlzIG5vdCBmb3VuZCwgdGhlIG1l
dGhvZCB0aGVuIHNlYXJjaGVzIGZvciBhbgotICAgIC8vIG9iamVjdCB3aXRoIGEgbWF0Y2hpbmcg
bmFtZSBhdHRyaWJ1dGUsIGJ1dCBvbmx5IG9uIHRob3NlIGVsZW1lbnRzCi0gICAgLy8gdGhhdCBh
cmUgYWxsb3dlZCBhIG5hbWUgYXR0cmlidXRlLgotICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsK
LSAgICBpZHNEb25lID0gZmFsc2U7Ci0KLSAgICBOb2RlSW1wbCAqbjsKLSAgICBmb3IgKG4gPSB0
cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4p
KSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChuLCBpZHNEb25lLCBuYW1lLCBjYXNl
U2Vuc2l0aXZlKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgaW5m
by0+Y3VycmVudCA9IG47Ci0gICAgaWYoaW5mby0+Y3VycmVudCkKLSAgICAgICAgcmV0dXJuIGlu
Zm8tPmN1cnJlbnQ7Ci0gICAgaWRzRG9uZSA9IHRydWU7Ci0KLSAgICBmb3IgKG4gPSB0cmF2ZXJz
ZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0g
ICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChuLCBpZHNEb25lLCBuYW1lLCBjYXNlU2Vuc2l0
aXZlKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGluZm8tPmN1cnJlbnQgPSBu
OwotICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwotfQotCi1IVE1MTmFtZUNvbGxlY3Rpb25JbXBs
OjpIVE1MTmFtZUNvbGxlY3Rpb25JbXBsKERvY3VtZW50SW1wbCogX2Jhc2UsIGludCBfdHlwZSwg
RE9NU3RyaW5nICZuYW1lKQotICAgIDogSFRNTENvbGxlY3Rpb25JbXBsKF9iYXNlLCBfdHlwZSks
Ci0gICAgICBtX25hbWUobmFtZSkKLXsKLX0KLSAgICAKLU5vZGVJbXBsICpIVE1MTmFtZUNvbGxl
Y3Rpb25JbXBsOjp0cmF2ZXJzZU5leHRJdGVtKE5vZGVJbXBsICpjdXJyZW50KSBjb25zdAotewot
ICAgIGFzc2VydChjdXJyZW50KTsKLQotICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5l
eHROb2RlKG1fYmFzZS5nZXQoKSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAgICBp
ZiAoY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBib29sIGZvdW5kID0g
ZmFsc2U7Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJ
bXBsICo+KGN1cnJlbnQpOwotICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKLSAgICAgICAgICAg
IGNhc2UgV0lORE9XX05BTUVEX0lURU1TOgotICAgICAgICAgICAgICAgIC8vIGZpbmQgb25seSBp
bWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBlbWJlZHMgYW5kIG9iamVjdHMgYnkgbmFtZSwgCi0gICAg
ICAgICAgICAgICAgLy8gYnV0IGFueXRoaW5nIGJ5IGlkCi0gICAgICAgICAgICAgICAgaWYgKGUt
Pmhhc1RhZ05hbWUoaW1nVGFnKSB8fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1l
KGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFn
KSB8fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGVtYmVkVGFnKSB8fAotICAg
ICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWU7Ci0gICAg
ICAgICAgICAgICAgZm91bmQgfD0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cikgPT0gbV9uYW1lOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NVTUVOVF9OQU1FRF9J
VEVNUzoKLSAgICAgICAgICAgICAgICAvLyBmaW5kIGltYWdlcywgZm9ybXMsIGFwcGxldHMsIGVt
YmVkcywgb2JqZWN0cyBhbmQgaWZyYW1lcyBieSBuYW1lLCAKLSAgICAgICAgICAgICAgICAvLyBi
dXQgb25seSBhcHBsZXRzIGFuZCBvYmplY3QgYnkgaWQgKHRoaXMgc3RyYW5nZSBydWxlIG1hdGNo
ZXMgSUUpCi0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoaW1nVGFnKSB8fAotICAg
ICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgIGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUt
Pmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlLT5n
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0g
ZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG1fbmFtZTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpCi0gICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0
dHJpYnV0ZShpZEF0dHIpID09IG1fbmFtZSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlKS0+aXNEb2NOYW1lZEl0ZW0oKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgYXNzZXJ0KDApOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZm91bmQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgY3Vy
cmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2b2lkIGFwcGVuZFRv
VmVjdG9yKFFQdHJWZWN0b3I8VD4gKnZlYywgVCAqaXRlbSkKLXsKLSAgICB1bnNpZ25lZCBzaXpl
ID0gdmVjLT5zaXplKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSB2ZWMtPmNvdW50KCk7Ci0gICAg
aWYgKHNpemUgPT0gY291bnQpCi0gICAgICAgIHZlYy0+cmVzaXplKHNpemUgPT0gMCA/IDggOiAo
aW50KShzaXplICogMS41KSk7Ci0gICAgdmVjLT5pbnNlcnQoY291bnQsIGl0ZW0pOwotfQotCi12
b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKLXsKLSAgICBp
ZiAoaW5mby0+aGFzTmFtZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZm9yIChO
b2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZl
cnNlTmV4dEl0ZW0obikpIHsKLSAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRB
dHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cik7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwotICAgICAgICBp
ZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNo
ZQotICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkVmVjdG9yID0gaW5mby0+aWRD
YWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7
Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47Ci0g
ICAgICAgICAgICAgICAgaW5mby0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0
b3IpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kVG9WZWN0b3IoaWRWZWN0b3Is
IG4pOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlk
QXR0clZhbCAhPSBuYW1lQXR0clZhbAotICAgICAgICAgICAgJiYgKHR5cGUgIT0gRE9DX0FMTCB8
fCAKLSAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKGltZ1RhZykgfHwgZS0+aGFzTG9j
YWxOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShhcHBs
ZXRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8Ci0gICAgICAgICAgICAgICAg
IGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykpKSkgewotICAgICAgICAgICAgLy8gYWRkIHRvIG5h
bWUgY2FjaGUKLSAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9yID0g
aW5mby0+bmFtZUNhY2hlLmdldChuYW1lQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAgaWYg
KCFuYW1lVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBRUHRyVmVj
dG9yPE5vZGVJbXBsPjsKLSAgICAgICAgICAgICAgICBpbmZvLT5uYW1lQ2FjaGUuYWRkKG5hbWVB
dHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBh
cHBlbmRUb1ZlY3RvcihuYW1lVmVjdG9yLCBuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlu
Zm8tPmhhc05hbWVDYWNoZSA9IHRydWU7Ci19Ci0KLVFWYWx1ZUxpc3Q8IFJlZlB0cjxOb2RlSW1w
bD4gPiBIVE1MQ29sbGVjdGlvbkltcGw6Om5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nICZu
YW1lKSBjb25zdAotewotICAgIFFWYWx1ZUxpc3Q8IFJlZlB0cjxOb2RlSW1wbD4gPiByZXN1bHQ7
Ci0KLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICByZXNldENvbGxlY3Rpb25JbmZvKCk7Ci0gICAgdXBkYXRlTmFtZUNhY2hlKCk7Ci0gICAgCi0g
ICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkUmVzdWx0cyA9IGluZm8tPmlkQ2FjaGUuZ2V0KG5h
bWUuaW1wbCgpKTsKLSAgICBRUHRyVmVjdG9yPE5vZGVJbXBsPiAqbmFtZVJlc3VsdHMgPSBpbmZv
LT5uYW1lQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpZFJlc3VsdHMgJiYgaSA8IGlkUmVzdWx0cy0+Y291bnQoKTsgKytpKSB7Ci0gICAgICAg
IHJlc3VsdC5hcHBlbmQoUmVmUHRyPE5vZGVJbXBsPihpZFJlc3VsdHMtPmF0KGkpKSk7Ci0gICAg
fQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgbmFtZVJlc3VsdHMgJiYgaSA8IG5hbWVSZXN1
bHRzLT5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChSZWZQdHI8Tm9kZUlt
cGw+KG5hbWVSZXN1bHRzLT5hdChpKSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLQotTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmV4dE5hbWVkSXRlbShjb25zdCBE
T01TdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0gICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwotCi0g
ICAgZm9yIChOb2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0oaW5mby0+Y3VycmVudCA/IGlu
Zm8tPmN1cnJlbnQgOiBtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VOZXh0SXRlbShuKSkg
ewotICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2gobiwgaWRzRG9uZSwgbmFtZSwgdHJ1ZSkp
IHsKLSAgICAgICAgICAgIGluZm8tPmN1cnJlbnQgPSBuOwotICAgICAgICAgICAgcmV0dXJuIG47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlkc0RvbmUpIHsKLSAgICAgICAgaW5m
by0+Y3VycmVudCA9IDA7IAotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWRzRG9uZSA9
IHRydWU7Ci0KLSAgICBmb3IgKE5vZGVJbXBsICpuID0gdHJhdmVyc2VOZXh0SXRlbShpbmZvLT5j
dXJyZW50ID8gaW5mby0+Y3VycmVudCA6IG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5l
eHRJdGVtKG4pKSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChuLCBpZHNEb25lLCBu
YW1lLCB0cnVlKSkgewotICAgICAgICAgICAgaW5mby0+Y3VycmVudCA9IG47Ci0gICAgICAgICAg
ICByZXR1cm4gbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpIVE1MRm9ybUNv
bGxlY3Rpb25JbXBsKE5vZGVJbXBsKiBfYmFzZSkKLSAgICA6IEhUTUxDb2xsZWN0aW9uSW1wbChf
YmFzZSwgMCkKLXsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtQmFzZSA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwotICAgIGlmICghZm9ybUJh
c2UtPmNvbGxlY3Rpb25JbmZvKSB7Ci0gICAgICAgIGZvcm1CYXNlLT5jb2xsZWN0aW9uSW5mbyA9
IG5ldyBDb2xsZWN0aW9uSW5mbygpOwotICAgIH0KLSAgICBpbmZvID0gZm9ybUJhc2UtPmNvbGxl
Y3Rpb25JbmZvOwotfQotCi1IVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjp+SFRNTEZvcm1Db2xsZWN0
aW9uSW1wbCgpCi17Ci19Ci0KLXVuc2lnbmVkIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmNhbGNM
ZW5ndGgoKSBjb25zdAotewotICAgIFFQdHJWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGw+ICZsID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSkt
PmZvcm1FbGVtZW50czsKLQotICAgIGludCBsZW4gPSAwOwotICAgIGZvciAoIHVuc2lnbmVkIGkg
PSAwOyBpIDwgbC5jb3VudCgpOyBpKysgKQotICAgICAgICBpZiAoIGwuYXQoIGkgKS0+aXNFbnVt
ZXJhdGFibGUoKSApCi0gICAgICAgICAgICArK2xlbjsKLQotICAgIHJldHVybiBsZW47Ci19Ci0K
LU5vZGVJbXBsICpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjppdGVtKHVuc2lnbmVkIGluZGV4KSBj
b25zdAotewotICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLQotICAgIGlmIChpbmZvLT5jdXJy
ZW50ICYmIGluZm8tPnBvc2l0aW9uID09IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBpbmZvLT5j
dXJyZW50OwotICAgIH0KLSAgICBpZiAoaW5mby0+aGFzbGVuZ3RoICYmIGluZm8tPmxlbmd0aCA8
PSBpbmRleCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFpbmZvLT5jdXJy
ZW50IHx8IGluZm8tPnBvc2l0aW9uID4gaW5kZXgpIHsKLSAgICAgICAgaW5mby0+Y3VycmVudCA9
IDA7Ci0gICAgICAgIGluZm8tPnBvc2l0aW9uID0gMDsKLSAgICAgICAgaW5mby0+ZWxlbWVudHNB
cnJheVBvc2l0aW9uID0gMDsKLSAgICB9Ci0KLSAgICBRUHRyVmVjdG9yPEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsPiAmbCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihtX2Jh
c2UuZ2V0KCkpLT5mb3JtRWxlbWVudHM7Ci0gICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0gaW5m
by0+cG9zaXRpb247Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gaW5mby0+ZWxlbWVudHNB
cnJheVBvc2l0aW9uOyBpIDwgbC5jb3VudCgpOyBpKyspIHsKLSAgICAgICAgaWYgKGxbaV0tPmlz
RW51bWVyYXRhYmxlKCkgKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudEluZGV4
KSB7Ci0gICAgICAgICAgICAgICAgaW5mby0+cG9zaXRpb24gPSBpbmRleDsKLSAgICAgICAgICAg
ICAgICBpbmZvLT5jdXJyZW50ID0gbFtpXTsKLSAgICAgICAgICAgICAgICBpbmZvLT5lbGVtZW50
c0FycmF5UG9zaXRpb24gPSBpOwotICAgICAgICAgICAgICAgIHJldHVybiBsW2ldOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjdXJyZW50SW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiAwOwotfQotCi1Ob2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6
Z2V0TmFtZWRJdGVtKE5vZGVJbXBsKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNv
bnN0IERPTVN0cmluZyYgbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAotewotICAgIGlu
Zm8tPnBvc2l0aW9uID0gMDsKLSAgICByZXR1cm4gZ2V0TmFtZWRGb3JtSXRlbShhdHRyTmFtZSwg
bmFtZSwgMCwgY2FzZVNlbnNpdGl2ZSk7Ci19Ci0KLU5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rp
b25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBj
b25zdCBET01TdHJpbmcmIG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNp
dGl2ZSkgY29uc3QKLXsKLSAgICBpZiAobV9iYXNlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsKiBiYXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG1fYmFzZS5nZXQoKSk7Ci0gICAgICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRzID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChiYXNlRWxlbWVudC0+aGFzTG9jYWxOYW1lKGZvcm1UYWcpKSB7
Ci0gICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUgPSBmLT5mb3JtRWxlbWVudHNbaV07Ci0g
ICAgICAgICAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYm9vbCBmb3VuZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShhdHRyTmFt
ZSkgPT0gbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0cmluZygpLmxvd2Vy
KCkgPT0gbmFtZS5sb3dlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cyA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tZHVwbGljYXRl
TnVtYmVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsK
LSAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwotCi0gICAgICAgICAgICBmb3IodW5zaWduZWQg
aSA9IDA7IGkgPCBmLT5pbWdFbGVtZW50cy5jb3VudCgpOyArK2kpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGUgPSBmLT5pbWdFbGVtZW50c1tp
XTsKLSAgICAgICAgICAgICAgICBib29sIGZvdW5kOwotICAgICAgICAgICAgICAgIGlmIChjYXNl
U2Vuc2l0aXZlKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShh
dHRyTmFtZSkgPT0gbmFtZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKS5kb21TdHJpbmcoKS5sb3dlcigp
ID09IG5hbWUubG93ZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVy
biAwOwotfQotCi1Ob2RlSW1wbCAqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmZpcnN0SXRlbSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGl0ZW0oMCk7Ci19Ci0KLU5vZGVJbXBsICogSFRNTEZvcm1D
b2xsZWN0aW9uSW1wbDo6bmV4dEl0ZW0oKSBjb25zdAotewotICAgIHJldHVybiBpdGVtKGluZm8t
PnBvc2l0aW9uICsgMSk7Ci19Ci0KLU5vZGVJbXBsICogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6
bmV4dE5hbWVkSXRlbUludGVybmFsKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgY29uc3QKLXsKLSAg
ICBOb2RlSW1wbCAqcmV0dmFsID0gZ2V0TmFtZWRGb3JtSXRlbSggaWRzRG9uZSA/IG5hbWVBdHRy
IDogaWRBdHRyLCBuYW1lLCArK2luZm8tPnBvc2l0aW9uLCB0cnVlICk7Ci0gICAgaWYgKHJldHZh
bCkKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICBpZiAoaWRzRG9uZSkgLy8gd2UncmUgZG9u
ZQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBBZnRlciBkb2luZyBpZCwgZG8gbmFtZQotICAg
IGlkc0RvbmUgPSB0cnVlOwotICAgIHJldHVybiBnZXROYW1lZEl0ZW0obV9iYXNlLT5maXJzdENo
aWxkKCksIG5hbWVBdHRyLCBuYW1lLCB0cnVlKTsKLX0KLQotTm9kZUltcGwgKkhUTUxGb3JtQ29s
bGVjdGlvbkltcGw6Om5hbWVkSXRlbSggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VT
ZW5zaXRpdmUgKSBjb25zdAotewotICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vd29y
a3Nob3AvYXV0aG9yL2RodG1sL3JlZmVyZW5jZS9tZXRob2RzL25hbWVkaXRlbS5hc3AKLSAgICAv
LyBUaGlzIG1ldGhvZCBmaXJzdCBzZWFyY2hlcyBmb3IgYW4gb2JqZWN0IHdpdGggYSBtYXRjaGlu
ZyBpZAotICAgIC8vIGF0dHJpYnV0ZS4gSWYgYSBtYXRjaCBpcyBub3QgZm91bmQsIHRoZSBtZXRo
b2QgdGhlbiBzZWFyY2hlcyBmb3IgYW4KLSAgICAvLyBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIG5h
bWUgYXR0cmlidXRlLCBidXQgb25seSBvbiB0aG9zZSBlbGVtZW50cwotICAgIC8vIHRoYXQgYXJl
IGFsbG93ZWQgYSBuYW1lIGF0dHJpYnV0ZS4KLSAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7Ci0g
ICAgaWRzRG9uZSA9IGZhbHNlOwotICAgIGluZm8tPmN1cnJlbnQgPSBnZXROYW1lZEl0ZW0obV9i
YXNlLT5maXJzdENoaWxkKCksIGlkQXR0ciwgbmFtZSwgdHJ1ZSk7Ci0gICAgaWYoaW5mby0+Y3Vy
cmVudCkKLSAgICAgICAgcmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci0gICAgaWRzRG9uZSA9IHRydWU7
Ci0gICAgaW5mby0+Y3VycmVudCA9IGdldE5hbWVkSXRlbShtX2Jhc2UtPmZpcnN0Q2hpbGQoKSwg
bmFtZUF0dHIsIG5hbWUsIHRydWUpOwotICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwotfQotCi0K
LU5vZGVJbXBsICpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpuZXh0TmFtZWRJdGVtKCBjb25zdCBE
T01TdHJpbmcgJm5hbWUgKSBjb25zdAotewotICAgIC8vIG5leHROYW1lZEl0ZW1JbnRlcm5hbCBj
YW4gcmV0dXJuIGFuIGl0ZW0gdGhhdCBoYXMgYm90aCBpZD08bmFtZT4gYW5kIG5hbWU9PG5hbWU+
Ci0gICAgLy8gSGVyZSwgd2UgaGF2ZSB0byBmaWx0ZXIgb3V0IHN1Y2ggY2FzZXMuCi0gICAgTm9k
ZUltcGwgKmltcGwgPSBuZXh0TmFtZWRJdGVtSW50ZXJuYWwoIG5hbWUgKTsKLSAgICBpZiAoIWlk
c0RvbmUpIC8vIGxvb2tpbmcgZm9yIGlkPTxuYW1lPiAtPiBubyBmaWx0ZXJpbmcKLSAgICAgICAg
cmV0dXJuIGltcGw7Ci0gICAgLy8gbG9va2luZyBmb3IgbmFtZT08bmFtZT4gLT4gZmlsdGVyIG91
dCBpZiBpZD08bmFtZT4KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgd2hpbGUgKGltcGwgJiYg
IW9rKQotICAgIHsKLSAgICAgICAgaWYoaW1wbC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICB7
Ci0gICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwgKj4oaW1wbCk7Ci0gICAgICAgICAgICBvayA9IChlLT5nZXRBdHRyaWJ1dGUoaWRBdHRy
KSAhPSBuYW1lKTsKLSAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAgICAgaW1wbCA9
IG5leHROYW1lZEl0ZW1JbnRlcm5hbCggbmFtZSApOwotICAgICAgICB9IGVsc2UgLy8gY2FuJ3Qg
aGFwcGVuCi0gICAgICAgICAgICBvayA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBpbXBsOwot
fQotCi12b2lkIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKGluZm8tPmhhc05hbWVDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
SGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gZm91
bmRJbnB1dEVsZW1lbnRzOwotCi0gICAgaWYgKCFtX2Jhc2UtPmhhc1RhZ05hbWUoZm9ybVRhZykp
IHsKLSAgICAgICAgaW5mby0+aGFzTmFtZUNhY2hlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwotCi0gICAgSFRNTEZvcm1FbGVtZW50SW1w
bCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNlRWxlbWVudCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kp
IHsKLSAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUgPSBmLT5mb3JtRWxlbWVu
dHNbaV07Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpOwot
ICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJp
YnV0ZShuYW1lQXR0cik7Ci0gICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKLSAgICAgICAgICAgICAgICBRUHRy
VmVjdG9yPE5vZGVJbXBsPiAqaWRWZWN0b3IgPSBpbmZvLT5pZENhY2hlLmdldChpZEF0dHJWYWwu
aW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlkVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8Tm9kZUltcGw+OwotICAgICAgICAgICAg
ICAgICAgICBpbmZvLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rvcik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFwcGVuZFRvVmVjdG9yKGlkVmVjdG9y
LCBzdGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgICAgICAgICAgZm91bmRJbnB1
dEVsZW1lbnRzLmluc2VydChpZEF0dHJWYWwuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1lQXR0
clZhbCkgewotICAgICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCi0gICAgICAgICAg
ICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1lQ2FjaGUu
Z2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2Rl
SW1wbD47Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJW
YWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYXBwZW5kVG9WZWN0b3IobmFtZVZlY3Rvciwgc3RhdGljX2Nhc3Q8Tm9kZUltcGwgKj4oZSkp
OwotICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5pbnNlcnQobmFtZUF0dHJWYWwu
aW1wbCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVtZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAg
SFRNTEltYWdlRWxlbWVudEltcGwqIGUgPSBmLT5pbWdFbGVtZW50c1tpXTsKLSAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsKLSAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShu
YW1lQXR0cik7Ci0gICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSAmJiAhZm91bmRJbnB1
dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBsKCkpKSB7Ci0gICAgICAgICAgICAvLyBh
ZGQgdG8gaWQgY2FjaGUKLSAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICppZFZlY3Rv
ciA9IGluZm8tPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAgaWYg
KCFpZFZlY3RvcikgewotICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8
Tm9kZUltcGw+OwotICAgICAgICAgICAgICAgIGluZm8tPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5p
bXBsKCksIGlkVmVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFRvVmVj
dG9yKGlkVmVjdG9yLCBzdGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRy
VmFsICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMobmFtZUF0dHJWYWwuaW1wbCgpKSkg
ewotICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKLSAgICAgICAgICAgIFFQdHJWZWN0
b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmdldChuYW1lQXR0clZh
bC5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKSB7Ci0gICAgICAgICAgICAg
ICAgbmFtZVZlY3RvciA9IG5ldyBRUHRyVmVjdG9yPE5vZGVJbXBsPjsKLSAgICAgICAgICAgICAg
ICBpbmZvLT5uYW1lQ2FjaGUuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRUb1ZlY3RvcihuYW1lVmVjdG9yLCBzdGF0
aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmZvLT5o
YXNOYW1lQ2FjaGUgPSB0cnVlOwotfQotCi19CkluZGV4OiBraHRtbC9odG1sL0hUTUxOYW1lQ29s
bGVjdGlvbkltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTE5hbWVDb2xsZWN0
aW9uSW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MTmFtZUNvbGxl
Y3Rpb25JbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTIxLDM1NSArMjEsMjIgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAq
LwotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImh0
bWwvaHRtbF9taXNjaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKLSNp
bmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX29i
amVjdGltcGwuaCIKLSNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnRJbXBsLmgiCi0jaW5jbHVkZSAi
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJIVE1MTmFtZUNvbGxlY3Rp
b25JbXBsLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCisjaW5jbHVkZSAiaHRtbF9vYmplY3Rp
bXBsLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRJbXBsLmgiCiAKLSNpbmNsdWRlICJkb20vZG9tX25v
ZGUuaCIKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQu
aD4KLQotbmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpIVE1MQmFzZUZvbnRF
bGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChiYXNl
Zm9udFRhZywgZG9jKQotewotfQotCi1ET01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6
OmNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvbG9yQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OnNldENvbG9yKGNvbnN0IERPTVN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbG9yQXR0ciwgdmFsdWUpOwotfQotCi1E
T01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmZhY2UoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoZmFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsOjpzZXRGYWNlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKGZhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLURPTVN0cmluZyBIVE1MQmFzZUZvbnRFbGVtZW50
SW1wbDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgRE9NU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIHZhbHVlKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MQ29sbGVjdGlvbkltcGw6OkhUTUxDb2xsZWN0aW9u
SW1wbChOb2RlSW1wbCAqX2Jhc2UsIGludCBfdHlwZSkKLSAgICA6IG1fYmFzZShfYmFzZSksCi0g
ICAgICB0eXBlKF90eXBlKSwKLSAgICAgIGluZm8oMCksCi0gICAgICBpZHNEb25lKGZhbHNlKSwK
LSAgICAgIG1fb3duc0luZm8oZmFsc2UpCi17Ci0gICAgaWYgKF9iYXNlLT5pc0RvY3VtZW50Tm9k
ZSgpICYmIF9iYXNlLT5nZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBp
bmZvID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCo+KF9iYXNlLT5nZXREb2N1bWVudCgp
KS0+Y29sbGVjdGlvbkluZm8odHlwZSk7Ci19Ci0KLUhUTUxDb2xsZWN0aW9uSW1wbDo6fkhUTUxD
b2xsZWN0aW9uSW1wbCgpCi17Ci0gICAgaWYgKG1fb3duc0luZm8pCi0gICAgICAgIGRlbGV0ZSBp
bmZvOwotfQotCi1IVE1MQ29sbGVjdGlvbkltcGw6OkNvbGxlY3Rpb25JbmZvOjpDb2xsZWN0aW9u
SW5mbygpIDoKLSAgICB2ZXJzaW9uKDApCi17Ci0gICAgcmVzZXQoKTsKLX0KLQotSFRNTENvbGxl
Y3Rpb25JbXBsOjpDb2xsZWN0aW9uSW5mbzo6fkNvbGxlY3Rpb25JbmZvKCkKLXsKLSAgICBkZWxl
dGVBbGxWYWx1ZXMoaWRDYWNoZSk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG5hbWVDYWNoZSk7Ci19
Ci0KLXZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjpDb2xsZWN0aW9uSW5mbzo6cmVzZXQoKQotewot
ICAgIGN1cnJlbnQgPSAwOwotICAgIHBvc2l0aW9uID0gMDsKLSAgICBsZW5ndGggPSAwOwotICAg
IGhhc2xlbmd0aCA9IGZhbHNlOwotICAgIGVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IDA7Ci0gICAg
ZGVsZXRlQWxsVmFsdWVzKGlkQ2FjaGUpOwotICAgIGlkQ2FjaGUuY2xlYXIoKTsKLSAgICBkZWxl
dGVBbGxWYWx1ZXMobmFtZUNhY2hlKTsKLSAgICBuYW1lQ2FjaGUuY2xlYXIoKTsKLSAgICBoYXNO
YW1lQ2FjaGUgPSBmYWxzZTsKLX0KLQotdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6OnJlc2V0Q29s
bGVjdGlvbkluZm8oKSBjb25zdAotewotICAgIHVuc2lnbmVkIGludCBkb2N2ZXJzaW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCo+KG1fYmFzZS0+Z2V0RG9jdW1lbnQoKSktPmRvbVRy
ZWVWZXJzaW9uKCk7Ci0KLSAgICBpZiAoIWluZm8pIHsKLSAgICAgICAgaW5mbyA9IG5ldyBDb2xs
ZWN0aW9uSW5mbzsKLSAgICAgICAgbV9vd25zSW5mbyA9IHRydWU7Ci0gICAgICAgIGluZm8tPnZl
cnNpb24gPSBkb2N2ZXJzaW9uOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlu
Zm8tPnZlcnNpb24gIT0gZG9jdmVyc2lvbikgewotICAgICAgICBpbmZvLT5yZXNldCgpOwotICAg
ICAgICBpbmZvLT52ZXJzaW9uID0gZG9jdmVyc2lvbjsKLSAgICB9Ci19Ci0KLQotTm9kZUltcGwg
KkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZXh0SXRlbShOb2RlSW1wbCAqY3VycmVudCkg
Y29uc3QKLXsKLSAgICBhc3NlcnQoY3VycmVudCk7Ci0KLSAgICBpZiAodHlwZSA9PSBOT0RFX0NI
SUxEUkVOICYmIG1fYmFzZS5nZXQoKSAhPSBjdXJyZW50KQotICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICBlbHNlCi0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5nZXQoKSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudCkg
ewotICAgICAgICBpZiAoY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBi
b29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBib29sIGRlZXAgPSB0cnVlOwotICAgICAg
ICAgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGN1cnJlbnQpOwotICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
RE9DX0lNQUdFUzoKLSAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKGltZ1RhZykp
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRE9DX0ZPUk1TOgotICAgICAgICAgICAgICAgIGlmKGUtPmhh
c0xvY2FsTmFtZShmb3JtVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUQUJMRV9UQk9ESUVTOgot
ICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUodGJvZHlUYWcpKQotICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFz
TG9jYWxOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUUl9DRUxMUzoKLSAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKHRkVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUo
dGhUYWcpKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRhYmxlVGFnKSkKLSAgICAgICAgICAgICAgICAg
ICAgZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBUQUJMRV9ST1dTOgotICAgICAgICAgICAgY2FzZSBUU0VDVElPTl9ST1dTOgotICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUodHJUYWcpKQotICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKHRh
YmxlVGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTRUxFQ1RfT1BUSU9OUzoKLSAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpCi0gICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
TUFQX0FSRUFTOgotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYXJlYVRhZykp
Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgRE9DX0FQUExFVFM6ICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQ
TEVUIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShvYmplY3RU
YWcpIHx8IGUtPmhhc0xvY2FsTmFtZShhcHBsZXRUYWcpKQotICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERP
Q19FTUJFRFM6ICAgLy8gYWxsIEVNQkVEIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYgKGUt
Pmhhc0xvY2FsTmFtZShlbWJlZFRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6
ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBET0NfTElOS1M6ICAgICAvLyBh
bGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgaHJlZgotICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoYVRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGFyZWFU
YWcpKQotICAgICAgICAgICAgICAgICAgICBpZiAoIWUtPmdldEF0dHJpYnV0ZShocmVmQXR0ciku
aXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIERPQ19BTkNIT1JTOiAgICAgIC8vIGFs
bCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgbmFtZSBvciBhbiBpZCBhdHRyaWJ1dGUKLSAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKGFUYWcpKQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikuaXNOdWxsKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIERPQ19BTEw6Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBOT0RFX0NISUxEUkVOOgotICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJyb3IgaW4gSFRNTENvbGxlY3Rpb24sIHdyb25n
IHRhZ0lkISIgPDwgZW5kbDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZvdW5k
KQotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAgICAgICAgaWYgKGRlZXAp
IHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZSht
X2Jhc2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfSAK
LSAgICAgICAgfQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0U2libGlu
ZyhtX2Jhc2UuZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCi11bnNpZ25lZCBI
VE1MQ29sbGVjdGlvbkltcGw6OmNhbGNMZW5ndGgoKSBjb25zdAotewotICAgIHVuc2lnbmVkIGxl
biA9IDA7Ci0KLSAgICBmb3IgKE5vZGVJbXBsICpjdXJyZW50ID0gdHJhdmVyc2VOZXh0SXRlbSht
X2Jhc2UuZ2V0KCkpOyBjdXJyZW50OyBjdXJyZW50ID0gdHJhdmVyc2VOZXh0SXRlbShjdXJyZW50
KSkgewotICAgICAgICBsZW4rKzsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGVuOwotfQotCi0vLyBz
aW5jZSB0aGUgY29sbGVjdGlvbnMgYXJlIHRvIGJlICJsaXZlIiwgd2UgaGF2ZSB0byBkbyB0aGUK
LS8vIGNhbGN1bGF0aW9uIGV2ZXJ5IHRpbWUgaWYgYW55dGhpbmcgaGFzIGNoYW5nZWQKLXVuc2ln
bmVkIEhUTUxDb2xsZWN0aW9uSW1wbDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXNldENvbGxl
Y3Rpb25JbmZvKCk7Ci0gICAgaWYgKCFpbmZvLT5oYXNsZW5ndGgpIHsKLSAgICAgICAgaW5mby0+
bGVuZ3RoID0gY2FsY0xlbmd0aCgpOwotICAgICAgICBpbmZvLT5oYXNsZW5ndGggPSB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gaW5mby0+bGVuZ3RoOwotfQotCi1Ob2RlSW1wbCAqSFRNTENvbGxl
Y3Rpb25JbXBsOjppdGVtKCB1bnNpZ25lZCBpbmRleCApIGNvbnN0Ci17Ci0gICAgIHJlc2V0Q29s
bGVjdGlvbkluZm8oKTsKLSAgICAgaWYgKGluZm8tPmN1cnJlbnQgJiYgaW5mby0+cG9zaXRpb24g
PT0gaW5kZXgpIHsKLSAgICAgICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwotICAgICB9Ci0gICAg
IGlmIChpbmZvLT5oYXNsZW5ndGggJiYgaW5mby0+bGVuZ3RoIDw9IGluZGV4KSB7Ci0gICAgICAg
ICByZXR1cm4gMDsKLSAgICAgfQotICAgICBpZiAoIWluZm8tPmN1cnJlbnQgfHwgaW5mby0+cG9z
aXRpb24gPiBpbmRleCkgewotICAgICAgICAgaW5mby0+Y3VycmVudCA9IHRyYXZlcnNlTmV4dEl0
ZW0obV9iYXNlLmdldCgpKTsKLSAgICAgICAgIGluZm8tPnBvc2l0aW9uID0gMDsKLSAgICAgICAg
IGlmICghaW5mby0+Y3VycmVudCkKLSAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgfQotICAg
ICBOb2RlSW1wbCAqbm9kZSA9IGluZm8tPmN1cnJlbnQ7Ci0gICAgIGZvciAodW5zaWduZWQgcG9z
ID0gaW5mby0+cG9zaXRpb247IG5vZGUgJiYgcG9zIDwgaW5kZXg7IHBvcysrKSB7Ci0gICAgICAg
ICBub2RlID0gdHJhdmVyc2VOZXh0SXRlbShub2RlKTsKLSAgICAgfSAgICAgCi0gICAgIGluZm8t
PmN1cnJlbnQgPSBub2RlOwotICAgICBpbmZvLT5wb3NpdGlvbiA9IGluZGV4OwotICAgICByZXR1
cm4gaW5mby0+Y3VycmVudDsKLX0KLQotTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6Zmly
c3RJdGVtKCkgY29uc3QKLXsKLSAgICAgcmV0dXJuIGl0ZW0oMCk7Ci19Ci0KLU5vZGVJbXBsICpI
VE1MQ29sbGVjdGlvbkltcGw6Om5leHRJdGVtKCkgY29uc3QKLXsKLSAgICAgcmVzZXRDb2xsZWN0
aW9uSW5mbygpOwotIAotICAgICAvLyBMb29rIGZvciB0aGUgJ3NlY29uZCcgaXRlbS4gVGhlIGZp
cnN0IG9uZSBpcyBjdXJyZW50SXRlbSwgYWxyZWFkeSBnaXZlbiBiYWNrLgotICAgICBOb2RlSW1w
bCAqcmV0dmFsID0gdHJhdmVyc2VOZXh0SXRlbShpbmZvLT5jdXJyZW50KTsKLSAgICAgaW5mby0+
Y3VycmVudCA9IHJldHZhbDsKLSAgICAgaW5mby0+cG9zaXRpb24rKzsKLSAgICAgcmV0dXJuIHJl
dHZhbDsKLX0KLQotYm9vbCBIVE1MQ29sbGVjdGlvbkltcGw6OmNoZWNrRm9yTmFtZU1hdGNoKE5v
ZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29s
IGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci17Ci0gICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihub2RlKTsKLSAgICBpZiAoY2FzZVNlbnNpdGl2
ZSkgewotICAgICAgICBpZiAoY2hlY2tOYW1lKSB7Ci0gICAgICAgICAgICAvLyBkb2N1bWVudC5h
bGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVk
cwotICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCi0gICAg
ICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+aGFz
TG9jYWxOYW1lKGltZ1RhZykgfHwgZS0+aGFzTG9jYWxOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAg
ICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoYXBwbGV0VGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUo
b2JqZWN0VGFnKSB8fAotICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGVtYmVkVGFn
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICByZXR1cm4g
ZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBuYW1lICYmIGUtPmdldEF0dHJpYnV0ZShpZEF0
dHIpICE9IG5hbWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0
dHJpYnV0ZShpZEF0dHIpID09IG5hbWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGNoZWNr
TmFtZSkgewotICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBpbWFnZXMs
IGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKLSAgICAgICAgICAgIC8vIGJ5IG5h
bWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gRE9D
X0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmhhc0xvY2FsTmFtZShpbWdUYWcpIHx8IGUt
Pmhhc0xvY2FsTmFtZShmb3JtVGFnKSB8fAotICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxO
YW1lKGFwcGxldFRhZykgfHwgZS0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykgfHwKLSAgICAgICAg
ICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0
cikuZG9tU3RyaW5nKCkubG93ZXIoKSA9PSBuYW1lLmxvd2VyKCkgJiYKLSAgICAgICAgICAgICAg
ICBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKS5kb21TdHJpbmcoKS5sb3dlcigpICE9IG5hbWUubG93
ZXIoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1
dGUoaWRBdHRyKS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIoKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotCi1Ob2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuYW1lZEl0ZW0o
Y29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0Ci17Ci0gICAg
Ly8gaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS93b3Jrc2hvcC9hdXRob3IvZGh0bWwvcmVmZXJl
bmNlL21ldGhvZHMvbmFtZWRpdGVtLmFzcAotICAgIC8vIFRoaXMgbWV0aG9kIGZpcnN0IHNlYXJj
aGVzIGZvciBhbiBvYmplY3Qgd2l0aCBhIG1hdGNoaW5nIGlkCi0gICAgLy8gYXR0cmlidXRlLiBJ
ZiBhIG1hdGNoIGlzIG5vdCBmb3VuZCwgdGhlIG1ldGhvZCB0aGVuIHNlYXJjaGVzIGZvciBhbgot
ICAgIC8vIG9iamVjdCB3aXRoIGEgbWF0Y2hpbmcgbmFtZSBhdHRyaWJ1dGUsIGJ1dCBvbmx5IG9u
IHRob3NlIGVsZW1lbnRzCi0gICAgLy8gdGhhdCBhcmUgYWxsb3dlZCBhIG5hbWUgYXR0cmlidXRl
LgotICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLSAgICBpZHNEb25lID0gZmFsc2U7Ci0KLSAg
ICBOb2RlSW1wbCAqbjsKLSAgICBmb3IgKG4gPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQo
KSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5h
bWVNYXRjaChuLCBpZHNEb25lLCBuYW1lLCBjYXNlU2Vuc2l0aXZlKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAgICAgCi0gICAgaW5mby0+Y3VycmVudCA9IG47Ci0gICAgaWYoaW5m
by0+Y3VycmVudCkKLSAgICAgICAgcmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci0gICAgaWRzRG9uZSA9
IHRydWU7Ci0KLSAgICBmb3IgKG4gPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47
IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRj
aChuLCBpZHNEb25lLCBuYW1lLCBjYXNlU2Vuc2l0aXZlKSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGluZm8tPmN1cnJlbnQgPSBuOwotICAgIHJldHVybiBpbmZvLT5jdXJyZW50
OwotfQotCiBIVE1MTmFtZUNvbGxlY3Rpb25JbXBsOjpIVE1MTmFtZUNvbGxlY3Rpb25JbXBsKERv
Y3VtZW50SW1wbCogX2Jhc2UsIGludCBfdHlwZSwgRE9NU3RyaW5nICZuYW1lKQogICAgIDogSFRN
TENvbGxlY3Rpb25JbXBsKF9iYXNlLCBfdHlwZSksCiAgICAgICBtX25hbWUobmFtZSkKIHsKIH0K
LSAgICAKKwogTm9kZUltcGwgKkhUTUxOYW1lQ29sbGVjdGlvbkltcGw6OnRyYXZlcnNlTmV4dEl0
ZW0oTm9kZUltcGwgKmN1cnJlbnQpIGNvbnN0CiB7CiAgICAgYXNzZXJ0KGN1cnJlbnQpOwpAQCAt
NDE5LDM1MiArODYsNCBAQCBOb2RlSW1wbCAqSFRNTE5hbWVDb2xsZWN0aW9uSW1wbDo6dHJhdmVy
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2b2lkIGFwcGVu
ZFRvVmVjdG9yKFFQdHJWZWN0b3I8VD4gKnZlYywgVCAqaXRlbSkKLXsKLSAgICB1bnNpZ25lZCBz
aXplID0gdmVjLT5zaXplKCk7Ci0gICAgdW5zaWduZWQgY291bnQgPSB2ZWMtPmNvdW50KCk7Ci0g
ICAgaWYgKHNpemUgPT0gY291bnQpCi0gICAgICAgIHZlYy0+cmVzaXplKHNpemUgPT0gMCA/IDgg
OiAoaW50KShzaXplICogMS41KSk7Ci0gICAgdmVjLT5pbnNlcnQoY291bnQsIGl0ZW0pOwotfQot
Ci12b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlKCkgY29uc3QKLXsKLSAg
ICBpZiAoaW5mby0+aGFzTmFtZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgZm9y
IChOb2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRy
YXZlcnNlTmV4dEl0ZW0obikpIHsKLSAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aWRBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKGlkQXR0cik7Ci0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOwotICAgICAg
ICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIGFkZCB0byBpZCBj
YWNoZQotICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkVmVjdG9yID0gaW5mby0+
aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAoIWlkVmVjdG9y
KSB7Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47
Ci0gICAgICAgICAgICAgICAgaW5mby0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRW
ZWN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kVG9WZWN0b3IoaWRWZWN0
b3IsIG4pOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYm
IGlkQXR0clZhbCAhPSBuYW1lQXR0clZhbAotICAgICAgICAgICAgJiYgKHR5cGUgIT0gRE9DX0FM
TCB8fCAKLSAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKGltZ1RhZykgfHwgZS0+aGFz
TG9jYWxOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShh
cHBsZXRUYWcpIHx8IGUtPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpIHx8Ci0gICAgICAgICAgICAg
ICAgIGUtPmhhc0xvY2FsTmFtZShlbWJlZFRhZykpKSkgewotICAgICAgICAgICAgLy8gYWRkIHRv
IG5hbWUgY2FjaGUKLSAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9y
ID0gaW5mby0+bmFtZUNhY2hlLmdldChuYW1lQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAg
aWYgKCFuYW1lVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBRUHRy
VmVjdG9yPE5vZGVJbXBsPjsKLSAgICAgICAgICAgICAgICBpbmZvLT5uYW1lQ2FjaGUuYWRkKG5h
bWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhcHBlbmRUb1ZlY3RvcihuYW1lVmVjdG9yLCBuKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGluZm8tPmhhc05hbWVDYWNoZSA9IHRydWU7Ci19Ci0KLVFWYWx1ZUxpc3Q8IFJlZlB0cjxOb2Rl
SW1wbD4gPiBIVE1MQ29sbGVjdGlvbkltcGw6Om5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5n
ICZuYW1lKSBjb25zdAotewotICAgIFFWYWx1ZUxpc3Q8IFJlZlB0cjxOb2RlSW1wbD4gPiByZXN1
bHQ7Ci0KLSAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7Ci0gICAgdXBkYXRlTmFtZUNhY2hlKCk7Ci0gICAg
Ci0gICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKmlkUmVzdWx0cyA9IGluZm8tPmlkQ2FjaGUuZ2V0
KG5hbWUuaW1wbCgpKTsKLSAgICBRUHRyVmVjdG9yPE5vZGVJbXBsPiAqbmFtZVJlc3VsdHMgPSBp
bmZvLT5uYW1lQ2FjaGUuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpZFJlc3VsdHMgJiYgaSA8IGlkUmVzdWx0cy0+Y291bnQoKTsgKytpKSB7Ci0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoUmVmUHRyPE5vZGVJbXBsPihpZFJlc3VsdHMtPmF0KGkpKSk7Ci0g
ICAgfQotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgbmFtZVJlc3VsdHMgJiYgaSA8IG5hbWVS
ZXN1bHRzLT5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChSZWZQdHI8Tm9k
ZUltcGw+KG5hbWVSZXN1bHRzLT5hdChpKSkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLQotTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmV4dE5hbWVkSXRlbShjb25z
dCBET01TdHJpbmcgJm5hbWUpIGNvbnN0Ci17Ci0gICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwot
Ci0gICAgZm9yIChOb2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0oaW5mby0+Y3VycmVudCA/
IGluZm8tPmN1cnJlbnQgOiBtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VOZXh0SXRlbShu
KSkgewotICAgICAgICBpZiAoY2hlY2tGb3JOYW1lTWF0Y2gobiwgaWRzRG9uZSwgbmFtZSwgdHJ1
ZSkpIHsKLSAgICAgICAgICAgIGluZm8tPmN1cnJlbnQgPSBuOwotICAgICAgICAgICAgcmV0dXJu
IG47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGlkc0RvbmUpIHsKLSAgICAgICAg
aW5mby0+Y3VycmVudCA9IDA7IAotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWRzRG9u
ZSA9IHRydWU7Ci0KLSAgICBmb3IgKE5vZGVJbXBsICpuID0gdHJhdmVyc2VOZXh0SXRlbShpbmZv
LT5jdXJyZW50ID8gaW5mby0+Y3VycmVudCA6IG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJz
ZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIGlmIChjaGVja0Zvck5hbWVNYXRjaChuLCBpZHNEb25l
LCBuYW1lLCB0cnVlKSkgewotICAgICAgICAgICAgaW5mby0+Y3VycmVudCA9IG47Ci0gICAgICAg
ICAgICByZXR1cm4gbjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0v
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpIVE1MRm9y
bUNvbGxlY3Rpb25JbXBsKE5vZGVJbXBsKiBfYmFzZSkKLSAgICA6IEhUTUxDb2xsZWN0aW9uSW1w
bChfYmFzZSwgMCkKLXsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtQmFzZSA9IHN0YXRp
Y19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwotICAgIGlmICghZm9y
bUJhc2UtPmNvbGxlY3Rpb25JbmZvKSB7Ci0gICAgICAgIGZvcm1CYXNlLT5jb2xsZWN0aW9uSW5m
byA9IG5ldyBDb2xsZWN0aW9uSW5mbygpOwotICAgIH0KLSAgICBpbmZvID0gZm9ybUJhc2UtPmNv
bGxlY3Rpb25JbmZvOwotfQotCi1IVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjp+SFRNTEZvcm1Db2xs
ZWN0aW9uSW1wbCgpCi17Ci19Ci0KLXVuc2lnbmVkIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmNh
bGNMZW5ndGgoKSBjb25zdAotewotICAgIFFQdHJWZWN0b3I8SFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGw+ICZsID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQo
KSktPmZvcm1FbGVtZW50czsKLQotICAgIGludCBsZW4gPSAwOwotICAgIGZvciAoIHVuc2lnbmVk
IGkgPSAwOyBpIDwgbC5jb3VudCgpOyBpKysgKQotICAgICAgICBpZiAoIGwuYXQoIGkgKS0+aXNF
bnVtZXJhdGFibGUoKSApCi0gICAgICAgICAgICArK2xlbjsKLQotICAgIHJldHVybiBsZW47Ci19
Ci0KLU5vZGVJbXBsICpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjppdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAotewotICAgIHJlc2V0Q29sbGVjdGlvbkluZm8oKTsKLQotICAgIGlmIChpbmZvLT5j
dXJyZW50ICYmIGluZm8tPnBvc2l0aW9uID09IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiBpbmZv
LT5jdXJyZW50OwotICAgIH0KLSAgICBpZiAoaW5mby0+aGFzbGVuZ3RoICYmIGluZm8tPmxlbmd0
aCA8PSBpbmRleCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFpbmZvLT5j
dXJyZW50IHx8IGluZm8tPnBvc2l0aW9uID4gaW5kZXgpIHsKLSAgICAgICAgaW5mby0+Y3VycmVu
dCA9IDA7Ci0gICAgICAgIGluZm8tPnBvc2l0aW9uID0gMDsKLSAgICAgICAgaW5mby0+ZWxlbWVu
dHNBcnJheVBvc2l0aW9uID0gMDsKLSAgICB9Ci0KLSAgICBRUHRyVmVjdG9yPEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsPiAmbCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPiht
X2Jhc2UuZ2V0KCkpLT5mb3JtRWxlbWVudHM7Ci0gICAgdW5zaWduZWQgY3VycmVudEluZGV4ID0g
aW5mby0+cG9zaXRpb247Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gaW5mby0+ZWxlbWVu
dHNBcnJheVBvc2l0aW9uOyBpIDwgbC5jb3VudCgpOyBpKyspIHsKLSAgICAgICAgaWYgKGxbaV0t
PmlzRW51bWVyYXRhYmxlKCkgKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gY3VycmVudElu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgaW5mby0+cG9zaXRpb24gPSBpbmRleDsKLSAgICAgICAg
ICAgICAgICBpbmZvLT5jdXJyZW50ID0gbFtpXTsKLSAgICAgICAgICAgICAgICBpbmZvLT5lbGVt
ZW50c0FycmF5UG9zaXRpb24gPSBpOwotICAgICAgICAgICAgICAgIHJldHVybiBsW2ldOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjdXJyZW50SW5kZXgrKzsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiAwOwotfQotCi1Ob2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1w
bDo6Z2V0TmFtZWRJdGVtKE5vZGVJbXBsKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUs
IGNvbnN0IERPTVN0cmluZyYgbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAotewotICAg
IGluZm8tPnBvc2l0aW9uID0gMDsKLSAgICByZXR1cm4gZ2V0TmFtZWRGb3JtSXRlbShhdHRyTmFt
ZSwgbmFtZSwgMCwgY2FzZVNlbnNpdGl2ZSk7Ci19Ci0KLU5vZGVJbXBsKiBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
LCBjb25zdCBET01TdHJpbmcmIG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNl
bnNpdGl2ZSkgY29uc3QKLXsKLSAgICBpZiAobV9iYXNlLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAg
ICAgICAgSFRNTEVsZW1lbnRJbXBsKiBiYXNlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCo+KG1fYmFzZS5nZXQoKSk7Ci0gICAgICAgIGJvb2wgZm91bmRJbnB1dEVsZW1lbnRz
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChiYXNlRWxlbWVudC0+aGFzTG9jYWxOYW1lKGZvcm1UYWcp
KSB7Ci0gICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUgPSBmLT5mb3JtRWxlbWVudHNbaV07
Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmb3VuZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRp
dmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShhdHRy
TmFtZSkgPT0gbmFtZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0cmluZygpLmxv
d2VyKCkgPT0gbmFtZS5sb3dlcigpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tZHVwbGlj
YXRlTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMp
IHsKLSAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwotCi0gICAgICAgICAgICBmb3IodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVtZW50cy5jb3VudCgpOyArK2kpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGUgPSBmLT5pbWdFbGVtZW50
c1tpXTsKLSAgICAgICAgICAgICAgICBib29sIGZvdW5kOwotICAgICAgICAgICAgICAgIGlmIChj
YXNlU2Vuc2l0aXZlKQotICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0
ZShhdHRyTmFtZSkgPT0gbmFtZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKS5kb21TdHJpbmcoKS5sb3dl
cigpID09IG5hbWUubG93ZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVOdW1iZXIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZTsKLSAgICAgICAgICAgICAgICAgICAgLS1kdXBsaWNhdGVOdW1iZXI7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiAwOwotfQotCi1Ob2RlSW1wbCAqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmZpcnN0SXRl
bSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGl0ZW0oMCk7Ci19Ci0KLU5vZGVJbXBsICogSFRNTEZv
cm1Db2xsZWN0aW9uSW1wbDo6bmV4dEl0ZW0oKSBjb25zdAotewotICAgIHJldHVybiBpdGVtKGlu
Zm8tPnBvc2l0aW9uICsgMSk7Ci19Ci0KLU5vZGVJbXBsICogSFRNTEZvcm1Db2xsZWN0aW9uSW1w
bDo6bmV4dE5hbWVkSXRlbUludGVybmFsKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgY29uc3QKLXsK
LSAgICBOb2RlSW1wbCAqcmV0dmFsID0gZ2V0TmFtZWRGb3JtSXRlbSggaWRzRG9uZSA/IG5hbWVB
dHRyIDogaWRBdHRyLCBuYW1lLCArK2luZm8tPnBvc2l0aW9uLCB0cnVlICk7Ci0gICAgaWYgKHJl
dHZhbCkKLSAgICAgICAgcmV0dXJuIHJldHZhbDsKLSAgICBpZiAoaWRzRG9uZSkgLy8gd2UncmUg
ZG9uZQotICAgICAgICByZXR1cm4gMDsKLSAgICAvLyBBZnRlciBkb2luZyBpZCwgZG8gbmFtZQot
ICAgIGlkc0RvbmUgPSB0cnVlOwotICAgIHJldHVybiBnZXROYW1lZEl0ZW0obV9iYXNlLT5maXJz
dENoaWxkKCksIG5hbWVBdHRyLCBuYW1lLCB0cnVlKTsKLX0KLQotTm9kZUltcGwgKkhUTUxGb3Jt
Q29sbGVjdGlvbkltcGw6Om5hbWVkSXRlbSggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNh
c2VTZW5zaXRpdmUgKSBjb25zdAotewotICAgIC8vIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v
d29ya3Nob3AvYXV0aG9yL2RodG1sL3JlZmVyZW5jZS9tZXRob2RzL25hbWVkaXRlbS5hc3AKLSAg
ICAvLyBUaGlzIG1ldGhvZCBmaXJzdCBzZWFyY2hlcyBmb3IgYW4gb2JqZWN0IHdpdGggYSBtYXRj
aGluZyBpZAotICAgIC8vIGF0dHJpYnV0ZS4gSWYgYSBtYXRjaCBpcyBub3QgZm91bmQsIHRoZSBt
ZXRob2QgdGhlbiBzZWFyY2hlcyBmb3IgYW4KLSAgICAvLyBvYmplY3Qgd2l0aCBhIG1hdGNoaW5n
IG5hbWUgYXR0cmlidXRlLCBidXQgb25seSBvbiB0aG9zZSBlbGVtZW50cwotICAgIC8vIHRoYXQg
YXJlIGFsbG93ZWQgYSBuYW1lIGF0dHJpYnV0ZS4KLSAgICByZXNldENvbGxlY3Rpb25JbmZvKCk7
Ci0gICAgaWRzRG9uZSA9IGZhbHNlOwotICAgIGluZm8tPmN1cnJlbnQgPSBnZXROYW1lZEl0ZW0o
bV9iYXNlLT5maXJzdENoaWxkKCksIGlkQXR0ciwgbmFtZSwgdHJ1ZSk7Ci0gICAgaWYoaW5mby0+
Y3VycmVudCkKLSAgICAgICAgcmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci0gICAgaWRzRG9uZSA9IHRy
dWU7Ci0gICAgaW5mby0+Y3VycmVudCA9IGdldE5hbWVkSXRlbShtX2Jhc2UtPmZpcnN0Q2hpbGQo
KSwgbmFtZUF0dHIsIG5hbWUsIHRydWUpOwotICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwotfQot
Ci0KLU5vZGVJbXBsICpIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpuZXh0TmFtZWRJdGVtKCBjb25z
dCBET01TdHJpbmcgJm5hbWUgKSBjb25zdAotewotICAgIC8vIG5leHROYW1lZEl0ZW1JbnRlcm5h
bCBjYW4gcmV0dXJuIGFuIGl0ZW0gdGhhdCBoYXMgYm90aCBpZD08bmFtZT4gYW5kIG5hbWU9PG5h
bWU+Ci0gICAgLy8gSGVyZSwgd2UgaGF2ZSB0byBmaWx0ZXIgb3V0IHN1Y2ggY2FzZXMuCi0gICAg
Tm9kZUltcGwgKmltcGwgPSBuZXh0TmFtZWRJdGVtSW50ZXJuYWwoIG5hbWUgKTsKLSAgICBpZiAo
IWlkc0RvbmUpIC8vIGxvb2tpbmcgZm9yIGlkPTxuYW1lPiAtPiBubyBmaWx0ZXJpbmcKLSAgICAg
ICAgcmV0dXJuIGltcGw7Ci0gICAgLy8gbG9va2luZyBmb3IgbmFtZT08bmFtZT4gLT4gZmlsdGVy
IG91dCBpZiBpZD08bmFtZT4KLSAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgd2hpbGUgKGltcGwg
JiYgIW9rKQotICAgIHsKLSAgICAgICAgaWYoaW1wbC0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwgKj4oaW1wbCk7Ci0gICAgICAgICAgICBvayA9IChlLT5nZXRBdHRyaWJ1dGUoaWRB
dHRyKSAhPSBuYW1lKTsKLSAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAgICAgaW1w
bCA9IG5leHROYW1lZEl0ZW1JbnRlcm5hbCggbmFtZSApOwotICAgICAgICB9IGVsc2UgLy8gY2Fu
J3QgaGFwcGVuCi0gICAgICAgICAgICBvayA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBpbXBs
OwotfQotCi12b2lkIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGluZm8tPmhhc05hbWVDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4g
Zm91bmRJbnB1dEVsZW1lbnRzOwotCi0gICAgaWYgKCFtX2Jhc2UtPmhhc1RhZ05hbWUoZm9ybVRh
ZykpIHsKLSAgICAgICAgaW5mby0+aGFzTmFtZUNhY2hlID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwotCi0gICAgSFRNTEZvcm1FbGVtZW50
SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNlRWxlbWVudCk7
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyAr
K2kpIHsKLSAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUgPSBmLT5mb3JtRWxl
bWVudHNbaV07Ci0gICAgICAgIGlmIChlLT5pc0VudW1lcmF0YWJsZSgpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIp
OwotICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0
dHJpYnV0ZShuYW1lQXR0cik7Ci0gICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKLSAgICAgICAgICAgICAgICBR
UHRyVmVjdG9yPE5vZGVJbXBsPiAqaWRWZWN0b3IgPSBpbmZvLT5pZENhY2hlLmdldChpZEF0dHJW
YWwuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8Tm9kZUltcGw+OwotICAgICAgICAg
ICAgICAgICAgICBpbmZvLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1wbCgpLCBpZFZlY3Rvcik7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFwcGVuZFRvVmVjdG9yKGlkVmVj
dG9yLCBzdGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgICAgICAgICAgZm91bmRJ
bnB1dEVsZW1lbnRzLmluc2VydChpZEF0dHJWYWwuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmICghbmFtZUF0dHJWYWwuaXNFbXB0eSgpICYmIGlkQXR0clZhbCAhPSBuYW1l
QXR0clZhbCkgewotICAgICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCi0gICAgICAg
ICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1lQ2Fj
aGUuZ2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFuYW1lVmVj
dG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWVWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxO
b2RlSW1wbD47Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPm5hbWVDYWNoZS5hZGQobmFtZUF0
dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYXBwZW5kVG9WZWN0b3IobmFtZVZlY3Rvciwgc3RhdGljX2Nhc3Q8Tm9kZUltcGwgKj4o
ZSkpOwotICAgICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cy5pbnNlcnQobmFtZUF0dHJW
YWwuaW1wbCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVtZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAg
ICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGUgPSBmLT5pbWdFbGVtZW50c1tpXTsKLSAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJWYWwgPSBlLT5nZXRBdHRyaWJ1dGUoaWRBdHRyKTsK
LSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cik7Ci0gICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSAmJiAhZm91bmRJ
bnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBsKCkpKSB7Ci0gICAgICAgICAgICAv
LyBhZGQgdG8gaWQgY2FjaGUKLSAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICppZFZl
Y3RvciA9IGluZm8tPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAg
aWYgKCFpZFZlY3RvcikgewotICAgICAgICAgICAgICAgIGlkVmVjdG9yID0gbmV3IFFQdHJWZWN0
b3I8Tm9kZUltcGw+OwotICAgICAgICAgICAgICAgIGluZm8tPmlkQ2FjaGUuYWRkKGlkQXR0clZh
bC5pbXBsKCksIGlkVmVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFRv
VmVjdG9yKGlkVmVjdG9yLCBzdGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVB
dHRyVmFsICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMobmFtZUF0dHJWYWwuaW1wbCgp
KSkgewotICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKLSAgICAgICAgICAgIFFQdHJW
ZWN0b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmdldChuYW1lQXR0
clZhbC5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKSB7Ci0gICAgICAgICAg
ICAgICAgbmFtZVZlY3RvciA9IG5ldyBRUHRyVmVjdG9yPE5vZGVJbXBsPjsKLSAgICAgICAgICAg
ICAgICBpbmZvLT5uYW1lQ2FjaGUuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhcHBlbmRUb1ZlY3RvcihuYW1lVmVjdG9yLCBz
dGF0aWNfY2FzdDxOb2RlSW1wbCAqPihlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbmZv
LT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwotfQotCiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxfb2Jq
ZWN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
CShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjMsNyArMjMsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgorI2luY2x1ZGUgImh0bWxfb2JqZWN0
aW1wbC5oIgogCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAicmVuZGVyX2ltYWdlLmgiCiAjaW5jbHVkZSA8amF2
YS9ramF2YWFwcGxldHdpZGdldC5oPgogI2luY2x1ZGUgPHFzdHJpbmcuaD4KKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBraHRtbC9odG1sL0hU
TUxGaWVsZFNldEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxG
aWVsZFNldEVsZW1lbnRJbXBsLmNwcAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC9odG1sL0hU
TUxGaWVsZFNldEVsZW1lbnRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDkg
QEAKICNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50SW1wbC5oIgogCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKLXVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKLQotbmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKSW5kZXg6IGtodG1sL2h0bWwvSFRNTElucHV0
RWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTElucHV0RWxlbWVu
dEltcGwuY3BwCShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvSFRNTElucHV0RWxlbWVu
dEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEsMTEgQEAKICNpbmNsdWRlIDxr
bG9jYWxlLmg+CiAKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVz
LmgiCiAKLXVzaW5nIG5hbWVzcGFjZSBraHRtbDsKLXVzaW5nIGtodG1sOjpDb250cm9sU3RhdGU7
Cit1c2luZyBXZWJDb3JlOjpDb250cm9sU3RhdGU7CiAKLW5hbWVzcGFjZSBET00geworbmFtZXNw
YWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCShyZXZpc2lvbiAxMjIz
NikKKysrIGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1s
X2NhbnZhc2ltcGwuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgInJlbmRl
cl9jYW52YXNpbWFnZS5oIgogCkluZGV4OiBraHRtbC9odG1sL0hUTUxJc0luZGV4RWxlbWVudElt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTElzSW5kZXhFbGVtZW50SW1wbC5j
cHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnRJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDkgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhUTUxJc0luZGV4RWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJodG1s
bmFtZXMuaCIKIAotdXNpbmcgbmFtZXNwYWNlIGtodG1sOwotCi1uYW1lc3BhY2UgRE9NIHsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIApJbmRleDog
a2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9odG1s
X2xpc3RpbXBsLmgJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDEwIEBACiAgKiB3ZSBpZ25vcmUgdGhlIGRl
cHJlY2F0ZWQgY29tcGFjdCBhdHRyaWJ1dGUuIE5ldHNjYXBlIGRvZXMgc28gdG9vLi4uCiAgKi8K
IAotI2luY2x1ZGUgImh0bWxfZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudElt
cGwuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAotbmFtZXNwYWNlIERPTQorbmFtZXNwYWNl
IFdlYkNvcmUKIHsKIAogY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZW1lbnRJbXBsCkluZGV4OiBraHRtbC9odG1sL0hUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbC5oCShy
ZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogI2lmbmRlZiBIVE1MX0hUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsX2gKICNkZWZpbmUgSFRNTF9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbF9oCiAKLSNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJI
VE1MRWxlbWVudEltcGwuaCIKIAogbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBSZW5kZXJG
b3JtRWxlbWVudDsKSW5kZXg6IGtodG1sL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnRJbXBsLmgJKHJldmlz
aW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zLDYgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDE5
ICsyMSwxMiBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZu
ZGVmIEhUTUxfTUlTQ0lNUExfSAotI2RlZmluZSBIVE1MX01JU0NJTVBMX0gKKyNpZm5kZWYgSFRN
TEJhc2VGb250RWxlbWVudEltcGxfSAorI2RlZmluZSBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbF9I
CiAKLSNpbmNsdWRlICJodG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiU2hhcmVkLmgiCi0j
aW5jbHVkZSA8cXB0cnZlY3Rvci5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hNYXAuaD4KLQot
bmFtZXNwYWNlIERPTSB7Ci0KLWNsYXNzIE5vZGU7Ci1jbGFzcyBET01TdHJpbmc7Ci1jbGFzcyBI
VE1MQ29sbGVjdGlvbjsKKyNpbmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
RWxlbWVudEltcGwKIHsKQEAgLTUyLDEyOSArNDYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRT
aXplKGNvbnN0IERPTVN0cmluZyAmKTsKIH07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xh
c3MgSFRNTENvbGxlY3Rpb25JbXBsIDogcHVibGljIFNoYXJlZDxIVE1MQ29sbGVjdGlvbkltcGw+
Ci17Ci0gICAgZnJpZW5kIGNsYXNzIERPTTo6SFRNTENvbGxlY3Rpb247Ci1wdWJsaWM6Ci0gICAg
ZW51bSBUeXBlIHsKLSAgICAgICAgLy8gZnJvbSBIVE1MRG9jdW1lbnQKLSAgICAgICAgRE9DX0lN
QUdFUyA9IDAsIC8vIGFsbCBJTUcgZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50Ci0gICAgICAgIERP
Q19BUFBMRVRTLCAgIC8vIGFsbCBPQkpFQ1QgYW5kIEFQUExFVCBlbGVtZW50cwotICAgICAgICBE
T0NfRU1CRURTLCAgICAvLyBhbGwgRU1CRUQgZWxlbWVudHMKLSAgICAgICAgRE9DX09CSkVDVFMs
ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAgICAgICBET0NfRk9STVMsICAgICAvLyBhbGwg
Rk9STVMKLSAgICAgICAgRE9DX0xJTktTLCAgICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50
cyB3aXRoIGEgdmFsdWUgZm9yIGhyZWYKLSAgICAgICAgRE9DX0FOQ0hPUlMsICAgICAgLy8gYWxs
IEEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lCi0gICAgICAgIC8vIGZyb20gSFRNTFRh
YmxlLCBIVE1MVGFibGVTZWN0aW9uLCBIVE1MVGFibGVSb3cKLSAgICAgICAgVEFCTEVfUk9XUywg
ICAgLy8gYWxsIHJvd3MgaW4gdGhpcyB0YWJsZSBvciB0YWJsZXNlY3Rpb24KLSAgICAgICAgVEFC
TEVfVEJPRElFUywgLy8gYWxsIFRCT0RZIGVsZW1lbnRzIGluIHRoaXMgdGFibGUKLSAgICAgICAg
VFNFQ1RJT05fUk9XUywgLy8gYWxsIHJvd3MgZWxlbWVudHMgaW4gdGhpcyB0YWJsZSBzZWN0aW9u
Ci0gICAgICAgIFRSX0NFTExTLCAgICAgIC8vIGFsbCBDRUxMUyBpbiB0aGlzIHJvdwotICAgICAg
ICAvLyBmcm9tIFNFTEVDVAotICAgICAgICBTRUxFQ1RfT1BUSU9OUywKLSAgICAgICAgLy8gZnJv
bSBIVE1MTWFwCi0gICAgICAgIE1BUF9BUkVBUywKLSAgICAgICAgRE9DX0FMTCwgICAgICAgIC8v
ICJhbGwiIGVsZW1lbnRzIChJRSkKLSAgICAgICAgTk9ERV9DSElMRFJFTiwgICAvLyBmaXJzdC1s
ZXZlbCBjaGlsZHJlbiAoSUUpCi0gICAgICAgIFdJTkRPV19OQU1FRF9JVEVNUywKLSAgICAgICAg
RE9DVU1FTlRfTkFNRURfSVRFTVMKLSAgICB9OwotCi0gICAgZW51bSB7Ci0gICAgICAgIE5VTV9D
QUNIRUFCTEVfVFlQRVMgPSBOT0RFX0NISUxEUkVOICsgMQotICAgIH07Ci0KLSAgICBIVE1MQ29s
bGVjdGlvbkltcGwoTm9kZUltcGwgKl9iYXNlLCBpbnQgX3R5cGUpOwotICAgIHZpcnR1YWwgfkhU
TUxDb2xsZWN0aW9uSW1wbCgpOwotICAgIAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owot
ICAgIAotICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgTm9kZUltcGwgKmZpcnN0SXRlbSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9k
ZUltcGwgKm5leHRJdGVtKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpuYW1lZEl0
ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUgPSB0cnVlKSBjb25z
dDsKLSAgICAvLyBJbiBjYXNlIG9mIG11bHRpcGxlIGl0ZW1zIG5hbWVkIHRoZSBzYW1lIHdheQot
ICAgIHZpcnR1YWwgTm9kZUltcGwgKm5leHROYW1lZEl0ZW0oY29uc3QgRE9NU3RyaW5nICZuYW1l
KSBjb25zdDsKLQotICAgIFFWYWx1ZUxpc3Q8IFJlZlB0cjxOb2RlSW1wbD4gPiBuYW1lZEl0ZW1z
KGNvbnN0IEF0b21pY1N0cmluZyAmbmFtZSkgY29uc3Q7Ci0KLSAgICBOb2RlSW1wbCAqYmFzZSgp
IHsgcmV0dXJuIG1fYmFzZS5nZXQoKTsgfQotCi0gICAgc3RydWN0IENvbGxlY3Rpb25JbmZvIHsK
LSAgICAgICAgQ29sbGVjdGlvbkluZm8oKTsKLSAgICAgICAgfkNvbGxlY3Rpb25JbmZvKCk7Ci0g
ICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgaW50IHZlcnNpb247Ci0gICAg
ICAgIE5vZGVJbXBsICpjdXJyZW50OwotICAgICAgICB1bnNpZ25lZCBpbnQgcG9zaXRpb247Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Ci0gICAgICAgIGludCBlbGVtZW50c0FycmF5UG9z
aXRpb247Ci0gICAgICAgIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCosIFFQdHJWZWN0b3I8Tm9kZUlt
cGw+KiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gaWRDYWNoZTsKLSAgICAgICAgSGFz
aE1hcDxET01TdHJpbmdJbXBsKiwgUVB0clZlY3RvcjxOb2RlSW1wbD4qLCBQb2ludGVySGFzaDxE
T01TdHJpbmdJbXBsKj4gPiBuYW1lQ2FjaGU7Ci0gICAgICAgIGJvb2wgaGFzbGVuZ3RoOwotICAg
ICAgICBib29sIGhhc05hbWVDYWNoZTsKLSAgICAgfTsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdDsKLQotICAgIHZpcnR1YWwgTm9kZUltcGwg
KnRyYXZlcnNlTmV4dEl0ZW0oTm9kZUltcGwgKnN0YXJ0KSBjb25zdDsKLSAgICBib29sIGNoZWNr
Rm9yTmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3QgRE9NU3Ry
aW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWdu
ZWQgY2FsY0xlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCByZXNldENvbGxlY3Rpb25J
bmZvKCkgY29uc3Q7Ci0gICAgLy8gdGhlIGJhc2Ugbm9kZSwgdGhlIGNvbGxlY3Rpb24gcmVmZXJz
IHRvCi0gICAgUmVmUHRyPE5vZGVJbXBsPiBtX2Jhc2U7Ci0gICAgLy8gVGhlIGNvbGxlY3Rpb24g
bGlzdCB0aGUgZm9sbG93aW5nIGVsZW1lbnRzCi0gICAgaW50IHR5cGU7Ci0gICAgbXV0YWJsZSBD
b2xsZWN0aW9uSW5mbyAqaW5mbzsKLQotICAgIC8vIEZvciBuZXh0TmFtZWRJdGVtKCkKLSAgICBt
dXRhYmxlIGJvb2wgaWRzRG9uZTsKLQotICAgIG11dGFibGUgYm9vbCBtX293bnNJbmZvOwotfTsK
LQotY2xhc3MgSFRNTE5hbWVDb2xsZWN0aW9uSW1wbCA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbklt
cGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MTmFtZUNvbGxlY3Rpb25JbXBsKERvY3VtZW50SW1wbCog
X2Jhc2UsIGludCBfdHlwZSwgRE9NU3RyaW5nICZuYW1lKTsKLSAgICAKLSAgICB2aXJ0dWFsIE5v
ZGVJbXBsICp0cmF2ZXJzZU5leHRJdGVtKE5vZGVJbXBsICpzdGFydCkgY29uc3Q7Ci0gcHJpdmF0
ZToKLSAgICBET01TdHJpbmcgbV9uYW1lOwotfTsKLQotLy8gdGhpcyB3aG9sZSBjbGFzcyBpcyBq
dXN0IGEgYmlnIGhhY2sgdG8gZmluZCBmb3JtIGVsZW1lbnRzIGV2ZW4gaW4KLS8vIG1hbGZvcm1l
ZCBIVE1MIGVsZW1lbnRzCi0vLyB0aGUgZmFtb3VzIDx0YWJsZT48dHI+PGZvcm0+PHRkPiBwcm9i
bGVtCi1jbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsIDogcHVibGljIEhUTUxDb2xsZWN0aW9u
SW1wbAotewotcHVibGljOgotICAgIC8vIGJhc2UgbXVzdCBpbmhlcml0IEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsIG9yIHRoaXMgd29uJ3Qgd29yawotICAgIEhUTUxGb3JtQ29sbGVjdGlvbklt
cGwoTm9kZUltcGwqIF9iYXNlKTsKLSAgICB+SFRNTEZvcm1Db2xsZWN0aW9uSW1wbCgpOwotCi0g
ICAgdmlydHVhbCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGluZGV4ICkgY29uc3Q7Ci0gICAg
dmlydHVhbCBOb2RlSW1wbCAqZmlyc3RJdGVtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1w
bCAqbmV4dEl0ZW0oKSBjb25zdDsKLQotICAgIHZpcnR1YWwgTm9kZUltcGwgKm5hbWVkSXRlbSAo
IGNvbnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlID0gdHJ1ZSApIGNvbnN0
OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKm5leHROYW1lZEl0ZW0oIGNvbnN0IERPTVN0cmluZyAm
bmFtZSApIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZU5hbWVD
YWNoZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgY2FsY0xlbmd0aCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgTm9kZUltcGwgKmdldE5hbWVkSXRlbShOb2RlSW1wbCogY3VycmVudCwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgYm9vbCBj
YXNlU2Vuc2l0aXZlKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpuZXh0TmFtZWRJdGVt
SW50ZXJuYWwoIGNvbnN0IERPTVN0cmluZyAmbmFtZSApIGNvbnN0OwotcHJpdmF0ZToKLSAgICBO
b2RlSW1wbCogZ2V0TmFtZWRGb3JtSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwg
Y29uc3QgRE9NU3RyaW5nJiBuYW1lLCBpbnQgZHVwbGljYXRlTnVtYmVyLCBib29sIGNhc2VTZW5z
aXRpdmUpIGNvbnN0OwotICAgIG11dGFibGUgaW50IGN1cnJlbnRQb3M7Ci19OwotCi0KLX07IC8v
bmFtZXNwYWNlCit9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2lubGluZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5o
CShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICNpZm5kZWYgSFRNTF9JTkxJTkVJTVBMX0gKICNk
ZWZpbmUgSFRNTF9JTkxJTkVJTVBMX0gKIAotI2luY2x1ZGUgImh0bWxfZWxlbWVudGltcGwuaCIK
KyNpbmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKSW5kZXg6
IGtodG1sL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1s
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5oCShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1s
L2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMs
NyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3Jn
KQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDEzMiArMjEsMTQgQEAKICAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBIVE1MX01JU0NJTVBMX0gK
LSNkZWZpbmUgSFRNTF9NSVNDSU1QTF9ICisjaWZuZGVmIEhUTUxGb3JtQ29sbGVjdGlvbkltcGxf
SAorI2RlZmluZSBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsX0gKIAotI2luY2x1ZGUgImh0bWxfZWxl
bWVudGltcGwuaCIKLSNpbmNsdWRlICJTaGFyZWQuaCIKLSNpbmNsdWRlIDxxcHRydmVjdG9yLmg+
Ci0jaW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5oPgorI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9u
SW1wbC5oIgogCi1uYW1lc3BhY2UgRE9NIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
Tm9kZTsKLWNsYXNzIERPTVN0cmluZzsKLWNsYXNzIEhUTUxDb2xsZWN0aW9uOwotCi1jbGFzcyBI
VE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1Ymxp
YzoKLSAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYyk7Ci0KLSAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNGb3JiaWRkZW47IH0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIERPTVN0cmluZyBjb2xvcigpIGNvbnN0OwotICAgIHZv
aWQgc2V0Q29sb3IoY29uc3QgRE9NU3RyaW5nICYpOwotCi0gICAgRE9NU3RyaW5nIGZhY2UoKSBj
b25zdDsKLSAgICB2b2lkIHNldEZhY2UoY29uc3QgRE9NU3RyaW5nICYpOwotCi0gICAgRE9NU3Ry
aW5nIHNpemUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgRE9NU3RyaW5nICYpOwot
fTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MQ29sbGVjdGlvbkltcGwgOiBw
dWJsaWMgU2hhcmVkPEhUTUxDb2xsZWN0aW9uSW1wbD4KLXsKLSAgICBmcmllbmQgY2xhc3MgRE9N
OjpIVE1MQ29sbGVjdGlvbjsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAgICAgICAvLyBm
cm9tIEhUTUxEb2N1bWVudAotICAgICAgICBET0NfSU1BR0VTID0gMCwgLy8gYWxsIElNRyBlbGVt
ZW50cyBpbiB0aGUgZG9jdW1lbnQKLSAgICAgICAgRE9DX0FQUExFVFMsICAgLy8gYWxsIE9CSkVD
VCBhbmQgQVBQTEVUIGVsZW1lbnRzCi0gICAgICAgIERPQ19FTUJFRFMsICAgIC8vIGFsbCBFTUJF
RCBlbGVtZW50cwotICAgICAgICBET0NfT0JKRUNUUywgICAvLyBhbGwgT0JKRUNUIGVsZW1lbnRz
Ci0gICAgICAgIERPQ19GT1JNUywgICAgIC8vIGFsbCBGT1JNUwotICAgICAgICBET0NfTElOS1Ms
ICAgICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgaHJlZgot
ICAgICAgICBET0NfQU5DSE9SUywgICAgICAvLyBhbGwgQSBlbGVtZW50cyB3aXRoIGEgdmFsdWUg
Zm9yIG5hbWUKLSAgICAgICAgLy8gZnJvbSBIVE1MVGFibGUsIEhUTUxUYWJsZVNlY3Rpb24sIEhU
TUxUYWJsZVJvdwotICAgICAgICBUQUJMRV9ST1dTLCAgICAvLyBhbGwgcm93cyBpbiB0aGlzIHRh
YmxlIG9yIHRhYmxlc2VjdGlvbgotICAgICAgICBUQUJMRV9UQk9ESUVTLCAvLyBhbGwgVEJPRFkg
ZWxlbWVudHMgaW4gdGhpcyB0YWJsZQotICAgICAgICBUU0VDVElPTl9ST1dTLCAvLyBhbGwgcm93
cyBlbGVtZW50cyBpbiB0aGlzIHRhYmxlIHNlY3Rpb24KLSAgICAgICAgVFJfQ0VMTFMsICAgICAg
Ly8gYWxsIENFTExTIGluIHRoaXMgcm93Ci0gICAgICAgIC8vIGZyb20gU0VMRUNUCi0gICAgICAg
IFNFTEVDVF9PUFRJT05TLAotICAgICAgICAvLyBmcm9tIEhUTUxNYXAKLSAgICAgICAgTUFQX0FS
RUFTLAotICAgICAgICBET0NfQUxMLCAgICAgICAgLy8gImFsbCIgZWxlbWVudHMgKElFKQotICAg
ICAgICBOT0RFX0NISUxEUkVOLCAgIC8vIGZpcnN0LWxldmVsIGNoaWxkcmVuIChJRSkKLSAgICAg
ICAgV0lORE9XX05BTUVEX0lURU1TLAotICAgICAgICBET0NVTUVOVF9OQU1FRF9JVEVNUwotICAg
IH07Ci0KLSAgICBlbnVtIHsKLSAgICAgICAgTlVNX0NBQ0hFQUJMRV9UWVBFUyA9IE5PREVfQ0hJ
TERSRU4gKyAxCi0gICAgfTsKLQotICAgIEhUTUxDb2xsZWN0aW9uSW1wbChOb2RlSW1wbCAqX2Jh
c2UsIGludCBfdHlwZSk7Ci0gICAgdmlydHVhbCB+SFRNTENvbGxlY3Rpb25JbXBsKCk7Ci0gICAg
Ci0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBOb2RlSW1w
bCAqaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqZmly
c3RJdGVtKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqbmV4dEl0ZW0oKSBjb25zdDsK
LQotICAgIHZpcnR1YWwgTm9kZUltcGwgKm5hbWVkSXRlbShjb25zdCBET01TdHJpbmcgJm5hbWUs
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IHRydWUpIGNvbnN0OwotICAgIC8vIEluIGNhc2Ugb2YgbXVs
dGlwbGUgaXRlbXMgbmFtZWQgdGhlIHNhbWUgd2F5Ci0gICAgdmlydHVhbCBOb2RlSW1wbCAqbmV4
dE5hbWVkSXRlbShjb25zdCBET01TdHJpbmcgJm5hbWUpIGNvbnN0OwotCi0gICAgUVZhbHVlTGlz
dDwgUmVmUHRyPE5vZGVJbXBsPiA+IG5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nICZuYW1l
KSBjb25zdDsKLQotICAgIE5vZGVJbXBsICpiYXNlKCkgeyByZXR1cm4gbV9iYXNlLmdldCgpOyB9
Ci0KLSAgICBzdHJ1Y3QgQ29sbGVjdGlvbkluZm8gewotICAgICAgICBDb2xsZWN0aW9uSW5mbygp
OwotICAgICAgICB+Q29sbGVjdGlvbkluZm8oKTsKLSAgICAgICAgdm9pZCByZXNldCgpOwotICAg
ICAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKLSAgICAgICAgTm9kZUltcGwgKmN1cnJlbnQ7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBwb3NpdGlvbjsKLSAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0
aDsKLSAgICAgICAgaW50IGVsZW1lbnRzQXJyYXlQb3NpdGlvbjsKLSAgICAgICAgSGFzaE1hcDxE
T01TdHJpbmdJbXBsKiwgUVB0clZlY3RvcjxOb2RlSW1wbD4qLCBQb2ludGVySGFzaDxET01TdHJp
bmdJbXBsKj4gPiBpZENhY2hlOwotICAgICAgICBIYXNoTWFwPERPTVN0cmluZ0ltcGwqLCBRUHRy
VmVjdG9yPE5vZGVJbXBsPiosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IG5hbWVDYWNo
ZTsKLSAgICAgICAgYm9vbCBoYXNsZW5ndGg7Ci0gICAgICAgIGJvb2wgaGFzTmFtZUNhY2hlOwot
ICAgICB9OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZU5hbWVDYWNoZSgp
IGNvbnN0OwotCi0gICAgdmlydHVhbCBOb2RlSW1wbCAqdHJhdmVyc2VOZXh0SXRlbShOb2RlSW1w
bCAqc3RhcnQpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tGb3JOYW1lTWF0Y2goTm9kZUltcGwgKm5v
ZGUsIGJvb2wgY2hlY2tOYW1lLCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wgY2FzZVNlbnNp
dGl2ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBjYWxjTGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlc2V0Q29sbGVjdGlvbkluZm8oKSBjb25zdDsKLSAgICAvLyB0aGUg
YmFzZSBub2RlLCB0aGUgY29sbGVjdGlvbiByZWZlcnMgdG8KLSAgICBSZWZQdHI8Tm9kZUltcGw+
IG1fYmFzZTsKLSAgICAvLyBUaGUgY29sbGVjdGlvbiBsaXN0IHRoZSBmb2xsb3dpbmcgZWxlbWVu
dHMKLSAgICBpbnQgdHlwZTsKLSAgICBtdXRhYmxlIENvbGxlY3Rpb25JbmZvICppbmZvOwotCi0g
ICAgLy8gRm9yIG5leHROYW1lZEl0ZW0oKQotICAgIG11dGFibGUgYm9vbCBpZHNEb25lOwotCi0g
ICAgbXV0YWJsZSBib29sIG1fb3duc0luZm87Ci19OwotCi1jbGFzcyBIVE1MTmFtZUNvbGxlY3Rp
b25JbXBsIDogcHVibGljIEhUTUxDb2xsZWN0aW9uSW1wbAotewotcHVibGljOgotICAgIEhUTUxO
YW1lQ29sbGVjdGlvbkltcGwoRG9jdW1lbnRJbXBsKiBfYmFzZSwgaW50IF90eXBlLCBET01TdHJp
bmcgJm5hbWUpOwotICAgIAotICAgIHZpcnR1YWwgTm9kZUltcGwgKnRyYXZlcnNlTmV4dEl0ZW0o
Tm9kZUltcGwgKnN0YXJ0KSBjb25zdDsKLSBwcml2YXRlOgotICAgIERPTVN0cmluZyBtX25hbWU7
Ci19OworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIAogLy8gdGhpcyB3aG9sZSBjbGFzcyBpcyBqdXN0
IGEgYmlnIGhhY2sgdG8gZmluZCBmb3JtIGVsZW1lbnRzIGV2ZW4gaW4KIC8vIG1hbGZvcm1lZCBI
VE1MIGVsZW1lbnRzCkBAIC0xNzQsNyArNTcsNiBAQCBwcml2YXRlOgogICAgIG11dGFibGUgaW50
IGN1cnJlbnRQb3M7CiB9OwogCi0KLX07IC8vbmFtZXNwYWNlCit9IC8vbmFtZXNwYWNlCiAKICNl
bmRpZgpJbmRleDoga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9u
IDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50SW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDEwICszMiw5IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRJbXBsLmgiCiAK
ICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKLXVzaW5n
IG5hbWVzcGFjZSBraHRtbDsKLQotbmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKSW5kZXg6IGtodG1sL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnRJbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBraHRtbC9odG1sL0hUTUxTZWxlY3RFbGVtZW50SW1wbC5jcHAJKHJldmlzaW9uIDEyMjM2
KQorKysga2h0bWwvaHRtbC9IVE1MU2VsZWN0RWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uSW1wbC5o
IgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxGb3Jt
RWxlbWVudEltcGwuaCIKLSNpbmNsdWRlICJodG1sX21pc2NpbXBsLmgiIC8vIGZvciBIVE1MQ29s
bGVjdGlvbkltcGwKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbkltcGwuaCIKICNpbmNsdWRlICJk
b20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNpbmNsdWRlICJE
b2N1bWVudEltcGwuaCIKSW5kZXg6IGtodG1sL2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hUTUxDb2xsZWN0aW9uSW1wbC5jcHAJKHJldmlzaW9u
IDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MQ29sbGVjdGlvbkltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjEsNjEgKzIxLDE3IEBACiAgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKLSNpbmNs
dWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCi0jaW5jbHVkZSAiSFRN
TEZvcm1FbGVtZW50SW1wbC5oIgotI2luY2x1ZGUgIkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
LmgiCisjaW5jbHVkZSAiSFRNTENvbGxlY3Rpb25JbXBsLmgiCisjaW5jbHVkZSAiaHRtbF9kb2N1
bWVudGltcGwuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlIDxxcHRy
dmVjdG9yLmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKLSNpbmNsdWRlICJkb20vZG9tX25v
ZGUuaCIKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotI2luY2x1ZGUgPGt4bWxjb3JlL0hhc2hTZXQu
aD4KLQotbmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpIVE1MQmFzZUZvbnRF
bGVtZW50SW1wbChEb2N1bWVudEltcGwgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChiYXNl
Zm9udFRhZywgZG9jKQotewotfQotCi1ET01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6
OmNvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvbG9yQXR0cik7Ci19
Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OnNldENvbG9yKGNvbnN0IERPTVN0cmlu
ZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmlidXRlKGNvbG9yQXR0ciwgdmFsdWUpOwotfQotCi1E
T01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmZhY2UoKSBjb25zdAotewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoZmFjZUF0dHIpOwotfQotCi12b2lkIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsOjpzZXRGYWNlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpCi17Ci0gICAgc2V0QXR0cmli
dXRlKGZhY2VBdHRyLCB2YWx1ZSk7Ci19Ci0KLURPTVN0cmluZyBIVE1MQmFzZUZvbnRFbGVtZW50
SW1wbDo6c2l6ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzaXplQXR0cik7
Ci19Ci0KLXZvaWQgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgRE9NU3Ry
aW5nICZ2YWx1ZSkKLXsKLSAgICBzZXRBdHRyaWJ1dGUoc2l6ZUF0dHIsIHZhbHVlKTsKLX0KLQot
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCiBIVE1MQ29sbGVjdGlvbkltcGw6OkhUTUxDb2xsZWN0aW9u
SW1wbChOb2RlSW1wbCAqX2Jhc2UsIGludCBfdHlwZSkKICAgICA6IG1fYmFzZShfYmFzZSksCiAg
ICAgICB0eXBlKF90eXBlKSwKQEAgLTIxNyw3ICsxNzMsNyBAQCBOb2RlSW1wbCAqSFRNTENvbGxl
Y3Rpb25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBrZERlYnVnKCA2MDMwICkgPDwgIkVycm9yIGluIEhUTUxDb2xsZWN0aW9uLCB3cm9uZyB0YWdJ
ZCEiIDw8IGVuZGw7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChmb3VuZCkKQEAgLTM2NCw2MSArMzIwLDYgQEAgTm9kZUltcGwgKkhUTUxD
b2xsZWN0aW9uSW1wbDo6bmFtZWRJdGVtKAogICAgIHJldHVybiBpbmZvLT5jdXJyZW50OwogfQog
Ci1IVE1MTmFtZUNvbGxlY3Rpb25JbXBsOjpIVE1MTmFtZUNvbGxlY3Rpb25JbXBsKERvY3VtZW50
SW1wbCogX2Jhc2UsIGludCBfdHlwZSwgRE9NU3RyaW5nICZuYW1lKQotICAgIDogSFRNTENvbGxl
Y3Rpb25JbXBsKF9iYXNlLCBfdHlwZSksCi0gICAgICBtX25hbWUobmFtZSkKLXsKLX0KLSAgICAK
LU5vZGVJbXBsICpIVE1MTmFtZUNvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5leHRJdGVtKE5vZGVJ
bXBsICpjdXJyZW50KSBjb25zdAotewotICAgIGFzc2VydChjdXJyZW50KTsKLQotICAgIGN1cnJl
bnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5nZXQoKSk7Ci0KLSAgICB3aGls
ZSAoY3VycmVudCkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0g
ICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAq
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwotICAgICAgICAgICAgc3dp
dGNoKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgV0lORE9XX05BTUVEX0lURU1TOgotICAgICAg
ICAgICAgICAgIC8vIGZpbmQgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBlbWJlZHMgYW5k
IG9iamVjdHMgYnkgbmFtZSwgCi0gICAgICAgICAgICAgICAgLy8gYnV0IGFueXRoaW5nIGJ5IGlk
Ci0gICAgICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoaW1nVGFnKSB8fAotICAgICAgICAg
ICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSB8fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNU
YWdOYW1lKGVtYmVkVGFnKSB8fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKG9i
amVjdFRhZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKG5h
bWVBdHRyKSA9PSBtX25hbWU7Ci0gICAgICAgICAgICAgICAgZm91bmQgfD0gZS0+Z2V0QXR0cmli
dXRlKGlkQXR0cikgPT0gbV9uYW1lOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBET0NVTUVOVF9OQU1FRF9JVEVNUzoKLSAgICAgICAgICAgICAgICAvLyBmaW5kIGlt
YWdlcywgZm9ybXMsIGFwcGxldHMsIGVtYmVkcywgb2JqZWN0cyBhbmQgaWZyYW1lcyBieSBuYW1l
LCAKLSAgICAgICAgICAgICAgICAvLyBidXQgb25seSBhcHBsZXRzIGFuZCBvYmplY3QgYnkgaWQg
KHRoaXMgc3RyYW5nZSBydWxlIG1hdGNoZXMgSUUpCi0gICAgICAgICAgICAgICAgaWYgKGUtPmhh
c1RhZ05hbWUoaW1nVGFnKSB8fAotICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdOYW1lKGZv
cm1UYWcpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8
Ci0gICAgICAgICAgICAgICAgICAgIGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkKLSAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGFwcGxldFRhZykpCi0gICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25h
bWUgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09
IG1fbmFtZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0
cikgPT0gbV9uYW1lIHx8IGUtPmdldEF0dHJpYnV0ZShpZEF0dHIpID09IG1fbmFtZSkgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAq
PihlKS0+aXNEb2NOYW1lZEl0ZW0oKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KDApOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUo
bV9iYXNlLmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHRlbXBsYXRlPGNsYXNz
IFQ+IHN0YXRpYyB2b2lkIGFwcGVuZFRvVmVjdG9yKFFQdHJWZWN0b3I8VD4gKnZlYywgVCAqaXRl
bSkKIHsKICAgICB1bnNpZ25lZCBzaXplID0gdmVjLT5zaXplKCk7CkBAIC01MTgsMjUzICs0MTks
NCBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0TmFtZWRJCiAgICAgcmV0dXJu
IDA7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxGb3JtQ29sbGVjdGlvbklt
cGw6OkhUTUxGb3JtQ29sbGVjdGlvbkltcGwoTm9kZUltcGwqIF9iYXNlKQotICAgIDogSFRNTENv
bGxlY3Rpb25JbXBsKF9iYXNlLCAwKQotewotICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1C
YXNlID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSk7Ci0g
ICAgaWYgKCFmb3JtQmFzZS0+Y29sbGVjdGlvbkluZm8pIHsKLSAgICAgICAgZm9ybUJhc2UtPmNv
bGxlY3Rpb25JbmZvID0gbmV3IENvbGxlY3Rpb25JbmZvKCk7Ci0gICAgfQotICAgIGluZm8gPSBm
b3JtQmFzZS0+Y29sbGVjdGlvbkluZm87Ci19Ci0KLUhUTUxGb3JtQ29sbGVjdGlvbkltcGw6On5I
VE1MRm9ybUNvbGxlY3Rpb25JbXBsKCkKLXsKLX0KLQotdW5zaWduZWQgSFRNTEZvcm1Db2xsZWN0
aW9uSW1wbDo6Y2FsY0xlbmd0aCgpIGNvbnN0Ci17Ci0gICAgUVB0clZlY3RvcjxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbD4gJmwgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
bV9iYXNlLmdldCgpKS0+Zm9ybUVsZW1lbnRzOwotCi0gICAgaW50IGxlbiA9IDA7Ci0gICAgZm9y
ICggdW5zaWduZWQgaSA9IDA7IGkgPCBsLmNvdW50KCk7IGkrKyApCi0gICAgICAgIGlmICggbC5h
dCggaSApLT5pc0VudW1lcmF0YWJsZSgpICkKLSAgICAgICAgICAgICsrbGVuOwotCi0gICAgcmV0
dXJuIGxlbjsKLX0KLQotTm9kZUltcGwgKkhUTUxGb3JtQ29sbGVjdGlvbkltcGw6Oml0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgcmVzZXRDb2xsZWN0aW9uSW5mbygpOwotCi0gICAg
aWYgKGluZm8tPmN1cnJlbnQgJiYgaW5mby0+cG9zaXRpb24gPT0gaW5kZXgpIHsKLSAgICAgICAg
cmV0dXJuIGluZm8tPmN1cnJlbnQ7Ci0gICAgfQotICAgIGlmIChpbmZvLT5oYXNsZW5ndGggJiYg
aW5mby0+bGVuZ3RoIDw9IGluZGV4KSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoIWluZm8tPmN1cnJlbnQgfHwgaW5mby0+cG9zaXRpb24gPiBpbmRleCkgewotICAgICAgICBp
bmZvLT5jdXJyZW50ID0gMDsKLSAgICAgICAgaW5mby0+cG9zaXRpb24gPSAwOwotICAgICAgICBp
bmZvLT5lbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOwotICAgIH0KLQotICAgIFFQdHJWZWN0b3I8
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw+ICZsID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCo+KG1fYmFzZS5nZXQoKSktPmZvcm1FbGVtZW50czsKLSAgICB1bnNpZ25lZCBjdXJy
ZW50SW5kZXggPSBpbmZvLT5wb3NpdGlvbjsKLSAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
bmZvLT5lbGVtZW50c0FycmF5UG9zaXRpb247IGkgPCBsLmNvdW50KCk7IGkrKykgewotICAgICAg
ICBpZiAobFtpXS0+aXNFbnVtZXJhdGFibGUoKSApIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9
PSBjdXJyZW50SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpbmZvLT5wb3NpdGlvbiA9IGluZGV4
OwotICAgICAgICAgICAgICAgIGluZm8tPmN1cnJlbnQgPSBsW2ldOwotICAgICAgICAgICAgICAg
IGluZm8tPmVsZW1lbnRzQXJyYXlQb3NpdGlvbiA9IGk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGxbaV07Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN1cnJlbnRJbmRleCsrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsKiBIVE1MRm9ybUNv
bGxlY3Rpb25JbXBsOjpnZXROYW1lZEl0ZW0oTm9kZUltcGwqLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyTmFtZSwgY29uc3QgRE9NU3RyaW5nJiBuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNv
bnN0Ci17Ci0gICAgaW5mby0+cG9zaXRpb24gPSAwOwotICAgIHJldHVybiBnZXROYW1lZEZvcm1J
dGVtKGF0dHJOYW1lLCBuYW1lLCAwLCBjYXNlU2Vuc2l0aXZlKTsKLX0KLQotTm9kZUltcGwqIEhU
TUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAotewotICAgIGlmIChtX2Jhc2UtPmlzRWxlbWVudE5v
ZGUoKSkgewotICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKTsKLSAgICAgICAgYm9vbCBmb3VuZElu
cHV0RWxlbWVudHMgPSBmYWxzZTsKLSAgICAgICAgaWYgKGJhc2VFbGVtZW50LT5oYXNMb2NhbE5h
bWUoZm9ybVRhZykpIHsKLSAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1F
bGVtZW50c1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoZS0+aXNFbnVtZXJhdGFibGUoKSkgewot
ICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZS0+Z2V0QXR0
cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IGUtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkuZG9t
U3RyaW5nKCkubG93ZXIoKSA9PSBuYW1lLmxvd2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgLS1kdXBsaWNhdGVOdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWZvdW5kSW5w
dXRFbGVtZW50cykgewotICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCogZiA9IHN0YXRp
Y19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNlRWxlbWVudCk7Ci0KLSAgICAgICAgICAg
IGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmltZ0VsZW1lbnRzLmNvdW50KCk7ICsraSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogZSA9IGYt
PmltZ0VsZW1lbnRzW2ldOwotICAgICAgICAgICAgICAgIGJvb2wgZm91bmQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZS0+
Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSBlLT5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpLmRvbVN0
cmluZygpLmxvd2VyKCkgPT0gbmFtZS5sb3dlcigpOwotICAgICAgICAgICAgICAgIGlmIChmb3Vu
ZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlOwotICAgICAgICAgICAgICAgICAgICAtLWR1cGxpY2F0
ZU51bWJlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsICogSFRNTEZvcm1Db2xsZWN0aW9uSW1w
bDo6Zmlyc3RJdGVtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXRlbSgwKTsKLX0KLQotTm9kZUlt
cGwgKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpuZXh0SXRlbSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGl0ZW0oaW5mby0+cG9zaXRpb24gKyAxKTsKLX0KLQotTm9kZUltcGwgKiBIVE1MRm9ybUNv
bGxlY3Rpb25JbXBsOjpuZXh0TmFtZWRJdGVtSW50ZXJuYWwoY29uc3QgRE9NU3RyaW5nICZuYW1l
KSBjb25zdAotewotICAgIE5vZGVJbXBsICpyZXR2YWwgPSBnZXROYW1lZEZvcm1JdGVtKCBpZHNE
b25lID8gbmFtZUF0dHIgOiBpZEF0dHIsIG5hbWUsICsraW5mby0+cG9zaXRpb24sIHRydWUgKTsK
LSAgICBpZiAocmV0dmFsKQotICAgICAgICByZXR1cm4gcmV0dmFsOwotICAgIGlmIChpZHNEb25l
KSAvLyB3ZSdyZSBkb25lCi0gICAgICAgIHJldHVybiAwOwotICAgIC8vIEFmdGVyIGRvaW5nIGlk
LCBkbyBuYW1lCi0gICAgaWRzRG9uZSA9IHRydWU7Ci0gICAgcmV0dXJuIGdldE5hbWVkSXRlbSht
X2Jhc2UtPmZpcnN0Q2hpbGQoKSwgbmFtZUF0dHIsIG5hbWUsIHRydWUpOwotfQotCi1Ob2RlSW1w
bCAqSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6bmFtZWRJdGVtKCBjb25zdCBET01TdHJpbmcgJm5h
bWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSApIGNvbnN0Ci17Ci0gICAgLy8gaHR0cDovL21zZG4ubWlj
cm9zb2Z0LmNvbS93b3Jrc2hvcC9hdXRob3IvZGh0bWwvcmVmZXJlbmNlL21ldGhvZHMvbmFtZWRp
dGVtLmFzcAotICAgIC8vIFRoaXMgbWV0aG9kIGZpcnN0IHNlYXJjaGVzIGZvciBhbiBvYmplY3Qg
d2l0aCBhIG1hdGNoaW5nIGlkCi0gICAgLy8gYXR0cmlidXRlLiBJZiBhIG1hdGNoIGlzIG5vdCBm
b3VuZCwgdGhlIG1ldGhvZCB0aGVuIHNlYXJjaGVzIGZvciBhbgotICAgIC8vIG9iamVjdCB3aXRo
IGEgbWF0Y2hpbmcgbmFtZSBhdHRyaWJ1dGUsIGJ1dCBvbmx5IG9uIHRob3NlIGVsZW1lbnRzCi0g
ICAgLy8gdGhhdCBhcmUgYWxsb3dlZCBhIG5hbWUgYXR0cmlidXRlLgotICAgIHJlc2V0Q29sbGVj
dGlvbkluZm8oKTsKLSAgICBpZHNEb25lID0gZmFsc2U7Ci0gICAgaW5mby0+Y3VycmVudCA9IGdl
dE5hbWVkSXRlbShtX2Jhc2UtPmZpcnN0Q2hpbGQoKSwgaWRBdHRyLCBuYW1lLCB0cnVlKTsKLSAg
ICBpZihpbmZvLT5jdXJyZW50KQotICAgICAgICByZXR1cm4gaW5mby0+Y3VycmVudDsKLSAgICBp
ZHNEb25lID0gdHJ1ZTsKLSAgICBpbmZvLT5jdXJyZW50ID0gZ2V0TmFtZWRJdGVtKG1fYmFzZS0+
Zmlyc3RDaGlsZCgpLCBuYW1lQXR0ciwgbmFtZSwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGluZm8tPmN1
cnJlbnQ7Ci19Ci0KLQotTm9kZUltcGwgKkhUTUxGb3JtQ29sbGVjdGlvbkltcGw6Om5leHROYW1l
ZEl0ZW0oIGNvbnN0IERPTVN0cmluZyAmbmFtZSApIGNvbnN0Ci17Ci0gICAgLy8gbmV4dE5hbWVk
SXRlbUludGVybmFsIGNhbiByZXR1cm4gYW4gaXRlbSB0aGF0IGhhcyBib3RoIGlkPTxuYW1lPiBh
bmQgbmFtZT08bmFtZT4KLSAgICAvLyBIZXJlLCB3ZSBoYXZlIHRvIGZpbHRlciBvdXQgc3VjaCBj
YXNlcy4KLSAgICBOb2RlSW1wbCAqaW1wbCA9IG5leHROYW1lZEl0ZW1JbnRlcm5hbCggbmFtZSAp
OwotICAgIGlmICghaWRzRG9uZSkgLy8gbG9va2luZyBmb3IgaWQ9PG5hbWU+IC0+IG5vIGZpbHRl
cmluZwotICAgICAgICByZXR1cm4gaW1wbDsKLSAgICAvLyBsb29raW5nIGZvciBuYW1lPTxuYW1l
PiAtPiBmaWx0ZXIgb3V0IGlmIGlkPTxuYW1lPgotICAgIGJvb2wgb2sgPSBmYWxzZTsKLSAgICB3
aGlsZSAoaW1wbCAmJiAhb2spCi0gICAgewotICAgICAgICBpZihpbXBsLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKTsKLSAgICAgICAgICAgIG9rID0gKGUtPmdldEF0
dHJpYnV0ZShpZEF0dHIpICE9IG5hbWUpOwotICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAg
ICAgICAgICBpbXBsID0gbmV4dE5hbWVkSXRlbUludGVybmFsKCBuYW1lICk7Ci0gICAgICAgIH0g
ZWxzZSAvLyBjYW4ndCBoYXBwZW4KLSAgICAgICAgICAgIG9rID0gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGltcGw7Ci19Ci0KLXZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFt
ZUNhY2hlKCkgY29uc3QKLXsKLSAgICBpZiAoaW5mby0+aGFzTmFtZUNhY2hlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJp
bmdJbXBsKj4gPiBmb3VuZElucHV0RWxlbWVudHM7Ci0KLSAgICBpZiAoIW1fYmFzZS0+aGFzVGFn
TmFtZShmb3JtVGFnKSkgewotICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSFRNTEVsZW1lbnRJbXBsKiBiYXNlRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSk7Ci0KLSAgICBIVE1M
Rm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJh
c2VFbGVtZW50KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVsZW1lbnRz
LmNvdW50KCk7ICsraSkgewotICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9
IGYtPmZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGUtPmlzRW51bWVyYXRhYmxlKCkpIHsK
LSAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFsID0gZS0+Z2V0QXR0cmli
dXRlKGlkQXR0cik7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFs
ID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLSAgICAgICAgICAgIGlmICghaWRBdHRyVmFs
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQotICAgICAg
ICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICppZFZlY3RvciA9IGluZm8tPmlkQ2FjaGUu
Z2V0KGlkQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAgICAgIGlmICghaWRWZWN0b3IpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47
Ci0gICAgICAgICAgICAgICAgICAgIGluZm8tPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBsKCks
IGlkVmVjdG9yKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXBwZW5kVG9W
ZWN0b3IoaWRWZWN0b3IsIHN0YXRpY19jYXN0PE5vZGVJbXBsICo+KGUpKTsKLSAgICAgICAgICAg
ICAgICBmb3VuZElucHV0RWxlbWVudHMuaW5zZXJ0KGlkQXR0clZhbC5pbXBsKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRy
VmFsICE9IG5hbWVBdHRyVmFsKSB7Ci0gICAgICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2Fj
aGUKLSAgICAgICAgICAgICAgICBRUHRyVmVjdG9yPE5vZGVJbXBsPiAqbmFtZVZlY3RvciA9IGlu
Zm8tPm5hbWVDYWNoZS5nZXQobmFtZUF0dHJWYWwuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIW5hbWVWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBR
UHRyVmVjdG9yPE5vZGVJbXBsPjsKLSAgICAgICAgICAgICAgICAgICAgaW5mby0+bmFtZUNhY2hl
LmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG5hbWVWZWN0b3IpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBhcHBlbmRUb1ZlY3RvcihuYW1lVmVjdG9yLCBzdGF0aWNfY2FzdDxO
b2RlSW1wbCAqPihlKSk7Ci0gICAgICAgICAgICAgICAgZm91bmRJbnB1dEVsZW1lbnRzLmluc2Vy
dChuYW1lQXR0clZhbC5pbXBsKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmltZ0VsZW1lbnRzLmNvdW50KCk7ICsr
aSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogZSA9IGYtPmltZ0VsZW1lbnRzW2ld
OwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldEF0dHJpYnV0
ZShpZEF0dHIpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZS0+
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKLSAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgp
ICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRBdHRyVmFsLmltcGwoKSkpIHsKLSAg
ICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQotICAgICAgICAgICAgUVB0clZlY3RvcjxOb2Rl
SW1wbD4gKmlkVmVjdG9yID0gaW5mby0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7Ci0g
ICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBu
ZXcgUVB0clZlY3RvcjxOb2RlSW1wbD47Ci0gICAgICAgICAgICAgICAgaW5mby0+aWRDYWNoZS5h
ZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0b3IpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYXBwZW5kVG9WZWN0b3IoaWRWZWN0b3IsIHN0YXRpY19jYXN0PE5vZGVJbXBsICo+KGUpKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJW
YWwgIT0gbmFtZUF0dHJWYWwgJiYgIWZvdW5kSW5wdXRFbGVtZW50cy5jb250YWlucyhuYW1lQXR0
clZhbC5pbXBsKCkpKSB7Ci0gICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQotICAgICAg
ICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1lQ2FjaGUu
Z2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsK
LSAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFFQdHJWZWN0b3I8Tm9kZUltcGw+Owot
ICAgICAgICAgICAgICAgIGluZm8tPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBu
YW1lVmVjdG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFwcGVuZFRvVmVjdG9yKG5h
bWVWZWN0b3IsIHN0YXRpY19jYXN0PE5vZGVJbXBsICo+KGUpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGluZm8tPmhhc05hbWVDYWNoZSA9IHRydWU7Ci19Ci0KIH0KSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVp
bXBsLmgJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxMiArMjQsMTMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgogICoKICAqLwotI2lmbmRlZiBIVE1MX1RBQkxFSU1QTF9ICi0jZGVmaW5lIEhUTUxf
VEFCTEVJTVBMX0gKKyNpZm5kZWYgSFRNTFRhYmxlRWxlbWVudEltcGxfSAorI2RlZmluZSBIVE1M
VGFibGVFbGVtZW50SW1wbF9ICiAKLSNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIK
KyNpbmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAot
bmFtZXNwYWNlIERPTSB7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxDb2xsZWN0
aW9uSW1wbDsKIGNsYXNzIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDsKSW5kZXg6IGtodG1s
L2h0bWwvSFRNTExhYmVsRWxlbWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL0hU
TUxMYWJlbEVsZW1lbnRJbXBsLmgJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1M
TGFiZWxFbGVtZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAjaWZu
ZGVmIEhUTUxfSFRNTExhYmVsRWxlbWVudEltcGxfaAogI2RlZmluZSBIVE1MX0hUTUxMYWJlbEVs
ZW1lbnRJbXBsX2gKIAotI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgorI2luY2x1
ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgogCiBuYW1lc3BhY2UgRE9NIHsKIApJbmRleDoga2h0bWwv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwuaAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC9odG1s
L0hUTUxPcHRHcm91cEVsZW1lbnRJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcg
QEAKICNkZWZpbmUgSFRNTF9IVE1MT3B0R3JvdXBFbGVtZW50SW1wbF9ICiAKICNpbmNsdWRlICJI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiBu
YW1lc3BhY2UgRE9NIHsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkocmV2aXNpb24gMTIyMzYpCisr
KyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1
LDcgQEAKICNpZm5kZWYgSFRNTF9CTE9DS0lNUExfSAogI2RlZmluZSBIVE1MX0JMT0NLSU1QTF9I
CiAKLSNpbmNsdWRlICJodG1sX2VsZW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRJ
bXBsLmgiCiAKIG5hbWVzcGFjZSBET00gewogCkluZGV4OiBraHRtbC9odG1sL0hUTUxFbGVtZW50
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmgJKHJldmlz
aW9uIDEyMjM2KQorKysga2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsMTMgKzIxLDEyIEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAq
CiAgKi8KLSNpZm5kZWYgSFRNTF9FTEVNRU5USU1QTF9ICi0jZGVmaW5lIEhUTUxfRUxFTUVOVElN
UExfSAorI2lmbmRlZiBIVE1MRWxlbWVudEltcGxfSAorI2RlZmluZSBIVE1MRWxlbWVudEltcGxf
SAogCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImh0bWxuYW1l
cy5oIgogCi1uYW1lc3BhY2UgRE9NIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRG9j
dW1lbnRGcmFnbWVudEltcGw7CiBjbGFzcyBET01TdHJpbmc7CkluZGV4OiBraHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAko
cmV2aXNpb24gMTIyMzYpCisrKyBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiBIVE1MX0hFQURJTVBMX0gKICNkZWZpbmUg
SFRNTF9IRUFESU1QTF9ICiAKLSNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJDYWNoZWRPYmplY3RDbGllbnQu
aCIKICNpbmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCiAKSW5kZXg6IGtodG1sL2h0
bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0
bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuY3BwCShyZXZpc2lvbiAxMjIzNikKKysrIGto
dG1sL2h0bWwvSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50SW1wbC5oIgogI2luY2x1
ZGUgInJlbmRlcl9yZXBsYWNlZC5oIgogI2luY2x1ZGUgInJlbmRlcl90aGVtZS5oIgorI2luY2x1
ZGUgImh0bWxuYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtodG1sL2h0bWwvaHRtbF9k
b2N1bWVudGltcGwuY3BwCShyZXZpc2lvbiAxMjIzNikKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1
bWVudGltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBACiAjaW5jbHVkZSAi
aHRtbC9odG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Jhc2VpbXBsLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX21pc2Np
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgImh0bWxm
YWN0b3J5LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgImtodG1sX3NldHRpbmdzLmgiCkBAIC05MSw5ICs5MSw3IEBACiAKIHRlbXBsYXRl
IGNsYXNzIFFQdHJTdGFjazxET006Ok5vZGVJbXBsPjsKIAotdXNpbmcgbmFtZXNwYWNlIGtodG1s
OwotCi1uYW1lc3BhY2UgRE9NIHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIApJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysga2h0bWwv
ZWNtYS9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNs
dWRlICJIVE1MRmllbGRTZXRFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVt
ZW50SW1wbC5oIgogI2luY2x1ZGUgIkhUTUxPcHRpb25zQ29sbGVjdGlvbkltcGwuaCIKKyNpbmNs
dWRlICJIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5oIgogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKSW5kZXg6IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkocmV2aXNpb24gMTIyMzYpCisrKyBraHRt
bC9lY21hL2tqc19kb20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNSArNDYsMTUgQEAKICNp
bmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogCiAjaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBs
LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBfX0FQUExFX18KICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9ydW50aW1lX29iamVjdC5oPgogI2VuZGlmCiAKLXVzaW5nIG5hbWVzcGFj
ZSBET007Ci11c2luZyBuYW1lc3BhY2UgRE9NOjpIVE1MTmFtZXM7Ci11c2luZyBuYW1lc3BhY2Ug
RE9NOjpFdmVudE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIGtodG1sOwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CiAKICNpbmNsdWRlICJranNfZG9tLmx1dC5oIgogCkluZGV4OiBiaW5kaW5ncy9v
YmpjL0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9vYmpjL0RPTS5tbQkocmV2aXNpb24g
MTIyMzYpCisrKyBiaW5kaW5ncy9vYmpjL0RPTS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsOCBAQAogI2ltcG9ydCAiZG9tX3N0cmluZ2ltcGwuaCIKICNpbXBvcnQgImRvbV90ZXh0aW1w
bC5oIgogI2ltcG9ydCAiZG9tX3htbGltcGwuaCIKLSNpbXBvcnQgImh0bWxfZWxlbWVudGltcGwu
aCIKKyNpbXBvcnQgIkhUTUxFbGVtZW50SW1wbC5oIgorI2ltcG9ydCAiaHRtbG5hbWVzLmgiCiAj
aW1wb3J0ICJyZW5kZXJfb2JqZWN0LmgiCiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9XZWJTY3Jp
cHRPYmplY3RQcml2YXRlLmg+CiAjaW1wb3J0IDxreG1sY29yZS9Bc3NlcnRpb25zLmg+CkluZGV4
OiBiaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYmluZGluZ3Mvb2JqYy9E
T01IVE1MLm1tCShyZXZpc2lvbiAxMjIzNikKKysrIGJpbmRpbmdzL29iamMvRE9NSFRNTC5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCAiaHRtbF9iYXNlaW1wbC5o
IgogI2ltcG9ydCAiaHRtbF9ibG9ja2ltcGwuaCIKICNpbXBvcnQgImh0bWxfZG9jdW1lbnRpbXBs
LmgiCi0jaW1wb3J0ICJodG1sX2VsZW1lbnRpbXBsLmgiCisjaW1wb3J0ICJIVE1MRWxlbWVudElt
cGwuaCIKICNpbXBvcnQgIkhUTUxPcHRpb25zQ29sbGVjdGlvbkltcGwuaCIKICNpbXBvcnQgIkhU
TUxGb3JtRWxlbWVudEltcGwuaCIKICNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnRJbXBsLmgiCkBA
IC00Nyw3ICs0Nyw4IEBACiAjaW1wb3J0ICJodG1sX2ltYWdlaW1wbC5oIgogI2ltcG9ydCAiaHRt
bF9pbmxpbmVpbXBsLmgiCiAjaW1wb3J0ICJodG1sX2xpc3RpbXBsLmgiCi0jaW1wb3J0ICJodG1s
X21pc2NpbXBsLmgiCisjaW1wb3J0ICJIVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmgiCisjaW1wb3J0
ICJIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5oIgogI2ltcG9ydCAiaHRtbF9vYmplY3RpbXBsLmgi
CiAjaW1wb3J0ICJodG1sX3RhYmxlaW1wbC5oIgogI2ltcG9ydCAiZG9tX2VsZW1lbnRpbXBsLmgi
CkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9yZW5kZXJfYXBwbGV0LmgJKHJldmlzaW9uIDEyMjM2KQorKysgcmVuZGVyaW5nL3JlbmRlcl9h
cHBsZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogI2lmbmRlZiByZW5kZXJf
YXBwbGV0X2gKICNkZWZpbmUgcmVuZGVyX2FwcGxldF9oCiAKLSNpbmNsdWRlICJodG1sX2VsZW1l
bnRpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRJbXBsLmgiCiAjaW5jbHVkZSAicmVuZGVy
X3JlcGxhY2VkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKSW5kZXg6IHJlbmRlcmluZy9yZW5k
ZXJfbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCShy
ZXZpc2lvbiAxMjIzNikKKysrIHJlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgog
I2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Jsb2NraW1w
bC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgpAQCAtNjgsMTEgKzY5LDEwIEBACiAKICNkZWZpbmUgTUlOX0lOVEVSU0VD
VF9GT1JfUkVWRUFMIDMyCiAKLXVzaW5nIG5hbWVzcGFjZSBET007Ci11c2luZyBuYW1lc3BhY2Ug
RE9NOjpFdmVudE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotbmFtZXNwYWNlIGtodG1sIHsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVz
OwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogUVNjcm9sbEJhciogUmVuZGVyTGF5ZXI6
OmdTY3JvbGxCYXIgPSAwOwogCkluZGV4OiByZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCShyZXZpc2lvbiAxMjIzNikK
KysrIHJlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTUg
KzQyLDEzIEBACiAjaW5jbHVkZSA8a2xvY2FsZS5oPgogI2luY2x1ZGUgPHFwYWludGVyLmg+CiAj
aW5jbHVkZSA8cXRpbWVyLmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5h
bWVzOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotLy8jZGVmaW5lIERFQlVHX0xBWU9V
VAotCi1uYW1lc3BhY2Uga2h0bWwgewotCiBSZW5kZXJGcmFtZVNldDo6UmVuZGVyRnJhbWVTZXQo
IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsICpmcmFtZVNldCkKICAgICA6IFJlbmRlckNvbnRhaW5l
cihmcmFtZVNldCkKIHsKSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgJKHJldmlzaW9uIDEyMjM2
KQorKysgcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw3IEBACiAKICNpZiBfX0FQUExFX18KIAotI2luY2x1ZGUgImh0bWxfZWxlbWVudGlt
cGwuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudEltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJfaW1h
Z2UuaCIKIAogLy8gRklYTUU6IE1hYy1zcGVjaWZpYyBwYXJ0cyBuZWVkIHRvIG1vdmUgdG8gdGhl
IHBsYXRmb3JtIGRpcmVjdG9yeS4KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJKHJldmlzaW9uIDEyMjM2KQorKysg
cmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBA
CiAjaWZuZGVmIFJFTkRFUl9JTUFHRV9ICiAjZGVmaW5lIFJFTkRFUl9JTUFHRV9ICiAKLSNpbmNs
dWRlICJodG1sX2VsZW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRJbXBsLmgiCiAj
aW5jbHVkZSAicmVuZGVyX3JlcGxhY2VkLmgiCiAjaW5jbHVkZSAiZG9tX3N0cmluZy5oIgogI2lu
Y2x1ZGUgPHFwaXhtYXAuaD4KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfYm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysgcmVu
ZGVyaW5nL3JlbmRlcl9ib3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAj
aW5jbHVkZSAicmVuZGVyX3RoZW1lLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudEltcGwuaCIKLSNp
bmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudElt
cGwuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogCiAjaW5jbHVkZSAicmVuZGVyX2xpbmUu
aCIKQEAgLTQ4LDExICs0OCwxMSBAQAogI2luY2x1ZGUgPEZyYW1lVmlldy5oPgogI2luY2x1ZGUg
PGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiAjZGVmaW5lIFRBQkxF
Q0VMTE1BUkdJTiAtMHg0MDAwCiAKQEAgLTE2NCw3ICsxNjQsNiBAQCBpbnQgUmVuZGVyQm94Ojpj
b250ZW50V2lkdGgoKSBjb25zdAogICAgIGlmIChpbmNsdWRlU2Nyb2xsYmFyU2l6ZSgpKQogICAg
ICAgICB3IC09IG1fbGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKICAgICAKLSAgICAv
L2tkRGVidWcoIDYwNDAgKSA8PCAiUmVuZGVyQm94Ojpjb250ZW50V2lkdGgoMikgPSAiIDw8IHcg
PDwgZW5kbDsKICAgICByZXR1cm4gdzsKIH0KIApAQCAtMjgwLDcgKzI3OSw2IEBAIHZvaWQgUmVu
ZGVyQm94OjpwYWludChQYWludEluZm8mIGksIGludCAKIAogdm9pZCBSZW5kZXJCb3g6OnBhaW50
Um9vdEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKIHsKLSAg
ICAvL2tkRGVidWcoIDYwNDAgKSA8PCByZW5kZXJOYW1lKCkgPDwgIjo6cGFpbnRCb3hEZWNvcmF0
aW9ucygpIiA8PCBfdHggPDwgIi8iIDw8IF90eSA8PCBlbmRsOwogICAgIGNvbnN0IEJhY2tncm91
bmRMYXllciogYmdMYXllciA9IHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKICAgICBRQ29s
b3IgYmdDb2xvciA9IHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOwogICAgIGlmIChkb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpICYmICFzdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkpIHsKQEAg
LTI5OSw4ICsyOTcsNiBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRSb290Qm94RGVjb3JhdGlvbnMo
CiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCk7CiAKLSAgICAvLyAg
ICBrZERlYnVnKDApIDw8ICJ3aWR0aCA9ICIgPDwgdyA8PGVuZGw7Ci0KICAgICBpbnQgcncsIHJo
OwogICAgIGlmIChjYW52YXMoKS0+dmlldygpKSB7CiAgICAgICAgIHJ3ID0gY2FudmFzKCktPnZp
ZXcoKS0+Y29udGVudHNXaWR0aCgpOwpAQCAtMzExLDggKzMwNyw2IEBAIHZvaWQgUmVuZGVyQm94
OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucygKICAgICAgICAgcmggPSBjYW52YXMoKS0+aGVpZ2h0
KCk7CiAgICAgfQogICAgIAotICAgIC8vICAgIGtkRGVidWcoMCkgPDwgInJ3ID0gIiA8PCBydyA8
PGVuZGw7Ci0KICAgICBpbnQgYnggPSBfdHggLSBtYXJnaW5MZWZ0KCk7CiAgICAgaW50IGJ5ID0g
X3R5IC0gbWFyZ2luVG9wKCk7CiAgICAgaW50IGJ3ID0ga01heCh3ICsgbWFyZ2luTGVmdCgpICsg
bWFyZ2luUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCksIHJ3KTsKQEAgLTMz
NSw3ICszMjksNiBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWluCiAg
ICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3QoaSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IC8va2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiOjpwYWludERlY29yYXRpb25z
KCkiIDw8IGVuZGw7CiAgICAgaWYgKGlzUm9vdCgpKQogICAgICAgICByZXR1cm4gcGFpbnRSb290
Qm94RGVjb3JhdGlvbnMoaSwgX3R4LCBfdHkpOwogICAgIApAQCAtNjU1LDcgKzY0OCw2IEBAIElu
dFJlY3QgUmVuZGVyQm94OjpnZXRDbGlwUmVjdChpbnQgdHgsIGkKICAgICAgICAgaW50IGggPSBz
dHlsZSgpLT5jbGlwQm90dG9tKCkud2lkdGgobV9oZWlnaHQpOwogICAgICAgICBjbGlwaCAtPSBt
X2hlaWdodCAtIGg7CiAgICAgfQotICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJzZXR0aW5nIGNs
aXAoIjw8Y2xpcHg8PCIsIjw8Y2xpcHk8PCIsIjw8Y2xpcHc8PCIsIjw8Y2xpcGg8PCIpIjw8ZW5k
bDsKIAogICAgIEludFJlY3QgY3IoY2xpcHgsY2xpcHksY2xpcHcsY2xpcGgpOwogICAgIHJldHVy
biBjcjsKQEAgLTg0OCwxMyArODQwLDggQEAgdm9pZCBSZW5kZXJCb3g6OnJlbGF0aXZlUG9zaXRp
b25PZmZzZXQoaQogCiB2b2lkIFJlbmRlckJveDo6Y2FsY1dpZHRoKCkKIHsKLSNpZmRlZiBERUJV
R19MQVlPVVQKLSAgICBrZERlYnVnKCA2MDQwICkgPDwgIlJlbmRlckJveCgiPDxyZW5kZXJOYW1l
KCk8PCIpOjpjYWxjV2lkdGgoKSIgPDwgZW5kbDsKLSNlbmRpZgogICAgIGlmIChpc1Bvc2l0aW9u
ZWQoKSkKLSAgICB7CiAgICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWwoKTsKLSAgICB9CiAg
ICAgZWxzZQogICAgIHsKICAgICAgICAgLy8gVGhlIHBhcmVudCBib3ggaXMgZmxleGluZyB1cywg
c28gaXQgaGFzIGluY3JlYXNlZCBvciBkZWNyZWFzZWQgb3VyIHdpZHRoLiAgVXNlIHRoZSB3aWR0
aApAQCAtOTM2LDExICs5MjMsNiBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY1dpZHRoKCkKICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBjdyAtIG1fd2lkdGggLSBtX21hcmdpblJpZ2h0Owog
ICAgICAgICB9CiAgICAgfQotCi0jaWZkZWYgREVCVUdfTEFZT1VUCi0gICAga2REZWJ1ZyggNjA0
MCApIDw8ICJSZW5kZXJCb3g6OmNhbGNXaWR0aCgpOiBtX3dpZHRoPSIgPDwgbV93aWR0aCA8PCAi
IGNvbnRhaW5pbmdCbG9ja1dpZHRoKCk9IiA8PCBjb250YWluaW5nQmxvY2tXaWR0aCgpIDw8IGVu
ZGw7Ci0gICAga2REZWJ1ZyggNjA0MCApIDw8ICJtX21hcmdpbkxlZnQ9IiA8PCBtX21hcmdpbkxl
ZnQgPDwgIiBtX21hcmdpblJpZ2h0PSIgPDwgbV9tYXJnaW5SaWdodCA8PCBlbmRsOwotI2VuZGlm
CiB9CiAKIGludCBSZW5kZXJCb3g6OmNhbGNXaWR0aFVzaW5nKFdpZHRoVHlwZSB3aWR0aFR5cGUs
IGludCBjdywgTGVuZ3RoVHlwZSYgbGVuZ3RoVHlwZSkKQEAgLTEwNDUsMTEgKzEwMjcsNiBAQCB2
b2lkIFJlbmRlckJveDo6Y2FsY0hvcml6b250YWxNYXJnaW5zKGNvCiAKIHZvaWQgUmVuZGVyQm94
OjpjYWxjSGVpZ2h0KCkKIHsKLQotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgIGtkRGVidWcoIDYw
NDAgKSA8PCAiUmVuZGVyQm94OjpjYWxjSGVpZ2h0KCkiIDw8IGVuZGw7Ci0jZW5kaWYKLQogICAg
IC8vIENlbGwgaGVpZ2h0IGlzIG1hbmFnZWQgYnkgdGhlIHRhYmxlIGFuZCBpbmxpbmUgbm9uLXJl
cGxhY2VkIGVsZW1lbnRzIGRvIG5vdCBzdXBwb3J0IGEgaGVpZ2h0IHByb3BlcnR5LgogICAgIGlm
IChpc1RhYmxlQ2VsbCgpIHx8IChpc0lubGluZSgpICYmICFpc1JlcGxhY2VkKCkpKQogICAgICAg
ICByZXR1cm47CkBAIC0xNzgwLDQgKzE3NTcsNCBAQCBpbnQgUmVuZGVyQm94OjpsZWZ0bW9zdFBv
c2l0aW9uKGJvb2wgaW5jCiAgICAgcmV0dXJuIGluY2x1ZGVTZWxmID8gMCA6IG1fd2lkdGg7CiB9
CiAKLSN1bmRlZiBERUJVR19MQVlPVVQKK30KSW5kZXg6IHJlbmRlcmluZy9yZW5kZXJfY2FudmFz
aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3Bw
CShyZXZpc2lvbiAxMjIzNikKKysrIHJlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMTEgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50SW1w
bC5oIgogI2luY2x1ZGUgImh0bWxfY2FudmFzaW1wbC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11
c2luZyBuYW1lc3BhY2Uga2h0bWw7Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogUmVuZGVyQ2Fu
dmFzSW1hZ2U6OlJlbmRlckNhbnZhc0ltYWdlKE5vZGVJbXBsICpfbm9kZSkKICAgICA6IFJlbmRl
ckltYWdlKF9ub2RlKSwgX2RyYXdpbmdDb250ZXh0KDApLCBfZHJhd2luZ0NvbnRleHREYXRhKDAp
LCBfZHJhd25JbWFnZSgwKSwgX25lZWRzSW1hZ2VVcGRhdGUoMCkKSW5kZXg6IHJlbmRlcmluZy9y
ZW5kZXJfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3Bw
CShyZXZpc2lvbiAxMjIzNikKKysrIHJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwxMyArMzQsMTIgQEAKICNpbmNsdWRlICJyZW5kZXJfY2FudmFzLmgiCiAj
aW5jbHVkZSA8cXBhaW50ZXIuaD4KICNpbmNsdWRlIDxxcGVuLmg+CisjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBSZW5kZXJJbWFnZTo6UmVuZGVySW1hZ2UoTm9k
ZUltcGwgKl9ub2RlKQogICAgIDogUmVuZGVyUmVwbGFjZWQoX25vZGUpCiB7CkluZGV4OiByZW5k
ZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3JlbmRlcl9h
cHBsZXQuY3BwCShyZXZpc2lvbiAxMjIzNikKKysrIHJlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImphdmEva2phdmFh
cHBsZXR3aWRnZXQuaCIKICNpbmNsdWRlICJyZW5kZXJfY2FudmFzLmgiCiAjaW5jbHVkZSA8a2xv
Y2FsZS5oPgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyMjM2KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksMTIg
KzEyOSwxMSBAQAogCQk5M0YxOThFMzA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9iYXNlaW1wbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyMzgw
MkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfYmFzZWltcGwuaCAqLzsgfTsKIAkJOTNGMTk4RTQwODI0
NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmxvY2tpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9i
bG9ja2ltcGwuaCAqLzsgfTsKIAkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfZG9j
dW1lbnRpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGNTIzRDIzQzAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9kb2N1bWVudGltcGwuaCAqLzsgfTsK
LQkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfZWxlbWVudGltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNGMDJERTQzOTYw
MTg2MzVDQSAvKiBodG1sX2VsZW1lbnRpbXBsLmggKi87IH07CisJCTkzRjE5OEU2MDgyNDVFNTkw
MDFFOUFCQyAvKiBIVE1MRWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVu
dEltcGwuaCAqLzsgfTsKIAkJOTNGMTk4RTgwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaGVhZGlt
cGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNE
MjQzMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2hlYWRpbXBsLmggKi87IH07CiAJCTkzRjE5OEU5
MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0
bWxfaW1hZ2VpbXBsLmggKi87IH07CiAJCTkzRjE5OEVBMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1s
X2lubGluZWltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjQ3MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2lubGluZWltcGwuaCAqLzsgfTsK
IAkJOTNGMTk4RUIwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfbGlzdGltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ5MDJERTQzOTYwMTg2
MzVDQSAvKiBodG1sX2xpc3RpbXBsLmggKi87IH07Ci0JCTkzRjE5OEVDMDgyNDVFNTkwMDFFOUFC
QyAvKiBodG1sX21pc2NpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBGNTIzRDI0QjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9taXNjaW1wbC5oICov
OyB9OwogCQk5M0YxOThFRDA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9vYmplY3RpbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0RDAyREU0
Mzk2MDE4NjM1Q0EgLyogaHRtbF9vYmplY3RpbXBsLmggKi87IH07CiAJCTkzRjE5OEVFMDgyNDVF
NTkwMDFFOUFCQyAvKiBodG1sX3RhYmxlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNEYwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfdGFi
bGVpbXBsLmggKi87IH07CiAJCTkzRjE5OEVGMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1scGFyc2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1
MTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbHBhcnNlci5oICovOyB9OwpAQCAtMzc0LDEyICszNzMs
MTEgQEAKIAkJOTNGMTlBOEYwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfYmFzZWltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyMzcwMkRF
NDM5NjAxODYzNUNBIC8qIGh0bWxfYmFzZWltcGwuY3BwICovOyB9OwogCQk5M0YxOUE5MDA4MjQ1
RTU5MDAxRTlBQkMgLyogaHRtbF9ibG9ja2ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyMzkwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxf
YmxvY2tpbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxf
ZG9jdW1lbnRpbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1MjNEMjNCMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2RvY3VtZW50aW1wbC5jcHAg
Ki87IH07Ci0JCTkzRjE5QTkyMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2VsZW1lbnRpbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNF
MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2VsZW1lbnRpbXBsLmNwcCAqLzsgfTsKKwkJOTNGMTlB
OTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRTAyREU0Mzk2MDE4NjM1Q0Eg
LyogSFRNTEVsZW1lbnRJbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBOTQwODI0NUU1OTAwMUU5QUJD
IC8qIGh0bWxfaGVhZGltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyNDIwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaGVhZGltcGwuY3Bw
ICovOyB9OwogCQk5M0YxOUE5NTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbWFnZWltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNDQw
MkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBOTYw
ODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfaW5saW5laW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0NjAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9pbmxpbmVpbXBsLmNwcCAqLzsgfTsKIAkJOTNGMTlBOTcwODI0NUU1OTAwMUU5QUJDIC8q
IGh0bWxfbGlzdGltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNDgwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfbGlzdGltcGwuY3BwICov
OyB9OwotCQk5M0YxOUE5ODA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9taXNjaW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0QTAyREU0
Mzk2MDE4NjM1Q0EgLyogaHRtbF9taXNjaW1wbC5jcHAgKi87IH07CiAJCTkzRjE5QTk5MDgyNDVF
NTkwMDFFOUFCQyAvKiBodG1sX29iamVjdGltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNEMwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxf
b2JqZWN0aW1wbC5jcHAgKi87IH07CiAJCTkzRjE5QTlBMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1s
X3RhYmxlaW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGNTIzRDI0RTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF90YWJsZWltcGwuY3BwICovOyB9
OwogCQk5M0YxOUE5QjA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbHBhcnNlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MDAyREU0Mzk2MDE4
NjM1Q0EgLyogaHRtbHBhcnNlci5jcHAgKi87IH07CkBAIC01NzYsMTIgKzU3NCwxMSBAQAogCQlB
ODhBRDEzMTA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9iYXNlaW1wbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNB
IC8qIGh0bWxfYmFzZWltcGwuaCAqLzsgfTsKIAkJQTg4QUQxMzIwOTUyNDgwQTAwMUREMTk2IC8q
IGh0bWxfYmxvY2tpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNTIzRDIzQTAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9ibG9ja2ltcGwuaCAqLzsg
fTsKIAkJQTg4QUQxMzMwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfZG9jdW1lbnRpbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzQzAyREU0
Mzk2MDE4NjM1Q0EgLyogaHRtbF9kb2N1bWVudGltcGwuaCAqLzsgfTsKLQkJQTg4QUQxMzQwOTUy
NDgwQTAwMUREMTk2IC8qIGh0bWxfZWxlbWVudGltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X2VsZW1lbnRpbXBsLmggKi87IH07CisJCUE4OEFEMTM0MDk1MjQ4MEEwMDFERDE5NiAvKiBIVE1M
RWxlbWVudEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudEltcGwuaCAqLzsgfTsK
IAkJQTg4QUQxMzYwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfaGVhZGltcGwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQzMDJERTQzOTYwMTg2
MzVDQSAvKiBodG1sX2hlYWRpbXBsLmggKi87IH07CiAJCUE4OEFEMTM3MDk1MjQ4MEEwMDFERDE5
NiAvKiBodG1sX2ltYWdlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjUyM0QyNDUwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW1hZ2VpbXBsLmgg
Ki87IH07CiAJCUE4OEFEMTM4MDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX2lubGluZWltcGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ3MDJE
RTQzOTYwMTg2MzVDQSAvKiBodG1sX2lubGluZWltcGwuaCAqLzsgfTsKIAkJQTg4QUQxMzkwOTUy
NDgwQTAwMUREMTk2IC8qIGh0bWxfbGlzdGltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjQ5MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2xp
c3RpbXBsLmggKi87IH07Ci0JCUE4OEFEMTNBMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX21pc2Np
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIz
RDI0QjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9taXNjaW1wbC5oICovOyB9OwogCQlBODhBRDEz
QjA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9vYmplY3RpbXBsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0RDAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9vYmplY3RpbXBsLmggKi87IH07CiAJCUE4OEFEMTNDMDk1MjQ4MEEwMDFERDE5NiAvKiBo
dG1sX3RhYmxlaW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRjUyM0QyNEYwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfdGFibGVpbXBsLmggKi87IH07
CiAJCUE4OEFEMTNEMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1scGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MTAyREU0Mzk2MDE4NjM1
Q0EgLyogaHRtbHBhcnNlci5oICovOyB9OwpAQCAtODU5LDEyICs4NTYsMTEgQEAKIAkJQTg4QUQy
RDIwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfYmFzZWltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyMzcwMkRFNDM5NjAxODYzNUNBIC8q
IGh0bWxfYmFzZWltcGwuY3BwICovOyB9OwogCQlBODhBRDJEMzA5NTI0ODBBMDAxREQxOTYgLyog
aHRtbF9ibG9ja2ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyMzkwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfYmxvY2tpbXBsLmNwcCAq
LzsgfTsKIAkJQTg4QUQyRDQwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfZG9jdW1lbnRpbXBsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNC
MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2RvY3VtZW50aW1wbC5jcHAgKi87IH07Ci0JCUE4OEFE
MkQ1MDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX2VsZW1lbnRpbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1MjNEMjNFMDJERTQzOTYwMTg2MzVD
QSAvKiBodG1sX2VsZW1lbnRpbXBsLmNwcCAqLzsgfTsKKwkJQTg4QUQyRDUwOTUyNDgwQTAwMURE
MTk2IC8qIEhUTUxFbGVtZW50SW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDIzRTAyREU0Mzk2MDE4NjM1Q0EgLyogSFRNTEVsZW1lbnRJ
bXBsLmNwcCAqLzsgfTsKIAkJQTg4QUQyRDcwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfaGVhZGlt
cGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUy
M0QyNDIwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaGVhZGltcGwuY3BwICovOyB9OwogCQlBODhB
RDJEODA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9pbWFnZWltcGwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNDQwMkRFNDM5NjAxODYzNUNB
IC8qIGh0bWxfaW1hZ2VpbXBsLmNwcCAqLzsgfTsKIAkJQTg4QUQyRDkwOTUyNDgwQTAwMUREMTk2
IC8qIGh0bWxfaW5saW5laW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGNTIzRDI0NjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbmxpbmVpbXBs
LmNwcCAqLzsgfTsKIAkJQTg4QUQyREEwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfbGlzdGltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0Qy
NDgwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfbGlzdGltcGwuY3BwICovOyB9OwotCQlBODhBRDJE
QjA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9taXNjaW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0QTAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9taXNjaW1wbC5jcHAgKi87IH07CiAJCUE4OEFEMkRDMDk1MjQ4MEEwMDFERDE5NiAvKiBo
dG1sX29iamVjdGltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRjUyM0QyNEMwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfb2JqZWN0aW1wbC5jcHAg
Ki87IH07CiAJCUE4OEFEMkREMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX3RhYmxlaW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI0RTAy
REU0Mzk2MDE4NjM1Q0EgLyogaHRtbF90YWJsZWltcGwuY3BwICovOyB9OwogCQlBODhBRDJERTA5
NTI0ODBBMDAxREQxOTYgLyogaHRtbHBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI1MDAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbHBh
cnNlci5jcHAgKi87IH07CkBAIC0xMzE2LDYgKzEzMTIsMjIgQEAKIAkJQTg4QUQ1MUUwOTUyNDk5
RjAwMUREMTk2IC8qIFNWR05hbWVzV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODg0MjgzODA5MzA4QzFDMDBCNkQ0NjEgLyogU1ZHTmFt
ZXNXcmFwcGVyLmNwcCAqLzsgfTsKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0
ekNvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTg1RDdBMkYwODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3Jr
ICovOyB9OwogCQlBODhBRDVBQTA5NTI1MTMxMDAxREQxOTYgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMw
RjZGQjA4OTcwMUYxMDBCQTUxMTQgLyogU1ZHQ1NTU3R5bGVTZWxlY3Rvci5jcHAgKi87IH07CisJ
CUE4REYzRkNFMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDNjA5N0ZB
MEZCMDA1Mjk4MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5oICovOyB9OworCQlBOERGM0ZD
RjA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDNzA5N0ZBMEZCMDA1
Mjk4MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAgKi87IH07CisJCUE4REYzRkQwMDk3
RkEwRkMwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbkltcGwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4REYzRkM4MDk3RkEwRkIwMDUyOTgxQiAvKiBI
VE1MQ29sbGVjdGlvbkltcGwuaCAqLzsgfTsKKwkJQThERjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8q
IEhUTUxDb2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOERGM0ZDOTA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb25J
bXBsLmNwcCAqLzsgfTsKKwkJQThERjNGRDIwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxCYXNlRm9u
dEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBOERGM0ZDQTA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTEJhc2VGb250RWxlbWVudEltcGwu
aCAqLzsgfTsKKwkJQThERjNGRDMwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4REYzRkNCMDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5jcHAg
Ki87IH07CisJCUE4REYzRkQ0MDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MTmFtZUNvbGxlY3Rpb25J
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERG
M0ZDQzA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5oICovOyB9Owor
CQlBOERGM0ZENTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDRDA5
N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5jcHAgKi87IH07CisJCUE4
REYzRkQ2MDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDNjA5N0ZBMEZC
MDA1Mjk4MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5oICovOyB9OworCQlBOERGM0ZENzA5
N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDNzA5N0ZBMEZCMDA1Mjk4
MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAgKi87IH07CisJCUE4REYzRkQ4MDk3RkEw
RkMwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbkltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4REYzRkM4MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1M
Q29sbGVjdGlvbkltcGwuaCAqLzsgfTsKKwkJQThERjNGRDkwOTdGQTBGQzAwNTI5ODFCIC8qIEhU
TUxDb2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOERGM0ZDOTA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb25JbXBs
LmNwcCAqLzsgfTsKKwkJQThERjNGREEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxCYXNlRm9udEVs
ZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBOERGM0ZDQTA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTEJhc2VGb250RWxlbWVudEltcGwuaCAq
LzsgfTsKKwkJQThERjNGREIwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxCYXNlRm9udEVsZW1lbnRJ
bXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
REYzRkNCMDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5jcHAgKi87
IH07CisJCUE4REYzRkRDMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MTmFtZUNvbGxlY3Rpb25JbXBs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZD
QzA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5oICovOyB9OworCQlB
OERGM0ZERDA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOERGM0ZDRDA5N0ZB
MEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xsZWN0aW9uSW1wbC5jcHAgKi87IH07CiAJCUE4RkQ4
Qjg2MDg3Q0I0NEMwMERDMzcwNyAvKiBLV1FXTWF0cml4LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4NUQ3QThDMDg3OUVDNjQwMDZBOTE3MiAvKiBL
V1FXTWF0cml4LmNwcCAqLzsgfTsKIAkJQThGRDhCODcwODdDQjQ1NzAwREMzNzA3IC8qIEtXUVdN
YXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
NUQ3QThEMDg3OUVDNjQwMDZBOTE3MiAvKiBLV1FXTWF0cml4LmggKi87IH07CiAJCUE4RkVGQjBB
MDk3OUY0NzIwMDU4MzlGRCAvKiBSZW5kZXJGb3JlaWduT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEZFRkIwODA5NzlGNDcyMDA1ODM5RkQg
LyogUmVuZGVyRm9yZWlnbk9iamVjdC5oICovOyB9OwpAQCAtMjQwNiw2ICsyNDE4LDE0IEBACiAJ
CUE4QzMyOTY3MDkzQkI3QjIwMDBCOUNBQyAvKiBTVkdGRVBvaW50TGlnaHRFbGVtZW50SW1wbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZFUG9pbnRMaWdodEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzMyRDg5MDkzRDhCRkEwMDBCOUNB
QyAvKiB4bGlua2F0dHJzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0geGxpbmthdHRycy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUE4QzMyRDk2MDkzRDhFQTQwMDBCOUNBQyAvKiBYTGlua05hbWVz
V3JhcHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFhMaW5rTmFtZXNXcmFwcGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUE4REYzRkM2MDk3RkEwRkIwMDUyOTgx
QiAvKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE4REYzRkM3MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQThERjNGQzgwOTdG
QTBGQjAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTENvbGxlY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE4REYzRkM5MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbkltcGwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxDb2xsZWN0aW9u
SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4REYzRkNBMDk3RkEwRkIw
MDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSFRNTEJhc2VGb250RWxlbWVudEltcGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQThERjNGQ0IwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxCYXNlRm9udEVs
ZW1lbnRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1M
QmFzZUZvbnRFbGVtZW50SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4
REYzRkNDMDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MTmFtZUNvbGxlY3Rpb25JbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MTmFtZUNvbGxlY3Rpb25JbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE4REYzRkNEMDk3RkEwRkIwMDUyOTgxQiAvKiBI
VE1MTmFtZUNvbGxlY3Rpb25JbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MTmFtZUNvbGxlY3Rpb25JbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQThGRUZCMDgwOTc5RjQ3MjAwNTgzOUZEIC8qIFJlbmRlckZvcmVpZ25PYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckZvcmVpZ25PYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThGRUZCMDkwOTc5RjQ3MjAwNTgzOUZE
IC8qIFJlbmRlckZvcmVpZ25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbmRlckZvcmVpZ25PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBOEZFRkIyRjA5NzlGNEY2MDA1ODM5RkQgLyogU1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb3Jl
aWduT2JqZWN0RWxlbWVudEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MjY2OSw4ICsyNjg5LDggQEAKIAkJRjUyM0QyM0EwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfYmxv
Y2tpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IGh0bWxfYmxvY2tpbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0g
ODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDIzQjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9k
b2N1bWVudGltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gaHRtbF9kb2N1bWVudGltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyM0MwMkRFNDM5NjAx
ODYzNUNBIC8qIGh0bWxfZG9jdW1lbnRpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfZG9jdW1lbnRpbXBsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIzRDIzRTAy
REU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9lbGVtZW50aW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBodG1sX2VsZW1lbnRpbXBsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
Ci0JCUY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2VsZW1lbnRpbXBsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfZWxlbWVu
dGltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CisJCUY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxlbWVudEltcGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SFRNTEVsZW1lbnRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4
OyB1c2VzVGFicyA9IDA7IH07CisJCUY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxl
bWVudEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSFRNTEVsZW1lbnRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI0MjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRt
bF9oZWFkaW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBodG1sX2hlYWRpbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjQzMDJERTQzOTYwMTg2MzVD
QSAvKiBodG1sX2hlYWRpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGh0bWxfaGVhZGltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1MjNEMjQ0MDJERTQzOTYwMTg2MzVD
QSAvKiBodG1sX2ltYWdlaW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBodG1sX2ltYWdlaW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwpAQCAtMjY3OSw4ICsyNjk5
LDYgQEAKIAkJRjUyM0QyNDcwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaW5saW5laW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBodG1sX2lu
bGluZWltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCUY1MjNEMjQ4MDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2xpc3RpbXBsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IGh0bWxfbGlzdGltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyNDkwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfbGlz
dGltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gaHRtbF9saXN0aW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKLQkJRjUyM0QyNEEwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfbWlz
Y2ltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gaHRtbF9taXNjaW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGNTIzRDI0QjAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9taXNjaW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBodG1sX21pc2NpbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI0QzAyREU0Mzk2MDE4NjM1Q0EgLyog
aHRtbF9vYmplY3RpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IGh0bWxfb2JqZWN0aW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTIzRDI0RDAyREU0Mzk2
MDE4NjM1Q0EgLyogaHRtbF9vYmplY3RpbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGh0bWxfb2JqZWN0aW1wbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjUyM0QyNEUwMkRF
NDM5NjAxODYzNUNBIC8qIGh0bWxfdGFibGVpbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGh0bWxfdGFibGVpbXBsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC00
MDI5LDggKzQwNDcsOCBAQAogCQkJCTUxRjZBM0Q2MDY2M0JGMDQwMDREMjkxOSAvKiBodG1sX2Nh
bnZhc2ltcGwuaCAqLywKIAkJCQlGNTIzRDIzQjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9kb2N1
bWVudGltcGwuY3BwICovLAogCQkJCUY1MjNEMjNDMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2Rv
Y3VtZW50aW1wbC5oICovLAotCQkJCUY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX2Vs
ZW1lbnRpbXBsLmNwcCAqLywKLQkJCQlGNTIzRDIzRjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9l
bGVtZW50aW1wbC5oICovLAorCQkJCUY1MjNEMjNFMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxl
bWVudEltcGwuY3BwICovLAorCQkJCUY1MjNEMjNGMDJERTQzOTYwMTg2MzVDQSAvKiBIVE1MRWxl
bWVudEltcGwuaCAqLywKIAkJCQlGNTIzRDI0MjAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9oZWFk
aW1wbC5jcHAgKi8sCiAJCQkJRjUyM0QyNDMwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfaGVhZGlt
cGwuaCAqLywKIAkJCQlGNTIzRDI0NDAyREU0Mzk2MDE4NjM1Q0EgLyogaHRtbF9pbWFnZWltcGwu
Y3BwICovLApAQCAtNDAzOSw4ICs0MDU3LDYgQEAKIAkJCQlGNTIzRDI0NzAyREU0Mzk2MDE4NjM1
Q0EgLyogaHRtbF9pbmxpbmVpbXBsLmggKi8sCiAJCQkJRjUyM0QyNDgwMkRFNDM5NjAxODYzNUNB
IC8qIGh0bWxfbGlzdGltcGwuY3BwICovLAogCQkJCUY1MjNEMjQ5MDJERTQzOTYwMTg2MzVDQSAv
KiBodG1sX2xpc3RpbXBsLmggKi8sCi0JCQkJRjUyM0QyNEEwMkRFNDM5NjAxODYzNUNBIC8qIGh0
bWxfbWlzY2ltcGwuY3BwICovLAotCQkJCUY1MjNEMjRCMDJERTQzOTYwMTg2MzVDQSAvKiBodG1s
X21pc2NpbXBsLmggKi8sCiAJCQkJRjUyM0QyNEMwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfb2Jq
ZWN0aW1wbC5jcHAgKi8sCiAJCQkJRjUyM0QyNEQwMkRFNDM5NjAxODYzNUNBIC8qIGh0bWxfb2Jq
ZWN0aW1wbC5oICovLAogCQkJCUY1MjNEMjRFMDJERTQzOTYwMTg2MzVDQSAvKiBodG1sX3RhYmxl
aW1wbC5jcHAgKi8sCkBAIC00MDc4LDYgKzQwOTQsMTQgQEAKIAkJCQlBODEzNjlDOTA5NzM3NEY2
MDBENzQ0NjMgLyogSFRNTEtleWdlbkVsZW1lbnRJbXBsLmNwcCAqLywKIAkJCQlBODEzNkQzNjA5
NzNBOEU3MDBENzQ0NjMgLyogRm9ybURhdGFMaXN0LmggKi8sCiAJCQkJQTgxMzZEMzcwOTczQThF
NzAwRDc0NDYzIC8qIEZvcm1EYXRhTGlzdC5jcHAgKi8sCisJCQkJQThERjNGQzYwOTdGQTBGQjAw
NTI5ODFCIC8qIEhUTUxGb3JtQ29sbGVjdGlvbkltcGwuaCAqLywKKwkJCQlBOERGM0ZDNzA5N0ZB
MEZCMDA1Mjk4MUIgLyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAgKi8sCisJCQkJQThERjNG
QzgwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uSW1wbC5oICovLAorCQkJCUE4REYz
RkM5MDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbkltcGwuY3BwICovLAorCQkJCUE4
REYzRkNBMDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5oICovLAor
CQkJCUE4REYzRkNCMDk3RkEwRkIwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbC5j
cHAgKi8sCisJCQkJQThERjNGQ0MwOTdGQTBGQjAwNTI5ODFCIC8qIEhUTUxOYW1lQ29sbGVjdGlv
bkltcGwuaCAqLywKKwkJCQlBOERGM0ZDRDA5N0ZBMEZCMDA1Mjk4MUIgLyogSFRNTE5hbWVDb2xs
ZWN0aW9uSW1wbC5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IGh0bWw7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtNDQ3NCwxMiArNDQ5OCwxMSBAQAogCQkJCTkzRjE5OEUzMDgyNDVF
NTkwMDFFOUFCQyAvKiBodG1sX2Jhc2VpbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThF
NDA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9ibG9ja2ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzRjE5OEU1MDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2RvY3VtZW50aW1wbC5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJOTNGMTk4RTYwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfZWxlbWVudGltcGwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjE5OEU2MDgyNDVFNTkwMDFFOUFCQyAvKiBIVE1MRWxl
bWVudEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEU4MDgyNDVFNTkwMDFFOUFCQyAv
KiBodG1sX2hlYWRpbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFOTA4MjQ1RTU5MDAx
RTlBQkMgLyogaHRtbF9pbWFnZWltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEVBMDgy
NDVFNTkwMDFFOUFCQyAvKiBodG1sX2lubGluZWltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
RjE5OEVCMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2xpc3RpbXBsLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5M0YxOThFQzA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9taXNjaW1wbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGMTk4RUQwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfb2JqZWN0aW1wbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RUUwODI0NUU1OTAwMUU5QUJDIC8qIGh0bWxfdGFi
bGVpbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFRjA4MjQ1RTU5MDAxRTlBQkMgLyog
aHRtbHBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC00OTY4LDYgKzQ5OTEsMTAgQEAKIAkJCQlC
Q0VBNDk0NDA5N0YwRjVDMDA5NEM5RTQgLyogQnJvd3NlckV4dGVuc2lvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQTQ5NDcwOTdGMEY3NzAwOTRDOUU0IC8qIEJyb3dzZXJFeHRlbnNpb25NYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUFCNjdEMUE5MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5kZXJU
ZXh0RmllbGQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE4REYzRkNFMDk3RkEwRkMwMDUyOTgxQiAv
KiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlBOERGM0ZEMDA5
N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb25JbXBsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlBOERGM0ZEMjA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTEJhc2VGb250RWxlbWVudEltcGwuaCBp
biBIZWFkZXJzICovLAorCQkJCUE4REYzRkQ0MDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MTmFtZUNv
bGxlY3Rpb25JbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQ5OTUsMTIgKzUwMjIsMTEgQEAKIAkJ
CQlBODhBRDEzMTA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9iYXNlaW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTg4QUQxMzIwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfYmxvY2tpbXBsLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODhBRDEzMzA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9kb2N1bWVu
dGltcGwuaCBpbiBIZWFkZXJzICovLAotCQkJCUE4OEFEMTM0MDk1MjQ4MEEwMDFERDE5NiAvKiBo
dG1sX2VsZW1lbnRpbXBsLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODhBRDEzNDA5NTI0ODBBMDAx
REQxOTYgLyogSFRNTEVsZW1lbnRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDEzNjA5
NTI0ODBBMDAxREQxOTYgLyogaHRtbF9oZWFkaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4
QUQxMzcwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfaW1hZ2VpbXBsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBODhBRDEzODA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9pbmxpbmVpbXBsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODhBRDEzOTA5NTI0ODBBMDAxREQxOTYgLyogaHRtbF9saXN0aW1wbC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJQTg4QUQxM0EwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfbWlz
Y2ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEMTNCMDk1MjQ4MEEwMDFERDE5NiAvKiBo
dG1sX29iamVjdGltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4OEFEMTNDMDk1MjQ4MEEwMDFE
RDE5NiAvKiBodG1sX3RhYmxlaW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQxM0QwOTUy
NDgwQTAwMUREMTk2IC8qIGh0bWxwYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNTMxMiw2ICs1
MzM4LDEwIEBACiAJCQkJQkNFQTQ4Q0QwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRleHRGcmFn
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4Q0YwOTdEOTMwMjAwOTRDOUU0IC8qIHRh
YmxlX2xheW91dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUI2N0QxQUIwOTdGM0FFMzAwRjkzOTJF
IC8qIFJlbmRlclRleHRGaWVsZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThERjNGRDYwOTdGQTBG
QzAwNTI5ODFCIC8qIEhUTUxGb3JtQ29sbGVjdGlvbkltcGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUE4REYzRkQ4MDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MQ29sbGVjdGlvbkltcGwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE4REYzRkRBMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVt
ZW50SW1wbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQThERjNGREMwOTdGQTBGQzAwNTI5ODFCIC8q
IEhUTUxOYW1lQ29sbGVjdGlvbkltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtNjQ4NiwxMiArNjUx
NiwxMSBAQAogCQkJCTkzRjE5QThGMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2Jhc2VpbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjE5QTkwMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX2Js
b2NraW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5MTA4MjQ1RTU5MDAxRTlBQkMg
LyogaHRtbF9kb2N1bWVudGltcGwuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJOTNGMTlBOTIwODI0
NUU1OTAwMUU5QUJDIC8qIGh0bWxfZWxlbWVudGltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
OTNGMTlBOTIwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxFbGVtZW50SW1wbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5M0YxOUE5NDA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9oZWFkaW1wbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5NTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9pbWFn
ZWltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNGMTlBOTYwODI0NUU1OTAwMUU5QUJDIC8q
IGh0bWxfaW5saW5laW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5NzA4MjQ1RTU5
MDAxRTlBQkMgLyogaHRtbF9saXN0aW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5M0YxOUE5
ODA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9taXNjaW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5M0YxOUE5OTA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbF9vYmplY3RpbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzRjE5QTlBMDgyNDVFNTkwMDFFOUFCQyAvKiBodG1sX3RhYmxlaW1wbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUE5QjA4MjQ1RTU5MDAxRTlBQkMgLyogaHRtbHBh
cnNlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTY4NzQsNiArNjkwMywxMCBAQAogCQkJCTkzN0Ez
NkE3MDk3RTJFMzIwMEU0RUUyRiAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0VBNDk0ODA5N0YwRjc3MDA5NEM5RTQgLyogQnJvd3NlckV4dGVuc2lvbk1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFCNjdEMUE4MDk3RjNBRTMwMEY5MzkyRSAvKiBSZW5k
ZXJUZXh0RmllbGQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThERjNGQ0YwOTdGQTBGQzAwNTI5
ODFCIC8qIEhUTUxGb3JtQ29sbGVjdGlvbkltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThE
RjNGRDEwOTdGQTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBOERGM0ZEMzA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTEJhc2VGb250RWxlbWVu
dEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQThERjNGRDUwOTdGQTBGQzAwNTI5ODFCIC8q
IEhUTUxOYW1lQ29sbGVjdGlvbkltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC02OTU0LDEyICs2
OTg3LDExIEBACiAJCQkJQTg4QUQyRDIwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfYmFzZWltcGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQyRDMwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxf
YmxvY2tpbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMkQ0MDk1MjQ4MEEwMDFERDE5
NiAvKiBodG1sX2RvY3VtZW50aW1wbC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBODhBRDJENTA5
NTI0ODBBMDAxREQxOTYgLyogaHRtbF9lbGVtZW50aW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBODhBRDJENTA5NTI0ODBBMDAxREQxOTYgLyogSFRNTEVsZW1lbnRJbXBsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4OEFEMkQ3MDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX2hlYWRpbXBsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMkQ4MDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX2lt
YWdlaW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDJEOTA5NTI0ODBBMDAxREQxOTYg
LyogaHRtbF9pbmxpbmVpbXBsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMkRBMDk1MjQ4
MEEwMDFERDE5NiAvKiBodG1sX2xpc3RpbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFE
MkRCMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX21pc2NpbXBsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE4OEFEMkRDMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1sX29iamVjdGltcGwuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTg4QUQyREQwOTUyNDgwQTAwMUREMTk2IC8qIGh0bWxfdGFibGVpbXBs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEMkRFMDk1MjQ4MEEwMDFERDE5NiAvKiBodG1s
cGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzE3Miw2ICs3MjA0LDEwIEBACiAJCQkJQkNF
QTQ4Q0UwOTdEOTMwMjAwOTRDOUU0IC8qIHRhYmxlX2xheW91dC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MzdBMzZBODA5N0UyRTMyMDBFNEVFMkYgLyogVXNlckFnZW50U3R5bGVTaGVldHMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUI2N0QxQUEwOTdGM0FFMzAwRjkzOTJFIC8qIFJlbmRlclRl
eHRGaWVsZC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOERGM0ZENzA5N0ZBMEZDMDA1Mjk4MUIg
LyogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOERGM0ZE
OTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb25JbXBsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCUE4REYzRkRCMDk3RkEwRkMwMDUyOTgxQiAvKiBIVE1MQmFzZUZvbnRFbGVtZW50SW1w
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBOERGM0ZERDA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRN
TE5hbWVDb2xsZWN0aW9uSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IENoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjM2KQorKysgQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTA4IEBACisyMDA2LTAxLTE5ICBFcmljIFNlaWRlbCAg
PGVzZWlkZWxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNwbGl0IGh0bWxfbWlzY2ltcGwuKiBpbnRvIHNlcGFyYXRlIGZpbGVzIGFu
ZCBtb3ZlIGh0bWxfZWxlbWVudGltcGwKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3
aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD02NjcwCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9ET00ubW06CisgICAg
ICAgICogYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tOgorICAgICAgICAqIGJyaWRnZS9tYWMvV2Vi
Q29yZUZyYW1lQnJpZGdlLm1tOgorICAgICAgICAqIGNzcy9jc3NfdmFsdWVpbXBsLmNwcDoKKyAg
ICAgICAgKiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKiBraHRtbC9lY21hL2tqc19k
b20uY3BwOgorICAgICAgICAqIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwOgorICAgICAgICAqIGto
dG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwOgorICAgICAgICAqIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50
SW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEJhc2VGb250RWxlbWVu
dEltcGwuaDogQWRkZWQuCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MQnV0dG9uRWxlbWVudElt
cGwuY3BwOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbkltcGw6OnRyYXZlcnNlTmV4dEl0
ZW0pOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTENvbGxlY3Rpb25JbXBsLmg6IEFkZGVkLgor
ICAgICAgICAqIGtodG1sL2h0bWwvSFRNTEVsZW1lbnRJbXBsLmNwcDogQWRkZWQuCisgICAgICAg
ICoga2h0bWwvaHRtbC9IVE1MRWxlbWVudEltcGwuaDogQWRkZWQuCisgICAgICAgICoga2h0bWwv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50SW1wbC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9I
VE1MRm9ybUNvbGxlY3Rpb25JbXBsLmNwcDogQWRkZWQuCisgICAgICAgICoga2h0bWwvaHRtbC9I
VE1MRm9ybUNvbGxlY3Rpb25JbXBsLmg6IEFkZGVkLgorICAgICAgICAqIGtodG1sL2h0bWwvSFRN
TEZvcm1FbGVtZW50SW1wbC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MRm9ybUVsZW1l
bnRJbXBsLmg6CisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbC5o
OgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTElucHV0RWxlbWVudEltcGwuY3BwOgorICAgICAg
ICAqIGtodG1sL2h0bWwvSFRNTElzSW5kZXhFbGVtZW50SW1wbC5jcHA6CisgICAgICAgICoga2h0
bWwvaHRtbC9IVE1MTGFiZWxFbGVtZW50SW1wbC5oOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRN
TExlZ2VuZEVsZW1lbnRJbXBsLmNwcDoKKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxOYW1lQ29s
bGVjdGlvbkltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBraHRtbC9odG1sL0hUTUxOYW1lQ29s
bGVjdGlvbkltcGwuaDogQWRkZWQuCisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MT3B0R3JvdXBF
bGVtZW50SW1wbC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50
SW1wbC5oOgorICAgICAgICAqIGtodG1sL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnRJbXBsLmg6Cisg
ICAgICAgICoga2h0bWwvaHRtbC9IVE1MU2VsZWN0RWxlbWVudEltcGwuY3BwOgorICAgICAgICAq
IGtodG1sL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudEltcGwuY3BwOgorICAgICAgICAqIGtodG1s
L2h0bWwvaHRtbF9iYXNlaW1wbC5jcHA6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Jhc2Vp
bXBsLmg6CisgICAgICAgICoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHA6CisgICAgICAg
ICoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRt
bF9jYW52YXNpbXBsLmNwcDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBs
LmNwcDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmg6CisgICAgICAg
ICoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBr
aHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50
SW1wbDo6c2V0U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnRJ
bXBsOjppc0xvYWRpbmcpOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oOgor
ICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwOgorICAgICAgICAqIGtodG1s
L2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5oOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oOgorICAgICAg
ICAqIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICoga2h0
bWwvaHRtbC9odG1sX21pc2NpbXBsLmg6IFJlbW92ZWQuCisgICAgICAgICoga2h0bWwvaHRtbC9o
dG1sX29iamVjdGltcGwuY3BwOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwu
aDoKKyAgICAgICAgKiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcDoKKyAgICAgICAgKiBraHRt
bC9odG1sL2h0bWxwYXJzZXIuY3BwOgorICAgICAgICAqIGtodG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5kbGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OnNjcmlwdEV4ZWN1dGlvbik6CisgICAg
ICAgICoga2h0bWwveG1sL0RvY3VtZW50SW1wbC5jcHA6CisgICAgICAgICoga2h0bWwveG1sL2Rv
bTJfcmFuZ2VpbXBsLmNwcDoKKyAgICAgICAgKiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNw
cDoKKyAgICAgICAgKiBrd3EvS1dRQWNjT2JqZWN0Lm1tOgorICAgICAgICAqIGxvYWRlci9sb2Fk
ZXIuY3BwOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoRnJhbWU6OnJlc3Rv
cmVVUkwpOgorICAgICAgICAoRnJhbWU6OnN0b3BMb2FkaW5nKToKKyAgICAgICAgKEZyYW1lOjpy
ZWNlaXZlZEZpcnN0RGF0YSk6CisgICAgICAgIChGcmFtZTo6Z290b0FuY2hvcik6CisgICAgICAg
IChGcmFtZTo6cmVxdWVzdE9iamVjdCk6CisgICAgICAgIChGcmFtZTo6cHJvY2Vzc09iamVjdFJl
cXVlc3QpOgorICAgICAgICAoRnJhbWU6OnN1Ym1pdEZvcm0pOgorICAgICAgICAoRnJhbWU6OnNs
b3RQYXJlbnRDb21wbGV0ZWQpOgorICAgICAgICAoRnJhbWU6OmZpbmRGcmFtZSk6CisgICAgICAg
IChGcmFtZTo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgor
ICAgICAgICAoRnJhbWVWaWV3Ojp1c2VTbG93UmVwYWludHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9yZW5kZXJfYXBwbGV0LmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9yZW5kZXJfYm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29udGVudFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
cGFpbnRSb290Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpw
YWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Z2V0Q2xp
cFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
cmVuZGVyX2NhbnZhc2ltYWdlLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2NhbnZh
c2ltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwOgorICAgICAgICAqIHJlbmRlcmluZy9yZW5k
ZXJfaW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcDoKKwogMjAw
Ni0wMS0xOSAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgSHlhdHQgYW5kIERhcmluLgpJbmRleDogY3NzL2Nzc192YWx1ZWltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGNzcy9jc3NfdmFsdWVpbXBsLmNwcAkocmV2aXNpb24gMTIyMzYpCisrKyBj
c3MvY3NzX3ZhbHVlaW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNp
bmNsdWRlICJkb20vY3NzX3ZhbHVlLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9leGNlcHRpb24uaCIK
ICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50
aW1wbC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaGVs
cGVyLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL2ZvbnQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcv
cmVuZGVyX3N0eWxlLmgiCkluZGV4OiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCShyZXZpc2lvbiAxMjIzNikKKysrIGNzcy9j
c3NzdHlsZXNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDEwIEBACiAj
aW5jbHVkZSAiY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAiY3NzcHJvcGVydGllcy5oIgogI2luY2x1
ZGUgImNzc3ZhbHVlcy5oIgotI2luY2x1ZGUgImRvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUg
ImZvbnQuaCIKICNpbmNsdWRlICJoZWxwZXIuaCIKICNpbmNsdWRlICJodG1sX2RvY3VtZW50aW1w
bC5oIgotI2luY2x1ZGUgImh0bWxfZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVu
dEltcGwuaCIKICNpbmNsdWRlICJraHRtbF9mYWN0b3J5LmgiCiAjaW5jbHVkZSAia2h0bWxfc2V0
dGluZ3MuaCIKICNpbmNsdWRlICJraHRtbGxheW91dC5oIgpAQCAtNDksNyArNDgsNiBAQAogI2lu
Y2x1ZGUgInJlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcl90aGVtZS5oIgogI2luY2x1
ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGt1cmwuaD4KICNp
bmNsdWRlIDxreG1sY29yZS9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8cWRhdGV0aW1lLmg+CkBAIC01
Nyw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cXN0cmluZy5oPgogI2luY2x1ZGUgPHF2YWx1ZWxpc3Qu
aD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xOTAzLDggKzE5MDIsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoIGluCiAgICAgICAgICAgICBkID0gRURpc3BsYXkocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgLSBDU1NfVkFMX0lOTElORSk7CiAKICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoZCk7Ci0gICAgICAgIC8va2REZWJ1ZyggNjA4MCApIDw8ICJzZXR0aW5nIGRpc3Bs
YXkgdG8gIiA8PCBkIDw8IGVuZGw7Ci0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yMzY4
LDcgKzIzNjUsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoIGluCiAg
ICAgICAgICAgICBjb2wgPSBnZXRDb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1
ZSk7CiAgICAgICAgIH0KIAotICAgICAgICAvL2tkRGVidWcoIDYwODAgKSA8PCAiYXBwbHlpbmcg
Y29sb3IgIiA8PCBjb2wuaXNWYWxpZCgpIDw8IGVuZGw7CiAgICAgICAgIHN3aXRjaChpZCkKICAg
ICAgICAgewogICAgICAgICBjYXNlIENTU19QUk9QX0JBQ0tHUk9VTkRfQ09MT1I6CkBAIC0yNDAy
LDcgKzIzOTgsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVydHkoIGluCiAg
ICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUpIHJldHVybjsKICAgICAgICAgc3R5bGUtPnNldExp
c3RTdHlsZUltYWdlKHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWVJbXBsICo+KHByaW1pdGl2ZVZh
bHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5pbWFnZShlbGVtZW50LT5n
ZXREb2N1bWVudCgpLT5kb2NMb2FkZXIoKSkpOwotICAgICAgICAvL2tkRGVidWcoIDYwODAgKSA8
PCAic2V0dGluZyBpbWFnZSBpbiBsaXN0IHRvICIgPDwgaW1hZ2UtPmltYWdlKCkgPDwgZW5kbDsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNjE2LDEyICsyNjExLDggQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVByb3BlcnR5KCBpbgogICAgICAgICAgICAgICAgIGFwcGx5ID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoaWQgIT0gQ1NTX1BS
T1BfTUFYX1dJRFRIICYmIHByaW1pdGl2ZVZhbHVlICYmCi0gICAgICAgICAgIHByaW1pdGl2ZVZh
bHVlLT5nZXRJZGVudCgpID09IENTU19WQUxfQVVUTykKLSAgICAgICAgewotICAgICAgICAgICAg
Ly9rZERlYnVnKCA2MDgwICkgPDwgImZvdW5kIHZhbHVlPWF1dG8iIDw8IGVuZGw7CisgICAgICAg
IGlmIChpZCAhPSBDU1NfUFJPUF9NQVhfV0lEVEggJiYgcHJpbWl0aXZlVmFsdWUgJiYgcHJpbWl0
aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTX1ZBTF9BVVRPKQogICAgICAgICAgICAgYXBwbHkg
PSB0cnVlOwotICAgICAgICB9CiAgICAgY2FzZSBDU1NfUFJPUF9QQURESU5HX1RPUDoKICAgICBj
YXNlIENTU19QUk9QX1BBRERJTkdfUklHSFQ6CiAgICAgY2FzZSBDU1NfUFJPUF9QQURESU5HX0JP
VFRPTToKQEAgLTI4ODcsOSArMjg3OCw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQ
cm9wZXJ0eSggaW4KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoc2l6ZSA8PSAwKSByZXR1cm47Ci0KLSAgICAgICAgLy9rZERlYnVnKCA2MDgwICkgPDwg
ImNvbXB1dGVkIHJhdyBmb250IHNpemU6ICIgPDwgc2l6ZSA8PCBlbmRsOworICAgICAgICBpZiAo
c2l6ZSA8PSAwKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHNldEZvbnRTaXplKGZv
bnREZWYsIHNpemUpOwogICAgICAgICBpZiAoc3R5bGUtPnNldEZvbnREZWYoIGZvbnREZWYgKSkK
QEAgLTMwMTIsMTAgKzMwMDIsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5UHJvcGVy
dHkoIGluCiAgICAgICAgIH0gZWxzZSBpZiAoIHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpICE9
IENTU19WQUxfQVVUTyApIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0vLyAJcURl
YnVnKCJzZXR0aW5nIGNsaXAgdG9wIHRvICVkIiwgdG9wLnZhbHVlICk7Ci0vLyAJcURlYnVnKCJz
ZXR0aW5nIGNsaXAgcmlnaHQgdG8gJWQiLCByaWdodC52YWx1ZSApOwotLy8gCXFEZWJ1Zygic2V0
dGluZyBjbGlwIGJvdHRvbSB0byAlZCIsIGJvdHRvbS52YWx1ZSApOwotLy8gCXFEZWJ1Zygic2V0
dGluZyBjbGlwIGxlZnQgdG8gJWQiLCBsZWZ0LnZhbHVlICk7CiAgICAgICAgIHN0eWxlLT5zZXRD
bGlwKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCk7CiAgICAgICAgIHN0eWxlLT5zZXRIYXNDbGlw
KGhhc0NsaXApOwogICAgIApJbmRleDogYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHJldmlzaW9u
IDEyMjM2KQorKysgYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDYgQEAKICNpbXBvcnQgIktXUVRleHRDb2RlYy5oIgogI2ltcG9ydCAi
S1dRVmlldy5oIgogI2ltcG9ydCAiTWFjRnJhbWUuaCIKLSNpbXBvcnQgIk1hY0ZyYW1lLmgiCiAj
aW1wb3J0ICJOb2RlSW1wbC5oIgogI2ltcG9ydCAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgogI2lt
cG9ydCAiV2ViQ29yZUZyYW1lTmFtZXNwYWNlcy5oIgpAQCAtNzQsNyArNzMsNiBAQAogI2ltcG9y
dCAicmVuZGVyX2NhbnZhcy5oIgogI2ltcG9ydCAicmVuZGVyX2ZyYW1lcy5oIgogI2ltcG9ydCAi
cmVuZGVyX2ltYWdlLmgiCi0jaW1wb3J0ICJyZW5kZXJfb2JqZWN0LmgiCiAjaW1wb3J0ICJyZW5k
ZXJfcmVwbGFjZWQuaCIKICNpbXBvcnQgInJlbmRlcl9zdHlsZS5oIgogI2ltcG9ydCAicmVwbGFj
ZV9zZWxlY3Rpb25fY29tbWFuZC5oIgpAQCAtODMsNiArODEsNyBAQAogI2ltcG9ydCAidmlzaWJs
ZV90ZXh0LmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3VuaXRzLmgiCiAjaW1wb3J0ICJ4bWxfdG9rZW5p
emVyLmgiCisjaW1wb3J0ICJodG1sbmFtZXMuaCIKICNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyLmg+CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9qbmlfanNvYmplY3QuaD4KICNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL25wcnVudGltZS5oPgpJbmRleDoga3dxL0tXUUFjY09iamVj
dC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRQWNjT2JqZWN0Lm1tCShyZXZpc2lvbiAxMjIzNikK
KysrIGt3cS9LV1FBY2NPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDggQEAK
ICNpbXBvcnQgIldlYkNvcmVWaWV3RmFjdG9yeS5oIgogCiAjaW1wb3J0ICJEb2N1bWVudEltcGwu
aCIKLSNpbXBvcnQgImRvbV9lbGVtZW50aW1wbC5oIgotI2ltcG9ydCAiaHRtbF9lbGVtZW50aW1w
bC5oIgogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudEltcGwuaCIKKyNpbXBvcnQgIkhUTUxDb2xs
ZWN0aW9uSW1wbC5oIgogI2ltcG9ydCAiaHRtbF9pbmxpbmVpbXBsLmgiCiAjaW1wb3J0ICJodG1s
X2ltYWdlaW1wbC5oIgogI2ltcG9ydCAiZG9tX3N0cmluZy5oIgpAQCAtNjMsNDMgKzYyLDE0IEBA
CiAjaW1wb3J0ICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW1wb3J0ICJ2aXNpYmxlX3RleHQuaCIK
ICNpbXBvcnQgInZpc2libGVfdW5pdHMuaCIKLSNpbXBvcnQgImh0bWxfbWlzY2ltcGwuaCIKICNp
bXBvcnQgInFwdHJzdGFjay5oIgogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkV2
ZW50TmFtZXMuaCIKKyNpbXBvcnQgImh0bWxuYW1lcy5oIgogCi11c2luZyBuYW1lc3BhY2UgRE9N
OjpFdmVudE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIERPTTo6SFRNTE5hbWVzOwotCi11c2luZyBE
T006OkRvY3VtZW50SW1wbDsKLXVzaW5nIERPTTo6RE9NU3RyaW5nOwotdXNpbmcgRE9NOjpFbGVt
ZW50SW1wbDsKLXVzaW5nIERPTTo6SFRNTEFuY2hvckVsZW1lbnRJbXBsOwotdXNpbmcgRE9NOjpI
VE1MQXJlYUVsZW1lbnRJbXBsOwotdXNpbmcgRE9NOjpIVE1MQ29sbGVjdGlvbjsKLXVzaW5nIERP
TTo6SFRNTENvbGxlY3Rpb25JbXBsOwotdXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7Ci11c2lu
ZyBET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOwotdXNpbmcgRE9NOjpIVE1MTWFwRWxlbWVudElt
cGw7Ci11c2luZyBET006Ok5vZGU7Ci11c2luZyBET006Ok5vZGVJbXBsOwotdXNpbmcgRE9NOjpQ
b3NpdGlvbjsKLQotdXNpbmcga2h0bWw6OnRoZW1lOwotdXNpbmcga2h0bWw6OkVBZmZpbml0eTsK
LXVzaW5nIGtodG1sOjpFVmVydGljYWxBbGlnbjsKLXVzaW5nIGtodG1sOjpwbGFpblRleHQ7Ci11
c2luZyBraHRtbDo6UmVuZGVyQmxvY2s7Ci11c2luZyBraHRtbDo6UmVuZGVyQ2FudmFzOwotdXNp
bmcga2h0bWw6OlJlbmRlckltYWdlOwotdXNpbmcga2h0bWw6OlJlbmRlckxpc3RNYXJrZXI7Ci11
c2luZyBraHRtbDo6UmVuZGVyT2JqZWN0OwotdXNpbmcga2h0bWw6OlJlbmRlclN0eWxlOwotdXNp
bmcga2h0bWw6OlJlbmRlclRleHQ7Ci11c2luZyBraHRtbDo6UmVuZGVyV2lkZ2V0OwotdXNpbmcg
a2h0bWw6OlNlbGVjdGlvbkNvbnRyb2xsZXI7Ci11c2luZyBraHRtbDo6VGV4dEl0ZXJhdG9yOwot
dXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlvbjsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
CiAvLyBGSVhNRTogVGhpcyB3aWxsIGV2ZW50dWFsbHkgbmVlZCB0byByZWFsbHkgbG9jYWxpemUu
CiAjZGVmaW5lIFVJX1NUUklORyhzdHJpbmcsIGNvbW1lbnQpICgoTlNTdHJpbmcgKilbTlNTdHJp
bmcgc3RyaW5nV2l0aFVURjhTdHJpbmc6KHN0cmluZyldKQpJbmRleDogbG9hZGVyL2xvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gbG9hZGVyL2xvYWRlci5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysg
bG9hZGVyL2xvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNs
dWRlIDxraW8vam9iLmg+CiAjaW5jbHVkZSA8a2lvL2pvYmNsYXNzZXMuaD4KICNpbmNsdWRlIDxr
eG1sY29yZS9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8cXB0cnZlY3Rvci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKSW5kZXg6IHBhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBw
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDEyMjM2KQorKysgcGFnZS9GcmFtZVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2lu
bGluZWltcGwuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50SW1wbC5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfYXJlbmEuaCIKLSNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29i
amVjdC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAjaW5jbHVkZSAi
cmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfcmVw
bGFjZWQuaCIKQEAgLTQzLDcgKzQyLDcgQEAKICNpbmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5oIgogI2luY2x1ZGUgImhlbHBlci5oIgogI2luY2x1ZGUgImtodG1sX3NldHRpbmdzLmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPGtj
dXJzb3IuaD4KIApAQCAtNTIsNyArNTEsNiBAQAogI2luY2x1ZGUgPHF2YXJpYW50Lmg+CiAKICNp
bmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxrZGVidWcuaD4KIAogI2luY2x1ZGUgIktXUUFj
Y09iamVjdENhY2hlLmgiCiAKQEAgLTYyLDEyICs2MCw5IEBACiAjaW5jbHVkZSAiTWFjRnJhbWUu
aCIKICNlbmRpZgogCi0vLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQot
Ci11c2luZyBuYW1lc3BhY2UgRE9NOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci11c2luZyBu
YW1lc3BhY2Uga2h0bWw7CiAKIGNsYXNzIEZyYW1lVmlld1ByaXZhdGUgewogcHVibGljOgpAQCAt
OTk3LDcgKzk5Miw2IEBAIFFTdHJpbmcgRnJhbWVWaWV3OjptZWRpYVR5cGUoKSBjb25zdAogCiB2
b2lkIEZyYW1lVmlldzo6dXNlU2xvd1JlcGFpbnRzKCkKIHsKLSAgICBrZERlYnVnKDApIDw8ICJz
bG93IHJlcGFpbnRzIHJlcXVlc3RlZCIgPDwgZW5kbDsKICAgICBkLT51c2VTbG93UmVwYWludHMg
PSB0cnVlOwogICAgIHNldFN0YXRpY0JhY2tncm91bmQodHJ1ZSk7CiB9CkluZGV4OiBwYWdlL0Zy
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTIyMzYpCisr
KyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOSBAQAogI2luY2x1
ZGUgImRvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJodG1sX2Jhc2VpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbF9kb2N1bWVudGltcGwuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJo
dG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWxfbWlzY2ltcGwuaCIKKyNpbmNsdWRlICJI
VE1MQ29sbGVjdGlvbkltcGwuaCIKICNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIKICNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImtodG1sX2V2ZW50cy5oIgpAQCAtNzIsNyAr
NzMsNiBAQAogI2luY2x1ZGUgInhtbGh0dHByZXF1ZXN0LmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+
CiAjaW5jbHVkZSA8a2N1cnNvci5oPgotI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtp
by9nbG9iYWwuaD4KICNpbmNsdWRlIDxraW8vam9iLmg+CiAjaW5jbHVkZSA8a2xvY2FsZS5oPgpA
QCAtMjEyLDcgKzIxMiw2IEBAIGJvb2wgRnJhbWU6OnJlc3RvcmVVUkwoIGNvbnN0IEtVUkwgJnVy
bCAKICAgICogbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gcmVzdG9yZVN0YXRlKCkgaW4gY2FzZSBv
ZiBhIGZ1bGwgZnJhbWVzZXQKICAgICogcmVzdG9yYWwsIGFuZCByZXN0b3JlU3RhdGUoKSBjYWxs
cyBjbG9zZVVSTCgpIGJlZm9yZSByZXN0b3JpbmcKICAgICogYW55d2F5LgotICBrZERlYnVnKCA2
MDUwICkgPDwgImNsb3Npbmcgb2xkIFVSTCIgPDwgZW5kbDsKICAgY2xvc2VVUkwoKTsKICAgKi8K
IApAQCAtMzU2LDkgKzM1NSw3IEBAIHZvaWQgRnJhbWU6OnN0b3BMb2FkaW5nKGJvb2wgc2VuZFVu
bG9hZCkKICAgZC0+bV9iTG9hZEV2ZW50RW1pdHRlZCA9IHRydWU7IC8vIGRvbid0IHdhbnQgdGhh
dCBvbmUgZWl0aGVyCiAgIGQtPm1fY2FjaGVQb2xpY3kgPSBLSU86OkNDX1ZlcmlmeTsgLy8gV2h5
IGhlcmU/CiAKLSAgaWYgKCBkLT5tX2RvYyAmJiBkLT5tX2RvYy0+cGFyc2luZygpICkKLSAgewot
ICAgIGtkRGVidWcoIDYwNTAgKSA8PCAiIHdhcyBzdGlsbCBwYXJzaW5nLi4uIGNhbGxpbmcgZW5k
ICIgPDwgZW5kbDsKKyAgaWYgKGQtPm1fZG9jICYmIGQtPm1fZG9jLT5wYXJzaW5nKCkpIHsKICAg
ICBzbG90RmluaXNoZWRQYXJzaW5nKCk7CiAgICAgZC0+bV9kb2MtPnNldFBhcnNpbmcoZmFsc2Up
OwogICB9CkBAIC02NjUsOSArNjYyLDcgQEAgdm9pZCBGcmFtZTo6cmVjZWl2ZWRGaXJzdERhdGEo
KQogCiAgICAgLy8gU3VwcG9ydCBmb3IgaHR0cC1yZWZyZXNoCiAgICAgcURhdGEgPSBkLT5tX2pv
Yi0+cXVlcnlNZXRhRGF0YSgiaHR0cC1yZWZyZXNoIik7Ci0gICAgaWYoICFxRGF0YS5pc0VtcHR5
KCkgJiYgZC0+bV9tZXRhUmVmcmVzaEVuYWJsZWQgKQotICAgIHsKLSAgICAgIGtkRGVidWcoNjA1
MCkgPDwgIkhUVFAgUmVmcmVzaCBSZXF1ZXN0OiAiIDw8IHFEYXRhIDw8IGVuZGw7CisgICAgaWYo
IXFEYXRhLmlzRW1wdHkoKSAmJiBkLT5tX21ldGFSZWZyZXNoRW5hYmxlZCkgewogICAgICAgZG91
YmxlIGRlbGF5OwogICAgICAgaW50IHBvcyA9IHFEYXRhLmZpbmQoICc7JyApOwogICAgICAgaWYg
KCBwb3MgPT0gLTEgKQpAQCAtMTI2MCwxMCArMTI1NSw4IEBAIGJvb2wgRnJhbWU6OmdvdG9BbmNo
b3IoIGNvbnN0IFFTdHJpbmcgJm4KICAgZC0+bV9kb2MtPnNldENTU1RhcmdldChuKTsgLy8gU2V0
dGluZyB0byBudWxsIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgdGFyZ2V0LgogICAKICAgLy8gSW1w
bGVtZW50IHRoZSBydWxlIHRoYXQgIiIgYW5kICJ0b3AiIGJvdGggbWVhbiB0b3Agb2YgcGFnZSBh
cyBpbiBvdGhlciBicm93c2Vycy4KLSAgaWYgKCFuICYmICEobmFtZS5pc0VtcHR5KCkgfHwgbmFt
ZS5sb3dlcigpID09ICJ0b3AiKSkgewotICAgIGtkRGVidWcoNjA1MCkgPDwgIkZyYW1lOjpnb3Rv
QW5jaG9yIG5vZGUgJyIgPDwgbmFtZSA8PCAiJyBub3QgZm91bmQiIDw8IGVuZGw7Ci0gICAgcmV0
dXJuIGZhbHNlOwotICB9CisgIGlmICghbiAmJiAhKG5hbWUuaXNFbXB0eSgpIHx8IG5hbWUubG93
ZXIoKSA9PSAidG9wIikpCisgICAgICByZXR1cm4gZmFsc2U7CiAKICAgLy8gV2UgbmVlZCB0byB1
cGRhdGUgdGhlIGxheW91dCBiZWZvcmUgc2Nyb2xsaW5nLCBvdGhlcndpc2Ugd2UgY291bGQKICAg
Ly8gcmVhbGx5IG1lc3MgdGhpbmdzIHVwIGlmIGFuIGFuY2hvciBzY3JvbGwgY29tZXMgYXQgYSBi
YWQgbW9tZW50LgpAQCAtMTYxNywxMSArMTYxMCw5IEBAIGJvb2wgRnJhbWU6OnJlcXVlc3RPYmpl
Y3QoIFJlbmRlclBhcnQgKmYKIAogYm9vbCBGcmFtZTo6cmVxdWVzdE9iamVjdCggQ2hpbGRGcmFt
ZSAqY2hpbGQsIGNvbnN0IEtVUkwgJnVybCwgY29uc3QgVVJMQXJncyAmX2FyZ3MgKQogewotICBp
ZiAoIGNoaWxkLT5tX2JQcmVsb2FkZWQgKQotICB7Ci0gICAgLy8ga2REZWJ1Zyg2MDA1KSA8PCAi
RnJhbWU6OnJlcXVlc3RPYmplY3QgcHJlbG9hZCIgPDwgZW5kbDsKLSAgICBpZiAoIGNoaWxkLT5t
X3JlbmRlcmVyICYmIGNoaWxkLT5tX2ZyYW1lICYmIGNoaWxkLT5tX3JlbmRlcmVyLT53aWRnZXQo
KSApCi0gICAgICBjaGlsZC0+bV9yZW5kZXJlci0+c2V0V2lkZ2V0KCBjaGlsZC0+bV9yZW5kZXJl
ci0+d2lkZ2V0KCkgKTsKKyAgaWYgKGNoaWxkLT5tX2JQcmVsb2FkZWQpIHsKKyAgICBpZiAoY2hp
bGQtPm1fcmVuZGVyZXIgJiYgY2hpbGQtPm1fZnJhbWUgJiYgY2hpbGQtPm1fcmVuZGVyZXItPndp
ZGdldCgpKQorICAgICAgY2hpbGQtPm1fcmVuZGVyZXItPnNldFdpZGdldCggY2hpbGQtPm1fcmVu
ZGVyZXItPndpZGdldCgpKTsKIAogICAgIGNoaWxkLT5tX2JQcmVsb2FkZWQgPSBmYWxzZTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTE2NDksOCArMTY0MCw2IEBAIGJvb2wgRnJhbWU6OnJlcXVlc3RP
YmplY3QoIENoaWxkRnJhbWUgKmMKIAogYm9vbCBGcmFtZTo6cHJvY2Vzc09iamVjdFJlcXVlc3Qo
IENoaWxkRnJhbWUgKmNoaWxkLCBjb25zdCBLVVJMICZfdXJsLCBjb25zdCBRU3RyaW5nICZtaW1l
dHlwZSApCiB7Ci0gIC8va2REZWJ1ZyggNjA1MCApIDw8ICJGcmFtZTo6cHJvY2Vzc09iamVjdFJl
cXVlc3QgdHJ5aW5nIHRvIGNyZWF0ZSBwYXJ0IGZvciAiIDw8IG1pbWV0eXBlIDw8IGVuZGw7Ci0K
ICAgLy8gSU1QT1JUQU5UOiBjcmVhdGUgYSBjb3B5IG9mIHRoZSB1cmwgaGVyZSwgYmVjYXVzZSBp
dCBpcyBqdXN0IGEgcmVmZXJlbmNlLCB3aGljaCB3YXMgbGlrZWx5IHRvIGJlIGdpdmVuCiAgIC8v
IGJ5IGFuIGVtaXR0aW5nIGZyYW1lIHBhcnQgKGVtaXQgb3BlblVSTFJlcXVlc3QoIGJsYWh1cmws
IC4uLiApIC4gQSBmZXcgbGluZXMgYmVsb3cgd2UgZGVsZXRlIHRoZSBwYXJ0CiAgIC8vIHRob3Vn
aCAtPiB0aGUgcmVmZXJlbmNlIGJlY29tZXMgaW52YWxpZCAtPiBjcmFzaCBpcyBsaWtlbHkKQEAg
LTE3NjksNyArMTc1OCw2IEBAIHZvaWQgRnJhbWU6OnN1Ym1pdEZvcm1BZ2FpbigpCiAKIHZvaWQg
RnJhbWU6OnN1Ym1pdEZvcm0oIGNvbnN0IGNoYXIgKmFjdGlvbiwgY29uc3QgUVN0cmluZyAmdXJs
LCBjb25zdCBGb3JtRGF0YSAmZm9ybURhdGEsIGNvbnN0IFFTdHJpbmcgJl90YXJnZXQsIGNvbnN0
IFFTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBRU3RyaW5nJiBib3VuZGFyeSApCiB7Ci0gIGtk
RGVidWcoNjAwMCkgPDwgdGhpcyA8PCAiOiBGcmFtZTo6c3VibWl0Rm9ybSB0YXJnZXQ9IiA8PCBf
dGFyZ2V0IDw8ICIgdXJsPSIgPDwgdXJsIDw8IGVuZGw7CiAgIEtVUkwgdSA9IGNvbXBsZXRlVVJM
KCB1cmwgKTsKIAogICBpZiAoIXUuaXNWYWxpZCgpKQpAQCAtMTg0OCwxMCArMTgzNiw4IEBAIHZv
aWQgRnJhbWU6OnN1Ym1pdEZvcm0oIGNvbnN0IGNoYXIgKmFjdGkKICAgfQogCiAgIGlmICggZC0+
bV9kb2MtPnBhcnNpbmcoKSB8fCBkLT5tX3J1bm5pbmdTY3JpcHRzID4gMCApIHsKLSAgICBpZigg
ZC0+bV9zdWJtaXRGb3JtICkgewotICAgICAga2REZWJ1Zyg2MDAwKSA8PCAiRnJhbWU6OnN1Ym1p
dEZvcm0gQUJPUlRJTkchIiA8PCBlbmRsOwotICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZihk
LT5tX3N1Ym1pdEZvcm0pCisgICAgICAgIHJldHVybjsKICAgICBkLT5tX3N1Ym1pdEZvcm0gPSBu
ZXcgRnJhbWVQcml2YXRlOjpTdWJtaXRGb3JtOwogICAgIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0
QWN0aW9uID0gYWN0aW9uOwogICAgIGQtPm1fc3VibWl0Rm9ybS0+c3VibWl0VXJsID0gdXJsOwpA
QCAtMTg2OCwxMSArMTg1NCw4IEBAIHZvaWQgRnJhbWU6OnN1Ym1pdEZvcm0oIGNvbnN0IGNoYXIg
KmFjdGkKIAogdm9pZCBGcmFtZTo6c2xvdFBhcmVudENvbXBsZXRlZCgpCiB7Ci0gIGlmICggZC0+
bV9zY2hlZHVsZWRSZWRpcmVjdGlvbiAhPSBub1JlZGlyZWN0aW9uU2NoZWR1bGVkICYmICFkLT5t
X3JlZGlyZWN0aW9uVGltZXIuaXNBY3RpdmUoKSApCi0gIHsKLSAgICAvLyBrZERlYnVnKDYwNTAp
IDw8IHRoaXMgPDwgIjogQ2hpbGQgcmVkaXJlY3Rpb24gLT4gIiA8PCBkLT5tX3JlZGlyZWN0VVJM
IDw8IGVuZGw7Ci0gICAgZC0+bV9yZWRpcmVjdGlvblRpbWVyLnN0YXJ0KCAoaW50KSgxMDAwICog
ZC0+bV9kZWxheVJlZGlyZWN0KSwgdHJ1ZSApOwotICB9CitpZiAoZC0+bV9zY2hlZHVsZWRSZWRp
cmVjdGlvbiAhPSBub1JlZGlyZWN0aW9uU2NoZWR1bGVkICYmICFkLT5tX3JlZGlyZWN0aW9uVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICBkLT5tX3JlZGlyZWN0aW9uVGltZXIuc3RhcnQoIChpbnQpKDEw
MDAgKiBkLT5tX2RlbGF5UmVkaXJlY3QpLCB0cnVlKTsKIH0KIAogdm9pZCBGcmFtZTo6c2xvdENo
aWxkU3RhcnRlZCggS0lPOjpKb2IgKmpvYiApCkBAIC0xOTMzLDI1ICsxOTE2LDE2IEBAIENoaWxk
RnJhbWUgKkZyYW1lOjpjaGlsZEZyYW1lKCBjb25zdCBRT2IKIAogRnJhbWUgKkZyYW1lOjpmaW5k
RnJhbWUoIGNvbnN0IFFTdHJpbmcgJmYgKQogewotCiAgIC8vICMjIyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9odG1sNC9hcHBlbmRpeC9ub3Rlcy5odG1sI25vdGVzLWZyYW1lcwogICBDb25zdEZyYW1l
SXQgaXQgPSBkLT5tX2ZyYW1lcy5maW5kKCBmICk7Ci0gIGlmICggaXQgPT0gZC0+bV9mcmFtZXMu
ZW5kKCkgKQotICB7Ci0gICAgLy9rZERlYnVnKCkgPDwgIkZyYW1lOjpmaW5kRnJhbWUgZnJhbWUg
IiA8PCBmIDw8ICIgbm90IGZvdW5kIiA8PCBlbmRsOworICBpZiAoaXQgPT0gZC0+bV9mcmFtZXMu
ZW5kKCkpCiAgICAgcmV0dXJuIDBMOwotICB9CiAgIGVsc2UgewogICAgIE9iamVjdENvbnRlbnRz
ICpwID0gKCppdCkubV9mcmFtZTsKLSAgICBpZiAoIHAgJiYgcC0+aW5oZXJpdHMoICJGcmFtZSIg
KSkKLSAgICB7Ci0gICAgICAvL2tkRGVidWcoKSA8PCAiRnJhbWU6OmZpbmRGcmFtZSBmcmFtZSAi
IDw8IGYgPDwgIiBpcyBhIEZyYW1lLCBvayIgPDwgZW5kbDsKKyAgICBpZiAocCAmJiBwLT5pbmhl
cml0cygiRnJhbWUiKSkKICAgICAgIHJldHVybiAoRnJhbWUqKXA7Ci0gICAgfQogICAgIGVsc2UK
LSAgICB7CiAgICAgICByZXR1cm4gMEw7Ci0gICAgfQogICB9CiB9CiAKQEAgLTI1NDAsOSArMjUx
NCw2IEBAIHZvaWQgRnJhbWU6OmNsZWFyVHlwaW5nU3R5bGUoKQogCiBRVmFyaWFudCBGcmFtZTo6
ZXhlY3V0ZVNjcmlwdChRU3RyaW5nIGZpbGVuYW1lLCBpbnQgYmFzZUxpbmUsIE5vZGVJbXBsICpu
LCBjb25zdCBRU3RyaW5nICZzY3JpcHQpCiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1
Zyg2MDcwKSA8PCAiZXhlY3V0ZVNjcmlwdDogZmlsZW5hbWU9IiA8PCBmaWxlbmFtZSA8PCAiIGJh
c2VMaW5lPSIgPDwgYmFzZUxpbmUgPDwgIiBzY3JpcHQ9IiA8PCBzY3JpcHQgPDwgZW5kbDsKLSNl
bmRpZgogICBLSlNQcm94eUltcGwgKnByb3h5ID0galNjcmlwdCgpOwogCiAgIGlmICghcHJveHkp
Cg==
</data>
<flag name="review"
          id="1324"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>