<?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>52170</bug_id>
          
          <creation_ts>2011-01-10 13:34:22 -0800</creation_ts>
          <short_desc>[GTK] Remove unecessary RenderThemeGtk and WidgetRenderingContext code</short_desc>
          <delta_ts>2011-01-10 14:05:08 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>50820</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>331900</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 13:34:22 -0800</bug_when>
    <thetext>Now that the GtkStyleContext port is complete, we can remove all of the WidgetRenderingContext and Gtk 2.x specific RenderThemeGtk code from the GTK+ 3.x port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331906</commentid>
    <comment_count>1</comment_count>
      <attachid>78444</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 13:44:38 -0800</bug_when>
    <thetext>Created attachment 78444
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331922</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-10 13:52:28 -0800</bug_when>
    <thetext>Attachment 78444 did not build on gtk:
Build output: http://queues.webkit.org/results/7405130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331925</commentid>
    <comment_count>3</comment_count>
      <attachid>78448</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 13:57:48 -0800</bug_when>
    <thetext>Created attachment 78448
Patch including new WidgetRenderingContext.cpp

For some reason webkit-patch isn&apos;t picking up the file move WidgetRenderingContextGtk2.cpp -&gt; WidgetRenderingContext.cpp. I&apos;ve uploaded the patch manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331930</commentid>
    <comment_count>4</comment_count>
      <attachid>78448</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2011-01-10 14:02:06 -0800</bug_when>
    <thetext>Comment on attachment 78448
Patch including new WidgetRenderingContext.cpp

Sooooo, holy crap and stuff. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331932</commentid>
    <comment_count>5</comment_count>
      <attachid>78448</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 14:05:04 -0800</bug_when>
    <thetext>Comment on attachment 78448
Patch including new WidgetRenderingContext.cpp

Clearing flags on attachment: 78448

Committed r75437: &lt;http://trac.webkit.org/changeset/75437&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331933</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-01-10 14:05:08 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78444</attachid>
            <date>2011-01-10 13:44:38 -0800</date>
            <delta_ts>2011-01-10 13:57:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52170-20110110134439.patch</filename>
            <type>text/plain</type>
            <size>76790</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZjFiMjlhNTkyM2Y1ZWIzNDgyYThjMjVmNzgzYTNhZWY1N2M0NDE0Li44
Y2Y3NDg3ZWJiMGI0YTFjZTYzM2NlYzlkYjdlZTE3Mzk5NmQzZDU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDggQEAKKzIwMTEtMDEtMTAgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIFJlbW92ZSB1bmVjZXNzYXJ5IFJlbmRlclRoZW1lR3RrIGFuZCBXaWRnZXRSZW5kZXJp
bmdDb250ZXh0IGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTUyMTcwCisKKyAgICAgICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNvZGUgZnJvbSBSZW5k
ZXJUaGVtZUd0azMgYW5kIFJlbmRlclRoZW1lR3RrIG5vdyB0aGF0IHRoZQorICAgICAgICBHdGtT
dHlsZUNvbnRleHQgcG9ydCBpcyBjb21wbGV0ZS4gQWxzbyByZW1vdmUgV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dEd0azMgYW5kCisgICAgICAgIG1vdmUgV2lkZ2V0UmVuZGVyaW5nUmVuZGVyaW5nQ29u
dGV4dEd0azIgdG8gV2lkZ2V0UmVuZGVyaW5nQ29udGV4dCBhbmQgbWFrZSBpdAorICAgICAgICBH
VEsrIDIueCBvbmx5LiBTb21lIG1ldGhvZHMgaGF2ZSBiZWVuIG1vdmVkIHRvIFJlbmRlclRoZW1l
R3RrMiBzaW5jZSB0aGV5IGFyZQorICAgICAgICBHVEsrIDIueCBvbmx5IG5vdy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFuZ2UgZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBSZW1vdmUgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0
azMgYW5kIGd0azNkcmF3aW5nLmMKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3Rr
KToKKyAgICAgICAgKFdlYkNvcmU6Omd0a0ljb25TdGF0ZSk6IE1hZGUgdGhpcyBtZXRob2Qgc3Rh
dGljLiBJdCBpc24ndCB1c2VkIG91dHNpZGUgUmVuZGVyVGhlbWVHdGsuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKTog
VXBkYXRlZCB0byByZWZlbGN0IGd0a0ljb25TdGF0ZSBjaGFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24pOiBEaXR0
bworICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oOiBNb3ZlIGEgZmV3IG1l
dGhvZHMgd2hpY2ggYXJlIG5vdyBHVEsrIDIueCBvbmx5LgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9SZW5kZXJUaGVtZUd0azIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6
OnBsYXRmb3JtSW5pdCk6IEFkZGVkIHRoaXMgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24gbWV0aG9k
CisgICAgICAgIHRoYXQgaXMgb25seSB1c2VkIGZvciBHVEsrIDIueCBhdCB0aGUgbW9tZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0ayk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Z2V0R3RrU3RhdGVUeXBlKTogTWFkZSB0aGlzIG1ldGhvZCBz
dGF0aWMuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z2V0SW5kaWNhdG9yTWV0
cmljcyk6IE1vdmVkIHRoaXMgaGVyZSBmcm9tIFJlbmRlclRoZW1lR3RrLgorICAgICAgICAoV2Vi
Q29yZTo6c2V0VG9nZ2xlU2l6ZSk6IFVwZGF0ZWQgdG8gcmVmbGVjdCBjaGFuZ2VzIHRvIGdldEd0
a1N0YXRlVHlwZS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludEJ1dHRv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVy
VHJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNs
aWRlclRodW1iKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
My5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z3RrU2Nyb2xsYmFyU3R5
bGUpOiBNb3ZlZCB0byB0aGUgdG9wIG9mIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5pdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0ayk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycyk6IENoYW5nZWQgdG8gdXNlIHRoZSBHdGtT
dHlsZUNvbnRleHQgQVBJIHRvCisgICAgICAgIGZldGNoIHRoZXNlIGNvbG9ycy4gVGhpcyB3YXMg
dGhlIGxhc3QgZGVwZW5kZW5jeSBvbiB0aGUgb2xkIEFQSS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azIuY3BwLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0Lmg6IE1hZGUgR1RLKyAyLnggb25s
eS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9ndGszZHJhd2luZy5jOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmg6IE1hZGUgR1RLKyAyLnggb25s
eS4KKwogMjAxMS0wMS0xMCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpp
bmRleCAwOWEyZWQ0NGUyYTQyNTQzZTgxMmJiMDk4MDY4NWQ0YTJhNGMwNzdhLi5hMjQyZmRhMzI0
OTVlYzE0MzM5ZmQ0YmY1MTNiMzQwM2Q1ZGZhMTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAt
MzcwMCw3ICszNzAwLDYgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HUmVmUHRyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGsyZHJh
d2luZy5jIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYyBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaCBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQuaCBcCkBAIC0zNzM4LDggKzM3MzcsNyBAQCB3ZWJj
b3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UZW1wb3Jh
cnlMaW5rU3R1YnMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2hlZWxFdmVu
dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRHdGsuY3BwIFwK
LQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azIu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dEd0azMuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJp
bmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZURlY29kZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggNmE0MDI5ZTVlZGY1MDA4YjQxZGQ3YTJh
NTUzMWUzZGFmOTNhYzNhOC4uYzJmNmViODgzZTRhNDFhZTI0MWYzNGRjYzk4ZDQzNzdlNmNjZmVk
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3Bw
CkBAIC0xMDEsNzMgKzEwMSwyMiBAQCBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVt
ZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCiAgICAgcmV0dXJuIHJ0OwogfQogCi1zdGF0aWMg
aW50IG1vekd0a1JlZkNvdW50ID0gMDsKLQogUmVuZGVyVGhlbWVHdGs6OlJlbmRlclRoZW1lR3Rr
KCkKLSAgICA6IG1fZ3RrV2luZG93KDApCi0gICAgLCBtX2d0a0NvbnRhaW5lcigwKQotICAgICwg
bV9ndGtCdXR0b24oMCkKLSAgICAsIG1fZ3RrRW50cnkoMCkKLSAgICAsIG1fZ3RrVHJlZVZpZXco
MCkKLSAgICAsIG1fZ3RrVlNjYWxlKDApCi0gICAgLCBtX2d0a0hTY2FsZSgwKQotICAgICwgbV9w
YW5lbENvbG9yKENvbG9yOjp3aGl0ZSkKKyAgICA6IG1fcGFuZWxDb2xvcihDb2xvcjo6d2hpdGUp
CiAgICAgLCBtX3NsaWRlckNvbG9yKENvbG9yOjp3aGl0ZSkKICAgICAsIG1fc2xpZGVyVGh1bWJD
b2xvcihDb2xvcjo6d2hpdGUpCiAgICAgLCBtX21lZGlhSWNvblNpemUoMTYpCiAgICAgLCBtX21l
ZGlhU2xpZGVySGVpZ2h0KDE0KQogICAgICwgbV9tZWRpYVNsaWRlclRodW1iV2lkdGgoMTIpCiAg
ICAgLCBtX21lZGlhU2xpZGVyVGh1bWJIZWlnaHQoMTIpCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9O
XzIKLSAgICAsIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAodHJ1ZSkKLSNlbmRpZgogewot
Ci0gICAgbWVtc2V0KCZtX3RoZW1lUGFydHMsIDAsIHNpemVvZihHdGtUaGVtZVBhcnRzKSk7Ci0j
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICBHZGtDb2xvcm1hcCogY29sb3JtYXAgPSBnZGtf
c2NyZWVuX2dldF9yZ2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7Ci0gICAg
aWYgKCFjb2xvcm1hcCkgewotICAgICAgICBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0g
ZmFsc2U7Ci0gICAgICAgIGNvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdF9jb2xvcm1h
cChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkpOwotICAgIH0KLSAgICBtX3RoZW1lUGFydHMuY29s
b3JtYXAgPSBjb2xvcm1hcDsKLSNlbmRpZgotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgTW96aWxs
YSB0aGVtZSBkcmF3aW5nIGNvZGUuCi0gICAgaWYgKCFtb3pHdGtSZWZDb3VudCkgewotICAgICAg
ICBtb3pfZ3RrX2luaXQoKTsKLSAgICAgICAgbW96X2d0a191c2VfdGhlbWVfcGFydHMoJm1fdGhl
bWVQYXJ0cyk7Ci0gICAgfQotICAgICsrbW96R3RrUmVmQ291bnQ7Ci0KKyAgICBwbGF0Zm9ybUlu
aXQoKTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgaW5pdE1lZGlhQ29sb3JzKCk7CiAgICAgaW5p
dE1lZGlhQnV0dG9ucygpOwogI2VuZGlmCiB9CiAKLVJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhl
bWVHdGsoKQotewotICAgIC0tbW96R3RrUmVmQ291bnQ7Ci0KLSAgICBpZiAoIW1vekd0a1JlZkNv
dW50KQotICAgICAgICBtb3pfZ3RrX3NodXRkb3duKCk7Ci0KLSAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3kobV9ndGtXaW5kb3cpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRJbmRpY2F0b3JN
ZXRyaWNzKENvbnRyb2xQYXJ0IHBhcnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0
b3JTcGFjaW5nKSBjb25zdAotewotICAgIEFTU0VSVChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBw
YXJ0ID09IFJhZGlvUGFydCk7Ci0gICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0KSB7Ci0gICAg
ICAgIG1vel9ndGtfY2hlY2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0
b3JTcGFjaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJhZGlvUGFydAot
ICAgIG1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JT
cGFjaW5nKTsKLX0KLQogc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBl
YXJhbmNlKQogewogICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewpAQCAtMjI3LDEzICsxNzYsMTMg
QEAgR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQogICAgIH0KIH0KIAotR3RrU3RhdGVUeXBlIFJlbmRlclRoZW1lR3RrOjpndGtJY29uU3Rh
dGUoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCitzdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0lj
b25TdGF0ZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0KQog
ewotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkpCisgICAgaWYgKCF0aGVtZS0+aXNF
bmFibGVkKHJlbmRlck9iamVjdCkpCiAgICAgICAgIHJldHVybiBHVEtfU1RBVEVfSU5TRU5TSVRJ
VkU7Ci0gICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgIGlmICh0aGVtZS0+aXNQ
cmVzc2VkKHJlbmRlck9iamVjdCkpCiAgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZFOwot
ICAgIGlmIChpc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAgICBpZiAodGhlbWUtPmlzSG92ZXJl
ZChyZW5kZXJPYmplY3QpKQogICAgICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hUOwogCiAg
ICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7CkBAIC0zMTgsNyArMjY3LDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWMKIHsKICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2Nr
SWNvbihHVEtfVFlQRV9FTlRSWSwgR1RLX1NUT0NLX0ZJTkQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0
eWxlKCktPmRpcmVjdGlvbigpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtJY29uU3RhdGUocmVuZGVyT2JqZWN0KSwgR1RLX0lDT05fU0laRV9NRU5VKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUo
dGhpcywgcmVuZGVyT2JqZWN0KSwgR1RLX0lDT05fU0laRV9NRU5VKTsKICAgICBwYWludEdka1Bp
eGJ1ZihwYWludEluZm8uY29udGV4dCwgaWNvbi5nZXQoKSwgY2VudGVyUmVjdFZlcnRpY2FsbHlJ
blBhcmVudElucHV0RWxlbWVudChyZW5kZXJPYmplY3QsIHJlY3QpKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CkBAIC0zMzgsNyArMjg3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY28KIHsKICAg
ICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNvbiA9IGdldFN0b2NrSWNvbihHVEtfVFlQRV9FTlRSWSwg
R1RLX1NUT0NLX0NMRUFSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRl
KHJlbmRlck9iamVjdCksIEdUS19JQ09OX1NJWkVfTUVOVSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJlbmRlck9iamVjdCks
IEdUS19JQ09OX1NJWkVfTUVOVSk7CiAgICAgcGFpbnRHZGtQaXhidWYocGFpbnRJbmZvLmNvbnRl
eHQsIGljb24uZ2V0KCksIGNlbnRlclJlY3RWZXJ0aWNhbGx5SW5QYXJlbnRJbnB1dEVsZW1lbnQo
cmVuZGVyT2JqZWN0LCByZWN0KSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDUwLDcgKzM5
OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4CiB7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+
IGljb24gPSBnZXRTdG9ja0ljb24oR1RLX1RZUEVfQ09OVEFJTkVSLCBpY29uTmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZShyZW5kZXJPYmplY3QpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCBy
ZW5kZXJPYmplY3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldE1lZGlhQnV0dG9uSWNvblNpemUobV9tZWRpYUljb25TaXplKSk7CiAgICAgSW50UG9pbnQg
aWNvblBvaW50KHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAy
LAogICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbV9t
ZWRpYUljb25TaXplKSAvIDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuaAppbmRleCBlZjFkZjA1NzUwMTQ0ZDllZWVkZGUyOTM4NDJhMWU2ZTllNGY1YjU0
Li43NGI4OGIzNGQ4Zjc0Mzg1NjZkMTZhMWZhZjYwN2E4NzM4YjFkODQ4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaApAQCAtMjksOSArMjksMTQgQEAK
ICNkZWZpbmUgUmVuZGVyVGhlbWVHdGtfaAogCiAjaW5jbHVkZSAiR1JlZlB0ci5oIgotI2luY2x1
ZGUgImd0a2RyYXdpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogCisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKyNpbmNsdWRlICJndGtkcmF3aW5nLmgiCisjZW5kaWYKKwordHlwZWRl
ZiBndWxvbmcgR1R5cGU7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyVGhl
bWVHdGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewpAQCAtODYsMTAgKzkxLDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBj
dXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwogI2VuZGlmCiAKLSAgICB2b2lkIGdl
dEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBp
bmRpY2F0b3JTcGFjaW5nKSBjb25zdDsKLQogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAg
R3RrV2lkZ2V0KiBndGtTY3JvbGxiYXIoKTsKKyAgICBzdGF0aWMgdm9pZCBnZXRJbmRpY2F0b3JN
ZXRyaWNzKENvbnRyb2xQYXJ0LCBpbnQmIGluZGljYXRvclNpemUsIGludCYgaW5kaWNhdG9yU3Bh
Y2luZyk7CiAjZWxzZQogICAgIEd0a1N0eWxlQ29udGV4dCogZ3RrU2Nyb2xsYmFyU3R5bGUoKTsK
ICNlbmRpZgpAQCAtMTYzLDQ1ICsxNjcsNDEgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKIHByaXZh
dGU6Ci0gICAgR3RrV2lkZ2V0KiBndGtCdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0
a0VudHJ5KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtUcmVlVmlldygpIGNvbnN0OwotICAg
IEd0a1dpZGdldCogZ3RrVlNjYWxlKCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0KiBndGtIU2NhbGUo
KSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0NvbnRhaW5lcigpIGNvbnN0OwotCi0gICAgdm9p
ZCBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNv
bnN0OwotICAgIEd0a1N0YXRlVHlwZSBnZXRHdGtTdGF0ZVR5cGUoUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpOwotICAgIGJvb2wgcGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlLCBSZW5k
ZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgZmxh
Z3MgPSAwKTsKKyAgICB2b2lkIHBsYXRmb3JtSW5pdCgpOwogI2lmIEVOQUJMRShWSURFTykKICAg
ICBib29sIHBhaW50TWVkaWFCdXR0b24oUmVuZGVyT2JqZWN0KiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIGljb25OYW1lKTsKICNlbmRpZgotICAgIEd0a1N0
YXRlVHlwZSBndGtJY29uU3RhdGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgc3RhdGljIHZvaWQgc2V0
VGV4dElucHV0Qm9yZGVycyhSZW5kZXJTdHlsZSopOwogICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBn
ZXRTdG9ja0ljb24oR1R5cGUsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwg
Z2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSk7CiAKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtXaW5kb3c7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrQ29udGFpbmVyOwotICAgIG11
dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9n
dGtFbnRyeTsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtUcmVlVmlldzsKLSAgICBtdXRh
YmxlIEd0a1dpZGdldCogbV9ndGtWU2NhbGU7Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3Rr
SFNjYWxlOwotCiAgICAgbXV0YWJsZSBDb2xvciBtX3BhbmVsQ29sb3I7CiAgICAgbXV0YWJsZSBD
b2xvciBtX3NsaWRlckNvbG9yOwogICAgIG11dGFibGUgQ29sb3IgbV9zbGlkZXJUaHVtYkNvbG9y
OwotCiAgICAgY29uc3QgaW50IG1fbWVkaWFJY29uU2l6ZTsKICAgICBjb25zdCBpbnQgbV9tZWRp
YVNsaWRlckhlaWdodDsKICAgICBjb25zdCBpbnQgbV9tZWRpYVNsaWRlclRodW1iV2lkdGg7CiAg
ICAgY29uc3QgaW50IG1fbWVkaWFTbGlkZXJUaHVtYkhlaWdodDsKIAotICAgIEd0a1RoZW1lUGFy
dHMgbV90aGVtZVBhcnRzOwogI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCisgICAgdm9pZCBzZXR1
cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKEd0a1dpZGdldCosIEd0a1dpZGdldCopIGNvbnN0Owor
ICAgIGJvb2wgcGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlLCBSZW5kZXJPYmpl
Y3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgaW50IGZsYWdzID0gMCk7Cisg
ICAgR3RrVGhlbWVQYXJ0cyBtX3RoZW1lUGFydHM7CisgICAgR3RrV2lkZ2V0KiBndGtCdXR0b24o
KSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0
KiBndGtUcmVlVmlldygpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrVlNjYWxlKCkgY29uc3Q7
CisgICAgR3RrV2lkZ2V0KiBndGtIU2NhbGUoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0Nv
bnRhaW5lcigpIGNvbnN0OworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1dpbmRvdzsKKyAg
ICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb250YWluZXI7CisgICAgbXV0YWJsZSBHdGtXaWRn
ZXQqIG1fZ3RrQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0VudHJ5OworICAg
IG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1RyZWVWaWV3OworICAgIG11dGFibGUgR3RrV2lkZ2V0
KiBtX2d0a1ZTY2FsZTsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtIU2NhbGU7CiAgICAg
Ym9vbCBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwOwotI2VuZGlmCiAgICAgZnJpZW5kIGNs
YXNzIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ7CisjZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAKaW5kZXggNjIzYjk3MGQ2
ZWI3ZTk2NWY3NDA1ZGUzMWEzMGJjNWNjZTU0NTljMi4uMmViY2IwZmVhNGJhZWVhZGEyZmY2ZGFk
OGE1NzdiMTc1ZmRjZDJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrMi5jcHAKQEAgLTQ5LDYgKzQ5LDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IC8vIFRoaXMgaXMgbm90IGEgc3RhdGljIG1ldGhvZCwgYmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lk
IGhhdmluZyBHVEsrIGhlYWRlcnMgaW4gUmVuZGVyVGhlbWVHdGsuaC4KIGV4dGVybiBHdGtUZXh0
RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbik7CiAKK3N0YXRpYyBpbnQg
bW96R3RrUmVmQ291bnQgPSAwOwordm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkK
K3sKKyAgICBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0gdHJ1ZTsKKyAgICBtX2d0a1dp
bmRvdyA9IDA7CisgICAgbV9ndGtDb250YWluZXIgPSAwOworICAgIG1fZ3RrQnV0dG9uID0gMDsK
KyAgICBtX2d0a0VudHJ5ID0gMDsKKyAgICBtX2d0a1RyZWVWaWV3ID0gMDsKKyAgICBtX2d0a1ZT
Y2FsZSA9IDA7CisgICAgbV9ndGtIU2NhbGUgPSAwOworCisgICAgbWVtc2V0KCZtX3RoZW1lUGFy
dHMsIDAsIHNpemVvZihHdGtUaGVtZVBhcnRzKSk7CisgICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFw
ID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV9jb2xvcm1hcChnZGtfc2NyZWVuX2dldF9kZWZhdWx0KCkp
OworICAgIGlmICghY29sb3JtYXApIHsKKyAgICAgICAgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xv
cm1hcCA9IGZhbHNlOworICAgICAgICBjb2xvcm1hcCA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHRf
Y29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKKyAgICB9CisgICAgbV90aGVtZVBh
cnRzLmNvbG9ybWFwID0gY29sb3JtYXA7CisKKyAgICAvLyBJbml0aWFsaXplIHRoZSBNb3ppbGxh
IHRoZW1lIGRyYXdpbmcgY29kZS4KKyAgICBpZiAoIW1vekd0a1JlZkNvdW50KSB7CisgICAgICAg
IG1vel9ndGtfaW5pdCgpOworICAgICAgICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cygmbV90aGVt
ZVBhcnRzKTsKKyAgICB9CisgICAgKyttb3pHdGtSZWZDb3VudDsKK30KKworUmVuZGVyVGhlbWVH
dGs6On5SZW5kZXJUaGVtZUd0aygpCit7CisgICAgLS1tb3pHdGtSZWZDb3VudDsKKworICAgIGlm
ICghbW96R3RrUmVmQ291bnQpCisgICAgICAgIG1vel9ndGtfc2h1dGRvd24oKTsKKworICAgIGlm
IChtX2d0a1dpbmRvdykKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZ3RrV2luZG93KTsK
K30KKwogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNv
bG9ycygpCiB7CkBAIC02MywxMyArMTAyLDEzIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKQogewogfQogCi1HdGtT
dGF0ZVR5cGUgUmVuZGVyVGhlbWVHdGs6OmdldEd0a1N0YXRlVHlwZShSZW5kZXJPYmplY3QqIG9i
amVjdCkKK3N0YXRpYyBHdGtTdGF0ZVR5cGUgZ2V0R3RrU3RhdGVUeXBlKFJlbmRlclRoZW1lR3Rr
KiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgaWYgKCFpc0VuYWJsZWQob2Jq
ZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChvYmplY3QpKQorICAgIGlmICghdGhlbWUtPmlzRW5h
YmxlZChvYmplY3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChvYmplY3QpKQogICAgICAg
ICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGlmIChpc1ByZXNzZWQob2JqZWN0
KSkKKyAgICBpZiAodGhlbWUtPmlzUHJlc3NlZChvYmplY3QpKQogICAgICAgICByZXR1cm4gR1RL
X1NUQVRFX0FDVElWRTsKLSAgICBpZiAoaXNIb3ZlcmVkKG9iamVjdCkpCisgICAgaWYgKHRoZW1l
LT5pc0hvdmVyZWQob2JqZWN0KSkKICAgICAgICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdIVDsK
ICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KQEAgLTEwMiw2ICsxNDEsMTggQEAgYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QoR3RrVGhlbWVXaWRnZXRUeXBlIHR5
cGUsIFJlbmRlck9iamVjdCogcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSkpOwogfQogCit2b2lkIFJlbmRlclRoZW1lR3RrOjpnZXRJbmRpY2F0b3JNZXRyaWNzKENv
bnRyb2xQYXJ0IHBhcnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5n
KQoreworICAgIEFTU0VSVChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFy
dCk7CisgICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0KSB7CisgICAgICAgIG1vel9ndGtfY2hl
Y2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFJhZGlvUGFydAorICAgIG1vel9ndGtfcmFk
aW9fZ2V0X21ldHJpY3MoJmluZGljYXRvclNpemUsICZpbmRpY2F0b3JTcGFjaW5nKTsKK30KKwog
c3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJl
bmRlclN0eWxlKiBzdHlsZSwgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkKIHsKICAgICAvLyBUaGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFu
Z2UgdGhlbS4KQEAgLTExMCw3ICsxNjEsNyBAQCBzdGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKGNv
bnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBDb250cgogCiAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgbm90IGNvcnJlY3QgdXNlIG9mIGluZGljYXRv
clNpemUgYW5kIGluZGljYXRvclNwYWNpbmcuCiAgICAgZ2ludCBpbmRpY2F0b3JTaXplLCBpbmRp
Y2F0b3JTcGFjaW5nOwotICAgIHRoZW1lLT5nZXRJbmRpY2F0b3JNZXRyaWNzKGFwcGVhcmFuY2Us
IGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmcpOworICAgIFJlbmRlclRoZW1lR3RrOjpn
ZXRJbmRpY2F0b3JNZXRyaWNzKGFwcGVhcmFuY2UsIGluZGljYXRvclNpemUsIGluZGljYXRvclNw
YWNpbmcpOwogCiAgICAgLy8gT3RoZXIgcG9ydHMgaGFyZC1jb2RlIHRoaXMgdG8gMTMsIGJ1dCBH
VEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5kIHRoZSBuYXRpdmUgbG9vay4KICAgICAvLyBJdCBjb3Vs
ZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdmFsdWVzIG90aGVyIHRoYW4gMTMgYWN0
dWFsbHkgYnJlYWsgc2l0ZSBjb21wYXRpYmlsaXR5LgpAQCAtMTUxLDcgKzIwMiw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvCiAgICAgSW50UmVjdCBidXR0b25SZWN0KEludFBvaW50KCksIHJl
Y3Quc2l6ZSgpKTsKICAgICBJbnRSZWN0IGZvY3VzUmVjdChidXR0b25SZWN0KTsKIAotICAgIEd0
a1N0YXRlVHlwZSBzdGF0ZSA9IGdldEd0a1N0YXRlVHlwZShvYmplY3QpOworICAgIEd0a1N0YXRl
VHlwZSBzdGF0ZSA9IGdldEd0a1N0YXRlVHlwZSh0aGlzLCBvYmplY3QpOwogICAgIGd0a193aWRn
ZXRfc2V0X3N0YXRlKHdpZGdldCwgc3RhdGUpOwogICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlv
bih3aWRnZXQsIGd0a1RleHREaXJlY3Rpb24ob2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkp
OwogCkBAIC0yNjUsNyArMzE2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJU
cmFjayhSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmYKICAgICBXaWRn
ZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKICAg
ICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Qm94KHRyb3VnaFJlY3QsIHdpZGdldCwgR1RLX1NUQVRF
X0FDVElWRSwgR1RLX1NIQURPV19PVVQsICJ0cm91Z2giKTsKICAgICBpZiAoaXNGb2N1c2VkKG9i
amVjdCkpCi0gICAgICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRGb2N1cyhJbnRSZWN0KEludFBv
aW50KCksIHJlY3Quc2l6ZSgpKSwgd2lkZ2V0LCBnZXRHdGtTdGF0ZVR5cGUob2JqZWN0KSwgInRy
b3VnaCIpOworICAgICAgICB3aWRnZXRDb250ZXh0Lmd0a1BhaW50Rm9jdXMoSW50UmVjdChJbnRQ
b2ludCgpLCByZWN0LnNpemUoKSksIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVj
dCksICJ0cm91Z2giKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTI5OCw3ICszNDksNyBA
QCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogb2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIGluZgogICAgIC8vIG9uIHRoZW0uIAogICAgIEludFJlY3Qg
dGh1bWJSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgpKTsKICAgICBXaWRnZXRSZW5kZXJpbmdD
b250ZXh0IHdpZGdldENvbnRleHQoaW5mby5jb250ZXh0LCByZWN0KTsKLSAgICB3aWRnZXRDb250
ZXh0Lmd0a1BhaW50U2xpZGVyKHRodW1iUmVjdCwgd2lkZ2V0LCBnZXRHdGtTdGF0ZVR5cGUob2Jq
ZWN0KSwgR1RLX1NIQURPV19PVVQsIGRldGFpbCwgb3JpZW50YXRpb24pOworICAgIHdpZGdldENv
bnRleHQuZ3RrUGFpbnRTbGlkZXIodGh1bWJSZWN0LCB3aWRnZXQsIGdldEd0a1N0YXRlVHlwZSh0
aGlzLCBvYmplY3QpLCBHVEtfU0hBRE9XX09VVCwgZGV0YWlsLCBvcmllbnRhdGlvbik7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUd0azMuY3BwCmluZGV4IDI3MGEwM2I1N2M1MDg2MWYxZmRhMzc5Y2JkZGViMGQ5YWNl
YzRmZTYuLjFiMmNiMzhjNjI4ZGI0ZGE4ZGNjYTlkMzFhNWQ4ODBkMzQwY2IzMWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCkBAIC0zNiw4
ICszNiw2IEBACiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4dERpcmVj
dGlvbi5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCi0jaW5jbHVkZSAiV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKICNpbmNsdWRl
IDxjbWF0aD4KICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAt
OTQsMTUgKzkyLDMzIEBAIHN0YXRpYyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChH
VHlwZSB3aWRnZXRUeXBlKQogICAgIHJldHVybiBjb250ZXh0LmdldCgpOwogfQogCitHdGtTdHls
ZUNvbnRleHQqIFJlbmRlclRoZW1lR3RrOjpndGtTY3JvbGxiYXJTdHlsZSgpCit7CisgICAgcmV0
dXJuIGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ1JPTExCQVIpOworfQorCiAvLyBUaGlzIGlz
IG5vdCBhIHN0YXRpYyBtZXRob2QsIGJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBoYXZpbmcgR1RL
KyBoZWFkZXJzIGluIFJlbmRlclRoZW1lR3RrLmguCiBleHRlcm4gR3RrVGV4dERpcmVjdGlvbiBn
dGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24pOwogCit2b2lkIFJlbmRlclRoZW1lR3RrOjpw
bGF0Zm9ybUluaXQoKQoreworfQorCitSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKCkK
K3sKK30KKwogdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29sb3JzKCkKIHsKLSAgICBH
dGtTdHlsZSogc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShHVEtfV0lER0VUKGd0a0NvbnRh
aW5lcigpKSk7Ci0gICAgbV9wYW5lbENvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9OT1JNQUxd
OwotICAgIG1fc2xpZGVyQ29sb3IgPSBzdHlsZS0+YmdbR1RLX1NUQVRFX0FDVElWRV07Ci0gICAg
bV9zbGlkZXJUaHVtYkNvbG9yID0gc3R5bGUtPmJnW0dUS19TVEFURV9TRUxFQ1RFRF07CisgICAg
R2RrUkdCQSBjb2xvcjsKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRhaW5lckNvbnRleHQgPSBn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJTkVSKTsKKworICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFH
X05PUk1BTCwgJmNvbG9yKTsKKyAgICBtX3BhbmVsQ29sb3IgPSBjb2xvcjsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RB
VEVfRkxBR19BQ1RJVkUsICZjb2xvcik7CisgICAgbV9zbGlkZXJDb2xvciA9IGNvbG9yOworICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQs
IEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmY29sb3IpOworICAgIG1fc2xpZGVyVGh1bWJDb2xv
ciA9IGNvbG9yOwogfQogCiBzdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9jdXMoR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0LCBJbnRSZWN0JiByZWN0KQpAQCAtMTU4LDQ1ICsxNzQsNiBAQCB2b2lk
IFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIHJl
bmRlck9iamVjdCwgSW50UmVjdAogICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LCByZWN0
KTsKIH0KIAotR3RrU3RhdGVUeXBlIFJlbmRlclRoZW1lR3RrOjpnZXRHdGtTdGF0ZVR5cGUoUmVu
ZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCFpc0VuYWJsZWQob2JqZWN0KSB8fCBpc1Jl
YWRPbmx5Q29udHJvbChvYmplY3QpKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lU
SVZFOwotICAgIGlmIChpc1ByZXNzZWQob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFU
RV9BQ1RJVkU7Ci0gICAgaWYgKGlzSG92ZXJlZChvYmplY3QpKQotICAgICAgICByZXR1cm4gR1RL
X1NUQVRFX1BSRUxJR0hUOwotICAgIHJldHVybiBHVEtfU1RBVEVfTk9STUFMOwotfQotCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUgdHlw
ZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgaW50IGZsYWdzKQotewotICAgIC8vIFBhaW50aW5nIGlzIGRp
c2FibGVkIHNvIGp1c3QgY2xhaW0gdG8gaGF2ZSBzdWNjZWVkZWQKLSAgICBpZiAoY29udGV4dC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHdGtXaWRn
ZXRTdGF0ZSB3aWRnZXRTdGF0ZTsKLSAgICB3aWRnZXRTdGF0ZS5hY3RpdmUgPSBpc1ByZXNzZWQo
cmVuZGVyT2JqZWN0KTsKLSAgICB3aWRnZXRTdGF0ZS5mb2N1c2VkID0gaXNGb2N1c2VkKHJlbmRl
ck9iamVjdCk7Ci0KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgzNjQKLSAgICAvLyBUaGUgTW96aWxsYSB0aGVtZSBkcmF3aW5nIGNvZGUsIG9ubHkgcGFp
bnRzIGEgYnV0dG9uIGFzIHByZXNzZWQgd2hlbiBpdCdzIHByZXNzZWQgCi0gICAgLy8gd2hpbGUg
aG92ZXJlZC4gVW50aWwgd2UgbW92ZSBhd2F5IGZyb20gdGhlIE1vemlsYSBjb2RlLCB3b3JrLWFy
b3VuZCB0aGUgaXNzdWUgYnkKLSAgICAvLyBmb3JjaW5nIGEgcHJlc3NlZCBidXR0b24gaW50byB0
aGUgaG92ZXJlZCBzdGF0ZS4gVGhpcyBlbnN1cmVzIHRoYXQgYnV0dG9ucyBhY3RpdmF0ZWQKLSAg
ICAvLyB2aWEgdGhlIGtleWJvYXJkIGhhdmUgdGhlIHByb3BlciByZW5kZXJpbmcuCi0gICAgd2lk
Z2V0U3RhdGUuaW5Ib3ZlciA9IGlzSG92ZXJlZChyZW5kZXJPYmplY3QpIHx8ICh0eXBlID09IE1P
Wl9HVEtfQlVUVE9OICYmIGlzUHJlc3NlZChyZW5kZXJPYmplY3QpKTsKLQotICAgIC8vIEZJWE1F
OiBEaXNhYmxlZCBkb2VzIG5vdCBhbHdheXMgZ2l2ZSB0aGUgY29ycmVjdCBhcHBlYXJhbmNlIGZv
ciBSZWFkT25seQotICAgIHdpZGdldFN0YXRlLmRpc2FibGVkID0gIWlzRW5hYmxlZChyZW5kZXJP
YmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCk7Ci0gICAgd2lkZ2V0U3Rh
dGUuaXNEZWZhdWx0ID0gZmFsc2U7Ci0gICAgd2lkZ2V0U3RhdGUuY2FuRGVmYXVsdCA9IGZhbHNl
OwotICAgIHdpZGdldFN0YXRlLmRlcHJlc3NlZCA9IGZhbHNlOwotCi0gICAgV2lkZ2V0UmVuZGVy
aW5nQ29udGV4dCB3aWRnZXRDb250ZXh0KGNvbnRleHQsIHJlY3QpOwotICAgIHJldHVybiAhd2lk
Z2V0Q29udGV4dC5wYWludE1vemlsbGFXaWRnZXQodHlwZSwgJndpZGdldFN0YXRlLCBmbGFncywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJl
Y3Rpb24ocmVuZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSkpOwotfQotCiBzdGF0aWMg
dm9pZCBzZXRUb2dnbGVTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUq
IHN0eWxlKQogewogICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgpAQCAtODcyLDg2ICs4NDksNiBAQCBDb2xv
ciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0CiAgICAg
fQogfQogCi1zdGF0aWMgdm9pZCBndGtTdHlsZVNldENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtTdHlsZSogcHJldmlvdXMsIFJlbmRlclRoZW1lKiByZW5kZXJUaGVtZSkKLXsKLSAgICAv
LyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBnZXQgY2FsbGVkIG1hbnkg
dGltZXMgZm9yIGEgc2luZ2xlIEdUSysgc3R5bGUgY2hhbmdlIHNpZ25hbC4KLSAgICByZW5kZXJU
aGVtZS0+cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0
azo6c2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihHdGtXaWRnZXQqIHdpZGdldCwgR3RrV2lk
Z2V0KiB3aW5kb3cpIGNvbnN0Ci17Ci0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
Uih3aW5kb3cpLCB3aWRnZXQpOwotICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOwotICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50
IiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpKTsKLQotICAgIC8vIEZJWE1FOiBQZXJoYXBzIHRoaXMg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciB0aGUgY29udGFpbmluZyB3aW5kb3cgb3IgcGFyZW50
IGNvbnRhaW5lci4KLSAgICBnX3NpZ25hbF9jb25uZWN0KHdpZGdldCwgInN0eWxlLXNldCIsIEdf
Q0FMTEJBQ0soZ3RrU3R5bGVTZXRDYWxsYmFjayksIGNvbnN0X2Nhc3Q8UmVuZGVyVGhlbWVHdGsq
Pih0aGlzKSk7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0NvbnRhaW5lcigp
IGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrQ29udGFpbmVyKQotICAgICAgICByZXR1cm4gbV9ndGtD
b250YWluZXI7Ci0KLSAgICBtX2d0a1dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1df
UE9QVVApOwotICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a1dpbmRvdyk7Ci0gICAgZ3RrX3dp
ZGdldF9zZXRfbmFtZShtX2d0a1dpbmRvdywgIk1vemlsbGFHdGtXaWRnZXQiKTsKLQotICAgIG1f
Z3RrQ29udGFpbmVyID0gZ3RrX2ZpeGVkX25ldygpOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9D
b250YWluZXIobV9ndGtDb250YWluZXIsIG1fZ3RrV2luZG93KTsKLSAgICByZXR1cm4gbV9ndGtD
b250YWluZXI7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0J1dHRvbigpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fZ3RrQnV0dG9uKQotICAgICAgICByZXR1cm4gbV9ndGtCdXR0b247
Ci0gICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOwotICAgIHNldHVwV2lkZ2V0QW5k
QWRkVG9Db250YWluZXIobV9ndGtCdXR0b24sIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4g
bV9ndGtCdXR0b247Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0VudHJ5KCkg
Y29uc3QKLXsKLSAgICBpZiAobV9ndGtFbnRyeSkKLSAgICAgICAgcmV0dXJuIG1fZ3RrRW50cnk7
Ci0gICAgbV9ndGtFbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICBzZXR1cFdpZGdldEFuZEFk
ZFRvQ29udGFpbmVyKG1fZ3RrRW50cnksIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9n
dGtFbnRyeTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrVHJlZVZpZXcoKSBj
b25zdAotewotICAgIGlmIChtX2d0a1RyZWVWaWV3KQotICAgICAgICByZXR1cm4gbV9ndGtUcmVl
VmlldzsKLSAgICBtX2d0a1RyZWVWaWV3ID0gZ3RrX3RyZWVfdmlld19uZXcoKTsKLSAgICBzZXR1
cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrVHJlZVZpZXcsIGd0a0NvbnRhaW5lcigpKTsK
LSAgICByZXR1cm4gbV9ndGtUcmVlVmlldzsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0
azo6Z3RrVlNjYWxlKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtWU2NhbGUpCi0gICAgICAgIHJl
dHVybiBtX2d0a1ZTY2FsZTsKLSAgICBtX2d0a1ZTY2FsZSA9IGd0a192c2NhbGVfbmV3KDApOwot
ICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtWU2NhbGUsIGd0a0NvbnRhaW5l
cigpKTsKLSAgICByZXR1cm4gbV9ndGtWU2NhbGU7Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhl
bWVHdGs6Omd0a0hTY2FsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrSFNjYWxlKQotICAgICAg
ICByZXR1cm4gbV9ndGtIU2NhbGU7Ci0gICAgbV9ndGtIU2NhbGUgPSBndGtfaHNjYWxlX25ldygw
KTsKLSAgICBzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFpbmVyKG1fZ3RrSFNjYWxlLCBndGtDb250
YWluZXIoKSk7Ci0gICAgcmV0dXJuIG1fZ3RrSFNjYWxlOwotfQotCi1HdGtTdHlsZUNvbnRleHQq
IFJlbmRlclRoZW1lR3RrOjpndGtTY3JvbGxiYXJTdHlsZSgpCi17Ci0gICAgcmV0dXJuIGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9TQ1JPTExCQVIpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IDczMzQ2NTZi
MmMzZWRkOTVlYjIzZjQ2N2E4NTVlZDc0NTlkNjM2ZGIuLjhiMmEwZTJhMWNjYmViZThhNTRkMmMw
ZTUyYjJhNTRjMTUxYTA0MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaApAQCAtMjIsNiArMjIsOCBAQAogI2lmbmRlZiBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0X2gKICNkZWZpbmUgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9o
CiAKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgorCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgImd0a2RyYXdpbmcuaCIKIApAQCAtNDYsMTUgKzQ4LDExIEBAIHByaXZhdGU6CiAgICAg
R2RrUmVjdGFuZ2xlIG1fcGFpbnRSZWN0OwogICAgIEludFNpemUgbV9leHRyYVNwYWNlOwogICAg
IGJvb2wgbV9oYWRFcnJvcjsKLQotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgR2RrRHJh
d2FibGUqIG1fdGFyZ2V0OwotI2Vsc2UKLSAgICBjYWlyb190KiBtX3RhcmdldDsKLSNlbmRpZgog
CiB9OwogCiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCisjZW5kaWYg
Ly8gV2lkZ2V0UmVuZGVyaW5nQ29udGV4dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjljNGFmNTU5OWE3ODU2ZDlkNDk4NTBmNDk4YTk1ZjdiZGY1
MWY5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldpZGdldFJlbmRl
cmluZ0NvbnRleHQuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0KQotICAg
IDogbV9ncmFwaGljc0NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fdGFyZ2V0UmVjdCh0YXJnZXRS
ZWN0KQotICAgICwgbV9wYWludFJlY3QodGFyZ2V0UmVjdCkKLSAgICAsIG1faGFkRXJyb3IoZmFs
c2UpCi0gICAgLCBtX3RhcmdldChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSkKLXsKLX0KLQot
V2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldpZGdldFJlbmRlcmluZ0NvbnRleHQoKQotewotfQot
Ci1ib29sIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50TW96aWxsYVdpZGdldChHdGtUaGVt
ZVdpZGdldFR5cGUgdHlwZSwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBpbnQgZmxhZ3MsIEd0a1Rl
eHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikKLXsKLSAgICBtX2hhZEVycm9yID0gbW96X2d0a193
aWRnZXRfcGFpbnQodHlwZSwgbV90YXJnZXQsICZtX3BhaW50UmVjdCwgc3RhdGUsIGZsYWdzLCB0
ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7Ci0gICAgcmV0dXJuICFtX2hhZEVycm9y
OwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IElu
dFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBH
dGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2Rr
UmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50
UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OwotICAgIGd0
a19wYWludF9ib3goZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRl
VHlwZSwgc2hhZG93VHlwZSwgd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgZGV0YWlsLCBwYWlu
dFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7
Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRGb2N1cyhjb25zdCBJ
bnRSZWN0JiByZWN0LCBHdGtXaWRnZXQqIHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwg
Y29uc3QgZ2NoYXIqIGRldGFpbCkKLXsKLSAgICBHZGtSZWN0YW5nbGUgcGFpbnRSZWN0ID0geyBt
X3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRSZWN0LnkgKyByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpIH07Ci0gICAgZ3RrX3BhaW50X2ZvY3VzKGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHdpZGdldCwKLSAgICAgICAg
ICAgICAgICAgICAgZGV0YWlsLCBwYWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53
aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7Ci19Ci0KLXZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4
dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQs
IEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3Qg
Z2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgR2RrUmVj
dGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVj
dC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OwotICAgIGd0a19w
YWludF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRl
VHlwZSwgc2hhZG93VHlwZSwgd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBw
YWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRSZWN0LmhlaWdo
dCwgb3JpZW50YXRpb24pOwotfQotCi19Ci0KLSNlbmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGszZHJhd2luZy5jIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0azNkcmF3aW5nLmMKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQzYmRkNTZhZTdlNjk3M2FlMDY5MjI2MDM4NWFlZWY2ODU3MTdmMjku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL2d0azNkcmF3aW5nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjg4
ICswLDAgQEAKLS8qIC0qLSBNb2RlOiBDKys7IHRhYi13aWR0aDogNDsgaW5kZW50LXRhYnMtbW9k
ZTogbmlsOyBjLWJhc2ljLW9mZnNldDogNCAtKi0gKi8KLS8qICoqKioqIEJFR0lOIExJQ0VOU0Ug
QkxPQ0sgKioqKioKLSAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQotICoKLSAq
IFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbgotICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3Qg
dXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCi0gKiB0aGUgTGljZW5zZS4g
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiBodHRwOi8vd3d3Lm1v
emlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAotICogV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNl
bnNlCi0gKiBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxp
bWl0YXRpb25zIHVuZGVyIHRoZQotICogTGljZW5zZS4KLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcwotICogTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRp
b24uCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29w
eXJpZ2h0IChDKSAyMDAyCi0gKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogQ29udHJpYnV0b3Iocyk6Ci0gKiAgQnJpYW4gUnluZXIgPGJyeW5lckBi
cmlhbnJ5bmVyLmNvbT4gIChPcmlnaW5hbCBBdXRob3IpCi0gKiAgUGllcnJlIENoYW5pYWwgPHBf
Y2hAdmVyaXpvbi5uZXQ+Ci0gKiAgTWljaGFlbCBWZW50bm9yIDxtLnZlbnRub3JAZ21haWwuY29t
PgotICogIEFscCBUb2tlciA8YWxwQG51YW50aS5jb20+Ci0gKgotICogQWx0ZXJuYXRpdmVseSwg
dGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YK
LSAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxh
dGVyICh0aGUgIkdQTCIpLCBvcgotICogdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhlICJMR1BMIiksCi0gKiBpbiB3aGljaCBjYXNl
IHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5z
dGVhZAotICogb2YgdGhvc2UgYWJvdmUuIElmIHlvdSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3Vy
IHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIg
dGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8KLSAqIHVzZSB5
b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRp
Y2F0ZSB5b3VyCi0gKiBkZWNpc2lvbiBieSBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBh
bmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZQotICogYW5kIG90aGVyIHByb3Zpc2lvbnMg
cmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQTC4gSWYgeW91IGRvIG5vdCBkZWxldGUKLSAq
IHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBv
ZiB0aGlzIGZpbGUgdW5kZXIKLSAqIHRoZSB0ZXJtcyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRo
ZSBHUEwgb3IgdGhlIExHUEwuCi0gKgotICogKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiog
Ki8KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBwYWludGluZyBmdW5jdGlvbnMgZm9yIGVh
Y2ggb2YgdGhlIGd0azIgd2lkZ2V0cy4KLSAqIEFkYXB0ZWQgZnJvbSB0aGUgZ3RrZHJhd2luZy5j
LCBhbmQgZ3RrKzIuMCBzb3VyY2UuCi0gKi8KLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgot
Ci0jaW5jbHVkZSA8Z2RrL2dka3ByaXZhdGUuaD4KLSNpbmNsdWRlICJndGtkcmF3aW5nLmgiCi0j
aW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLQotI2RlZmluZSBYVEhJQ0tORVNTKHN0eWxlKSAoc3R5bGUtPnh0aGlja25lc3Mp
Ci0jZGVmaW5lIFlUSElDS05FU1Moc3R5bGUpIChzdHlsZS0+eXRoaWNrbmVzcykKLQotc3RhdGlj
IEd0a1RoZW1lUGFydHMgKmdQYXJ0cyA9IE5VTEw7Ci1zdGF0aWMgc3R5bGVfcHJvcF90IHN0eWxl
X3Byb3BfZnVuYzsKLXN0YXRpYyBnYm9vbGVhbiBoYXZlX2Fycm93X3NjYWxpbmc7Ci1zdGF0aWMg
Z2Jvb2xlYW4gaXNfaW5pdGlhbGl6ZWQ7Ci0KLXZvaWQKLW1vel9ndGtfdXNlX3RoZW1lX3BhcnRz
KEd0a1RoZW1lUGFydHMqIHBhcnRzKQotewotICAgIGdQYXJ0cyA9IHBhcnRzOwotfQotCi0vKiBC
ZWNhdXNlIHdlIGhhdmUgc3VjaCBhbiB1bmNvbnZlbnRpb25hbCB3YXkgb2YgZHJhd2luZyB3aWRn
ZXRzLCBzaWduYWwgdG8gdGhlIEdUSyB0aGVtZSBlbmdpbmUKLSAgIHRoYXQgdGhleSBhcmUgZHJh
d2luZyBmb3IgTW96aWxsYSBpbnN0ZWFkIG9mIGEgY29udmVudGlvbmFsIEdUSyBhcHAgc28gdGhl
eSBjYW4gZG8gYW55IHNwZWNpZmljCi0gICB0aGluZ3MgdGhleSBtYXkgd2FudCB0byBkby4gKi8K
LXN0YXRpYyB2b2lkCi1tb3pfZ3RrX3NldF93aWRnZXRfbmFtZShHdGtXaWRnZXQqIHdpZGdldCkK
LXsKLSAgICBndGtfd2lkZ2V0X3NldF9uYW1lKHdpZGdldCwgIk1vemlsbGFHdGtXaWRnZXQiKTsK
LX0KLQotZ2ludAotbW96X2d0a19lbmFibGVfc3R5bGVfcHJvcHMoc3R5bGVfcHJvcF90IHN0eWxl
R2V0UHJvcCkKLXsKLSAgICBzdHlsZV9wcm9wX2Z1bmMgPSBzdHlsZUdldFByb3A7Ci0gICAgcmV0
dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKLWVuc3VyZV93aW5kb3dfd2lk
Z2V0KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+cHJvdG9XaW5kb3cpIHsKLSAgICAgICAgZ1BhcnRz
LT5wcm90b1dpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgICAg
ICBndGtfd2lkZ2V0X3JlYWxpemUoZ1BhcnRzLT5wcm90b1dpbmRvdyk7Ci0gICAgICAgIG1vel9n
dGtfc2V0X3dpZGdldF9uYW1lKGdQYXJ0cy0+cHJvdG9XaW5kb3cpOwotICAgIH0KLSAgICByZXR1
cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotc2V0dXBfd2lkZ2V0X3Byb3Rv
dHlwZShHdGtXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBlbnN1cmVfd2luZG93X3dpZGdldCgpOwot
ICAgIGlmICghZ1BhcnRzLT5wcm90b0xheW91dCkgewotICAgICAgICBnUGFydHMtPnByb3RvTGF5
b3V0ID0gZ3RrX2ZpeGVkX25ldygpOwotICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09O
VEFJTkVSKGdQYXJ0cy0+cHJvdG9XaW5kb3cpLCBnUGFydHMtPnByb3RvTGF5b3V0KTsKLSAgICB9
Ci0KLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGdQYXJ0cy0+cHJvdG9MYXlv
dXQpLCB3aWRnZXQpOwotICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOwotICAgIGdfb2Jq
ZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lO
VF9UT19QT0lOVEVSKFRSVUUpKTsKLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1z
dGF0aWMgZ2ludAotZW5zdXJlX2J1dHRvbl93aWRnZXQoKQotewotICAgIGlmICghZ1BhcnRzLT5i
dXR0b25XaWRnZXQpIHsKLSAgICAgICAgZ1BhcnRzLT5idXR0b25XaWRnZXQgPSBndGtfYnV0dG9u
X25ld193aXRoX2xhYmVsKCJNIik7Ci0gICAgICAgIHNldHVwX3dpZGdldF9wcm90b3R5cGUoZ1Bh
cnRzLT5idXR0b25XaWRnZXQpOwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwot
fQotCi1zdGF0aWMgZ2ludAotZW5zdXJlX3RvZ2dsZV9idXR0b25fd2lkZ2V0KCkKLXsKLSAgICBp
ZiAoIWdQYXJ0cy0+dG9nZ2xlQnV0dG9uV2lkZ2V0KSB7Ci0gICAgICAgIGdQYXJ0cy0+dG9nZ2xl
QnV0dG9uV2lkZ2V0ID0gZ3RrX3RvZ2dsZV9idXR0b25fbmV3KCk7Ci0gICAgICAgIHNldHVwX3dp
ZGdldF9wcm90b3R5cGUoZ1BhcnRzLT50b2dnbGVCdXR0b25XaWRnZXQpOwotICAgICAgICAvKiB0
b2dnbGUgYnV0dG9uIG11c3QgYmUgc2V0IGFjdGl2ZSB0byBnZXQgdGhlIHJpZ2h0IHN0eWxlIG9u
IGhvdmVyLiAqLwotICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dH
TEVfQlVUVE9OKGdQYXJ0cy0+dG9nZ2xlQnV0dG9uV2lkZ2V0KSwgVFJVRSk7Ci0gIH0KLSAgcmV0
dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKLWVuc3VyZV9idXR0b25fYXJy
b3dfd2lkZ2V0KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+YnV0dG9uQXJyb3dXaWRnZXQpIHsKLSAg
ICAgICAgZW5zdXJlX3RvZ2dsZV9idXR0b25fd2lkZ2V0KCk7Ci0KLSAgICAgICAgZ1BhcnRzLT5i
dXR0b25BcnJvd1dpZGdldCA9IGd0a19hcnJvd19uZXcoR1RLX0FSUk9XX0RPV04sIEdUS19TSEFE
T1dfT1VUKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihnUGFydHMt
PnRvZ2dsZUJ1dHRvbldpZGdldCksIGdQYXJ0cy0+YnV0dG9uQXJyb3dXaWRnZXQpOwotICAgICAg
ICBndGtfd2lkZ2V0X3JlYWxpemUoZ1BhcnRzLT5idXR0b25BcnJvd1dpZGdldCk7Ci0gICAgfQot
ICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1lbnN1cmVfY2hl
Y2tib3hfd2lkZ2V0KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQpIHsKLSAg
ICAgICAgZ1BhcnRzLT5jaGVja2JveFdpZGdldCA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhf
bGFiZWwoIk0iKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPmNoZWNr
Ym94V2lkZ2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3Rh
dGljIGdpbnQKLWVuc3VyZV9yYWRpb2J1dHRvbl93aWRnZXQoKQotewotICAgIGlmICghZ1BhcnRz
LT5yYWRpb2J1dHRvbldpZGdldCkgewotICAgICAgICBnUGFydHMtPnJhZGlvYnV0dG9uV2lkZ2V0
ID0gZ3RrX3JhZGlvX2J1dHRvbl9uZXdfd2l0aF9sYWJlbChOVUxMLCAiTSIpOwotICAgICAgICBz
ZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+cmFkaW9idXR0b25XaWRnZXQpOwotICAgIH0K
LSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotZW5zdXJlX3Nj
cm9sbGJhcl93aWRnZXQoKQotewotICAgIGlmICghZ1BhcnRzLT52ZXJ0U2Nyb2xsYmFyV2lkZ2V0
KSB7Ci0gICAgICAgIGdQYXJ0cy0+dmVydFNjcm9sbGJhcldpZGdldCA9IGd0a192c2Nyb2xsYmFy
X25ldyhOVUxMKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnZlcnRT
Y3JvbGxiYXJXaWRnZXQpOwotICAgIH0KLSAgICBpZiAoIWdQYXJ0cy0+aG9yaXpTY3JvbGxiYXJX
aWRnZXQpIHsKLSAgICAgICAgZ1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldCA9IGd0a19oc2Ny
b2xsYmFyX25ldyhOVUxMKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMt
Pmhvcml6U2Nyb2xsYmFyV2lkZ2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VT
UzsKLX0KLQotc3RhdGljIGdpbnQKLWVuc3VyZV9lbnRyeV93aWRnZXQoKQotewotICAgIGlmICgh
Z1BhcnRzLT5lbnRyeVdpZGdldCkgewotICAgICAgICBnUGFydHMtPmVudHJ5V2lkZ2V0ID0gZ3Rr
X2VudHJ5X25ldygpOwotICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+ZW50
cnlXaWRnZXQpOwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi0vKiBX
ZSBuZWVkIHRvIGhhdmUgcG9pbnRlcnMgdG8gdGhlIGlubmVyIHdpZGdldHMgKGJ1dHRvbiwgc2Vw
YXJhdG9yLCBhcnJvdykKLSAqIG9mIHRoZSBDb21ib0JveCB0byBnZXQgdGhlIGNvcnJlY3QgcmVu
ZGVyaW5nIGZyb20gdGhlbWUgZW5naW5lcyB3aGljaAotICogc3BlY2lhbCBjYXNlcyB0aGVpciBs
b29rLiBTaW5jZSB0aGUgaW5uZXIgbGF5b3V0IGNhbiBjaGFuZ2UsIHdlIGFzayBHVEsKLSAqIHRv
IE5VTEwgb3VyIHBvaW50ZXJzIHdoZW4gdGhleSBhcmUgYWJvdXQgdG8gYmVjb21lIGludmFsaWQg
YmVjYXVzZSB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgd2lkZ2V0cyBkb24ndCBleGlzdCBhbnltb3Jl
LiBJdCdzIHRoZSByb2xlIG9mCi0gKiBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKCkuCi0gKiBO
b3RlIHRoYXQgaWYgd2UgZG9uJ3QgZmluZCB0aGUgaW5uZXIgd2lkZ2V0cyAod2hpY2ggc2hvdWxk
bid0IGhhcHBlbiksIHdlCi0gKiBmYWxsYmFjayB0byB1c2UgZ2VuZXJpYyAibm9uLWlubmVyIiB3
aWRnZXRzLCBhbmQgdGhleSBkb24ndCBuZWVkIHRoYXQga2luZAotICogb2Ygd2VhayBwb2ludGVy
IHNpbmNlIHRoZXkgYXJlIGV4cGxpY2l0IGNoaWxkcmVuIG9mIGdQYXJ0cy0+cHJvdG9XaW5kb3cg
YW5kIGFzCi0gKiBzdWNoIEdUSyBob2xkcyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlbS4gKi8K
LXN0YXRpYyB2b2lkCi1tb3pfZ3RrX2dldF9jb21ib19ib3hfaW5uZXJfYnV0dG9uKEd0a1dpZGdl
dCAqd2lkZ2V0LCBncG9pbnRlciBjbGllbnRfZGF0YSkKLXsKLSAgICBpZiAoR1RLX0lTX1RPR0dM
RV9CVVRUT04od2lkZ2V0KSkgewotICAgICAgICBnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0
ID0gd2lkZ2V0OwotICAgICAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHdp
ZGdldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdwb2ludGVyKSAmZ1Bh
cnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCk7Ci0gICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3
aWRnZXQpOwotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJh
bnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7Ci0gICAgfQotfQotCi1z
dGF0aWMgdm9pZAotbW96X2d0a19nZXRfY29tYm9fYm94X2J1dHRvbl9pbm5lcl93aWRnZXRzKEd0
a1dpZGdldCAqd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdwb2ludGVyIGNsaWVudF9kYXRhKQotewotICAgIGlmIChHVEtfSVNfU0VQQVJBVE9SKHdp
ZGdldCkpIHsKLSAgICAgICAgZ1BhcnRzLT5jb21ib0JveFNlcGFyYXRvcldpZGdldCA9IHdpZGdl
dDsKLSAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVCh3aWRnZXQpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncG9pbnRlcikgJmdQYXJ0cy0+Y29t
Ym9Cb3hTZXBhcmF0b3JXaWRnZXQpOwotICAgIH0gZWxzZSBpZiAoR1RLX0lTX0FSUk9XKHdpZGdl
dCkpIHsKLSAgICAgICAgZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0ID0gd2lkZ2V0OwotICAg
ICAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHdpZGdldCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdwb2ludGVyKSAmZ1BhcnRzLT5jb21ib0JveEFy
cm93V2lkZ2V0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRnZXRf
cmVhbGl6ZSh3aWRnZXQpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCks
ICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpKTsKLX0KLQotc3Rh
dGljIGdpbnQKLWVuc3VyZV9jb21ib19ib3hfd2lkZ2V0cygpCi17Ci0gICAgR3RrV2lkZ2V0KiBi
dXR0b25DaGlsZDsKLQotICAgIGlmIChnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0ICYmIGdQ
YXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCkKLSAgICAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VT
UzsKLQotICAgIC8qIENyZWF0ZSBhIENvbWJvQm94IGlmIG5lZWRlZCAqLwotICAgIGlmICghZ1Bh
cnRzLT5jb21ib0JveFdpZGdldCkgewotICAgICAgICBnUGFydHMtPmNvbWJvQm94V2lkZ2V0ID0g
Z3RrX2NvbWJvX2JveF9uZXcoKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFy
dHMtPmNvbWJvQm94V2lkZ2V0KTsKLSAgICB9Ci0KLSAgICAvKiBHZXQgaXRzIGlubmVyIEJ1dHRv
biAqLwotICAgIGd0a19jb250YWluZXJfZm9yYWxsKEdUS19DT05UQUlORVIoZ1BhcnRzLT5jb21i
b0JveFdpZGdldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbW96X2d0a19nZXRfY29tYm9f
Ym94X2lubmVyX2J1dHRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAg
IGlmIChnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0KSB7Ci0gICAgICAgIC8qIEdldCB0aGUg
d2lkZ2V0cyBpbnNpZGUgdGhlIEJ1dHRvbiAqLwotICAgICAgICBidXR0b25DaGlsZCA9IGd0a19i
aW5fZ2V0X2NoaWxkKEdUS19CSU4oZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCkpOwotICAg
ICAgICBpZiAoR1RLX0lTX0hCT1goYnV0dG9uQ2hpbGQpKSB7Ci0gICAgICAgICAgICAvKiBhcHBl
YXJzLWFzLWxpc3QgPSBGQUxTRSwgY2VsbC12aWV3ID0gVFJVRTsgdGhlIGJ1dHRvbgotICAgICAg
ICAgICAgICogY29udGFpbnMgYW4gaGJveC4gVGhpcyBoYm94IGlzIHRoZXJlIGJlY2F1c2UgdGhl
IENvbWJvQm94Ci0gICAgICAgICAgICAgKiBuZWVkcyB0byBwbGFjZSBhIGNlbGwgcmVuZGVyZXIs
IGEgc2VwYXJhdG9yLCBhbmQgYW4gYXJyb3cgaW4KLSAgICAgICAgICAgICAqIHRoZSBidXR0b24g
d2hlbiBhcHBlYXJzLWFzLWxpc3QgaXMgRkFMU0UuICovCi0gICAgICAgICAgICBndGtfY29udGFp
bmVyX2ZvcmFsbChHVEtfQ09OVEFJTkVSKGJ1dHRvbkNoaWxkKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1vel9ndGtfZ2V0X2NvbWJvX2JveF9idXR0b25faW5uZXJfd2lkZ2V0
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICB9IGVs
c2UgaWYoR1RLX0lTX0FSUk9XKGJ1dHRvbkNoaWxkKSkgewotICAgICAgICAgICAgLyogYXBwZWFy
cy1hcy1saXN0ID0gVFJVRSwgb3IgY2VsbC12aWV3ID0gRkFMU0U7Ci0gICAgICAgICAgICAgKiB0
aGUgYnV0dG9uIG9ubHkgY29udGFpbnMgYW4gYXJyb3cgKi8KLSAgICAgICAgICAgIGdQYXJ0cy0+
Y29tYm9Cb3hBcnJvd1dpZGdldCA9IGJ1dHRvbkNoaWxkOwotICAgICAgICAgICAgZ19vYmplY3Rf
YWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChidXR0b25DaGlsZCksIChncG9pbnRlcikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dp
ZGdldCk7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUoZ1BhcnRzLT5jb21ib0JveEFy
cm93V2lkZ2V0KTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGdQYXJ0
cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICAvKiBTaG91bGRuJ3QgYmUgcmVhY2hlZCB3aXRoIGN1cnJl
bnQgaW50ZXJuYWwgZ3RrIGltcGxlbWVudGF0aW9uOyB3ZQotICAgICAgICAgKiB1c2UgYSBnZW5l
cmljIHRvZ2dsZSBidXR0b24gYXMgbGFzdCByZXNvcnQgZmFsbGJhY2sgdG8gYXZvaWQKLSAgICAg
ICAgICogY3Jhc2hpbmcuICovCi0gICAgICAgIGVuc3VyZV90b2dnbGVfYnV0dG9uX3dpZGdldCgp
OwotICAgICAgICBnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0ID0gZ1BhcnRzLT50b2dnbGVC
dXR0b25XaWRnZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRn
ZXQpIHsKLSAgICAgICAgLyogU2hvdWxkbid0IGJlIHJlYWNoZWQgd2l0aCBjdXJyZW50IGludGVy
bmFsIGd0ayBpbXBsZW1lbnRhdGlvbjsKLSAgICAgICAgICogd2UgZ1BhcnRzLT5idXR0b25BcnJv
d1dpZGdldCBhcyBsYXN0IHJlc29ydCBmYWxsYmFjayB0byBhdm9pZAotICAgICAgICAgKiBjcmFz
aGluZy4gKi8KLSAgICAgICAgZW5zdXJlX2J1dHRvbl9hcnJvd193aWRnZXQoKTsKLSAgICAgICAg
Z1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0ID0gZ1BhcnRzLT5idXR0b25BcnJvd1dpZGdldDsK
LSAgICB9Ci0KLSAgICAvKiBXZSBkb24ndCB0ZXN0IHRoZSB2YWxpZGl0eSBvZiBnUGFydHMtPmNv
bWJvQm94U2VwYXJhdG9yV2lkZ2V0IHNpbmNlIHRoZXJlCi0gICAgICogaXMgbm9uZSB3aGVuICJh
cHBlYXJzLWFzLWxpc3QiID0gVFJVRSBvciAiY2VsbC12aWV3IiA9IEZBTFNFOyBpZiBpdAotICAg
ICAqIGlzIGludmFsaWQgd2UganVzdCB3b24ndCBwYWludCBpdC4gKi8KLQotICAgIHJldHVybiBN
T1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1lbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0
KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCkgewotICAgICAgICBnUGFydHMt
PnByb2dyZXNXaWRnZXQgPSBndGtfcHJvZ3Jlc3NfYmFyX25ldygpOwotICAgICAgICBzZXR1cF93
aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCk7Ci0gICAgfQotICAgIHJldHVy
biBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1lbnN1cmVfc2Nyb2xsZWRfd2lu
ZG93X3dpZGdldCgpCi17Ci0gICAgaWYgKCFnUGFydHMtPnNjcm9sbGVkV2luZG93V2lkZ2V0KSB7
Ci0gICAgICAgIGdQYXJ0cy0+c2Nyb2xsZWRXaW5kb3dXaWRnZXQgPSBndGtfc2Nyb2xsZWRfd2lu
ZG93X25ldyhOVUxMLCBOVUxMKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFy
dHMtPnNjcm9sbGVkV2luZG93V2lkZ2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIE1PWl9HVEtfU1VD
Q0VTUzsKLX0KLQotc3RhdGljIEd0a1N0YXRlVHlwZQotQ29udmVydEd0a1N0YXRlKEd0a1dpZGdl
dFN0YXRlKiBzdGF0ZSkKLXsKLSAgICBpZiAoc3RhdGUtPmRpc2FibGVkKQotICAgICAgICByZXR1
cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKHN0YXRlLT5kZXByZXNzZWQp
Ci0gICAgICAgIHJldHVybiAoc3RhdGUtPmluSG92ZXIgPyBHVEtfU1RBVEVfUFJFTElHSFQgOiBH
VEtfU1RBVEVfQUNUSVZFKTsKLSAgICBlbHNlIGlmIChzdGF0ZS0+aW5Ib3ZlcikKLSAgICAgICAg
cmV0dXJuIChzdGF0ZS0+YWN0aXZlID8gR1RLX1NUQVRFX0FDVElWRSA6IEdUS19TVEFURV9QUkVM
SUdIVCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKLX0KLQot
c3RhdGljIGdpbnQKLW1vel9ndGtfYnV0dG9uX3BhaW50KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5n
bGUqIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIEd0
a1JlbGllZlN0eWxlIHJlbGllZiwKLSAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHdGtTaGFkb3dUeXBlIHNo
YWRvd190eXBlOwotICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdp
ZGdldCk7Ci0gICAgR3RrU3RhdGVUeXBlIGJ1dHRvbl9zdGF0ZSA9IENvbnZlcnRHdGtTdGF0ZShz
dGF0ZSk7Ci0gICAgZ2ludCB4ID0gcmVjdC0+eCwgeT1yZWN0LT55LCB3aWR0aD1yZWN0LT53aWR0
aCwgaGVpZ2h0PXJlY3QtPmhlaWdodDsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOwotCi0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JfZm9jdXM7Ci0g
ICAgZ2ludCBmb2N1c193aWR0aCwgZm9jdXNfcGFkOwotCi0gICAgbW96X2d0a193aWRnZXRfZ2V0
X2ZvY3VzKHdpZGdldCwgJmludGVyaW9yX2ZvY3VzLCAmZm9jdXNfd2lkdGgsICZmb2N1c19wYWQp
OwotCi0gICAgaWYgKHdpbmRvdyAmJiBnZGtfd2luZG93X2lzX3Zpc2libGUod2luZG93KSkgewot
ICAgICAgICBnZGtfd2luZG93X3NldF9iYWNrZ3JvdW5kX3BhdHRlcm4od2luZG93LCBOVUxMKTsK
LSAgICB9Ci0KLSAgICBndGtfd2lkZ2V0X3NldF9zdGF0ZSh3aWRnZXQsIGJ1dHRvbl9zdGF0ZSk7
Ci0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZGlyZWN0aW9uKTsKLSAgICBn
dGtfYnV0dG9uX3NldF9yZWxpZWYoR1RLX0JVVFRPTih3aWRnZXQpLCByZWxpZWYpOwotCi0gICAg
aWYgKCFpbnRlcmlvcl9mb2N1cyAmJiBzdGF0ZS0+Zm9jdXNlZCkgewotICAgICAgICB4ICs9IGZv
Y3VzX3dpZHRoICsgZm9jdXNfcGFkOwotICAgICAgICB5ICs9IGZvY3VzX3dpZHRoICsgZm9jdXNf
cGFkOwotICAgICAgICB3aWR0aCAtPSAyICogKGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkKTsKLSAg
ICAgICAgaGVpZ2h0IC09IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1c19wYWQpOwotICAgIH0KLQot
ICAgIHNoYWRvd190eXBlID0gYnV0dG9uX3N0YXRlID09IEdUS19TVEFURV9BQ1RJVkUgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGVwcmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdU
S19TSEFET1dfT1VUOwotCi0gICAgaWYgKHN0YXRlLT5pc0RlZmF1bHQgJiYgcmVsaWVmID09IEdU
S19SRUxJRUZfTk9STUFMKSB7Ci0gICAgICAgIGd0a19wYWludF9ib3goc3R5bGUsIGNyLCBidXR0
b25fc3RhdGUsIHNoYWRvd190eXBlLAotICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgImJ1
dHRvbmRlZmF1bHQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBpZiAocmVs
aWVmICE9IEdUS19SRUxJRUZfTk9ORSB8fCBzdGF0ZS0+ZGVwcmVzc2VkIHx8Ci0gICAgICAgICAg
IChidXR0b25fc3RhdGUgIT0gR1RLX1NUQVRFX05PUk1BTCAmJgotICAgICAgICAgICAgYnV0dG9u
X3N0YXRlICE9IEdUS19TVEFURV9JTlNFTlNJVElWRSkpIHsKLSAgICAgICAgLyogdGhlIGZvbGxv
d2luZyBsaW5lIGNhbiB0cmlnZ2VyIGFuIGFzc2VydGlvbiAoQ3J1eCB0aGVtZSkKLSAgICAgICAg
ICAgZmlsZSAuLi8uLi9nZGsvZ2Rrd2luZG93LmM6IGxpbmUgMTg0NiAoZ2RrX3dpbmRvd19jbGVh
cl9hcmVhKToKLSAgICAgICAgICAgYXNzZXJ0aW9uIGBHREtfSVNfV0lORE9XICh3aW5kb3cpJyBm
YWlsZWQgKi8KLSAgICAgICAgZ3RrX3BhaW50X2JveChzdHlsZSwgY3IsIGJ1dHRvbl9zdGF0ZSwg
c2hhZG93X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LCAiYnV0dG9uIiwgeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotCi0gICAgaWYgKHN0YXRlLT5mb2N1c2VkKSB7Ci0g
ICAgICAgIGlmIChpbnRlcmlvcl9mb2N1cykgewotICAgICAgICAgICAgR3RrU3R5bGUqIHN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKLSAgICAgICAgICAgIHggKz0gc3R5bGUt
Pnh0aGlja25lc3MgKyBmb2N1c19wYWQ7Ci0gICAgICAgICAgICB5ICs9IHN0eWxlLT55dGhpY2tu
ZXNzICsgZm9jdXNfcGFkOwotICAgICAgICAgICAgd2lkdGggLT0gMiAqIChzdHlsZS0+eHRoaWNr
bmVzcyArIGZvY3VzX3BhZCk7Ci0gICAgICAgICAgICBoZWlnaHQgLT0gMiAqIChzdHlsZS0+eXRo
aWNrbmVzcyArIGZvY3VzX3BhZCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB4IC09
IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkOwotICAgICAgICAgICAgeSAtPSBmb2N1c193aWR0aCAr
IGZvY3VzX3BhZDsKLSAgICAgICAgICAgIHdpZHRoICs9IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1
c19wYWQpOwotICAgICAgICAgICAgaGVpZ2h0ICs9IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1c19w
YWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBjciwgYnV0
dG9uX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LCAiYnV0dG9uIiwgeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsK
LX0KLQotZ2ludAotbW96X2d0a19pbml0KCkKLXsKLSAgICBHdGtXaWRnZXRDbGFzcyAqZW50cnlf
Y2xhc3M7Ci0KLSAgICBpc19pbml0aWFsaXplZCA9IFRSVUU7Ci0gICAgaGF2ZV9hcnJvd19zY2Fs
aW5nID0gKGd0a19tYWpvcl92ZXJzaW9uID4gMiB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZ3RrX21ham9yX3ZlcnNpb24gPT0gMiAmJiBndGtfbWlub3JfdmVyc2lvbiA+PSAxMikpOwot
Ci0gICAgLyogQWRkIHN0eWxlIHByb3BlcnR5IHRvIEd0a0VudHJ5LgotICAgICAqIEFkZGluZyB0
aGUgc3R5bGUgcHJvcGVydHkgdG8gdGhlIG5vcm1hbCBHdGtFbnRyeSBjbGFzcyBtZWFucyB0aGF0
IGl0Ci0gICAgICogd2lsbCB3b3JrIHdpdGhvdXQgaXNzdWVzIGluc2lkZSBHdGtDb21ib0JveCBh
bmQgZm9yIFNwaW5idXR0b25zLiAqLwotICAgIGVudHJ5X2NsYXNzID0gZ190eXBlX2NsYXNzX3Jl
ZihHVEtfVFlQRV9FTlRSWSk7Ci0gICAgZ3RrX3dpZGdldF9jbGFzc19pbnN0YWxsX3N0eWxlX3By
b3BlcnR5KGVudHJ5X2NsYXNzLAotICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigiaG9ub3Jz
LXRyYW5zcGFyZW50LWJnLWhpbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJh
bnNwYXJlbnQgQkcgZW5hYmxpbmcgZmxhZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJJZiBUUlVFLCB0aGUgdGhlbWUgaXMgYWJsZSB0byBkcmF3IHRoZSBHdGtFbnRyeSBvbiBub24t
cHJlZmlsbGVkIGJhY2tncm91bmQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM
U0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUEFSQU1fUkVBRFdSSVRFKSk7Ci0K
LSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1naW50Ci1tb3pfZ3RrX2NoZWNrYm94
X2dldF9tZXRyaWNzKGdpbnQqIGluZGljYXRvcl9zaXplLCBnaW50KiBpbmRpY2F0b3Jfc3BhY2lu
ZykKLXsKLSAgICBlbnN1cmVfY2hlY2tib3hfd2lkZ2V0KCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0
eWxlX2dldCAoZ1BhcnRzLT5jaGVja2JveFdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgImluZGljYXRvcl9zaXplIiwgaW5kaWNhdG9yX3NpemUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbmRpY2F0b3Jfc3BhY2luZyIsIGluZGljYXRvcl9zcGFjaW5nLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19
Ci0KLWdpbnQKLW1vel9ndGtfcmFkaW9fZ2V0X21ldHJpY3MoZ2ludCogaW5kaWNhdG9yX3NpemUs
IGdpbnQqIGluZGljYXRvcl9zcGFjaW5nKQotewotICAgIGVuc3VyZV9yYWRpb2J1dHRvbl93aWRn
ZXQoKTsKLQotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0IChnUGFydHMtPnJhZGlvYnV0dG9uV2lk
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kaWNhdG9yX3NpemUiLCBpbmRpY2F0
b3Jfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGljYXRvcl9zcGFjaW5nIiwg
aW5kaWNhdG9yX3NwYWNpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0g
ICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotZ2ludAotbW96X2d0a193aWRnZXRfZ2V0
X2ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9vbGVhbiogaW50ZXJpb3JfZm9jdXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZ2ludCogZm9jdXNfd2lkdGgsIGdpbnQqIGZvY3VzX3BhZCkK
LXsKLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAod2lkZ2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCBpbnRlcmlvcl9mb2N1cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCBmb2N1c193aWR0aCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCBmb2N1c19wYWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQot
Z2ludAotbW96X2d0a19idXR0b25fZ2V0X2lubmVyX2JvcmRlcihHdGtXaWRnZXQqIHdpZGdldCwg
R3RrQm9yZGVyKiBpbm5lcl9ib3JkZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IEd0a0JvcmRlciBk
ZWZhdWx0X2lubmVyX2JvcmRlciA9IHsgMSwgMSwgMSwgMSB9OwotICAgIEd0a0JvcmRlciAqdG1w
X2JvcmRlcjsKLQotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0ICh3aWRnZXQsICJpbm5lci1ib3Jk
ZXIiLCAmdG1wX2JvcmRlciwgTlVMTCk7Ci0KLSAgICBpZiAodG1wX2JvcmRlcikgewotICAgICAg
ICAqaW5uZXJfYm9yZGVyID0gKnRtcF9ib3JkZXI7Ci0gICAgICAgIGd0a19ib3JkZXJfZnJlZSh0
bXBfYm9yZGVyKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICAqaW5uZXJfYm9yZGVyID0gZGVm
YXVsdF9pbm5lcl9ib3JkZXI7Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1z
dGF0aWMgZ2ludAotbW96X2d0a190b2dnbGVfcGFpbnQoY2Fpcm9fdCogY3IsIEdka1JlY3Rhbmds
ZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgZ2Jv
b2xlYW4gc2VsZWN0ZWQsCi0gICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpbmNvbnNpc3Rl
bnQsIGdib29sZWFuIGlzcmFkaW8sCi0gICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRH
dGtTdGF0ZShzdGF0ZSk7Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZSA9IChzZWxlY3Rl
ZCk/R1RLX1NIQURPV19JTjpHVEtfU0hBRE9XX09VVDsKLSAgICBnaW50IGluZGljYXRvcl9zaXpl
LCBpbmRpY2F0b3Jfc3BhY2luZzsKLSAgICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0gICAg
Z2ludCBmb2N1c194LCBmb2N1c195LCBmb2N1c193aWR0aCwgZm9jdXNfaGVpZ2h0OwotICAgIEd0
a1dpZGdldCAqdzsKLSAgICBHdGtTdHlsZSAqc3R5bGU7Ci0KLSAgICBpZiAoaXNyYWRpbykgewot
ICAgICAgICBtb3pfZ3RrX3JhZGlvX2dldF9tZXRyaWNzKCZpbmRpY2F0b3Jfc2l6ZSwgJmluZGlj
YXRvcl9zcGFjaW5nKTsKLSAgICAgICAgdyA9IGdQYXJ0cy0+cmFkaW9idXR0b25XaWRnZXQ7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNh
dG9yX3NpemUsICZpbmRpY2F0b3Jfc3BhY2luZyk7Ci0gICAgICAgIHcgPSBnUGFydHMtPmNoZWNr
Ym94V2lkZ2V0OwotICAgIH0KLQotICAgIC8vICJHZXRNaW5pbXVtV2lkZ2V0U2l6ZSB3YXMgaWdu
b3JlZCIKLSAgICAvLyBGSVhNRTogVGhpcyBhc3NlcnQgY2F1c2VzIGEgYnVpbGQgZmFpbHVyZSBp
biBXZWJLaXRHVEsrIGRlYnVnCi0gICAgLy8gYnVpbGRzLCBiZWNhdXNlIGl0IHVzZXMgJ2ZhbHNl
JyBpbiBpdHMgZGVmaW5pdGlvbi4gV2UgbWF5IHdhbnQKLSAgICAvLyB0byBmb3JjZSB0aGlzIGZp
bGUgdG8gYmUgYnVpbHQgd2l0aCBnKyssIGJ5IHJlbmFtaW5nIGl0LgotICAgIC8vIEFTU0VSVChy
ZWN0LT53aWR0aCA9PSBpbmRpY2F0b3Jfc2l6ZSk7Ci0KLSAgICAvKgotICAgICAqIHZlcnRpY2Fs
bHkgY2VudGVyIGluIHRoZSBib3gsIHNpbmNlIFhVTCBzb21ldGltZXMgaWdub3JlcyBvdXIKLSAg
ICAgKiBHZXRNaW5pbXVtV2lkZ2V0U2l6ZSBpbiB0aGUgdmVydGljYWwgZGltZW5zaW9uCi0gICAg
ICovCi0gICAgeCA9IHJlY3QtPng7Ci0gICAgeSA9IHJlY3QtPnkgKyAocmVjdC0+aGVpZ2h0IC0g
aW5kaWNhdG9yX3NpemUpIC8gMjsKLSAgICB3aWR0aCA9IGluZGljYXRvcl9zaXplOwotICAgIGhl
aWdodCA9IGluZGljYXRvcl9zaXplOwotCi0gICAgZm9jdXNfeCA9IHggLSBpbmRpY2F0b3Jfc3Bh
Y2luZzsKLSAgICBmb2N1c195ID0geSAtIGluZGljYXRvcl9zcGFjaW5nOwotICAgIGZvY3VzX3dp
ZHRoID0gd2lkdGggKyAyICogaW5kaWNhdG9yX3NwYWNpbmc7Ci0gICAgZm9jdXNfaGVpZ2h0ID0g
aGVpZ2h0ICsgMiAqIGluZGljYXRvcl9zcGFjaW5nOwotCi0gICAgc3R5bGUgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZSh3KTsKLQotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3LCAhc3RhdGUt
PmRpc2FibGVkKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24odywgZGlyZWN0aW9uKTsK
LSAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKHcpLCBz
ZWxlY3RlZCk7Ci0KLSAgICBpZiAoaXNyYWRpbykgewotICAgICAgICBndGtfcGFpbnRfb3B0aW9u
KHN0eWxlLCBjciwgc3RhdGVfdHlwZSwgc2hhZG93X3R5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgZ1BhcnRzLT5yYWRpb2J1dHRvbldpZGdldCwgInJhZGlvYnV0dG9uIiwgeCwgeSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgaWYgKHN0YXRl
LT5mb2N1c2VkKSB7Ci0gICAgICAgICAgICBndGtfcGFpbnRfZm9jdXMoc3R5bGUsIGNyLCBHVEtf
U1RBVEVfQUNUSVZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+cmFkaW9i
dXR0b25XaWRnZXQsICJyYWRpb2J1dHRvbiIsIGZvY3VzX3gsIGZvY3VzX3ksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9jdXNfd2lkdGgsIGZvY3VzX2hlaWdodCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgLyoKLSAgICAgICAgKiAnaW5kZXRlcm1pbmF0ZScg
dHlwZSBvbiBjaGVja2JveGVzLiBJbiBHVEssIHRoZSBzaGFkb3cgdHlwZQotICAgICAgICAqIG11
c3QgYWxzbyBiZSBjaGFuZ2VkIGZvciB0aGUgc3RhdGUgdG8gYmUgZHJhd24uCi0gICAgICAgICov
Ci0gICAgICAgIGlmIChpbmNvbnNpc3RlbnQpIHsKLSAgICAgICAgICAgIGd0a190b2dnbGVfYnV0
dG9uX3NldF9pbmNvbnNpc3RlbnQoR1RLX1RPR0dMRV9CVVRUT04oZ1BhcnRzLT5jaGVja2JveFdp
ZGdldCksIFRSVUUpOwotICAgICAgICAgICAgc2hhZG93X3R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hF
RF9JTjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3Nl
dF9pbmNvbnNpc3RlbnQoR1RLX1RPR0dMRV9CVVRUT04oZ1BhcnRzLT5jaGVja2JveFdpZGdldCks
IEZBTFNFKTsKLSAgICAgICAgfQotCi0gICAgICAgIGd0a19wYWludF9jaGVjayhzdHlsZSwgY3Is
IHN0YXRlX3R5cGUsIHNoYWRvd190eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgZ1BhcnRz
LT5jaGVja2JveFdpZGdldCwgImNoZWNrYnV0dG9uIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCkgewotICAgICAgICAgICAgZ3RrX3BhaW50X2ZvY3Vz
KHN0eWxlLCBjciwgR1RLX1NUQVRFX0FDVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnUGFydHMtPmNoZWNrYm94V2lkZ2V0LCAiY2hlY2tidXR0b24iLCBmb2N1c194LCBmb2N1c195
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzX3dpZHRoLCBmb2N1c19oZWlnaHQp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQot
c3RhdGljIGdpbnQKLWNhbGN1bGF0ZV9idXR0b25faW5uZXJfcmVjdChHdGtXaWRnZXQqIGJ1dHRv
biwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdka1Jl
Y3RhbmdsZSogaW5uZXJfcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh
biBpZ25vcmVfZm9jdXMpCi17Ci0gICAgR3RrQm9yZGVyIGlubmVyX2JvcmRlcjsKLSAgICBnYm9v
bGVhbiBpbnRlcmlvcl9mb2N1czsKLSAgICBnaW50IGZvY3VzX3dpZHRoLCBmb2N1c19wYWQ7Ci0g
ICAgR3RrU3R5bGUqIHN0eWxlOwotCi0gICAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShi
dXR0b24pOwotCi0gICAgLyogVGhpcyBtaXJyb3JzIGd0a2J1dHRvbidzIGNoaWxkIHBvc2l0aW9u
aW5nICovCi0gICAgbW96X2d0a19idXR0b25fZ2V0X2lubmVyX2JvcmRlcihidXR0b24sICZpbm5l
cl9ib3JkZXIpOwotICAgIG1vel9ndGtfd2lkZ2V0X2dldF9mb2N1cyhidXR0b24sICZpbnRlcmlv
cl9mb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvY3VzX3dpZHRoLCAmZm9j
dXNfcGFkKTsKLQotICAgIGlmIChpZ25vcmVfZm9jdXMpCi0gICAgICAgIGZvY3VzX3dpZHRoID0g
Zm9jdXNfcGFkID0gMDsKLQotICAgIGlubmVyX3JlY3QtPnggPSByZWN0LT54ICsgWFRISUNLTkVT
UyhzdHlsZSkgKyBmb2N1c193aWR0aCArIGZvY3VzX3BhZDsKLSAgICBpbm5lcl9yZWN0LT54ICs9
IGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSID8KLSAgICAgICAgICAgICAgICAgICAgICAg
IGlubmVyX2JvcmRlci5sZWZ0IDogaW5uZXJfYm9yZGVyLnJpZ2h0OwotICAgIGlubmVyX3JlY3Qt
PnkgPSByZWN0LT55ICsgaW5uZXJfYm9yZGVyLnRvcCArIFlUSElDS05FU1Moc3R5bGUpICsKLSAg
ICAgICAgICAgICAgICAgICAgZm9jdXNfd2lkdGggKyBmb2N1c19wYWQ7Ci0gICAgaW5uZXJfcmVj
dC0+d2lkdGggPSBNQVgoMSwgcmVjdC0+d2lkdGggLSBpbm5lcl9ib3JkZXIubGVmdCAtCi0gICAg
ICAgaW5uZXJfYm9yZGVyLnJpZ2h0IC0gKFhUSElDS05FU1Moc3R5bGUpICsgZm9jdXNfcGFkICsg
Zm9jdXNfd2lkdGgpICogMik7Ci0gICAgaW5uZXJfcmVjdC0+aGVpZ2h0ID0gTUFYKDEsIHJlY3Qt
PmhlaWdodCAtIGlubmVyX2JvcmRlci50b3AgLQotICAgICAgIGlubmVyX2JvcmRlci5ib3R0b20g
LSAoWVRISUNLTkVTUyhzdHlsZSkgKyBmb2N1c19wYWQgKyBmb2N1c193aWR0aCkgKiAyKTsKLQot
ICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLQotc3RhdGljIGdpbnQKLWNhbGN1bGF0
ZV9hcnJvd19yZWN0KEd0a1dpZGdldCogYXJyb3csIEdka1JlY3RhbmdsZSogcmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogYXJyb3dfcmVjdCwgR3RrVGV4dERpcmVjdGlv
biBkaXJlY3Rpb24pCi17Ci0gICAgLyogZGVmaW5lZCBpbiBndGthcnJvdy5jICovCi0gICAgZ2Zs
b2F0IGFycm93X3NjYWxpbmcgPSAwLjc7Ci0gICAgZ2Zsb2F0IHhhbGlnbiwgeHBhZDsKLSAgICBn
aW50IGV4dGVudDsKLSAgICBHdGtNaXNjKiBtaXNjID0gR1RLX01JU0MoYXJyb3cpOwotICAgIGdm
bG9hdCBtaXNjX3hhbGlnbiwgbWlzY195YWxpZ247Ci0gICAgZ2ludCBtaXNjX3hwYWQsIG1pc2Nf
eXBhZDsKLQotICAgIGlmIChoYXZlX2Fycm93X3NjYWxpbmcpCi0gICAgICAgIGd0a193aWRnZXRf
c3R5bGVfZ2V0KGFycm93LCAiYXJyb3dfc2NhbGluZyIsICZhcnJvd19zY2FsaW5nLCBOVUxMKTsK
LQotICAgIGd0a19taXNjX2dldF9wYWRkaW5nKG1pc2MsICZtaXNjX3hwYWQsICZtaXNjX3lwYWQp
OwotICAgIGd0a19taXNjX2dldF9hbGlnbm1lbnQobWlzYywgJm1pc2NfeGFsaWduLCAmbWlzY195
YWxpZ24pOwotCi0gICAgZXh0ZW50ID0gTUlOKChyZWN0LT53aWR0aCAtIG1pc2NfeHBhZCAqIDIp
LAotICAgICAgICAgICAgICAgICAocmVjdC0+aGVpZ2h0IC0gbWlzY195cGFkICogMikpICogYXJy
b3dfc2NhbGluZzsKLQotICAgIHhhbGlnbiA9IGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRS
ID8gbWlzY194YWxpZ24gOiAxLjAgLSBtaXNjX3hhbGlnbjsKLSAgICB4cGFkID0gbWlzY194cGFk
ICsgKHJlY3QtPndpZHRoIC0gZXh0ZW50KSAqIHhhbGlnbjsKLQotICAgIGFycm93X3JlY3QtPngg
PSBkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUiA/Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmbG9vcihyZWN0LT54ICsgeHBhZCkgOiBjZWlsKHJlY3QtPnggKyB4cGFkKTsKLSAgICBhcnJv
d19yZWN0LT55ID0gZmxvb3IocmVjdC0+eSArIG1pc2NfeXBhZCArCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICgocmVjdC0+aGVpZ2h0IC0gZXh0ZW50KSAqIG1pc2NfeWFsaWduKSk7Ci0KLSAg
ICBhcnJvd19yZWN0LT53aWR0aCA9IGFycm93X3JlY3QtPmhlaWdodCA9IGV4dGVudDsKLQotICAg
IHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1tb3pfZ3RrX3Njcm9s
bGVkX3dpbmRvd19wYWludChjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlKQotewotICAgIEd0
a1N0eWxlKiBzdHlsZTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247Ci0gICAgR3RrV2lk
Z2V0KiB3aWRnZXQ7Ci0KLSAgICBlbnN1cmVfc2Nyb2xsZWRfd2luZG93X3dpZGdldCgpOwotICAg
IHdpZGdldCA9IGdQYXJ0cy0+c2Nyb2xsZWRXaW5kb3dXaWRnZXQ7Ci0KLSAgICBndGtfd2lkZ2V0
X2dldF9hbGxvY2F0aW9uKHdpZGdldCwgJmFsbG9jYXRpb24pOwotICAgIGFsbG9jYXRpb24ueCA9
IHJlY3QtPng7Ci0gICAgYWxsb2NhdGlvbi55ID0gcmVjdC0+eTsKLSAgICBhbGxvY2F0aW9uLndp
ZHRoID0gcmVjdC0+d2lkdGg7Ci0gICAgYWxsb2NhdGlvbi5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7
Ci0gICAgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKLQot
ICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKLSAgICBndGtfcGFpbnRf
c2hhZG93KHN0eWxlLCBjciwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwKLSAgICAg
ICAgICAgICAgICAgICAgIHdpZGdldCwgInNjcm9sbGVkX3dpbmRvdyIsIHJlY3QtPnggLCByZWN0
LT55LAotICAgICAgICAgICAgICAgICAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7Ci0g
ICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKLW1vel9ndGtfc2Ny
b2xsYmFyX2J1dHRvbl9wYWludChjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtTY3JvbGxiYXJCdXR0b25GbGFncyBmbGFncywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bikKLXsKLSAgICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0
ZSk7Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZSA9IChzdGF0ZS0+YWN0aXZlKSA/Ci0g
ICAgICAgIEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLSAgICBHZGtSZWN0YW5nbGUg
YXJyb3dfcmVjdDsKLSAgICBHdGtTdHlsZSogc3R5bGU7Ci0gICAgR3RrV2lkZ2V0ICpzY3JvbGxi
YXI7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOwotICAgIEd0a0Fycm93VHlwZSBhcnJv
d190eXBlOwotICAgIGdpbnQgYXJyb3dfZGlzcGxhY2VtZW50X3gsIGFycm93X2Rpc3BsYWNlbWVu
dF95OwotICAgIGNvbnN0IGNoYXIqIGRldGFpbCA9IChmbGFncyAmIE1PWl9HVEtfU1RFUFBFUl9W
RVJUSUNBTCkgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgInZzY3JvbGxiYXIiIDogImhz
Y3JvbGxiYXIiOwotCi0gICAgZW5zdXJlX3Njcm9sbGJhcl93aWRnZXQoKTsKLQotICAgIGlmIChm
bGFncyAmIE1PWl9HVEtfU1RFUFBFUl9WRVJUSUNBTCkKLSAgICAgICAgc2Nyb2xsYmFyID0gZ1Bh
cnRzLT52ZXJ0U2Nyb2xsYmFyV2lkZ2V0OwotICAgIGVsc2UKLSAgICAgICAgc2Nyb2xsYmFyID0g
Z1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldDsKLQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVj
dGlvbihzY3JvbGxiYXIsIGRpcmVjdGlvbik7Ci0KLSAgICAvKiBTb21lIHRoZW1lIGVuZ2luZXMg
KGkuZS4sIENsZWFyTG9va3MpIGNoZWNrIHRoZSBzY3JvbGxiYXIncyBhbGxvY2F0aW9uCi0gICAg
ICAgdG8gZGV0ZXJtaW5lIHdoZXJlIGl0IHNob3VsZCBwYWludCByb3VuZGVkIGNvcm5lcnMgb24g
dGhlIGJ1dHRvbnMuCi0gICAgICAgV2UgbmVlZCB0byB0cmljayB0aGVtIGludG8gZHJhd2luZyB0
aGUgYnV0dG9ucyB0aGUgd2F5IHdlIHdhbnQgdGhlbS4gKi8KLQotICAgIGd0a193aWRnZXRfZ2V0
X2FsbG9jYXRpb24oc2Nyb2xsYmFyLCAmYWxsb2NhdGlvbik7Ci0gICAgYWxsb2NhdGlvbi54ID0g
cmVjdC0+eDsKLSAgICBhbGxvY2F0aW9uLnkgPSByZWN0LT55OwotICAgIGFsbG9jYXRpb24ud2lk
dGggPSByZWN0LT53aWR0aDsKLSAgICBhbGxvY2F0aW9uLmhlaWdodCA9IHJlY3QtPmhlaWdodDsK
LQotICAgIGlmIChmbGFncyAmIE1PWl9HVEtfU1RFUFBFUl9WRVJUSUNBTCkgewotICAgICAgICBh
bGxvY2F0aW9uLmhlaWdodCAqPSA1OwotICAgICAgICBpZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQ
RVJfRE9XTikgewotICAgICAgICAgICAgYXJyb3dfdHlwZSA9IEdUS19BUlJPV19ET1dOOwotICAg
ICAgICAgICAgaWYgKGZsYWdzICYgTU9aX0dUS19TVEVQUEVSX0JPVFRPTSkKLSAgICAgICAgICAg
ICAgICBhbGxvY2F0aW9uLnkgLT0gNCAqIHJlY3QtPmhlaWdodDsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLnkgLT0gcmVjdC0+aGVpZ2h0OwotCi0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBhcnJvd190eXBlID0gR1RLX0FSUk9XX1VQOwotICAgICAg
ICAgICAgaWYgKGZsYWdzICYgTU9aX0dUS19TVEVQUEVSX0JPVFRPTSkKLSAgICAgICAgICAgICAg
ICBhbGxvY2F0aW9uLnkgLT0gMyAqIHJlY3QtPmhlaWdodDsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGFsbG9jYXRpb24ud2lkdGggKj0gNTsKLSAgICAgICAgaWYgKGZsYWdzICYg
TU9aX0dUS19TVEVQUEVSX0RPV04pIHsKLSAgICAgICAgICAgIGFycm93X3R5cGUgPSBHVEtfQVJS
T1dfUklHSFQ7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQRVJfQk9UVE9N
KQotICAgICAgICAgICAgICAgIGFsbG9jYXRpb24ueCAtPSA0ICogcmVjdC0+d2lkdGg7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbi54IC09IHJlY3QtPndpZHRo
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXJyb3dfdHlwZSA9IEdUS19BUlJPV19M
RUZUOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgTU9aX0dUS19TVEVQUEVSX0JPVFRPTSkKLSAg
ICAgICAgICAgICAgICBhbGxvY2F0aW9uLnggLT0gMyAqIHJlY3QtPndpZHRoOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgZ3RrX3dpZGdldF9zZXRfYWxsb2NhdGlvbihzY3JvbGxiYXIsICZhbGxv
Y2F0aW9uKTsKLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHNjcm9sbGJhcik7Ci0K
LSAgICBndGtfcGFpbnRfYm94KHN0eWxlLCBjciwgc3RhdGVfdHlwZSwgc2hhZG93X3R5cGUsCi0g
ICAgICAgICAgICAgICAgICBzY3JvbGxiYXIsIGRldGFpbCwgcmVjdC0+eCwgcmVjdC0+eSwKLSAg
ICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOwotCi0gICAgYXJyb3df
cmVjdC53aWR0aCA9IHJlY3QtPndpZHRoIC8gMjsKLSAgICBhcnJvd19yZWN0LmhlaWdodCA9IHJl
Y3QtPmhlaWdodCAvIDI7Ci0gICAgYXJyb3dfcmVjdC54ID0gcmVjdC0+eCArIChyZWN0LT53aWR0
aCAtIGFycm93X3JlY3Qud2lkdGgpIC8gMjsKLSAgICBhcnJvd19yZWN0LnkgPSByZWN0LT55ICsg
KHJlY3QtPmhlaWdodCAtIGFycm93X3JlY3QuaGVpZ2h0KSAvIDI7Ci0KLSAgICBpZiAoc3RhdGVf
dHlwZSA9PSBHVEtfU1RBVEVfQUNUSVZFKSB7Ci0gICAgICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0
KHNjcm9sbGJhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNl
bWVudC14IiwgJmFycm93X2Rpc3BsYWNlbWVudF94LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXkiLCAmYXJyb3dfZGlzcGxhY2VtZW50X3ksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgICAgIGFycm93X3JlY3QueCAr
PSBhcnJvd19kaXNwbGFjZW1lbnRfeDsKLSAgICAgICAgYXJyb3dfcmVjdC55ICs9IGFycm93X2Rp
c3BsYWNlbWVudF95OwotICAgIH0KLQotICAgIGd0a19wYWludF9hcnJvdyhzdHlsZSwgY3IsIHN0
YXRlX3R5cGUsIHNoYWRvd190eXBlLAotICAgICAgICAgICAgICAgICAgICBzY3JvbGxiYXIsIGRl
dGFpbCwgYXJyb3dfdHlwZSwgVFJVRSwgYXJyb3dfcmVjdC54LAotICAgICAgICAgICAgICAgICAg
ICBhcnJvd19yZWN0LnksIGFycm93X3JlY3Qud2lkdGgsIGFycm93X3JlY3QuaGVpZ2h0KTsKLQot
ICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1tb3pfZ3RrX3Nj
cm9sbGJhcl90cm91Z2hfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikK
LXsKLSAgICBHdGtTdHlsZSogc3R5bGU7Ci0gICAgR3RrU2Nyb2xsYmFyICpzY3JvbGxiYXI7Ci0K
LSAgICBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpOwotCi0gICAgaWYgKHdpZGdldCA9PSAgTU9a
X0dUS19TQ1JPTExCQVJfVFJBQ0tfSE9SSVpPTlRBTCkKLSAgICAgICAgc2Nyb2xsYmFyID0gR1RL
X1NDUk9MTEJBUihnUGFydHMtPmhvcml6U2Nyb2xsYmFyV2lkZ2V0KTsKLSAgICBlbHNlCi0gICAg
ICAgIHNjcm9sbGJhciA9IEdUS19TQ1JPTExCQVIoZ1BhcnRzLT52ZXJ0U2Nyb2xsYmFyV2lkZ2V0
KTsKLQotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbihHVEtfV0lER0VUKHNjcm9sbGJhciks
IGRpcmVjdGlvbik7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKEdUS19XSURH
RVQoc2Nyb2xsYmFyKSk7Ci0KLSAgICBndGtfcGFpbnRfYm94KHN0eWxlLCBjciwgR1RLX1NUQVRF
X0FDVElWRSwgR1RLX1NIQURPV19JTiwKLSAgICAgICAgICAgICAgICAgIEdUS19XSURHRVQoc2Ny
b2xsYmFyKSwgInRyb3VnaCIsIHJlY3QtPngsIHJlY3QtPnksCi0gICAgICAgICAgICAgICAgICBy
ZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLQotICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCkgewot
ICAgICAgICBndGtfcGFpbnRfZm9jdXMoc3R5bGUsIGNyLCBHVEtfU1RBVEVfQUNUSVZFLAotICAg
ICAgICAgICAgICAgICAgICAgICAgR1RLX1dJREdFVChzY3JvbGxiYXIpLCAidHJvdWdoIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPndpZHRoLCByZWN0
LT5oZWlnaHQpOwotICAgIH0KLQotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0
YXRpYyBnaW50Ci1tb3pfZ3RrX3Njcm9sbGJhcl90aHVtYl9wYWludChHdGtUaGVtZVdpZGdldFR5
cGUgd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fdCogY3IsIEdk
a1JlY3RhbmdsZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdl
dFN0YXRlKiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1RleHREaXJl
Y3Rpb24gZGlyZWN0aW9uKQotewotICAgIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gKHN0YXRl
LT5pbkhvdmVyIHx8IHN0YXRlLT5hY3RpdmUpID8KLSAgICAgICAgR1RLX1NUQVRFX1BSRUxJR0hU
IDogR1RLX1NUQVRFX05PUk1BTDsKLSAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd190eXBlID0gR1RL
X1NIQURPV19PVVQ7Ci0gICAgR3RrU3R5bGUqIHN0eWxlOwotICAgIEd0a1Njcm9sbGJhciAqc2Ny
b2xsYmFyOwotICAgIEd0a0FkanVzdG1lbnQgKmFkajsKLQotICAgIGVuc3VyZV9zY3JvbGxiYXJf
d2lkZ2V0KCk7Ci0KLSAgICBpZiAod2lkZ2V0ID09IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX0hP
UklaT05UQUwpCi0gICAgICAgIHNjcm9sbGJhciA9IEdUS19TQ1JPTExCQVIoZ1BhcnRzLT5ob3Jp
elNjcm9sbGJhcldpZGdldCk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxiYXIgPSBHVEtfU0NS
T0xMQkFSKGdQYXJ0cy0+dmVydFNjcm9sbGJhcldpZGdldCk7Ci0KLSAgICBndGtfd2lkZ2V0X3Nl
dF9kaXJlY3Rpb24oR1RLX1dJREdFVChzY3JvbGxiYXIpLCBkaXJlY3Rpb24pOwotCi0gICAgLyog
TWFrZSBzdXJlIHRvIHNldCB0aGUgc2Nyb2xsYmFyIHJhbmdlIGJlZm9yZSBwYWludGluZyBzbyB0
aGF0Ci0gICAgICAgZXZlcnl0aGluZyBpcyBkcmF3biBwcm9wZXJseS4gIEF0IGxlYXN0IHRoZSBi
bHVlY3VydmUgKGFuZAotICAgICAgIG1heWJlIG90aGVyKSB0aGVtZXMgZG9uJ3QgZHJhdyB0aGUg
dG9wIG9yIGJvdHRvbSBibGFjayBsaW5lCi0gICAgICAgc3Vycm91bmRpbmcgdGhlIHNjcm9sbGJh
ciBpZiB0aGUgdGhlbWUgdGhpbmtzIHRoYXQgaXQncyBidXR0ZWQKLSAgICAgICB1cCBhZ2FpbnN0
IHRoZSBzY3JvbGxiYXIgYXJyb3dzLiAgTm90ZSB0aGUgaW5jcmVhc2VzIG9mIHRoZQotICAgICAg
IGNsaXAgcmVjdCBiZWxvdy4gKi8KLSAgICBhZGogPSBndGtfcmFuZ2VfZ2V0X2FkanVzdG1lbnQo
R1RLX1JBTkdFKHNjcm9sbGJhcikpOwotCi0gICAgaWYgKHdpZGdldCA9PSBNT1pfR1RLX1NDUk9M
TEJBUl9USFVNQl9IT1JJWk9OVEFMKSB7Ci0gICAgICAgIGd0a19hZGp1c3RtZW50X3NldF9wYWdl
X3NpemUoYWRqLCByZWN0LT53aWR0aCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBndGtf
YWRqdXN0bWVudF9zZXRfcGFnZV9zaXplKGFkaiwgcmVjdC0+aGVpZ2h0KTsKLSAgICB9Ci0KLSAg
ICBndGtfYWRqdXN0bWVudF9jb25maWd1cmUoYWRqLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS0+Y3VycG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWF4cG9zLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndGtfYWRqdXN0bWVudF9nZXRfc3RlcF9pbmNyZW1lbnQoYWRqKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX2FkanVzdG1lbnRfZ2V0X3BhZ2VfaW5jcmVt
ZW50KGFkaiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X2dl
dF9wYWdlX3NpemUoYWRqKSk7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKEdU
S19XSURHRVQoc2Nyb2xsYmFyKSk7Ci0KLSAgICBndGtfcGFpbnRfc2xpZGVyKHN0eWxlLCBjciwg
c3RhdGVfdHlwZSwgc2hhZG93X3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICBHVEtfV0lER0VU
KHNjcm9sbGJhciksICJzbGlkZXIiLCByZWN0LT54LCByZWN0LT55LAotICAgICAgICAgICAgICAg
ICAgICAgcmVjdC0+d2lkdGgsICByZWN0LT5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAo
d2lkZ2V0ID09IE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX0hPUklaT05UQUwpID8KLSAgICAgICAg
ICAgICAgICAgICAgIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMIDogR1RLX09SSUVOVEFUSU9O
X1ZFUlRJQ0FMKTsKLQotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBn
aW50Ci1tb3pfZ3RrX2VudHJ5X3BhaW50KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3Qs
Ci0gICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgR3RrV2lkZ2V0KiB3
aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQot
ewotICAgIEd0a1N0YXRlVHlwZSBiZ19zdGF0ZSA9IHN0YXRlLT5kaXNhYmxlZCA/Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVEFURV9JTlNFTlNJVElWRSA6IEdUS19TVEFU
RV9OT1JNQUw7Ci0gICAgZ2ludCB4LCB5LCB3aWR0aCA9IHJlY3QtPndpZHRoLCBoZWlnaHQgPSBy
ZWN0LT5oZWlnaHQ7Ci0gICAgR3RrU3R5bGUqIHN0eWxlOwotICAgIGdib29sZWFuIGludGVyaW9y
X2ZvY3VzOwotICAgIGdib29sZWFuIHRoZW1lX2hvbm9yc190cmFuc3BhcmVuY3kgPSBGQUxTRTsK
LSAgICBnaW50IGZvY3VzX3dpZHRoOwotCi0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdp
ZGdldCwgZGlyZWN0aW9uKTsKLQotICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lk
Z2V0KTsKLQotICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KHdpZGdldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCAmaW50ZXJpb3JfZm9jdXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNfd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgImhvbm9ycy10cmFuc3BhcmVudC1iZy1oaW50IiwgJnRoZW1lX2hv
bm9yc190cmFuc3BhcmVuY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAg
ICAvKiBndGtlbnRyeS5jIHVzZXMgdHdvIHdpbmRvd3MsIG9uZSBmb3IgdGhlIGVudGlyZSB3aWRn
ZXQgYW5kIG9uZSBmb3IgdGhlCi0gICAgICogdGV4dCBhcmVhIGluc2lkZSBpdC4gVGhlIGJhY2tn
cm91bmQgb2YgYm90aCB3aW5kb3dzIGlzIHNldCB0byB0aGUgImJhc2UiCi0gICAgICogY29sb3Ig
b2YgdGhlIG5ldyBzdGF0ZSBpbiBndGtfZW50cnlfc3RhdGVfY2hhbmdlZCwgYnV0IG9ubHkgdGhl
IGlubmVyCi0gICAgICogdGV4dGFyZWEgd2luZG93IHVzZXMgZ3RrX3BhaW50X2ZsYXRfYm94IHdo
ZW4gZXhwb3NlZCAqLwotCi0gICAgLyogVGhpcyBnZXRzIHVzIGEgbG92ZWx5IGdyZXlpc2ggZGlz
YWJsZWRpc2ggbG9vayAqLwotICAgIGd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZSh3aWRnZXQsICFz
dGF0ZS0+ZGlzYWJsZWQpOwotCi0gICAgLyogR1RLIGZpbGxzIHRoZSBvdXRlciB3aWRnZXQgd2lu
ZG93IHdpdGggdGhlIGJhc2UgY29sb3IgYmVmb3JlIGRyYXdpbmcgdGhlIHdpZGdldC4KLSAgICAg
KiBTb21lIG9sZGVyIHRoZW1lcyByZWx5IG9uIHRoaXMgYmVoYXZpb3IsIGJ1dCBtYW55IHRoZW1l
cyBub3dhZGF5cyB1c2Ugcm91bmRlZAotICAgICAqIGNvcm5lcnMgb24gdGhlaXIgd2lkZ2V0cy4g
V2hpbGUgbW9zdCBHVEsgYXBwcyBhcmUgYmxpc3NmdWxseSB1bmF3YXJlIG9mIHRoaXMKLSAgICAg
KiBwcm9ibGVtIGR1ZSB0byB0aGVpciB1c2Ugb2YgdGhlIGRlZmF1bHQgd2luZG93IGJhY2tncm91
bmQsIHdlIHJlbmRlciB3aWRnZXRzIG9uCi0gICAgICogbWFueSBraW5kcyBvZiBiYWNrZ3JvdW5k
cyBvbiB0aGUgd2ViLgotICAgICAqIElmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGNvcGUgd2l0aCB0
cmFuc3BhcmVuY3ksIHRoZW4gd2UgY2FuIHNraXAgcHJlLWZpbGxpbmcKLSAgICAgKiBhbmQgbm90
aWZ5IHRoZSB0aGVtZSBpdCB3aWxsIHBhaW50IGRpcmVjdGx5IG9uIHRoZSBjYW52YXMuICovCi0g
ICAgaWYgKHRoZW1lX2hvbm9yc190cmFuc3BhcmVuY3kpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BP
SU5URVIoVFJVRSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNhaXJvX3NhdmUoY3IpOwotICAg
ICAgICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9jb2xvcihjciwgKGNvbnN0IEdka0NvbG9yKikmc3R5
bGUtPmJhc2VbYmdfc3RhdGVdKTsKLSAgICAgICAgY2Fpcm9fcGF0dGVybl9zZXRfZXh0ZW5kKGNh
aXJvX2dldF9zb3VyY2UoY3IpLCBDQUlST19FWFRFTkRfUkVQRUFUKTsKLSAgICAgICAgY2Fpcm9f
ZmlsbChjcik7Ci0gICAgICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotICAgICAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9f
UE9JTlRFUihGQUxTRSkpOwotICAgIH0KLQotICAgIC8qIEdldCB0aGUgcG9zaXRpb24gb2YgdGhl
IGlubmVyIHdpbmRvdywgc2VlIF9ndGtfZW50cnlfZ2V0X2JvcmRlcnMgKi8KLSAgICB4ID0gWFRI
SUNLTkVTUyhzdHlsZSk7Ci0gICAgeSA9IFlUSElDS05FU1Moc3R5bGUpOwotCi0gICAgaWYgKCFp
bnRlcmlvcl9mb2N1cykgewotICAgICAgICB4ICs9IGZvY3VzX3dpZHRoOwotICAgICAgICB5ICs9
IGZvY3VzX3dpZHRoOwotICAgIH0KLQotICAgIC8qIFNpbXVsYXRlIGFuIGV4cG9zZSBvZiB0aGUg
aW5uZXIgd2luZG93ICovCi0gICAgZ3RrX3BhaW50X2ZsYXRfYm94KHN0eWxlLCBjciwgYmdfc3Rh
dGUsIEdUS19TSEFET1dfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LCAiZW50
cnlfYmciLCAgcmVjdC0+eCArIHgsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QtPnkgKyB5
LCByZWN0LT53aWR0aCAtIDIqeCwgcmVjdC0+aGVpZ2h0IC0gMip5KTsKLQotICAgIC8qIE5vdyBw
YWludCB0aGUgc2hhZG93IGFuZCBmb2N1cyBib3JkZXIuCi0gICAgICogV2UgZG8gbGlrZSBpbiBn
dGtfZW50cnlfZHJhd19mcmFtZSwgd2UgZmlyc3QgZHJhdyB0aGUgc2hhZG93LCBhIHRhZAotICAg
ICAqIHNtYWxsZXIgd2hlbiBmb2N1c2VkIGlmIHRoZSBmb2N1cyBpcyBub3QgaW50ZXJpb3IsIHRo
ZW4gdGhlIGZvY3VzLiAqLwotICAgIHggPSByZWN0LT54OwotICAgIHkgPSByZWN0LT55OwotCi0g
ICAgaWYgKHN0YXRlLT5mb2N1c2VkICYmICFzdGF0ZS0+ZGlzYWJsZWQpIHsKLSAgICAgICAgLyog
VGhpcyB3aWxsIGdldCB1cyB0aGUgbGl0IGJvcmRlcnMgdGhhdCBmb2N1c2VkIHRleHRib3hlcyBl
bmpveSBvbgotICAgICAgICAgKiBzb21lIHRoZW1lcy4gKi8KLSAgICAgICAgaWYgKCFpbnRlcmlv
cl9mb2N1cykgewotICAgICAgICAgICAgLyogSW5kZW50IHRoZSBib3JkZXIgYSBsaXR0bGUgYml0
IGlmIHdlIGhhdmUgZXh0ZXJpb3IgZm9jdXMKLSAgICAgICAgICAgICAgICh0aGlzIGlzIHdoYXQg
R1RLIGRvZXMgdG8gZHJhdyBuYXRpdmUgZW50cmllcykgKi8KLSAgICAgICAgICAgIHggKz0gZm9j
dXNfd2lkdGg7Ci0gICAgICAgICAgICB5ICs9IGZvY3VzX3dpZHRoOwotICAgICAgICAgICAgd2lk
dGggLT0gMiAqIGZvY3VzX3dpZHRoOwotICAgICAgICAgICAgaGVpZ2h0IC09IDIgKiBmb2N1c193
aWR0aDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGd0a19wYWludF9zaGFkb3coc3R5bGUsIGNy
LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lOLAotICAgICAgICAgICAgICAgICAgICAg
d2lkZ2V0LCAiZW50cnkiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIGlmIChzdGF0ZS0+
Zm9jdXNlZCAmJiAhc3RhdGUtPmRpc2FibGVkKSB7Ci0gICAgICAgIGlmICghaW50ZXJpb3JfZm9j
dXMpIHsKLSAgICAgICAgICAgIGd0a19wYWludF9mb2N1cyhzdHlsZSwgY3IsICBHVEtfU1RBVEVf
Tk9STUFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgImVudHJ5IiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT54LCByZWN0LT55LCByZWN0LT53aWR0aCwg
cmVjdC0+aGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBNT1pfR1RLX1NV
Q0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1tb3pfZ3RrX2NvbWJvX2JveF9wYWludChjYWlyb190
KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lk
Z2V0U3RhdGUqIHN0YXRlLCBnYm9vbGVhbiBpc2h0bWwsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHZGtSZWN0YW5nbGUgYXJyb3df
cmVjdCwgcmVhbF9hcnJvd19yZWN0OwotICAgIGdpbnQgLyogYXJyb3dfc2l6ZSwgKi8gc2VwYXJh
dG9yX3dpZHRoOwotICAgIGdib29sZWFuIHdpZGVfc2VwYXJhdG9yczsKLSAgICBHdGtTdGF0ZVR5
cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7Ci0gICAgR3RrU2hhZG93VHlw
ZSBzaGFkb3dfdHlwZSA9IHN0YXRlLT5hY3RpdmUgPyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURP
V19PVVQ7Ci0gICAgR3RrU3R5bGUqIHN0eWxlOwotICAgIEd0a1JlcXVpc2l0aW9uIGFycm93X3Jl
cTsKLQotICAgIGVuc3VyZV9jb21ib19ib3hfd2lkZ2V0cygpOwotCi0gICAgLyogQWxzbyBzZXRz
IHRoZSBkaXJlY3Rpb24gb24gZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCwgd2hpY2ggaXMg
dGhlbgotICAgICAqIGluaGVyaXRlZCBieSB0aGUgc2VwYXJhdG9yIGFuZCBhcnJvdyAqLwotICAg
IG1vel9ndGtfYnV0dG9uX3BhaW50KGNyLCByZWN0LCBzdGF0ZSwgR1RLX1JFTElFRl9OT1JNQUws
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCwg
ZGlyZWN0aW9uKTsKLQotICAgIGNhbGN1bGF0ZV9idXR0b25faW5uZXJfcmVjdChnUGFydHMtPmNv
bWJvQm94QnV0dG9uV2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0
LCAmYXJyb3dfcmVjdCwgZGlyZWN0aW9uLCBpc2h0bWwpOwotICAgIC8qIE5vdyBhcnJvd19yZWN0
IGNvbnRhaW5zIHRoZSBpbm5lciByZWN0IDsgd2Ugd2FudCB0byBjb3JyZWN0IHRoZSB3aWR0aAot
ICAgICAqIHRvIHdoYXQgdGhlIGFycm93IG5lZWRzIChzZWUgZ3RrX2NvbWJvX2JveF9zaXplX2Fs
bG9jYXRlKSAqLwotICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKGdQYXJ0cy0+Y29t
Ym9Cb3hBcnJvd1dpZGdldCwgJmFycm93X3JlcSwgTlVMTCk7Ci0gICAgaWYgKGRpcmVjdGlvbiA9
PSBHVEtfVEVYVF9ESVJfTFRSKQotICAgICAgICBhcnJvd19yZWN0LnggKz0gYXJyb3dfcmVjdC53
aWR0aCAtIGFycm93X3JlcS53aWR0aDsKLSAgICBhcnJvd19yZWN0LndpZHRoID0gYXJyb3dfcmVx
LndpZHRoOwotCi0gICAgY2FsY3VsYXRlX2Fycm93X3JlY3QoZ1BhcnRzLT5jb21ib0JveEFycm93
V2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICZhcnJvd19yZWN0LCAmcmVhbF9hcnJv
d19yZWN0LCBkaXJlY3Rpb24pOwotCi0gICAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShn
UGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQpOwotCi0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9j
YXRlKGdQYXJ0cy0+Y29tYm9Cb3hXaWRnZXQsIHJlY3QpOwotCi0gICAgZ3RrX3BhaW50X2Fycm93
KHN0eWxlLCBjciwgc3RhdGVfdHlwZSwgc2hhZG93X3R5cGUsCi0gICAgICAgICAgICAgICAgICAg
IGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCwgImFycm93IiwgIEdUS19BUlJPV19ET1dOLCBU
UlVFLAotICAgICAgICAgICAgICAgICAgICByZWFsX2Fycm93X3JlY3QueCwgcmVhbF9hcnJvd19y
ZWN0LnksCi0gICAgICAgICAgICAgICAgICAgIHJlYWxfYXJyb3dfcmVjdC53aWR0aCwgcmVhbF9h
cnJvd19yZWN0LmhlaWdodCk7Ci0KLQotICAgIC8qIElmIHRoZXJlIGlzIG5vIHNlcGFyYXRvciBp
biB0aGUgdGhlbWUsIHRoZXJlJ3Mgbm90aGluZyBsZWZ0IHRvIGRvLiAqLwotICAgIGlmICghZ1Bh
cnRzLT5jb21ib0JveFNlcGFyYXRvcldpZGdldCkKLSAgICAgICAgcmV0dXJuIE1PWl9HVEtfU1VD
Q0VTUzsKLQotICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5jb21ib0Jv
eFNlcGFyYXRvcldpZGdldCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChnUGFydHMtPmNv
bWJvQm94U2VwYXJhdG9yV2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlLXNl
cGFyYXRvcnMiLCAmd2lkZV9zZXBhcmF0b3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJz
ZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwpOwotCi0gICAgaWYgKHdpZGVfc2VwYXJhdG9ycykgewotICAgICAgICBpZiAoZGly
ZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgICAgICBhcnJvd19yZWN0LnggLT0g
c2VwYXJhdG9yX3dpZHRoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBhcnJvd19yZWN0Lngg
Kz0gYXJyb3dfcmVjdC53aWR0aDsKLQotICAgICAgICBndGtfcGFpbnRfYm94KHN0eWxlLCBjciwK
LSAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0VUQ0hF
RF9PVVQsCi0gICAgICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5jb21ib0JveFNlcGFyYXRvcldp
ZGdldCwgInZzZXBhcmF0b3IiLAotICAgICAgICAgICAgICAgICAgICAgIGFycm93X3JlY3QueCwg
YXJyb3dfcmVjdC55LAotICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcl93aWR0aCwgYXJy
b3dfcmVjdC5oZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
R1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgICAgIGFycm93X3JlY3QueCAtPSBYVEhJQ0tORVNT
KHN0eWxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgYXJyb3dfcmVjdC54ICs9IGFycm93
X3JlY3Qud2lkdGg7Ci0KLSAgICAgICAgZ3RrX3BhaW50X3ZsaW5lKHN0eWxlLCBjciwgR1RLX1NU
QVRFX05PUk1BTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+Y29tYm9Cb3hTZXBh
cmF0b3JXaWRnZXQsICJ2c2VwYXJhdG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycm93
X3JlY3QueSwgYXJyb3dfcmVjdC55ICsgYXJyb3dfcmVjdC5oZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhcnJvd19yZWN0LngpOwotICAgIH0KLQotICAgIHJldHVybiBNT1pfR1RLX1NV
Q0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1tb3pfZ3RrX3Byb2dyZXNzYmFyX3BhaW50KGNhaXJv
X3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEd0
a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIEd0a1N0eWxlKiBzdHlsZTsKLQotICAg
IGVuc3VyZV9wcm9ncmVzc193aWRnZXQoKTsKLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24o
Z1BhcnRzLT5wcm9ncmVzV2lkZ2V0LCBkaXJlY3Rpb24pOwotCi0gICAgc3R5bGUgPSBndGtfd2lk
Z2V0X2dldF9zdHlsZShnUGFydHMtPnByb2dyZXNXaWRnZXQpOwotCi0gICAgZ3RrX3BhaW50X2Jv
eChzdHlsZSwgY3IsIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfSU4sCi0gICAgICAgICAg
ICAgICAgICBnUGFydHMtPnByb2dyZXNXaWRnZXQsICJ0cm91Z2giLCByZWN0LT54LCByZWN0LT55
LAotICAgICAgICAgICAgICAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7Ci0KLSAgICBy
ZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotbW96X2d0a19wcm9ncmVz
c19jaHVua19wYWludChjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBH
dGtTdHlsZSogc3R5bGU7Ci0KLSAgICBlbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0KCk7Ci0gICAgZ3Rr
X3dpZGdldF9zZXRfZGlyZWN0aW9uKGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCwgZGlyZWN0aW9uKTsK
LQotICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0
KTsKLQotICAgIGd0a19wYWludF9ib3goc3R5bGUsIGNyLCBHVEtfU1RBVEVfUFJFTElHSFQsIEdU
S19TSEFET1dfT1VULAotICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0LCAi
YmFyIiwgcmVjdC0+eCwgcmVjdC0+eSwKLSAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCBy
ZWN0LT5oZWlnaHQpOwotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotZ2ludAot
bW96X2d0a19nZXRfd2lkZ2V0X2JvcmRlcihHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0LCBnaW50
KiBsZWZ0LCBnaW50KiB0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQqIHJpZ2h0
LCBnaW50KiBib3R0b20sIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBnYm9vbGVhbiBpbmh0bWwpCi17Ci0gICAgR3RrV2lkZ2V0KiB3OwotICAg
IEd0a1N0eWxlICpzdHlsZTsKLQotICAgIHN3aXRjaCAod2lkZ2V0KSB7Ci0gICAgY2FzZSBNT1pf
R1RLX0JVVFRPTjoKLSAgICAgICAgewotICAgICAgICAgICAgR3RrQm9yZGVyIGlubmVyX2JvcmRl
cjsKLSAgICAgICAgICAgIGdib29sZWFuIGludGVyaW9yX2ZvY3VzOwotICAgICAgICAgICAgZ2lu
dCBmb2N1c193aWR0aCwgZm9jdXNfcGFkOwotICAgICAgICAgICAgR3RrU3R5bGUgKnN0eWxlOwot
Ci0gICAgICAgICAgICBlbnN1cmVfYnV0dG9uX3dpZGdldCgpOwotICAgICAgICAgICAgKmxlZnQg
PSAqdG9wID0gKnJpZ2h0ID0gKmJvdHRvbSA9IGd0a19jb250YWluZXJfZ2V0X2JvcmRlcl93aWR0
aChHVEtfQ09OVEFJTkVSKGdQYXJ0cy0+YnV0dG9uV2lkZ2V0KSk7Ci0KLSAgICAgICAgICAgIC8q
IERvbid0IGFkZCB0aGlzIHBhZGRpbmcgaW4gSFRNTCwgb3RoZXJ3aXNlIHRoZSBidXR0b25zIHdp
bGwKLSAgICAgICAgICAgICAgIGJlY29tZSB0b28gYmlnIGFuZCBzdHVmZiB0aGUgbGF5b3V0LiAq
LwotICAgICAgICAgICAgaWYgKCFpbmh0bWwpIHsKLSAgICAgICAgICAgICAgICBtb3pfZ3RrX3dp
ZGdldF9nZXRfZm9jdXMoZ1BhcnRzLT5idXR0b25XaWRnZXQsICZpbnRlcmlvcl9mb2N1cywgJmZv
Y3VzX3dpZHRoLCAmZm9jdXNfcGFkKTsKLSAgICAgICAgICAgICAgICBtb3pfZ3RrX2J1dHRvbl9n
ZXRfaW5uZXJfYm9yZGVyKGdQYXJ0cy0+YnV0dG9uV2lkZ2V0LCAmaW5uZXJfYm9yZGVyKTsKLSAg
ICAgICAgICAgICAgICAqbGVmdCArPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZCArIGlubmVyX2Jv
cmRlci5sZWZ0OwotICAgICAgICAgICAgICAgICpyaWdodCArPSBmb2N1c193aWR0aCArIGZvY3Vz
X3BhZCArIGlubmVyX2JvcmRlci5yaWdodDsKLSAgICAgICAgICAgICAgICAqdG9wICs9IGZvY3Vz
X3dpZHRoICsgZm9jdXNfcGFkICsgaW5uZXJfYm9yZGVyLnRvcDsKLSAgICAgICAgICAgICAgICAq
Ym90dG9tICs9IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkICsgaW5uZXJfYm9yZGVyLmJvdHRvbTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHls
ZShnUGFydHMtPmJ1dHRvbldpZGdldCk7Ci0gICAgICAgICAgICAqbGVmdCArPSBzdHlsZS0+eHRo
aWNrbmVzczsKLSAgICAgICAgICAgICpyaWdodCArPSBzdHlsZS0+eHRoaWNrbmVzczsKLSAgICAg
ICAgICAgICp0b3AgKz0gc3R5bGUtPnl0aGlja25lc3M7Ci0gICAgICAgICAgICAqYm90dG9tICs9
IHN0eWxlLT55dGhpY2tuZXNzOwotICAgICAgICAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsK
LSAgICAgICAgfQotICAgIGNhc2UgTU9aX0dUS19FTlRSWToKLSAgICAgICAgZW5zdXJlX2VudHJ5
X3dpZGdldCgpOwotICAgICAgICB3ID0gZ1BhcnRzLT5lbnRyeVdpZGdldDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBNT1pfR1RLX0RST1BET1dOOgotICAgICAgICB7Ci0gICAgICAgICAgICAv
KiBXZSBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBhcnJvdyBvbiB0aGUgZHJvcGRvd24sIHNvIHRl
eHQKLSAgICAgICAgICAgICAqIGRvZXNuJ3QgY29tZSB0b28gY2xvc2UgdG8gdGhlIGFycm93LCBv
ciBpbiBzb21lIGNhc2VzIHNwaWxsCi0gICAgICAgICAgICAgKiBpbnRvIHRoZSBhcnJvdy4gKi8K
LSAgICAgICAgICAgIGdib29sZWFuIGlnbm9yZWRfaW50ZXJpb3JfZm9jdXMsIHdpZGVfc2VwYXJh
dG9yczsKLSAgICAgICAgICAgIGdpbnQgZm9jdXNfd2lkdGgsIGZvY3VzX3BhZCwgc2VwYXJhdG9y
X3dpZHRoOwotICAgICAgICAgICAgR3RrUmVxdWlzaXRpb24gYXJyb3dfcmVxOwotICAgICAgICAg
ICAgR3RrU3R5bGUqIHN0eWxlOwotCi0gICAgICAgICAgICBlbnN1cmVfY29tYm9fYm94X3dpZGdl
dHMoKTsKLQotICAgICAgICAgICAgKmxlZnQgPSBndGtfY29udGFpbmVyX2dldF9ib3JkZXJfd2lk
dGgoR1RLX0NPTlRBSU5FUihnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0KSk7Ci0KLSAgICAg
ICAgICAgIGlmICghaW5odG1sKSB7Ci0gICAgICAgICAgICAgICAgbW96X2d0a193aWRnZXRfZ2V0
X2ZvY3VzKGdQYXJ0cy0+Y29tYm9Cb3hCdXR0b25XaWRnZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZpZ25vcmVkX2ludGVyaW9yX2ZvY3VzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9jdXNfd2lkdGgsICZmb2N1c19wYWQp
OwotICAgICAgICAgICAgICAgICpsZWZ0ICs9IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGdQ
YXJ0cy0+Y29tYm9Cb3hCdXR0b25XaWRnZXQpOwotICAgICAgICAgICAgKnRvcCA9ICpsZWZ0ICsg
c3R5bGUtPnl0aGlja25lc3M7Ci0gICAgICAgICAgICAqbGVmdCArPSBzdHlsZS0+eHRoaWNrbmVz
czsKLQotICAgICAgICAgICAgKnJpZ2h0ID0gKmxlZnQ7ICpib3R0b20gPSAqdG9wOwotCi0gICAg
ICAgICAgICAvKiBJZiB0aGVyZSBpcyBubyBzZXBhcmF0b3IsIGRvbid0IHRyeSB0byBjb3VudCBp
dHMgd2lkdGguICovCi0gICAgICAgICAgICBzZXBhcmF0b3Jfd2lkdGggPSAwOwotICAgICAgICAg
ICAgaWYgKGdQYXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQpIHsKLSAgICAgICAgICAgICAg
ICBndGtfd2lkZ2V0X3N0eWxlX2dldChnUGFydHMtPmNvbWJvQm94U2VwYXJhdG9yV2lkZ2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWRlLXNlcGFyYXRvcnMiLCAm
d2lkZV9zZXBhcmF0b3JzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
ZXBhcmF0b3Itd2lkdGgiLCAmc2VwYXJhdG9yX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF3aWRlX3NlcGFy
YXRvcnMpCi0gICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcl93aWR0aCA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBYVEhJQ0tORVNTKHN0eWxlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZ3RrX3dpZGdldF9nZXRfcHJlZmVycmVkX3NpemUoZ1BhcnRzLT5jb21ib0JveEFycm93
V2lkZ2V0LCAmYXJyb3dfcmVxLCBOVUxMKTsKLSAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0g
R1RLX1RFWFRfRElSX1JUTCkKLSAgICAgICAgICAgICAgICAqbGVmdCArPSBzZXBhcmF0b3Jfd2lk
dGggKyBhcnJvd19yZXEud2lkdGg7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
KnJpZ2h0ICs9IHNlcGFyYXRvcl93aWR0aCArIGFycm93X3JlcS53aWR0aDsKLQotICAgICAgICAg
ICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLSAgICAgICAgfQotICAgIGNhc2UgTU9aX0dUS19Q
Uk9HUkVTU0JBUjoKLSAgICAgICAgZW5zdXJlX3Byb2dyZXNzX3dpZGdldCgpOwotICAgICAgICB3
ID0gZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0OwotICAgICAgICBicmVhazsKLSAgICAvKiBUaGVzZSB3
aWRnZXRzIGhhdmUgbm8gYm9yZGVycywgc2luY2UgdGhleSBhcmUgbm90IGNvbnRhaW5lcnMuICov
Ci0gICAgY2FzZSBNT1pfR1RLX0NIRUNLQlVUVE9OOgotICAgIGNhc2UgTU9aX0dUS19SQURJT0JV
VFRPTjoKLSAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX0JVVFRPTjoKLSAgICBjYXNlIE1PWl9H
VEtfU0NST0xMQkFSX1RSQUNLX0hPUklaT05UQUw6Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJB
Ul9UUkFDS19WRVJUSUNBTDoKLSAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX0hPUkla
T05UQUw6Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9WRVJUSUNBTDoKLSAgICBj
YXNlIE1PWl9HVEtfUFJPR1JFU1NfQ0hVTks6Ci0gICAgICAgICpsZWZ0ID0gKnRvcCA9ICpyaWdo
dCA9ICpib3R0b20gPSAwOwotICAgICAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGdfd2FybmluZygiVW5zdXBwb3J0ZWQgd2lkZ2V0IHR5cGU6ICVkIiwg
d2lkZ2V0KTsKLSAgICAgICAgcmV0dXJuIE1PWl9HVEtfVU5LTk9XTl9XSURHRVQ7Ci0gICAgfQot
Ci0gICAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3KTsKLSAgICAqcmlnaHQgPSAqbGVm
dCA9IFhUSElDS05FU1Moc3R5bGUpOwotICAgICpib3R0b20gPSAqdG9wID0gWVRISUNLTkVTUyhz
dHlsZSk7Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1naW50Ci1tb3pfZ3Rr
X2dldF9zY3JvbGxiYXJfbWV0cmljcyhNb3pHdGtTY3JvbGxiYXJNZXRyaWNzICptZXRyaWNzKQot
ewotICAgIGVuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxl
X2dldCAoZ1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNsaWRlcl93aWR0aCIsICZtZXRyaWNzLT5zbGlkZXJfd2lkdGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0cm91Z2hfYm9yZGVyIiwgJm1ldHJpY3MtPnRyb3VnaF9ib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJzdGVwcGVyX3NpemUiLCAmbWV0cmljcy0+c3Rl
cHBlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAic3RlcHBlcl9zcGFjaW5nIiwg
Jm1ldHJpY3MtPnN0ZXBwZXJfc3BhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInRy
b3VnaF91bmRlcl9zdGVwcGVycyIsICZtZXRyaWNzLT50cm91Z2hfdW5kZXJfc3RlcHBlcnMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNfc2Vjb25kYXJ5X2ZvcndhcmRfc3RlcHBlciIs
ICZtZXRyaWNzLT5oYXNfc2Vjb25kYXJ5X2ZvcndhcmRfc3RlcHBlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgImhhc19zZWNvbmRhcnlfYmFja3dhcmRfc3RlcHBlciIsICZtZXRyaWNzLT5o
YXNfc2Vjb25kYXJ5X2JhY2t3YXJkX3N0ZXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOwotCi0gICAgbWV0cmljcy0+bWluX3NsaWRlcl9zaXplID0gZ3RrX3JhbmdlX2dldF9t
aW5fc2xpZGVyX3NpemUoR1RLX1JBTkdFKGdQYXJ0cy0+aG9yaXpTY3JvbGxiYXJXaWRnZXQpKTsK
LQotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLWdpbnQKLW1vel9ndGtfd2lkZ2V0
X3BhaW50KEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRnZXQsIGNhaXJvX3QqIGNyLAotICAgICAgICAg
ICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICBnaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bikKLXsKLSAgICBzd2l0Y2ggKHdpZGdldCkgewotICAgIGNhc2UgTU9aX0dUS19CVVRUT046Ci0g
ICAgICAgIGlmIChzdGF0ZS0+ZGVwcmVzc2VkKSB7Ci0gICAgICAgICAgICBlbnN1cmVfdG9nZ2xl
X2J1dHRvbl93aWRnZXQoKTsKLSAgICAgICAgICAgIHJldHVybiBtb3pfZ3RrX2J1dHRvbl9wYWlu
dChjciwgcmVjdCwgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKEd0a1JlbGllZlN0eWxlKSBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnUGFydHMtPnRvZ2dsZUJ1dHRvbldpZGdldCwgZGlyZWN0aW9uKTsKLSAgICAg
ICAgfQotICAgICAgICBlbnN1cmVfYnV0dG9uX3dpZGdldCgpOwotICAgICAgICByZXR1cm4gbW96
X2d0a19idXR0b25fcGFpbnQoY3IsIHJlY3QsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKEd0a1JlbGllZlN0eWxlKSBmbGFncywgZ1BhcnRzLT5idXR0b25XaWRn
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24pOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfQ0hFQ0tCVVRUT046Ci0gICAgY2FzZSBNT1pf
R1RLX1JBRElPQlVUVE9OOgotICAgICAgICByZXR1cm4gbW96X2d0a190b2dnbGVfcGFpbnQoY3Is
IHJlY3QsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISEoZmxh
Z3MgJiBNT1pfR1RLX1dJREdFVF9DSEVDS0VEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICEhKGZsYWdzICYgTU9aX0dUS19XSURHRVRfSU5DT05TSVNURU5UKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aWRnZXQgPT0gTU9aX0dUS19SQURJT0JV
VFRPTiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24pOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX0JVVFRPTjoKLSAgICAg
ICAgcmV0dXJuIG1vel9ndGtfc2Nyb2xsYmFyX2J1dHRvbl9wYWludChjciwgcmVjdCwgc3RhdGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEd0a1Njcm9s
bGJhckJ1dHRvbkZsYWdzKSBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9H
VEtfU0NST0xMQkFSX1RSQUNLX0hPUklaT05UQUw6Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJB
Ul9UUkFDS19WRVJUSUNBTDoKLSAgICAgICAgcmV0dXJuIG1vel9ndGtfc2Nyb2xsYmFyX3Ryb3Vn
aF9wYWludCh3aWRnZXQsIGNyLCByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1PWl9HVEtfU0NST0xMQkFSX1RIVU1CX0hPUklaT05UQUw6Ci0gICAgY2FzZSBNT1pfR1RL
X1NDUk9MTEJBUl9USFVNQl9WRVJUSUNBTDoKLSAgICAgICAgcmV0dXJuIG1vel9ndGtfc2Nyb2xs
YmFyX3RodW1iX3BhaW50KHdpZGdldCwgY3IsIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEVEX1dJTkRPVzoKLSAgICAgICAgcmV0dXJuIG1vel9n
dGtfc2Nyb2xsZWRfd2luZG93X3BhaW50KGNyLCByZWN0LCBzdGF0ZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgTU9aX0dUS19FTlRSWToKLSAgICAgICAgZW5zdXJlX2VudHJ5X3dpZGdldCgp
OwotICAgICAgICByZXR1cm4gbW96X2d0a19lbnRyeV9wYWludChjciwgcmVjdCwgc3RhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+ZW50cnlXaWRnZXQsIGRp
cmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19EUk9QRE9XTjoKLSAg
ICAgICAgcmV0dXJuIG1vel9ndGtfY29tYm9fYm94X3BhaW50KGNyLCByZWN0LCBzdGF0ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYm9vbGVhbikgZmxhZ3MsIGRp
cmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19QUk9HUkVTU0JBUjoK
LSAgICAgICAgcmV0dXJuIG1vel9ndGtfcHJvZ3Jlc3NiYXJfcGFpbnQoY3IsIHJlY3QsIGRpcmVj
dGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19QUk9HUkVTU19DSFVOSzoK
LSAgICAgICAgcmV0dXJuIG1vel9ndGtfcHJvZ3Jlc3NfY2h1bmtfcGFpbnQoY3IsIHJlY3QsIGRp
cmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGdfd2Fybmlu
ZygiVW5rbm93biB3aWRnZXQgdHlwZTogJWQiLCB3aWRnZXQpOwotICAgIH0KLQotICAgIHJldHVy
biBNT1pfR1RLX1VOS05PV05fV0lER0VUOwotfQotCi1HdGtXaWRnZXQqIG1vel9ndGtfZ2V0X3Nj
cm9sbGJhcl93aWRnZXQodm9pZCkKLXsKLSAgICBpZiAoIWlzX2luaXRpYWxpemVkKQotICAgICAg
ICByZXR1cm4gTlVMTDsKLSAgICBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpOwotICAgIHJldHVy
biBnUGFydHMtPmhvcml6U2Nyb2xsYmFyV2lkZ2V0OwotfQotCi1naW50Ci1tb3pfZ3RrX3NodXRk
b3duKCkKLXsKLSAgICBHdGtXaWRnZXRDbGFzcyAqZW50cnlfY2xhc3M7Ci0gICAgZW50cnlfY2xh
c3MgPSBnX3R5cGVfY2xhc3NfcGVlayhHVEtfVFlQRV9FTlRSWSk7Ci0gICAgZ190eXBlX2NsYXNz
X3VucmVmKGVudHJ5X2NsYXNzKTsKLQotICAgIGlzX2luaXRpYWxpemVkID0gRkFMU0U7Ci0KLSAg
ICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi12b2lkIG1vel9ndGtfZGVzdHJveV90aGVt
ZV9wYXJ0c193aWRnZXRzKEd0a1RoZW1lUGFydHMqIHBhcnRzKQotewotICAgIGlmICghcGFydHMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwYXJ0cy0+cHJvdG9XaW5kb3cpIHsKLSAgICAg
ICAgZ3RrX3dpZGdldF9kZXN0cm95KHBhcnRzLT5wcm90b1dpbmRvdyk7Ci0gICAgICAgIHBhcnRz
LT5wcm90b1dpbmRvdyA9IE5VTEw7Ci0gICAgfQotfQotCi1HdGtXaWRnZXQqIG1vel9ndGtfZ2V0
X3Byb2dyZXNzX3dpZGdldCgpCi17Ci0gICAgaWYgKCFpc19pbml0aWFsaXplZCkKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgZW5zdXJlX3Byb2dyZXNzX3dpZGdldCgpOwotICAgIHJldHVybiBn
UGFydHMtPnByb2dyZXNXaWRnZXQ7Ci19Ci0KLSNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmgKaW5kZXggOWQxM2EwNzgwMzQ4
YmY2NjcyOTZkYWZhMDY0MDJhYmJiNmY0NDU5Ny4uNDEyYTFmNzU5MTlmZmQyYjAzYmE1Yzc5ODIy
MzI0MjFiZjM3OWM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0
a2RyYXdpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrZHJhd2luZy5o
CkBAIC04MSw5ICs4MSw3IEBAIHR5cGVkZWYgc3RydWN0IHsKIH0gTW96R3RrU2Nyb2xsYmFyTWV0
cmljczsKIAogdHlwZWRlZiBzdHJ1Y3QgX0d0a1RoZW1lUGFydHMgewotI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCiAgICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwOwotI2VuZGlmIC8vIEdUS19BUElf
VkVSU0lPTl8yCiAgICAgR3RrV2lkZ2V0KiBwcm90b1dpbmRvdzsKICAgICBHdGtXaWRnZXQqIHBy
b3RvTGF5b3V0OwogICAgIEd0a1dpZGdldCogYnV0dG9uV2lkZ2V0OwpAQCAtMjA1LDE4ICsyMDMs
MTEgQEAgdm9pZCBtb3pfZ3RrX2Rlc3Ryb3lfdGhlbWVfcGFydHNfd2lkZ2V0cyhHdGtUaGVtZVBh
cnRzKiBwYXJ0cyk7CiAgKiBmbGFnczogICAgIHdpZGdldC1kZXBlbmRhbnQgZmxhZ3M7IHNlZSB0
aGUgR3RrVGhlbWVXaWRnZXRUeXBlIGRlZmluaXRpb24uCiAgKiBkaXJlY3Rpb246IHRoZSB0ZXh0
IGRpcmVjdGlvbiwgdG8gZHJhdyB0aGUgd2lkZ2V0IGNvcnJlY3RseSBMVFIgYW5kIFJUTC4KICAq
LwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiBnaW50CiBtb3pfZ3RrX3dpZGdldF9wYWludChH
dGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0LCBHZGtEcmF3YWJsZSogZHJhd2FibGUsCiAgICAgICAg
ICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIHJlY3QsIEdka1JlY3RhbmdsZSogY2xpcHJlY3Qs
CiAgICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGdpbnQgZmxhZ3Ms
CiAgICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0jZWxz
ZQotZ2ludAotbW96X2d0a193aWRnZXRfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwg
Y2Fpcm9fdCogY3IsCi0gICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIHJlY3QsIEd0
a1dpZGdldFN0YXRlKiBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgIGdpbnQgZmxhZ3MsIEd0
a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKTsKLSNlbmRpZgogCiAvKioqIFdpZGdldCBtZXRyaWNz
ICoqKi8KIC8qKgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78448</attachid>
            <date>2011-01-10 13:57:48 -0800</date>
            <delta_ts>2011-01-10 14:05:04 -0800</delta_ts>
            <desc>Patch including new WidgetRenderingContext.cpp</desc>
            <filename>0001-GTK-Remove-unecessary-RenderThemeGtk-and-WidgetRende.patch</filename>
            <type>text/plain</type>
            <size>98078</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">RnJvbSA0ZTkzZDM0YWEzMWU5OTI0N2RmOTY1YzgwYzJiNDA0MzNkYjkyNTgyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJ0aW4gUm9iaW5zb24gPG1yb2JpbnNvbkBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDEwIEphbiAyMDExIDEzOjU1OjMzIC0wODAwClN1YmplY3Q6IFtQQVRDSF0g
W0dUS10gUmVtb3ZlIHVuZWNlc3NhcnkgUmVuZGVyVGhlbWVHdGsgYW5kIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQgY29kZQogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUy
MTcwCgpSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KClJlbW92ZSB1bm5lY2Vzc2FyeSBjb2Rl
IGZyb20gUmVuZGVyVGhlbWVHdGszIGFuZCBSZW5kZXJUaGVtZUd0ayBub3cgdGhhdCB0aGUKR3Rr
U3R5bGVDb250ZXh0IHBvcnQgaXMgY29tcGxldGUuIEFsc28gcmVtb3ZlIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHRHdGszIGFuZAptb3ZlIFdpZGdldFJlbmRlcmluZ1JlbmRlcmluZ0NvbnRleHRHdGsy
IHRvIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgYW5kIG1ha2UgaXQKR1RLKyAyLnggb25seS4gU29t
ZSBtZXRob2RzIGhhdmUgYmVlbiBtb3ZlZCB0byBSZW5kZXJUaGVtZUd0azIgc2luY2UgdGhleSBh
cmUKR1RLKyAyLnggb25seSBub3cuCgpObyBuZXcgdGVzdHMuIFRoaXMgc2hvdWxkIG5vdCBjaGFu
Z2UgZnVuY3Rpb25hbGl0eS4KCiogR05VbWFrZWZpbGUuYW06IFJlbW92ZSBXaWRnZXRSZW5kZXJp
bmdDb250ZXh0R3RrMyBhbmQgZ3RrM2RyYXdpbmcuYwoqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5jcHA6CihXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGspOgooV2Vi
Q29yZTo6Z3RrSWNvblN0YXRlKTogTWFkZSB0aGlzIG1ldGhvZCBzdGF0aWMuIEl0IGlzbid0IHVz
ZWQgb3V0c2lkZSBSZW5kZXJUaGVtZUd0ay4KKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOiBVcGRhdGVkIHRvIHJlZmVsY3QgZ3RrSWNv
blN0YXRlIGNoYW5nZS4KKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uKTogRGl0dG8uCihXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRp
YUJ1dHRvbik6IERpdHRvCiogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmg6IE1vdmUgYSBm
ZXcgbWV0aG9kcyB3aGljaCBhcmUgbm93IEdUSysgMi54IG9ubHkuCiogcGxhdGZvcm0vZ3RrL1Jl
bmRlclRoZW1lR3RrMi5jcHA6CihXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0
KTogQWRkZWQgdGhpcyBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBtZXRob2QKdGhhdCBpcyBvbmx5
IHVzZWQgZm9yIEdUSysgMi54IGF0IHRoZSBtb21lbnQuCihXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6flJlbmRlclRoZW1lR3RrKTogQWRkZWQuCihXZWJDb3JlOjpnZXRHdGtTdGF0ZVR5cGUpOiBN
YWRlIHRoaXMgbWV0aG9kIHN0YXRpYy4KKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpnZXRJbmRp
Y2F0b3JNZXRyaWNzKTogTW92ZWQgdGhpcyBoZXJlIGZyb20gUmVuZGVyVGhlbWVHdGsuCihXZWJD
b3JlOjpzZXRUb2dnbGVTaXplKTogVXBkYXRlZCB0byByZWZsZWN0IGNoYW5nZXMgdG8gZ2V0R3Rr
U3RhdGVUeXBlLgooV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKTogRGl0dG8u
CihXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUcmFjayk6IERpdHRvLgooV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIpOiBEaXR0by4KKiBwbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpndGtT
Y3JvbGxiYXJTdHlsZSk6IE1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCihXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KTogQWRkZWQuCihXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6flJlbmRlclRoZW1lR3RrKTogQWRkZWQuCihXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
aW5pdE1lZGlhQ29sb3JzKTogQ2hhbmdlZCB0byB1c2UgdGhlIEd0a1N0eWxlQ29udGV4dCBBUEkg
dG8KZmV0Y2ggdGhlc2UgY29sb3JzLiBUaGlzIHdhcyB0aGUgbGFzdCBkZXBlbmRlbmN5IG9uIHRo
ZSBvbGQgQVBJLgoqIHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250
ZXh0R3RrMi5jcHAuCiogcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaDogTWFk
ZSBHVEsrIDIueCBvbmx5LgoqIHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3Rr
My5jcHA6IFJlbW92ZWQuCiogcGxhdGZvcm0vZ3RrL2d0azNkcmF3aW5nLmM6IFJlbW92ZWQuCiog
cGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaDogTWFkZSBHVEsrIDIueCBvbmx5LgotLS0KIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NSArCiBT
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQg
Ky0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAgICAgIHwg
ICA2OSArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmggICAg
ICAgfCAgIDUwICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsy
LmNwcCAgICB8ICAgNjcgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0azMuY3BwICAgIHwgIDE0NyArLS0KIC4uLi9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5jcHAgICAgICAgIHwgIDE5MiArKysKIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRSZW5kZXJpbmdDb250ZXh0LmggIHwgICAxMCArLQogLi4uL3BsYXRmb3JtL2d0ay9XaWRn
ZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAgICAgfCAgMTkyIC0tLQogLi4uL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAgICAgfCAgIDczIC0tCiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYyAgICAgICAgICB8IDEyODggLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmggICAg
ICAgICAgIHwgICAgOSAtCiAxMiBmaWxlcyBjaGFuZ2VkLCAzNTcgaW5zZXJ0aW9ucygrKSwgMTc4
OSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dEd0azIuY3BwCiBk
ZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRl
cmluZ0NvbnRleHRHdGszLmNwcAogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9ndGszZHJhd2luZy5jCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRmMWIyOWEuLjhjZjc0ODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMS0wMS0xMCAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gUmVtb3ZlIHVuZWNlc3NhcnkgUmVuZGVyVGhlbWVHdGsg
YW5kIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIxNzAKKworICAgICAgICBSZW1vdmUgdW5uZWNlc3Nh
cnkgY29kZSBmcm9tIFJlbmRlclRoZW1lR3RrMyBhbmQgUmVuZGVyVGhlbWVHdGsgbm93IHRoYXQg
dGhlCisgICAgICAgIEd0a1N0eWxlQ29udGV4dCBwb3J0IGlzIGNvbXBsZXRlLiBBbHNvIHJlbW92
ZSBXaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMyBhbmQKKyAgICAgICAgbW92ZSBXaWRnZXRSZW5k
ZXJpbmdSZW5kZXJpbmdDb250ZXh0R3RrMiB0byBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IGFuZCBt
YWtlIGl0CisgICAgICAgIEdUSysgMi54IG9ubHkuIFNvbWUgbWV0aG9kcyBoYXZlIGJlZW4gbW92
ZWQgdG8gUmVuZGVyVGhlbWVHdGsyIHNpbmNlIHRoZXkgYXJlCisgICAgICAgIEdUSysgMi54IG9u
bHkgbm93LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBzaG91bGQgbm90IGNoYW5nZSBm
dW5jdGlvbmFsaXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IFJlbW92ZSBXaWRnZXRS
ZW5kZXJpbmdDb250ZXh0R3RrMyBhbmQgZ3RrM2RyYXdpbmcuYworICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0
azo6UmVuZGVyVGhlbWVHdGspOgorICAgICAgICAoV2ViQ29yZTo6Z3RrSWNvblN0YXRlKTogTWFk
ZSB0aGlzIG1ldGhvZCBzdGF0aWMuIEl0IGlzbid0IHVzZWQgb3V0c2lkZSBSZW5kZXJUaGVtZUd0
ay4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb24pOiBVcGRhdGVkIHRvIHJlZmVsY3QgZ3RrSWNvblN0YXRlIGNoYW5nZS4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYUJ1dHRvbik6IERpdHRvCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3Rr
Lmg6IE1vdmUgYSBmZXcgbWV0aG9kcyB3aGljaCBhcmUgbm93IEdUSysgMi54IG9ubHkuCisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KTogQWRkZWQgdGhpcyBwbGF0Zm9ybSBpbml0
aWFsaXphdGlvbiBtZXRob2QKKyAgICAgICAgdGhhdCBpcyBvbmx5IHVzZWQgZm9yIEdUSysgMi54
IGF0IHRoZSBtb21lbnQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6flJlbmRl
clRoZW1lR3RrKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRHdGtTdGF0ZVR5cGUpOiBN
YWRlIHRoaXMgbWV0aG9kIHN0YXRpYy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpnZXRJbmRpY2F0b3JNZXRyaWNzKTogTW92ZWQgdGhpcyBoZXJlIGZyb20gUmVuZGVyVGhlbWVH
dGsuCisgICAgICAgIChXZWJDb3JlOjpzZXRUb2dnbGVTaXplKTogVXBkYXRlZCB0byByZWZsZWN0
IGNoYW5nZXMgdG8gZ2V0R3RrU3RhdGVUeXBlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OnBhaW50QnV0dG9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6cGFpbnRTbGlkZXJUcmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGszLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpndGtTY3JvbGxiYXJTdHlsZSk6IE1vdmVkIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KTogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3RrKTogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29sb3JzKTogQ2hhbmdl
ZCB0byB1c2UgdGhlIEd0a1N0eWxlQ29udGV4dCBBUEkgdG8KKyAgICAgICAgZmV0Y2ggdGhlc2Ug
Y29sb3JzLiBUaGlzIHdhcyB0aGUgbGFzdCBkZXBlbmRlbmN5IG9uIHRoZSBvbGQgQVBJLgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0LmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3Rr
Mi5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaDog
TWFkZSBHVEsrIDIueCBvbmx5LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJp
bmdDb250ZXh0R3RrMy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2d0azNk
cmF3aW5nLmM6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaDog
TWFkZSBHVEsrIDIueCBvbmx5LgorCiAyMDExLTAxLTEwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCmluZGV4IDA5YTJlZDQuLmEyNDJmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCkBAIC0zNzAwLDcgKzM3MDAsNiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L2d0azJkcmF3aW5nLmMgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGszZHJhd2lu
Zy5jIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrZHJhd2luZy5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oIFwKQEAgLTM3MzgsOCArMzczNyw3
IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aGVlbEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldEd0
ay5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250
ZXh0R3RrMi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJp
bmdDb250ZXh0R3RrMy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9XaWRnZXRS
ZW5kZXJpbmdDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdl
dFJlbmRlcmluZ0NvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAppbmRleCA2YTQwMjllLi5jMmY2ZWI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAK
QEAgLTEwMSw3MyArMTAxLDIyIEBAIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1l
Ojp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKICAgICByZXR1cm4gcnQ7CiB9CiAKLXN0YXRpYyBp
bnQgbW96R3RrUmVmQ291bnQgPSAwOwotCiBSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGso
KQotICAgIDogbV9ndGtXaW5kb3coMCkKLSAgICAsIG1fZ3RrQ29udGFpbmVyKDApCi0gICAgLCBt
X2d0a0J1dHRvbigwKQotICAgICwgbV9ndGtFbnRyeSgwKQotICAgICwgbV9ndGtUcmVlVmlldygw
KQotICAgICwgbV9ndGtWU2NhbGUoMCkKLSAgICAsIG1fZ3RrSFNjYWxlKDApCi0gICAgLCBtX3Bh
bmVsQ29sb3IoQ29sb3I6OndoaXRlKQorICAgIDogbV9wYW5lbENvbG9yKENvbG9yOjp3aGl0ZSkK
ICAgICAsIG1fc2xpZGVyQ29sb3IoQ29sb3I6OndoaXRlKQogICAgICwgbV9zbGlkZXJUaHVtYkNv
bG9yKENvbG9yOjp3aGl0ZSkKICAgICAsIG1fbWVkaWFJY29uU2l6ZSgxNikKICAgICAsIG1fbWVk
aWFTbGlkZXJIZWlnaHQoMTQpCiAgICAgLCBtX21lZGlhU2xpZGVyVGh1bWJXaWR0aCgxMikKICAg
ICAsIG1fbWVkaWFTbGlkZXJUaHVtYkhlaWdodCgxMikKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05f
MgotICAgICwgbV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCh0cnVlKQotI2VuZGlmCiB7Ci0K
LSAgICBtZW1zZXQoJm1fdGhlbWVQYXJ0cywgMCwgc2l6ZW9mKEd0a1RoZW1lUGFydHMpKTsKLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIEdka0NvbG9ybWFwKiBjb2xvcm1hcCA9IGdka19z
Y3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAoZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdCgpKTsKLSAgICBp
ZiAoIWNvbG9ybWFwKSB7Ci0gICAgICAgIG1fdGhlbWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXAgPSBm
YWxzZTsKLSAgICAgICAgY29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9kZWZhdWx0X2NvbG9ybWFw
KGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7Ci0gICAgfQotICAgIG1fdGhlbWVQYXJ0cy5jb2xv
cm1hcCA9IGNvbG9ybWFwOwotI2VuZGlmCi0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBNb3ppbGxh
IHRoZW1lIGRyYXdpbmcgY29kZS4KLSAgICBpZiAoIW1vekd0a1JlZkNvdW50KSB7Ci0gICAgICAg
IG1vel9ndGtfaW5pdCgpOwotICAgICAgICBtb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cygmbV90aGVt
ZVBhcnRzKTsKLSAgICB9Ci0gICAgKyttb3pHdGtSZWZDb3VudDsKLQorICAgIHBsYXRmb3JtSW5p
dCgpOwogI2lmIEVOQUJMRShWSURFTykKICAgICBpbml0TWVkaWFDb2xvcnMoKTsKICAgICBpbml0
TWVkaWFCdXR0b25zKCk7CiAjZW5kaWYKIH0KIAotUmVuZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVt
ZUd0aygpCi17Ci0gICAgLS1tb3pHdGtSZWZDb3VudDsKLQotICAgIGlmICghbW96R3RrUmVmQ291
bnQpCi0gICAgICAgIG1vel9ndGtfc2h1dGRvd24oKTsKLQotICAgIGd0a193aWRnZXRfZGVzdHJv
eShtX2d0a1dpbmRvdyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmdldEluZGljYXRvck1l
dHJpY3MoQ29udHJvbFBhcnQgcGFydCwgaW50JiBpbmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRv
clNwYWNpbmcpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBh
cnQgPT0gUmFkaW9QYXJ0KTsKLSAgICBpZiAocGFydCA9PSBDaGVja2JveFBhcnQpIHsKLSAgICAg
ICAgbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRv
clNwYWNpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmFkaW9QYXJ0Ci0g
ICAgbW96X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNw
YWNpbmcpOwotfQotCiBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVh
cmFuY2UpCiB7CiAgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7CkBAIC0yMjcsMTMgKzE3NiwxMyBA
QCBHdGtUZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24pCiAgICAgfQogfQogCi1HdGtTdGF0ZVR5cGUgUmVuZGVyVGhlbWVHdGs6Omd0a0ljb25TdGF0
ZShSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCkKK3N0YXRpYyBHdGtTdGF0ZVR5cGUgZ3RrSWNv
blN0YXRlKFJlbmRlclRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QpCiB7
Ci0gICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKKyAgICBpZiAoIXRoZW1lLT5pc0Vu
YWJsZWQocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElW
RTsKLSAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCisgICAgaWYgKHRoZW1lLT5pc1By
ZXNzZWQocmVuZGVyT2JqZWN0KSkKICAgICAgICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7Ci0g
ICAgaWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgIGlmICh0aGVtZS0+aXNIb3ZlcmVk
KHJlbmRlck9iamVjdCkpCiAgICAgICAgIHJldHVybiBHVEtfU1RBVEVfUFJFTElHSFQ7CiAKICAg
ICByZXR1cm4gR1RLX1NUQVRFX05PUk1BTDsKQEAgLTMxOCw3ICsyNjcsNyBAQCBib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplYwogewogICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJ
Y29uKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfRklORCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGd0a0ljb25TdGF0ZShyZW5kZXJPYmplY3QpLCBHVEtfSUNPTl9TSVpFX01FTlUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a0ljb25TdGF0ZSh0
aGlzLCByZW5kZXJPYmplY3QpLCBHVEtfSUNPTl9TSVpFX01FTlUpOwogICAgIHBhaW50R2RrUGl4
YnVmKHBhaW50SW5mby5jb250ZXh0LCBpY29uLmdldCgpLCBjZW50ZXJSZWN0VmVydGljYWxseUlu
UGFyZW50SW5wdXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCkpOwogICAgIHJldHVybiBmYWxz
ZTsKIH0KQEAgLTMzOCw3ICsyODcsNyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjbwogewogICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tJY29uKEdUS19UWVBFX0VOVFJZLCBH
VEtfU1RPQ0tfQ0xFQVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUo
cmVuZGVyT2JqZWN0KSwgR1RLX0lDT05fU0laRV9NRU5VKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwg
R1RLX0lDT05fU0laRV9NRU5VKTsKICAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4
dCwgaWNvbi5nZXQoKSwgY2VudGVyUmVjdFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChy
ZW5kZXJPYmplY3QsIHJlY3QpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC00NTAsNyArMzk5
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihSZW5kZXJPYmplY3Qq
IHJlbmRlck9iamVjdCwgR3JhcGhpY3NDb250ZXgKIHsKICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
aWNvbiA9IGdldFN0b2NrSWNvbihHVEtfVFlQRV9DT05UQUlORVIsIGljb25OYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHJlbmRlck9iamVjdCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrSWNvblN0YXRlKHRoaXMsIHJl
bmRlck9iamVjdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0TWVkaWFCdXR0b25JY29uU2l6ZShtX21lZGlhSWNvblNpemUpKTsKICAgICBJbnRQb2ludCBp
Y29uUG9pbnQocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIs
CiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21l
ZGlhSWNvblNpemUpIC8gMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJU
aGVtZUd0ay5oCmluZGV4IGVmMWRmMDUuLjc0Yjg4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBAIC0yOSw5ICsyOSwxNCBAQAogI2RlZmluZSBS
ZW5kZXJUaGVtZUd0a19oCiAKICNpbmNsdWRlICJHUmVmUHRyLmgiCi0jaW5jbHVkZSAiZ3RrZHJh
d2luZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAKKyNpZmRlZiBHVEtfQVBJX1ZFUlNJ
T05fMgorI2luY2x1ZGUgImd0a2RyYXdpbmcuaCIKKyNlbmRpZgorCit0eXBlZGVmIGd1bG9uZyBH
VHlwZTsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSZW5kZXJUaGVtZUd0ayA6IHB1
YmxpYyBSZW5kZXJUaGVtZSB7CkBAIC04NiwxMCArOTEsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1l
LCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgZ2V0SW5kaWNhdG9y
TWV0cmljcyhDb250cm9sUGFydCwgaW50JiBpbmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNw
YWNpbmcpIGNvbnN0OwotCiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKICAgICBHdGtXaWRnZXQq
IGd0a1Njcm9sbGJhcigpOworICAgIHN0YXRpYyB2b2lkIGdldEluZGljYXRvck1ldHJpY3MoQ29u
dHJvbFBhcnQsIGludCYgaW5kaWNhdG9yU2l6ZSwgaW50JiBpbmRpY2F0b3JTcGFjaW5nKTsKICNl
bHNlCiAgICAgR3RrU3R5bGVDb250ZXh0KiBndGtTY3JvbGxiYXJTdHlsZSgpOwogI2VuZGlmCkBA
IC0xNjMsNDUgKzE2Nyw0MSBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBH
dGtXaWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBj
b25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1RyZWVWaWV3KCkgY29uc3Q7Ci0gICAgR3RrV2lkZ2V0
KiBndGtWU2NhbGUoKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0hTY2FsZSgpIGNvbnN0Owot
ICAgIEd0a1dpZGdldCogZ3RrQ29udGFpbmVyKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldHVwV2lk
Z2V0QW5kQWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiwgR3RrV2lkZ2V0KikgY29uc3Q7Ci0gICAg
R3RrU3RhdGVUeXBlIGdldEd0a1N0YXRlVHlwZShSZW5kZXJPYmplY3QqIG9iamVjdCk7Ci0gICAg
Ym9vbCBwYWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUsIFJlbmRlck9iamVjdCos
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncyA9IDApOwor
ICAgIHZvaWQgcGxhdGZvcm1Jbml0KCk7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIGJvb2wgcGFp
bnRNZWRpYUJ1dHRvbihSZW5kZXJPYmplY3QqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgY2hhciogaWNvbk5hbWUpOwogI2VuZGlmCi0gICAgR3RrU3RhdGVUeXBlIGd0
a0ljb25TdGF0ZShSZW5kZXJPYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBzZXRUZXh0SW5wdXRC
b3JkZXJzKFJlbmRlclN0eWxlKik7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrSWNv
bihHVHlwZSwgY29uc3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRl
LCBnaW50IGljb25TaXplKTsKIAotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1dpbmRvdzsK
LSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtDb250YWluZXI7Ci0gICAgbXV0YWJsZSBHdGtX
aWRnZXQqIG1fZ3RrQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0VudHJ5Owot
ICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a1RyZWVWaWV3OwotICAgIG11dGFibGUgR3RrV2lk
Z2V0KiBtX2d0a1ZTY2FsZTsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtIU2NhbGU7Ci0K
ICAgICBtdXRhYmxlIENvbG9yIG1fcGFuZWxDb2xvcjsKICAgICBtdXRhYmxlIENvbG9yIG1fc2xp
ZGVyQ29sb3I7CiAgICAgbXV0YWJsZSBDb2xvciBtX3NsaWRlclRodW1iQ29sb3I7Ci0KICAgICBj
b25zdCBpbnQgbV9tZWRpYUljb25TaXplOwogICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVySGVp
Z2h0OwogICAgIGNvbnN0IGludCBtX21lZGlhU2xpZGVyVGh1bWJXaWR0aDsKICAgICBjb25zdCBp
bnQgbV9tZWRpYVNsaWRlclRodW1iSGVpZ2h0OwogCi0gICAgR3RrVGhlbWVQYXJ0cyBtX3RoZW1l
UGFydHM7CiAjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKyAgICB2b2lkIHNldHVwV2lkZ2V0QW5k
QWRkVG9Db250YWluZXIoR3RrV2lkZ2V0KiwgR3RrV2lkZ2V0KikgY29uc3Q7CisgICAgYm9vbCBw
YWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUsIFJlbmRlck9iamVjdCosIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmLCBpbnQgZmxhZ3MgPSAwKTsKKyAgICBHdGtUaGVt
ZVBhcnRzIG1fdGhlbWVQYXJ0czsKKyAgICBHdGtXaWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0Owor
ICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a1RyZWVW
aWV3KCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtWU2NhbGUoKSBjb25zdDsKKyAgICBHdGtX
aWRnZXQqIGd0a0hTY2FsZSgpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrQ29udGFpbmVyKCkg
Y29uc3Q7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrV2luZG93OworICAgIG11dGFibGUg
R3RrV2lkZ2V0KiBtX2d0a0NvbnRhaW5lcjsKKyAgICBtdXRhYmxlIEd0a1dpZGdldCogbV9ndGtC
dXR0b247CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrRW50cnk7CisgICAgbXV0YWJsZSBH
dGtXaWRnZXQqIG1fZ3RrVHJlZVZpZXc7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQqIG1fZ3RrVlNj
YWxlOworICAgIG11dGFibGUgR3RrV2lkZ2V0KiBtX2d0a0hTY2FsZTsKICAgICBib29sIG1fdGhl
bWVQYXJ0c0hhdmVSR0JBQ29sb3JtYXA7Ci0jZW5kaWYKICAgICBmcmllbmQgY2xhc3MgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDsKKyNlbmRpZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcAppbmRleCA2MjNiOTcwLi4yZWJjYjBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsyLmNwcApA
QCAtNDksNiArNDksNDUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gVGhpcyBpcyBub3QgYSBz
dGF0aWMgbWV0aG9kLCBiZWNhdXNlIHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIEdUSysgaGVhZGVy
cyBpbiBSZW5kZXJUaGVtZUd0ay5oLgogZXh0ZXJuIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERp
cmVjdGlvbihUZXh0RGlyZWN0aW9uKTsKIAorc3RhdGljIGludCBtb3pHdGtSZWZDb3VudCA9IDA7
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluaXQoKQoreworICAgIG1fdGhlbWVQYXJ0
c0hhdmVSR0JBQ29sb3JtYXAgPSB0cnVlOworICAgIG1fZ3RrV2luZG93ID0gMDsKKyAgICBtX2d0
a0NvbnRhaW5lciA9IDA7CisgICAgbV9ndGtCdXR0b24gPSAwOworICAgIG1fZ3RrRW50cnkgPSAw
OworICAgIG1fZ3RrVHJlZVZpZXcgPSAwOworICAgIG1fZ3RrVlNjYWxlID0gMDsKKyAgICBtX2d0
a0hTY2FsZSA9IDA7CisKKyAgICBtZW1zZXQoJm1fdGhlbWVQYXJ0cywgMCwgc2l6ZW9mKEd0a1Ro
ZW1lUGFydHMpKTsKKyAgICBHZGtDb2xvcm1hcCogY29sb3JtYXAgPSBnZGtfc2NyZWVuX2dldF9y
Z2JhX2NvbG9ybWFwKGdka19zY3JlZW5fZ2V0X2RlZmF1bHQoKSk7CisgICAgaWYgKCFjb2xvcm1h
cCkgeworICAgICAgICBtX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwID0gZmFsc2U7CisgICAg
ICAgIGNvbG9ybWFwID0gZ2RrX3NjcmVlbl9nZXRfZGVmYXVsdF9jb2xvcm1hcChnZGtfc2NyZWVu
X2dldF9kZWZhdWx0KCkpOworICAgIH0KKyAgICBtX3RoZW1lUGFydHMuY29sb3JtYXAgPSBjb2xv
cm1hcDsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIE1vemlsbGEgdGhlbWUgZHJhd2luZyBjb2Rl
LgorICAgIGlmICghbW96R3RrUmVmQ291bnQpIHsKKyAgICAgICAgbW96X2d0a19pbml0KCk7Cisg
ICAgICAgIG1vel9ndGtfdXNlX3RoZW1lX3BhcnRzKCZtX3RoZW1lUGFydHMpOworICAgIH0KKyAg
ICArK21vekd0a1JlZkNvdW50OworfQorCitSZW5kZXJUaGVtZUd0azo6flJlbmRlclRoZW1lR3Rr
KCkKK3sKKyAgICAtLW1vekd0a1JlZkNvdW50OworCisgICAgaWYgKCFtb3pHdGtSZWZDb3VudCkK
KyAgICAgICAgbW96X2d0a19zaHV0ZG93bigpOworCisgICAgaWYgKG1fZ3RrV2luZG93KQorICAg
ICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9ndGtXaW5kb3cpOworfQorCiAjaWYgRU5BQkxFKFZJ
REVPKQogdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29sb3JzKCkKIHsKQEAgLTYzLDEz
ICsxMDIsMTMgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpCiB7CiB9CiAKLUd0a1N0YXRlVHlwZSBSZW5kZXJUaGVt
ZUd0azo6Z2V0R3RrU3RhdGVUeXBlKFJlbmRlck9iamVjdCogb2JqZWN0KQorc3RhdGljIEd0a1N0
YXRlVHlwZSBnZXRHdGtTdGF0ZVR5cGUoUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKIHsKLSAgICBpZiAoIWlzRW5hYmxlZChvYmplY3QpIHx8IGlzUmVhZE9ubHlD
b250cm9sKG9iamVjdCkpCisgICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKG9iamVjdCkgfHwgdGhl
bWUtPmlzUmVhZE9ubHlDb250cm9sKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBHVEtfU1RBVEVf
SU5TRU5TSVRJVkU7Ci0gICAgaWYgKGlzUHJlc3NlZChvYmplY3QpKQorICAgIGlmICh0aGVtZS0+
aXNQcmVzc2VkKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBHVEtfU1RBVEVfQUNUSVZFOwotICAg
IGlmIChpc0hvdmVyZWQob2JqZWN0KSkKKyAgICBpZiAodGhlbWUtPmlzSG92ZXJlZChvYmplY3Qp
KQogICAgICAgICByZXR1cm4gR1RLX1NUQVRFX1BSRUxJR0hUOwogICAgIHJldHVybiBHVEtfU1RB
VEVfTk9STUFMOwogfQpAQCAtMTAyLDYgKzE0MSwxOCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFJlbmRlck9iamVjdChHdGtUaGVtZVdpZGdldFR5cGUgdHlwZSwgUmVuZGVyT2JqZWN0KiBy
ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrVGV4dERp
cmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CiB9CiAKK3ZvaWQg
UmVuZGVyVGhlbWVHdGs6OmdldEluZGljYXRvck1ldHJpY3MoQ29udHJvbFBhcnQgcGFydCwgaW50
JiBpbmRpY2F0b3JTaXplLCBpbnQmIGluZGljYXRvclNwYWNpbmcpCit7CisgICAgQVNTRVJUKHBh
cnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0gUmFkaW9QYXJ0KTsKKyAgICBpZiAocGFydCA9
PSBDaGVja2JveFBhcnQpIHsKKyAgICAgICAgbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcygm
aW5kaWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gUmFkaW9QYXJ0CisgICAgbW96X2d0a19yYWRpb19nZXRfbWV0cmljcygmaW5k
aWNhdG9yU2l6ZSwgJmluZGljYXRvclNwYWNpbmcpOworfQorCiBzdGF0aWMgdm9pZCBzZXRUb2dn
bGVTaXplKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyU3R5bGUqIHN0eWxlLCBD
b250cm9sUGFydCBhcHBlYXJhbmNlKQogewogICAgIC8vIFRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFy
ZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgpAQCAtMTEwLDcg
KzE2MSw3IEBAIHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoY29uc3QgUmVuZGVyVGhlbWVHdGsq
IHRoZW1lLCBSZW5kZXJTdHlsZSogc3R5bGUsIENvbnRyCiAKICAgICAvLyBGSVhNRTogVGhpcyBp
cyBwcm9iYWJseSBub3QgY29ycmVjdCB1c2Ugb2YgaW5kaWNhdG9yU2l6ZSBhbmQgaW5kaWNhdG9y
U3BhY2luZy4KICAgICBnaW50IGluZGljYXRvclNpemUsIGluZGljYXRvclNwYWNpbmc7Ci0gICAg
dGhlbWUtPmdldEluZGljYXRvck1ldHJpY3MoYXBwZWFyYW5jZSwgaW5kaWNhdG9yU2l6ZSwgaW5k
aWNhdG9yU3BhY2luZyk7CisgICAgUmVuZGVyVGhlbWVHdGs6OmdldEluZGljYXRvck1ldHJpY3Mo
YXBwZWFyYW5jZSwgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZyk7CiAKICAgICAvLyBP
dGhlciBwb3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMywgYnV0IEdUSysgdXNlcnMgdGVuZCB0byBk
ZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgogICAgIC8vIEl0IGNvdWxkIGJlIG1hZGUgYSBjb25maWd1
cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3RoZXIgdGhhbiAxMyBhY3R1YWxseSBicmVhayBzaXRlIGNv
bXBhdGliaWxpdHkuCkBAIC0xNTEsNyArMjAyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY28K
ICAgICBJbnRSZWN0IGJ1dHRvblJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpOwogICAgIElu
dFJlY3QgZm9jdXNSZWN0KGJ1dHRvblJlY3QpOwogCi0gICAgR3RrU3RhdGVUeXBlIHN0YXRlID0g
Z2V0R3RrU3RhdGVUeXBlKG9iamVjdCk7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlID0gZ2V0R3Rr
U3RhdGVUeXBlKHRoaXMsIG9iamVjdCk7CiAgICAgZ3RrX3dpZGdldF9zZXRfc3RhdGUod2lkZ2V0
LCBzdGF0ZSk7CiAgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHdpZGdldCwgZ3RrVGV4dERp
cmVjdGlvbihvYmplY3QtPnN0eWxlKCktPmRpcmVjdGlvbigpKSk7CiAKQEAgLTI2NSw3ICszMTYs
NyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
b2JqZWN0LCBjb25zdCBQYWludEluZm8mIGluZgogICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQg
d2lkZ2V0Q29udGV4dChpbmZvLmNvbnRleHQsIHJlY3QpOwogICAgIHdpZGdldENvbnRleHQuZ3Rr
UGFpbnRCb3godHJvdWdoUmVjdCwgd2lkZ2V0LCBHVEtfU1RBVEVfQUNUSVZFLCBHVEtfU0hBRE9X
X09VVCwgInRyb3VnaCIpOwogICAgIGlmIChpc0ZvY3VzZWQob2JqZWN0KSkKLSAgICAgICAgd2lk
Z2V0Q29udGV4dC5ndGtQYWludEZvY3VzKEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkp
LCB3aWRnZXQsIGdldEd0a1N0YXRlVHlwZShvYmplY3QpLCAidHJvdWdoIik7CisgICAgICAgIHdp
ZGdldENvbnRleHQuZ3RrUGFpbnRGb2N1cyhJbnRSZWN0KEludFBvaW50KCksIHJlY3Quc2l6ZSgp
KSwgd2lkZ2V0LCBnZXRHdGtTdGF0ZVR5cGUodGhpcywgb2JqZWN0KSwgInRyb3VnaCIpOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjk4LDcgKzM0OSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVH
dGs6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgaW5mCiAgICAgLy8gb24gdGhlbS4gCiAgICAgSW50UmVjdCB0aHVtYlJlY3QoSW50UG9pbnQo
KSwgcmVjdC5zaXplKCkpOwogICAgIFdpZGdldFJlbmRlcmluZ0NvbnRleHQgd2lkZ2V0Q29udGV4
dChpbmZvLmNvbnRleHQsIHJlY3QpOwotICAgIHdpZGdldENvbnRleHQuZ3RrUGFpbnRTbGlkZXIo
dGh1bWJSZWN0LCB3aWRnZXQsIGdldEd0a1N0YXRlVHlwZShvYmplY3QpLCBHVEtfU0hBRE9XX09V
VCwgZGV0YWlsLCBvcmllbnRhdGlvbik7CisgICAgd2lkZ2V0Q29udGV4dC5ndGtQYWludFNsaWRl
cih0aHVtYlJlY3QsIHdpZGdldCwgZ2V0R3RrU3RhdGVUeXBlKHRoaXMsIG9iamVjdCksIEdUS19T
SEFET1dfT1VULCBkZXRhaWwsIG9yaWVudGF0aW9uKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKaW5k
ZXggMjcwYTAzYi4uMWIyY2IzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR3RrMy5jcHAKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiVXNlckFnZW50
U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5j
bHVkZSAiZ3RrZHJhd2luZy5oIgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPGdkay9nZGsu
aD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CkBAIC05NCwxNSArOTIsMzMgQEAgc3RhdGljIEd0a1N0
eWxlQ29udGV4dCogZ2V0U3R5bGVDb250ZXh0KEdUeXBlIHdpZGdldFR5cGUpCiAgICAgcmV0dXJu
IGNvbnRleHQuZ2V0KCk7CiB9CiAKK0d0a1N0eWxlQ29udGV4dCogUmVuZGVyVGhlbWVHdGs6Omd0
a1Njcm9sbGJhclN0eWxlKCkKK3sKKyAgICByZXR1cm4gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1NDUk9MTEJBUik7Cit9CisKIC8vIFRoaXMgaXMgbm90IGEgc3RhdGljIG1ldGhvZCwgYmVjYXVz
ZSB3ZSB3YW50IHRvIGF2b2lkIGhhdmluZyBHVEsrIGhlYWRlcnMgaW4gUmVuZGVyVGhlbWVHdGsu
aC4KIGV4dGVybiBHdGtUZXh0RGlyZWN0aW9uIGd0a1RleHREaXJlY3Rpb24oVGV4dERpcmVjdGlv
bik7CiAKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5pdCgpCit7Cit9CisKK1JlbmRl
clRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQoreworfQorCiB2b2lkIFJlbmRlclRoZW1lR3Rr
Ojppbml0TWVkaWFDb2xvcnMoKQogewotICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRf
Z2V0X3N0eWxlKEdUS19XSURHRVQoZ3RrQ29udGFpbmVyKCkpKTsKLSAgICBtX3BhbmVsQ29sb3Ig
PSBzdHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF07Ci0gICAgbV9zbGlkZXJDb2xvciA9IHN0eWxl
LT5iZ1tHVEtfU1RBVEVfQUNUSVZFXTsKLSAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBzdHlsZS0+
YmdbR1RLX1NUQVRFX1NFTEVDVEVEXTsKKyAgICBHZGtSR0JBIGNvbG9yOworICAgIEd0a1N0eWxl
Q29udGV4dCogY29udGFpbmVyQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT05U
QUlORVIpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29u
dGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfTk9STUFMLCAmY29sb3IpOworICAgIG1fcGFu
ZWxDb2xvciA9IGNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2Nv
bG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9GTEFHX0FDVElWRSwgJmNvbG9yKTsKKyAg
ICBtX3NsaWRlckNvbG9yID0gY29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tn
cm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZj
b2xvcik7CisgICAgbV9zbGlkZXJUaHVtYkNvbG9yID0gY29sb3I7CiB9CiAKIHN0YXRpYyB2b2lk
IGFkanVzdFJlY3RGb3JGb2N1cyhHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIEludFJlY3QmIHJl
Y3QpCkBAIC0xNTgsNDUgKzE3NCw2IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFp
bnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBJbnRSZWN0CiAgICAgYWRq
dXN0UmVjdEZvckZvY3VzKGNvbnRleHQsIHJlY3QpOwogfQogCi1HdGtTdGF0ZVR5cGUgUmVuZGVy
VGhlbWVHdGs6OmdldEd0a1N0YXRlVHlwZShSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsKLSAgICBp
ZiAoIWlzRW5hYmxlZChvYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKG9iamVjdCkpCi0gICAg
ICAgIHJldHVybiBHVEtfU1RBVEVfSU5TRU5TSVRJVkU7Ci0gICAgaWYgKGlzUHJlc3NlZChvYmpl
Y3QpKQotICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0FDVElWRTsKLSAgICBpZiAoaXNIb3ZlcmVk
KG9iamVjdCkpCi0gICAgICAgIHJldHVybiBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgcmV0dXJu
IEdUS19TVEFURV9OT1JNQUw7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UmVuZGVy
T2JqZWN0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgZmxh
Z3MpCi17Ci0gICAgLy8gUGFpbnRpbmcgaXMgZGlzYWJsZWQgc28ganVzdCBjbGFpbSB0byBoYXZl
IHN1Y2NlZWRlZAotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEd0a1dpZGdldFN0YXRlIHdpZGdldFN0YXRlOwotICAgIHdp
ZGdldFN0YXRlLmFjdGl2ZSA9IGlzUHJlc3NlZChyZW5kZXJPYmplY3QpOwotICAgIHdpZGdldFN0
YXRlLmZvY3VzZWQgPSBpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KTsKLQotICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM2NAotICAgIC8vIFRoZSBNb3ppbGxh
IHRoZW1lIGRyYXdpbmcgY29kZSwgb25seSBwYWludHMgYSBidXR0b24gYXMgcHJlc3NlZCB3aGVu
IGl0J3MgcHJlc3NlZCAKLSAgICAvLyB3aGlsZSBob3ZlcmVkLiBVbnRpbCB3ZSBtb3ZlIGF3YXkg
ZnJvbSB0aGUgTW96aWxhIGNvZGUsIHdvcmstYXJvdW5kIHRoZSBpc3N1ZSBieQotICAgIC8vIGZv
cmNpbmcgYSBwcmVzc2VkIGJ1dHRvbiBpbnRvIHRoZSBob3ZlcmVkIHN0YXRlLiBUaGlzIGVuc3Vy
ZXMgdGhhdCBidXR0b25zIGFjdGl2YXRlZAotICAgIC8vIHZpYSB0aGUga2V5Ym9hcmQgaGF2ZSB0
aGUgcHJvcGVyIHJlbmRlcmluZy4KLSAgICB3aWRnZXRTdGF0ZS5pbkhvdmVyID0gaXNIb3ZlcmVk
KHJlbmRlck9iamVjdCkgfHwgKHR5cGUgPT0gTU9aX0dUS19CVVRUT04gJiYgaXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpOwotCi0gICAgLy8gRklYTUU6IERpc2FibGVkIGRvZXMgbm90IGFsd2F5cyBn
aXZlIHRoZSBjb3JyZWN0IGFwcGVhcmFuY2UgZm9yIFJlYWRPbmx5Ci0gICAgd2lkZ2V0U3RhdGUu
ZGlzYWJsZWQgPSAhaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wo
cmVuZGVyT2JqZWN0KTsKLSAgICB3aWRnZXRTdGF0ZS5pc0RlZmF1bHQgPSBmYWxzZTsKLSAgICB3
aWRnZXRTdGF0ZS5jYW5EZWZhdWx0ID0gZmFsc2U7Ci0gICAgd2lkZ2V0U3RhdGUuZGVwcmVzc2Vk
ID0gZmFsc2U7Ci0KLSAgICBXaWRnZXRSZW5kZXJpbmdDb250ZXh0IHdpZGdldENvbnRleHQoY29u
dGV4dCwgcmVjdCk7Ci0gICAgcmV0dXJuICF3aWRnZXRDb250ZXh0LnBhaW50TW96aWxsYVdpZGdl
dCh0eXBlLCAmd2lkZ2V0U3RhdGUsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3QtPnN0eWxlKCkt
PmRpcmVjdGlvbigpKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgLy8gVGhlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRo
ZW0uCkBAIC04NzIsODYgKzg0OSw2IEBAIENvbG9yIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Db2xv
cihpbnQgY3NzVmFsdWVJZCkgY29uc3QKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGd0a1N0eWxl
U2V0Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxlKiBwcmV2aW91cywgUmVuZGVy
VGhlbWUqIHJlbmRlclRoZW1lKQotewotICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5j
dGlvbiBkb2Vzbid0IGdldCBjYWxsZWQgbWFueSB0aW1lcyBmb3IgYSBzaW5nbGUgR1RLKyBzdHls
ZSBjaGFuZ2Ugc2lnbmFsLgotICAgIHJlbmRlclRoZW1lLT5wbGF0Zm9ybUNvbG9yc0RpZENoYW5n
ZSgpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXR1cFdpZGdldEFuZEFkZFRvQ29udGFp
bmVyKEd0a1dpZGdldCogd2lkZ2V0LCBHdGtXaWRnZXQqIHdpbmRvdykgY29uc3QKLXsKLSAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHdpbmRvdyksIHdpZGdldCk7Ci0gICAgZ3Rr
X3dpZGdldF9yZWFsaXplKHdpZGdldCk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qo
d2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoVFJVRSkpOwot
Ci0gICAgLy8gRklYTUU6IFBlcmhhcHMgdGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIHRo
ZSBjb250YWluaW5nIHdpbmRvdyBvciBwYXJlbnQgY29udGFpbmVyLgotICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2lkZ2V0LCAic3R5bGUtc2V0IiwgR19DQUxMQkFDSyhndGtTdHlsZVNldENhbGxiYWNr
KSwgY29uc3RfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KHRoaXMpKTsKLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrQ29udGFpbmVyKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtDb250
YWluZXIpCi0gICAgICAgIHJldHVybiBtX2d0a0NvbnRhaW5lcjsKLQotICAgIG1fZ3RrV2luZG93
ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19QT1BVUCk7Ci0gICAgZ3RrX3dpZGdldF9yZWFs
aXplKG1fZ3RrV2luZG93KTsKLSAgICBndGtfd2lkZ2V0X3NldF9uYW1lKG1fZ3RrV2luZG93LCAi
TW96aWxsYUd0a1dpZGdldCIpOwotCi0gICAgbV9ndGtDb250YWluZXIgPSBndGtfZml4ZWRfbmV3
KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0NvbnRhaW5lciwgbV9n
dGtXaW5kb3cpOwotICAgIHJldHVybiBtX2d0a0NvbnRhaW5lcjsKLX0KLQotR3RrV2lkZ2V0KiBS
ZW5kZXJUaGVtZUd0azo6Z3RrQnV0dG9uKCkgY29uc3QKLXsKLSAgICBpZiAobV9ndGtCdXR0b24p
Ci0gICAgICAgIHJldHVybiBtX2d0a0J1dHRvbjsKLSAgICBtX2d0a0J1dHRvbiA9IGd0a19idXR0
b25fbmV3KCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRhaW5lcihtX2d0a0J1dHRvbiwg
Z3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0
KiBSZW5kZXJUaGVtZUd0azo6Z3RrRW50cnkoKSBjb25zdAotewotICAgIGlmIChtX2d0a0VudHJ5
KQotICAgICAgICByZXR1cm4gbV9ndGtFbnRyeTsKLSAgICBtX2d0a0VudHJ5ID0gZ3RrX2VudHJ5
X25ldygpOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9ndGtFbnRyeSwgZ3Rr
Q29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a0VudHJ5OwotfQotCi1HdGtXaWRnZXQqIFJl
bmRlclRoZW1lR3RrOjpndGtUcmVlVmlldygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZ3RrVHJlZVZp
ZXcpCi0gICAgICAgIHJldHVybiBtX2d0a1RyZWVWaWV3OwotICAgIG1fZ3RrVHJlZVZpZXcgPSBn
dGtfdHJlZV92aWV3X25ldygpOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9Db250YWluZXIobV9n
dGtUcmVlVmlldywgZ3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1RyZWVWaWV3Owot
fQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtWU2NhbGUoKSBjb25zdAotewotICAg
IGlmIChtX2d0a1ZTY2FsZSkKLSAgICAgICAgcmV0dXJuIG1fZ3RrVlNjYWxlOwotICAgIG1fZ3Rr
VlNjYWxlID0gZ3RrX3ZzY2FsZV9uZXcoMCk7Ci0gICAgc2V0dXBXaWRnZXRBbmRBZGRUb0NvbnRh
aW5lcihtX2d0a1ZTY2FsZSwgZ3RrQ29udGFpbmVyKCkpOwotICAgIHJldHVybiBtX2d0a1ZTY2Fs
ZTsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUd0azo6Z3RrSFNjYWxlKCkgY29uc3QKLXsK
LSAgICBpZiAobV9ndGtIU2NhbGUpCi0gICAgICAgIHJldHVybiBtX2d0a0hTY2FsZTsKLSAgICBt
X2d0a0hTY2FsZSA9IGd0a19oc2NhbGVfbmV3KDApOwotICAgIHNldHVwV2lkZ2V0QW5kQWRkVG9D
b250YWluZXIobV9ndGtIU2NhbGUsIGd0a0NvbnRhaW5lcigpKTsKLSAgICByZXR1cm4gbV9ndGtI
U2NhbGU7Ci19Ci0KLUd0a1N0eWxlQ29udGV4dCogUmVuZGVyVGhlbWVHdGs6Omd0a1Njcm9sbGJh
clN0eWxlKCkKLXsKLSAgICByZXR1cm4gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDUk9MTEJB
Uik7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vICFHVEtfQVBJX1ZF
UlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJl
bmRlcmluZ0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZk
MWJlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0UmVuZGVyaW5n
Q29udGV4dC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Rr
VmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAiUmVuZGVy
VGhlbWVHdGsuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEdka1Bp
eG1hcCogZ1NjcmF0Y2hCdWZmZXIgPSAwOworc3RhdGljIHZvaWQgcHVyZ2VTY3JhdGNoQnVmZmVy
KCkKK3sKKyAgICBpZiAoZ1NjcmF0Y2hCdWZmZXIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGdT
Y3JhdGNoQnVmZmVyKTsKKyAgICBnU2NyYXRjaEJ1ZmZlciA9IDA7Cit9CisKKy8vIEZJWE1FOiBQ
ZXJoYXBzIHdlIGNhbiBzaGFyZSBzb21lIG9mIHRoaXMgY29kZSB3aXRoIHRoZSBDb250ZXh0U2hh
ZG93Q2Fpcm8uCisvLyBXaWRnZXQgcmVuZGVyaW5nIG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0
aGUgYnVmZmVyIGZvciB0aGUgaW50ZXJtZWRpYXRlCisvLyByZW5kZXIuIEluc3RlYWQgb2YgY3Jl
YXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAorLy8g
d2UgY3JlYXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlh
IGEgdGltZXIuCitjbGFzcyBQdXJnZVNjcmF0Y2hCdWZmZXJUaW1lciA6IHB1YmxpYyBUaW1lckJh
c2UgeworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZmlyZWQoKSB7IHB1cmdlU2NyYXRjaEJ1
ZmZlcigpOyB9Cit9Oworc3RhdGljIFB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyIHB1cmdlU2NyYXRj
aEJ1ZmZlclRpbWVyOworc3RhdGljIHZvaWQgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKQor
eworICAgIGlmIChwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBw
dXJnZVNjcmF0Y2hCdWZmZXJUaW1lci5zdG9wKCk7CisgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGlt
ZXIuc3RhcnRPbmVTaG90KDIpOworfQorCitzdGF0aWMgSW50U2l6ZSBnZXRFeHRyYVNwYWNlRm9y
V2lkZ2V0KFJlbmRlclRoZW1lR3RrKiB0aGVtZSkKK3sKKyAgICAvLyBDaGVja2JveGVzIGFuZCBz
Y3JvbGxiYXIgdGh1bWJzIG9mdGVuIGRyYXcgb3V0c2lkZSB0aGVpciBib3VuZGFyaWVzLiBIZXJl
IHdlIGZpZ3VyZSBvdXQKKyAgICAvLyB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3BhY2Ugd2UgbmVl
ZCBmb3IgYW55IHR5cGUgb2Ygd2lkZ2V0IGFuZCB1c2UgdGhhdCB0byBpbmNyZWFzZSB0aGUKKyAg
ICAvLyBzaXplIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciwgd2hpbGUgcHJlc2VydmluZyB0aGUgZmlu
YWwgd2lkZ2V0IHBvc2l0aW9uLgorCisgICAgLy8gVGhlIGNoZWNrYm94IGV4dHJhIHNwYWNlIGlz
IGNhbGN1bGF0ZWQgYnkgbG9va2luZyBhdCB0aGUgd2lkZ2V0IHN0eWxlLgorICAgIGludCBpbmRp
Y2F0b3JTaXplLCBpbmRpY2F0b3JTcGFjaW5nOworICAgIHRoZW1lLT5nZXRJbmRpY2F0b3JNZXRy
aWNzKENoZWNrYm94UGFydCwgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2luZyk7CisgICAg
SW50U2l6ZSBleHRyYVNwYWNlKGluZGljYXRvclNwYWNpbmcsIGluZGljYXRvclNwYWNpbmcpOwor
CisgICAgLy8gU2Nyb2xsYmFyIHRodW1icyBuZWVkIGF0IGxlYXN0IGFuIGV4dHJhIHBpeGVsIGFs
b25nIHRoZWlyIG1vdmVtZW50IGF4aXMuCisgICAgcmV0dXJuIGV4dHJhU3BhY2UuZXhwYW5kZWRU
byhJbnRTaXplKDEsIDEpKTsKK30KKworV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6V2lkZ2V0UmVu
ZGVyaW5nQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50
UmVjdCYgdGFyZ2V0UmVjdCkKKyAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGdyYXBoaWNzQ29udGV4
dCkKKyAgICAsIG1fdGFyZ2V0UmVjdCh0YXJnZXRSZWN0KQorICAgICwgbV9oYWRFcnJvcihmYWxz
ZSkKK3sKKyAgICBSZW5kZXJUaGVtZUd0ayogdGhlbWUgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZUd0ayo+KFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS5nZXQoKSk7CisKKyAgICAvLyBGYWxs
YmFjazogV2UgZmFpbGVkIHRvIGNyZWF0ZSBhbiBSR0JBIGNvbG9ybWFwIGVhcmxpZXIsIHNvIHdl
IGNhbm5vdCBwcm9wZXJseSBwYWludCAKKyAgICAvLyB0byBhIHRlbXBvcmFyeSBzdXJmYWNlIGFu
ZCBwcmVzZXJ2ZSB0cmFuc3BhcmVuY3kuIFRvIGVuc3VyZSBkZWNlbnQgd2lkZ2V0IHJlbmRlcmlu
ZywganVzdAorICAgIC8vIHBhaW50IGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgZHJhd2FibGUuIFRo
aXMgd2lsbCBub3QgcmVuZGVyIENTUyByb3RhdGlvbmFsIHRyYW5zZm9ybXMgcHJvcGVybHkuCisg
ICAgaWYgKCF0aGVtZS0+bV90aGVtZVBhcnRzSGF2ZVJHQkFDb2xvcm1hcCAmJiBncmFwaGljc0Nv
bnRleHQtPmdka1dpbmRvdygpKSB7CisgICAgICAgIG1fcGFpbnRSZWN0ID0gZ3JhcGhpY3NDb250
ZXh0LT5nZXRDVE0oKS5tYXBSZWN0KHRhcmdldFJlY3QpOworICAgICAgICBtX3RhcmdldCA9IGdy
YXBoaWNzQ29udGV4dC0+Z2RrV2luZG93KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBTb21lIHdpZGdldHMgcmVuZGVyIG91dHNpZGUgdGhlaXIgcmVjdGFuZ2xlcy4gV2UgbmVl
ZCB0byBhY2NvdW50IGZvciB0aGlzLgorICAgIG1fZXh0cmFTcGFjZSA9IGdldEV4dHJhU3BhY2VG
b3JXaWRnZXQodGhlbWUpOworCisgICAgLy8gT2Zmc2V0IHRoZSB0YXJnZXQgcmVjdGFuZ2xlIHNv
IHRoYXQgdGhlIGV4dHJhIHNwYWNlIGlzIHdpdGhpbiB0aGUgYm91bmRhcmllcyBvZiB0aGUgc2Ny
YXRjaCBidWZmZXIuCisgICAgbV9wYWludFJlY3QgPSBJbnRSZWN0KEludFBvaW50KG1fZXh0cmFT
cGFjZS53aWR0aCgpLCBtX2V4dHJhU3BhY2UuaGVpZ2h0KCkpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3RhcmdldFJlY3Quc2l6ZSgpKTsKKworICAgIGludCB3aWR0aCA9
IG1fdGFyZ2V0UmVjdC53aWR0aCgpICsgKG1fZXh0cmFTcGFjZS53aWR0aCgpICogMik7CisgICAg
aW50IGhlaWdodCA9IG1fdGFyZ2V0UmVjdC5oZWlnaHQoKSArIChtX2V4dHJhU3BhY2UuaGVpZ2h0
KCkgKiAyKTsKKyAgICBpbnQgc2NyYXRjaFdpZHRoID0gMDsKKyAgICBpbnQgc2NyYXRjaEhlaWdo
dCA9IDA7CisgICAgaWYgKGdTY3JhdGNoQnVmZmVyKQorICAgICAgICBnZGtfcGl4bWFwX2dldF9z
aXplKGdTY3JhdGNoQnVmZmVyLCAmc2NyYXRjaFdpZHRoLCAmc2NyYXRjaEhlaWdodCk7CisKKyAg
ICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBjdXJyZW50
IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCisgICAgaWYgKCFnU2NyYXRjaEJ1ZmZlciB8fCBzY3Jh
dGNoV2lkdGggPCB3aWR0aCB8fCBzY3JhdGNoSGVpZ2h0IDwgaGVpZ2h0KSB7CisgICAgICAgIHB1
cmdlU2NyYXRjaEJ1ZmZlcigpOworICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBw
aXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBmb3Igc2ltaWxhciBzaXplZCByZXF1
ZXN0cy4KKyAgICAgICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsKKyAgICAgICAg
aGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OworCisgICAgICAgIGdTY3JhdGNoQnVm
ZmVyID0gZ2RrX3BpeG1hcF9uZXcoMCwgd2lkdGgsIGhlaWdodCwgZ2RrX2NvbG9ybWFwX2dldF92
aXN1YWwodGhlbWUtPm1fdGhlbWVQYXJ0cy5jb2xvcm1hcCktPmRlcHRoKTsKKyAgICAgICAgZ2Rr
X2RyYXdhYmxlX3NldF9jb2xvcm1hcChnU2NyYXRjaEJ1ZmZlciwgdGhlbWUtPm1fdGhlbWVQYXJ0
cy5jb2xvcm1hcCk7CisgICAgfQorICAgIG1fdGFyZ2V0ID0gZ1NjcmF0Y2hCdWZmZXI7CisKKyAg
ICAvLyBDbGVhciB0aGUgc2NyYXRjaCBidWZmZXIuCisgICAgUmVmUHRyPGNhaXJvX3Q+IHNjcmF0
Y2hCdWZmZXJDb250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShnU2NyYXRjaEJ1ZmZl
cikpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSwg
Q0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KHNjcmF0Y2hCdWZmZXJDb250
ZXh0LmdldCgpKTsKK30KKworV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6fldpZGdldFJlbmRlcmlu
Z0NvbnRleHQoKQoreworICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIGJsaXQgYmFjayB0byB0aGUg
dGFyZ2V0IGluIHRoZSBmYWxsYmFjayBjYXNlLiBTZWUgYWJvdmUuCisgICAgUmVuZGVyVGhlbWVH
dGsqIHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVm
YXVsdFRoZW1lKCkuZ2V0KCkpOworICAgIGlmICghdGhlbWUtPm1fdGhlbWVQYXJ0c0hhdmVSR0JB
Q29sb3JtYXAgJiYgbV9ncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBEb24ndCBwYWludCB0aGUgcmVzdWx0cyBiYWNrIGlmIHRoZXJlIHdhcyBh
biBlcnJvci4KKyAgICBpZiAobV9oYWRFcnJvcikgeworICAgICAgICBzY2hlZHVsZVNjcmF0Y2hC
dWZmZXJQdXJnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEl0
J3MgdW5jbGVhciBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgc291
cmNlIGhlcmUuCisgICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gbV9ncmFwaGljc0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOworICAgIFJlZlB0cjxjYWlyb19wYXR0ZXJuX3Q+IHByZXZpb3Vz
U291cmNlKGNhaXJvX2dldF9zb3VyY2UoY2Fpcm9Db250ZXh0KSk7CisKKyAgICAvLyBUaGUgYmxp
dCByZWN0YW5nbGUgaXMgdGhlIG9yaWdpbmFsIHRhcmdldCByZWN0YW5nbGUgYWRqdXN0ZWQgZm9y
IGFueSBleHRyYSBzcGFjZS4KKyAgICBJbnRSZWN0IGZ1bGxUYXJnZXRSZWN0KG1fdGFyZ2V0UmVj
dCk7CisgICAgZnVsbFRhcmdldFJlY3QuaW5mbGF0ZVgobV9leHRyYVNwYWNlLndpZHRoKCkpOwor
ICAgIGZ1bGxUYXJnZXRSZWN0LmluZmxhdGVZKG1fZXh0cmFTcGFjZS5oZWlnaHQoKSk7CisKKyAg
ICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhtYXAoY2Fpcm9Db250ZXh0LCBnU2NyYXRjaEJ1ZmZl
ciwgZnVsbFRhcmdldFJlY3QueCgpLCBmdWxsVGFyZ2V0UmVjdC55KCkpOworICAgIGNhaXJvX3Jl
Y3RhbmdsZShjYWlyb0NvbnRleHQsIGZ1bGxUYXJnZXRSZWN0LngoKSwgZnVsbFRhcmdldFJlY3Qu
eSgpLCBmdWxsVGFyZ2V0UmVjdC53aWR0aCgpLCBmdWxsVGFyZ2V0UmVjdC5oZWlnaHQoKSk7Cisg
ICAgY2Fpcm9fZmlsbChjYWlyb0NvbnRleHQpOworICAgIGNhaXJvX3NldF9zb3VyY2UoY2Fpcm9D
b250ZXh0LCBwcmV2aW91c1NvdXJjZS5nZXQoKSk7CisgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVy
UHVyZ2UoKTsKK30KKworYm9vbCBXaWRnZXRSZW5kZXJpbmdDb250ZXh0OjpwYWludE1vemlsbGFX
aWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgaW50
IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24pCit7CisgICAgLy8gU29tZXRp
bWVzIG1vel9ndGtfd2lkZ2V0X3BhaW50IG1vZGlmaWVzIHRoZSBjbGlwcGluZyByZWN0YW5nbGUs
IHNvIHdlIG11c3QgdXNlIGEgY29weS4KKyAgICBHZGtSZWN0YW5nbGUgY2xpcFJlY3QgPSBtX3Bh
aW50UmVjdDsKKyAgICBtX2hhZEVycm9yID0gbW96X2d0a193aWRnZXRfcGFpbnQodHlwZSwgbV90
YXJnZXQsICZjbGlwUmVjdCwgJm1fcGFpbnRSZWN0LAorICAgICAgICBzdGF0ZSwgZmxhZ3MsIHRl
eHREaXJlY3Rpb24pICE9IE1PWl9HVEtfU1VDQ0VTUzsKKyAgICByZXR1cm4gIW1faGFkRXJyb3I7
Cit9CisKK3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRCb3goY29uc3QgSW50
UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0
a1NoYWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCkKK3sKKyAgICBHZGtS
ZWN0YW5nbGUgcGFpbnRSZWN0ID0geyBtX3BhaW50UmVjdC54ICsgcmVjdC54KCksIG1fcGFpbnRS
ZWN0LnkgKyByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpIH07CisgICAgZ3Rr
X3BhaW50X2JveChndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVU
eXBlLCBzaGFkb3dUeXBlLCAmbV9wYWludFJlY3QsCisgICAgICAgICAgICAgICAgICB3aWRnZXQs
IGRldGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55LCBwYWludFJlY3Qud2lkdGgsIHBhaW50
UmVjdC5oZWlnaHQpOworfQorCit2b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50
Rm9jdXMoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlw
ZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCit7CisgICAgR2RrUmVjdGFuZ2xlIHBh
aW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVjdC55ICsgcmVj
dC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9OworICAgIGd0a19wYWludF9mb2N1
cyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3RhcmdldCwgc3RhdGVUeXBlLCAmbV9w
YWludFJlY3QsIHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgZGV0YWlsLCBwYWludFJlY3Qu
eCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwgcGFpbnRSZWN0LmhlaWdodCk7Cit9CisK
K3ZvaWQgV2lkZ2V0UmVuZGVyaW5nQ29udGV4dDo6Z3RrUGFpbnRTbGlkZXIoY29uc3QgSW50UmVj
dCYgcmVjdCwgR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIEd0a1No
YWRvd1R5cGUgc2hhZG93VHlwZSwgY29uc3QgZ2NoYXIqIGRldGFpbCwgR3RrT3JpZW50YXRpb24g
b3JpZW50YXRpb24pCit7CisgICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJl
Y3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSB9OworICAgIGd0a19wYWludF9zbGlkZXIoZ3RrX3dpZGdldF9nZXRfc3R5
bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJm1fcGFpbnRSZWN0
LCB3aWRnZXQsCisgICAgICAgICAgICAgICAgICAgICBkZXRhaWwsIHBhaW50UmVjdC54LCBwYWlu
dFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0LCBvcmllbnRhdGlvbik7
Cit9CisKK30KKworI2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lkZ2V0UmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA3MzM0
NjU2Li44YjJhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvV2lk
Z2V0UmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9X
aWRnZXRSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTIyLDYgKzIyLDggQEAKICNpZm5kZWYgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dF9oCiAjZGVmaW5lIFdpZGdldFJlbmRlcmluZ0NvbnRleHRfaAogCisj
aWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKKwogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJndGtkcmF3aW5nLmgiCiAKQEAgLTQ2LDE1ICs0OCwxMSBAQCBwcml2YXRlOgogICAgIEdka1Jl
Y3RhbmdsZSBtX3BhaW50UmVjdDsKICAgICBJbnRTaXplIG1fZXh0cmFTcGFjZTsKICAgICBib29s
IG1faGFkRXJyb3I7Ci0KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIEdka0RyYXdhYmxl
KiBtX3RhcmdldDsKLSNlbHNlCi0gICAgY2Fpcm9fdCogbV90YXJnZXQ7Ci0jZW5kaWYKIAogfTsK
IAogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgorI2VuZGlmIC8vIFdp
ZGdldFJlbmRlcmluZ0NvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMi5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDZkMWJlMzEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGsyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldpZGdldFJlbmRlcmluZ0NvbnRleHQuaCIKLQotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJS
ZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCi0jaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBHZGtQaXhtYXAqIGdTY3JhdGNoQnVmZmVyID0gMDsK
LXN0YXRpYyB2b2lkIHB1cmdlU2NyYXRjaEJ1ZmZlcigpCi17Ci0gICAgaWYgKGdTY3JhdGNoQnVm
ZmVyKQotICAgICAgICBnX29iamVjdF91bnJlZihnU2NyYXRjaEJ1ZmZlcik7Ci0gICAgZ1NjcmF0
Y2hCdWZmZXIgPSAwOwotfQotCi0vLyBGSVhNRTogUGVyaGFwcyB3ZSBjYW4gc2hhcmUgc29tZSBv
ZiB0aGlzIGNvZGUgd2l0aCB0aGUgQ29udGV4dFNoYWRvd0NhaXJvLgotLy8gV2lkZ2V0IHJlbmRl
cmluZyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGludGVybWVk
aWF0ZQotLy8gcmVuZGVyLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBi
dWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwKLS8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3
aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgotY2xhc3MgUHVyZ2VTY3Jh
dGNoQnVmZmVyVGltZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKLXByaXZhdGU6Ci0gICAgdmlydHVh
bCB2b2lkIGZpcmVkKCkgeyBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsgfQotfTsKLXN0YXRpYyBQdXJn
ZVNjcmF0Y2hCdWZmZXJUaW1lciBwdXJnZVNjcmF0Y2hCdWZmZXJUaW1lcjsKLXN0YXRpYyB2b2lk
IHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCkKLXsKLSAgICBpZiAocHVyZ2VTY3JhdGNoQnVm
ZmVyVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgcHVyZ2VTY3JhdGNoQnVmZmVyVGltZXIuc3Rv
cCgpOwotICAgIHB1cmdlU2NyYXRjaEJ1ZmZlclRpbWVyLnN0YXJ0T25lU2hvdCgyKTsKLX0KLQot
c3RhdGljIEludFNpemUgZ2V0RXh0cmFTcGFjZUZvcldpZGdldChSZW5kZXJUaGVtZUd0ayogdGhl
bWUpCi17Ci0gICAgLy8gQ2hlY2tib3hlcyBhbmQgc2Nyb2xsYmFyIHRodW1icyBvZnRlbiBkcmF3
IG91dHNpZGUgdGhlaXIgYm91bmRhcmllcy4gSGVyZSB3ZSBmaWd1cmUgb3V0Ci0gICAgLy8gdGhl
IG1heGltdW0gYW1vdW50IG9mIHNwYWNlIHdlIG5lZWQgZm9yIGFueSB0eXBlIG9mIHdpZGdldCBh
bmQgdXNlIHRoYXQgdG8gaW5jcmVhc2UgdGhlCi0gICAgLy8gc2l6ZSBvZiB0aGUgc2NyYXRjaCBi
dWZmZXIsIHdoaWxlIHByZXNlcnZpbmcgdGhlIGZpbmFsIHdpZGdldCBwb3NpdGlvbi4KLQotICAg
IC8vIFRoZSBjaGVja2JveCBleHRyYSBzcGFjZSBpcyBjYWxjdWxhdGVkIGJ5IGxvb2tpbmcgYXQg
dGhlIHdpZGdldCBzdHlsZS4KLSAgICBpbnQgaW5kaWNhdG9yU2l6ZSwgaW5kaWNhdG9yU3BhY2lu
ZzsKLSAgICB0aGVtZS0+Z2V0SW5kaWNhdG9yTWV0cmljcyhDaGVja2JveFBhcnQsIGluZGljYXRv
clNpemUsIGluZGljYXRvclNwYWNpbmcpOwotICAgIEludFNpemUgZXh0cmFTcGFjZShpbmRpY2F0
b3JTcGFjaW5nLCBpbmRpY2F0b3JTcGFjaW5nKTsKLQotICAgIC8vIFNjcm9sbGJhciB0aHVtYnMg
bmVlZCBhdCBsZWFzdCBhbiBleHRyYSBwaXhlbCBhbG9uZyB0aGVpciBtb3ZlbWVudCBheGlzLgot
ICAgIHJldHVybiBleHRyYVNwYWNlLmV4cGFuZGVkVG8oSW50U2l6ZSgxLCAxKSk7Ci19Ci0KLVdp
ZGdldFJlbmRlcmluZ0NvbnRleHQ6OldpZGdldFJlbmRlcmluZ0NvbnRleHQoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHRhcmdldFJlY3QpCi0gICAgOiBt
X2dyYXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQpCi0gICAgLCBtX3RhcmdldFJlY3QodGFy
Z2V0UmVjdCkKLSAgICAsIG1faGFkRXJyb3IoZmFsc2UpCi17Ci0gICAgUmVuZGVyVGhlbWVHdGsq
IHRoZW1lID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVs
dFRoZW1lKCkuZ2V0KCkpOwotCi0gICAgLy8gRmFsbGJhY2s6IFdlIGZhaWxlZCB0byBjcmVhdGUg
YW4gUkdCQSBjb2xvcm1hcCBlYXJsaWVyLCBzbyB3ZSBjYW5ub3QgcHJvcGVybHkgcGFpbnQgCi0g
ICAgLy8gdG8gYSB0ZW1wb3Jhcnkgc3VyZmFjZSBhbmQgcHJlc2VydmUgdHJhbnNwYXJlbmN5LiBU
byBlbnN1cmUgZGVjZW50IHdpZGdldCByZW5kZXJpbmcsIGp1c3QKLSAgICAvLyBwYWludCBkaXJl
Y3RseSB0byB0aGUgdGFyZ2V0IGRyYXdhYmxlLiBUaGlzIHdpbGwgbm90IHJlbmRlciBDU1Mgcm90
YXRpb25hbCB0cmFuc2Zvcm1zIHByb3Blcmx5LgotICAgIGlmICghdGhlbWUtPm1fdGhlbWVQYXJ0
c0hhdmVSR0JBQ29sb3JtYXAgJiYgZ3JhcGhpY3NDb250ZXh0LT5nZGtXaW5kb3coKSkgewotICAg
ICAgICBtX3BhaW50UmVjdCA9IGdyYXBoaWNzQ29udGV4dC0+Z2V0Q1RNKCkubWFwUmVjdCh0YXJn
ZXRSZWN0KTsKLSAgICAgICAgbV90YXJnZXQgPSBncmFwaGljc0NvbnRleHQtPmdka1dpbmRvdygp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU29tZSB3aWRnZXRzIHJlbmRlciBv
dXRzaWRlIHRoZWlyIHJlY3RhbmdsZXMuIFdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhpcy4KLSAg
ICBtX2V4dHJhU3BhY2UgPSBnZXRFeHRyYVNwYWNlRm9yV2lkZ2V0KHRoZW1lKTsKLQotICAgIC8v
IE9mZnNldCB0aGUgdGFyZ2V0IHJlY3RhbmdsZSBzbyB0aGF0IHRoZSBleHRyYSBzcGFjZSBpcyB3
aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHNjcmF0Y2ggYnVmZmVyLgotICAgIG1fcGFpbnRS
ZWN0ID0gSW50UmVjdChJbnRQb2ludChtX2V4dHJhU3BhY2Uud2lkdGgoKSwgbV9leHRyYVNwYWNl
LmhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV90YXJnZXRS
ZWN0LnNpemUoKSk7Ci0KLSAgICBpbnQgd2lkdGggPSBtX3RhcmdldFJlY3Qud2lkdGgoKSArICht
X2V4dHJhU3BhY2Uud2lkdGgoKSAqIDIpOwotICAgIGludCBoZWlnaHQgPSBtX3RhcmdldFJlY3Qu
aGVpZ2h0KCkgKyAobV9leHRyYVNwYWNlLmhlaWdodCgpICogMik7Ci0gICAgaW50IHNjcmF0Y2hX
aWR0aCA9IDA7Ci0gICAgaW50IHNjcmF0Y2hIZWlnaHQgPSAwOwotICAgIGlmIChnU2NyYXRjaEJ1
ZmZlcikKLSAgICAgICAgZ2RrX3BpeG1hcF9nZXRfc2l6ZShnU2NyYXRjaEJ1ZmZlciwgJnNjcmF0
Y2hXaWR0aCwgJnNjcmF0Y2hIZWlnaHQpOwotCi0gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVj
cmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgY3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLgot
ICAgIGlmICghZ1NjcmF0Y2hCdWZmZXIgfHwgc2NyYXRjaFdpZHRoIDwgd2lkdGggfHwgc2NyYXRj
aEhlaWdodCA8IGhlaWdodCkgewotICAgICAgICBwdXJnZVNjcmF0Y2hCdWZmZXIoKTsKLSAgICAg
ICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRo
ZSBidWZmZXIgZm9yIHNpbWlsYXIgc2l6ZWQgcmVxdWVzdHMuCi0gICAgICAgIHdpZHRoID0gKDEg
KyAod2lkdGggPj4gNSkpIDw8IDU7Ci0gICAgICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1
KSkgPDwgNTsKLQotICAgICAgICBnU2NyYXRjaEJ1ZmZlciA9IGdka19waXhtYXBfbmV3KDAsIHdp
ZHRoLCBoZWlnaHQsIGdka19jb2xvcm1hcF9nZXRfdmlzdWFsKHRoZW1lLT5tX3RoZW1lUGFydHMu
Y29sb3JtYXApLT5kZXB0aCk7Ci0gICAgICAgIGdka19kcmF3YWJsZV9zZXRfY29sb3JtYXAoZ1Nj
cmF0Y2hCdWZmZXIsIHRoZW1lLT5tX3RoZW1lUGFydHMuY29sb3JtYXApOwotICAgIH0KLSAgICBt
X3RhcmdldCA9IGdTY3JhdGNoQnVmZmVyOwotCi0gICAgLy8gQ2xlYXIgdGhlIHNjcmF0Y2ggYnVm
ZmVyLgotICAgIFJlZlB0cjxjYWlyb190PiBzY3JhdGNoQnVmZmVyQ29udGV4dCA9IGFkb3B0UmVm
KGdka19jYWlyb19jcmVhdGUoZ1NjcmF0Y2hCdWZmZXIpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0
b3Ioc2NyYXRjaEJ1ZmZlckNvbnRleHQuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAg
ICBjYWlyb19wYWludChzY3JhdGNoQnVmZmVyQ29udGV4dC5nZXQoKSk7Ci19Ci0KLVdpZGdldFJl
bmRlcmluZ0NvbnRleHQ6On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBXZSBk
byBub3QgbmVlZCB0byBibGl0IGJhY2sgdG8gdGhlIHRhcmdldCBpbiB0aGUgZmFsbGJhY2sgY2Fz
ZS4gU2VlIGFib3ZlLgotICAgIFJlbmRlclRoZW1lR3RrKiB0aGVtZSA9IHN0YXRpY19jYXN0PFJl
bmRlclRoZW1lR3RrKj4oUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLmdldCgpKTsKLSAgICBp
ZiAoIXRoZW1lLT5tX3RoZW1lUGFydHNIYXZlUkdCQUNvbG9ybWFwICYmIG1fZ3JhcGhpY3NDb250
ZXh0LT5nZGtXaW5kb3coKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRG9uJ3QgcGFpbnQg
dGhlIHJlc3VsdHMgYmFjayBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCi0gICAgaWYgKG1faGFkRXJy
b3IpIHsKLSAgICAgICAgc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgaXQgaXMgbmVjZXNz
YXJ5IHRvIHByZXNlcnZlIHRoZSBjdXJyZW50IHNvdXJjZSBoZXJlLgotICAgIGNhaXJvX3QqIGNh
aXJvQ29udGV4dCA9IG1fZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBS
ZWZQdHI8Y2Fpcm9fcGF0dGVybl90PiBwcmV2aW91c1NvdXJjZShjYWlyb19nZXRfc291cmNlKGNh
aXJvQ29udGV4dCkpOwotCi0gICAgLy8gVGhlIGJsaXQgcmVjdGFuZ2xlIGlzIHRoZSBvcmlnaW5h
bCB0YXJnZXQgcmVjdGFuZ2xlIGFkanVzdGVkIGZvciBhbnkgZXh0cmEgc3BhY2UuCi0gICAgSW50
UmVjdCBmdWxsVGFyZ2V0UmVjdChtX3RhcmdldFJlY3QpOwotICAgIGZ1bGxUYXJnZXRSZWN0Lmlu
ZmxhdGVYKG1fZXh0cmFTcGFjZS53aWR0aCgpKTsKLSAgICBmdWxsVGFyZ2V0UmVjdC5pbmZsYXRl
WShtX2V4dHJhU3BhY2UuaGVpZ2h0KCkpOwotCi0gICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfcGl4
bWFwKGNhaXJvQ29udGV4dCwgZ1NjcmF0Y2hCdWZmZXIsIGZ1bGxUYXJnZXRSZWN0LngoKSwgZnVs
bFRhcmdldFJlY3QueSgpKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LCBmdWxs
VGFyZ2V0UmVjdC54KCksIGZ1bGxUYXJnZXRSZWN0LnkoKSwgZnVsbFRhcmdldFJlY3Qud2lkdGgo
KSwgZnVsbFRhcmdldFJlY3QuaGVpZ2h0KCkpOwotICAgIGNhaXJvX2ZpbGwoY2Fpcm9Db250ZXh0
KTsKLSAgICBjYWlyb19zZXRfc291cmNlKGNhaXJvQ29udGV4dCwgcHJldmlvdXNTb3VyY2UuZ2V0
KCkpOwotICAgIHNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Ci19Ci0KLWJvb2wgV2lkZ2V0
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRNb3ppbGxhV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0
eXBlLCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0
ZXh0RGlyZWN0aW9uKQotewotICAgIC8vIFNvbWV0aW1lcyBtb3pfZ3RrX3dpZGdldF9wYWludCBt
b2RpZmllcyB0aGUgY2xpcHBpbmcgcmVjdGFuZ2xlLCBzbyB3ZSBtdXN0IHVzZSBhIGNvcHkuCi0g
ICAgR2RrUmVjdGFuZ2xlIGNsaXBSZWN0ID0gbV9wYWludFJlY3Q7Ci0gICAgbV9oYWRFcnJvciA9
IG1vel9ndGtfd2lkZ2V0X3BhaW50KHR5cGUsIG1fdGFyZ2V0LCAmY2xpcFJlY3QsICZtX3BhaW50
UmVjdCwKLSAgICAgICAgc3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NV
Q0NFU1M7Ci0gICAgcmV0dXJuICFtX2hhZEVycm9yOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmlu
Z0NvbnRleHQ6Omd0a1BhaW50Qm94KGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lk
Z2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNv
bnN0IGdjaGFyKiBkZXRhaWwpCi17Ci0gICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9w
YWludFJlY3QueCArIHJlY3QueCgpLCBtX3BhaW50UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSB9OwotICAgIGd0a19wYWludF9ib3goZ3RrX3dpZGdldF9nZXRf
c3R5bGUod2lkZ2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgc2hhZG93VHlwZSwgJm1fcGFpbnRS
ZWN0LAotICAgICAgICAgICAgICAgICAgd2lkZ2V0LCBkZXRhaWwsIHBhaW50UmVjdC54LCBwYWlu
dFJlY3QueSwgcGFpbnRSZWN0LndpZHRoLCBwYWludFJlY3QuaGVpZ2h0KTsKLX0KLQotdm9pZCBX
aWRnZXRSZW5kZXJpbmdDb250ZXh0OjpndGtQYWludEZvY3VzKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBjb25zdCBnY2hhciog
ZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSB7IG1fcGFpbnRSZWN0Lngg
KyByZWN0LngoKSwgbV9wYWludFJlY3QueSArIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkgfTsKLSAgICBndGtfcGFpbnRfZm9jdXMoZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lk
Z2V0KSwgbV90YXJnZXQsIHN0YXRlVHlwZSwgJm1fcGFpbnRSZWN0LCB3aWRnZXQsCi0gICAgICAg
ICAgICAgICAgICAgIGRldGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55LCBwYWludFJlY3Qu
d2lkdGgsIHBhaW50UmVjdC5oZWlnaHQpOwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRl
eHQ6Omd0a1BhaW50U2xpZGVyKGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBlLCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0
IGdjaGFyKiBkZXRhaWwsIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIEdka1Jl
Y3RhbmdsZSBwYWludFJlY3QgPSB7IG1fcGFpbnRSZWN0LnggKyByZWN0LngoKSwgbV9wYWludFJl
Y3QueSArIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKLSAgICBndGtf
cGFpbnRfc2xpZGVyKGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0
ZVR5cGUsIHNoYWRvd1R5cGUsICZtX3BhaW50UmVjdCwgd2lkZ2V0LAotICAgICAgICAgICAgICAg
ICAgICAgZGV0YWlsLCBwYWludFJlY3QueCwgcGFpbnRSZWN0LnksIHBhaW50UmVjdC53aWR0aCwg
cGFpbnRSZWN0LmhlaWdodCwgb3JpZW50YXRpb24pOwotfQotCi19Ci0KLSNlbmRpZiAvLyBHVEtf
QVBJX1ZFUlNJT05fMgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1dp
ZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9XaWRnZXRSZW5kZXJpbmdDb250ZXh0R3RrMy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDY5YzRhZjUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1dpZGdldFJlbmRlcmluZ0NvbnRleHRHdGszLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDczICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXaWRnZXRSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLSNpZm5kZWYg
R1RLX0FQSV9WRVJTSU9OXzIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1XaWRnZXRSZW5kZXJp
bmdDb250ZXh0OjpXaWRnZXRSZW5kZXJpbmdDb250ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpCi0gICAgLCBtX3RhcmdldFJlY3QodGFyZ2V0UmVjdCkKLSAgICAsIG1fcGFpbnRSZWN0
KHRhcmdldFJlY3QpCi0gICAgLCBtX2hhZEVycm9yKGZhbHNlKQotICAgICwgbV90YXJnZXQoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpCi17Ci19Ci0KLVdpZGdldFJlbmRlcmluZ0NvbnRleHQ6
On5XaWRnZXRSZW5kZXJpbmdDb250ZXh0KCkKLXsKLX0KLQotYm9vbCBXaWRnZXRSZW5kZXJpbmdD
b250ZXh0OjpwYWludE1vemlsbGFXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEd0a1dp
ZGdldFN0YXRlKiBzdGF0ZSwgaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rp
b24pCi17Ci0gICAgbV9oYWRFcnJvciA9IG1vel9ndGtfd2lkZ2V0X3BhaW50KHR5cGUsIG1fdGFy
Z2V0LCAmbV9wYWludFJlY3QsIHN0YXRlLCBmbGFncywgdGV4dERpcmVjdGlvbikgIT0gTU9aX0dU
S19TVUNDRVNTOwotICAgIHJldHVybiAhbV9oYWRFcnJvcjsKLX0KLQotdm9pZCBXaWRnZXRSZW5k
ZXJpbmdDb250ZXh0OjpndGtQYWludEJveChjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtXaWRnZXQq
IHdpZGdldCwgR3RrU3RhdGVUeXBlIHN0YXRlVHlwZSwgR3RrU2hhZG93VHlwZSBzaGFkb3dUeXBl
LCBjb25zdCBnY2hhciogZGV0YWlsKQotewotICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSB7
IG1fcGFpbnRSZWN0LnggKyByZWN0LngoKSwgbV9wYWludFJlY3QueSArIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfcGFpbnRfYm94KGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsIHdpZGdl
dCwKLSAgICAgICAgICAgICAgICAgIGRldGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55LCBw
YWludFJlY3Qud2lkdGgsIHBhaW50UmVjdC5oZWlnaHQpOwotfQotCi12b2lkIFdpZGdldFJlbmRl
cmluZ0NvbnRleHQ6Omd0a1BhaW50Rm9jdXMoY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0
KiB3aWRnZXQsIEd0a1N0YXRlVHlwZSBzdGF0ZVR5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwpCi17
Ci0gICAgR2RrUmVjdGFuZ2xlIHBhaW50UmVjdCA9IHsgbV9wYWludFJlY3QueCArIHJlY3QueCgp
LCBtX3BhaW50UmVjdC55ICsgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSB9
OwotICAgIGd0a19wYWludF9mb2N1cyhndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpLCBtX3Rh
cmdldCwgc3RhdGVUeXBlLCB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgIGRldGFpbCwgcGFp
bnRSZWN0LngsIHBhaW50UmVjdC55LCBwYWludFJlY3Qud2lkdGgsIHBhaW50UmVjdC5oZWlnaHQp
OwotfQotCi12b2lkIFdpZGdldFJlbmRlcmluZ0NvbnRleHQ6Omd0a1BhaW50U2xpZGVyKGNvbnN0
IEludFJlY3QmIHJlY3QsIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdGF0ZVR5cGUgc3RhdGVUeXBl
LCBHdGtTaGFkb3dUeXBlIHNoYWRvd1R5cGUsIGNvbnN0IGdjaGFyKiBkZXRhaWwsIEd0a09yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSB7IG1f
cGFpbnRSZWN0LnggKyByZWN0LngoKSwgbV9wYWludFJlY3QueSArIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfcGFpbnRfc2xpZGVyKGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCksIG1fdGFyZ2V0LCBzdGF0ZVR5cGUsIHNoYWRvd1R5cGUsIHdpZGdl
dCwKLSAgICAgICAgICAgICAgICAgICAgIGRldGFpbCwgcGFpbnRSZWN0LngsIHBhaW50UmVjdC55
LCBwYWludFJlY3Qud2lkdGgsIHBhaW50UmVjdC5oZWlnaHQsIG9yaWVudGF0aW9uKTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gIUdUS19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9ndGszZHJhd2luZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2JkZDU2
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9ndGszZHJhd2luZy5j
CisrKyAvZGV2L251bGwKQEAgLTEsMTI4OCArMCwwIEBACi0vKiAtKi0gTW9kZTogQysrOyB0YWIt
d2lkdGg6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICov
Ci0vKiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCi0gKiBWZXJzaW9uOiBNUEwgMS4x
L0dQTCAyLjAvTEdQTCAyLjEKLSAqCi0gKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBz
dWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KLSAqIDEuMSAodGhl
ICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aAotICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGlj
ZW5zZSBhdAotICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCi0gKgotICogU29mdHdhcmUg
ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElT
IiBiYXNpcywKLSAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNz
IG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQotICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn
ZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKLSAqIExpY2Vuc2Uu
Ci0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBU
aGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIE5ldHNjYXBl
IENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgotICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUg
SW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgotICogdGhlIEluaXRpYWwg
RGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIENvbnRyaWJ1dG9yKHMpOgot
ICogIEJyaWFuIFJ5bmVyIDxicnluZXJAYnJpYW5yeW5lci5jb20+ICAoT3JpZ2luYWwgQXV0aG9y
KQotICogIFBpZXJyZSBDaGFuaWFsIDxwX2NoQHZlcml6b24ubmV0PgotICogIE1pY2hhZWwgVmVu
dG5vciA8bS52ZW50bm9yQGdtYWlsLmNvbT4KLSAqICBBbHAgVG9rZXIgPGFscEBudWFudGkuY29t
PgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJl
IHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mCi0gKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKLSAqIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAi
TEdQTCIpLAotICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRo
ZSBMR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKLSAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ug
d2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5Ci0gKiB1
bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8g
YWxsb3cgb3RoZXJzIHRvCi0gKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgotICogZGVjaXNpb24gYnkgZGVsZXRp
bmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UK
LSAqIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwu
IElmIHlvdSBkbyBub3QgZGVsZXRlCi0gKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGll
bnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCi0gKiB0aGUgdGVybXMg
b2YgYW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgotICoKLSAqICoqKioq
IEVORCBMSUNFTlNFIEJMT0NLICoqKioqICovCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMg
cGFpbnRpbmcgZnVuY3Rpb25zIGZvciBlYWNoIG9mIHRoZSBndGsyIHdpZGdldHMuCi0gKiBBZGFw
dGVkIGZyb20gdGhlIGd0a2RyYXdpbmcuYywgYW5kIGd0aysyLjAgc291cmNlLgotICovCi0KLSNp
Zm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLQotI2luY2x1ZGUgPGdkay9nZGtwcml2YXRlLmg+Ci0j
aW5jbHVkZSAiZ3RrZHJhd2luZy5oIgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNs
dWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNkZWZpbmUgWFRISUNLTkVTUyhz
dHlsZSkgKHN0eWxlLT54dGhpY2tuZXNzKQotI2RlZmluZSBZVEhJQ0tORVNTKHN0eWxlKSAoc3R5
bGUtPnl0aGlja25lc3MpCi0KLXN0YXRpYyBHdGtUaGVtZVBhcnRzICpnUGFydHMgPSBOVUxMOwot
c3RhdGljIHN0eWxlX3Byb3BfdCBzdHlsZV9wcm9wX2Z1bmM7Ci1zdGF0aWMgZ2Jvb2xlYW4gaGF2
ZV9hcnJvd19zY2FsaW5nOwotc3RhdGljIGdib29sZWFuIGlzX2luaXRpYWxpemVkOwotCi12b2lk
Ci1tb3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyhHdGtUaGVtZVBhcnRzKiBwYXJ0cykKLXsKLSAgICBn
UGFydHMgPSBwYXJ0czsKLX0KLQotLyogQmVjYXVzZSB3ZSBoYXZlIHN1Y2ggYW4gdW5jb252ZW50
aW9uYWwgd2F5IG9mIGRyYXdpbmcgd2lkZ2V0cywgc2lnbmFsIHRvIHRoZSBHVEsgdGhlbWUgZW5n
aW5lCi0gICB0aGF0IHRoZXkgYXJlIGRyYXdpbmcgZm9yIE1vemlsbGEgaW5zdGVhZCBvZiBhIGNv
bnZlbnRpb25hbCBHVEsgYXBwIHNvIHRoZXkgY2FuIGRvIGFueSBzcGVjaWZpYwotICAgdGhpbmdz
IHRoZXkgbWF5IHdhbnQgdG8gZG8uICovCi1zdGF0aWMgdm9pZAotbW96X2d0a19zZXRfd2lkZ2V0
X25hbWUoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgZ3RrX3dpZGdldF9zZXRfbmFtZSh3aWRn
ZXQsICJNb3ppbGxhR3RrV2lkZ2V0Iik7Ci19Ci0KLWdpbnQKLW1vel9ndGtfZW5hYmxlX3N0eWxl
X3Byb3BzKHN0eWxlX3Byb3BfdCBzdHlsZUdldFByb3ApCi17Ci0gICAgc3R5bGVfcHJvcF9mdW5j
ID0gc3R5bGVHZXRQcm9wOwotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRp
YyBnaW50Ci1lbnN1cmVfd2luZG93X3dpZGdldCgpCi17Ci0gICAgaWYgKCFnUGFydHMtPnByb3Rv
V2luZG93KSB7Ci0gICAgICAgIGdQYXJ0cy0+cHJvdG9XaW5kb3cgPSBndGtfd2luZG93X25ldyhH
VEtfV0lORE9XX1BPUFVQKTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKGdQYXJ0cy0+cHJv
dG9XaW5kb3cpOwotICAgICAgICBtb3pfZ3RrX3NldF93aWRnZXRfbmFtZShnUGFydHMtPnByb3Rv
V2luZG93KTsKLSAgICB9Ci0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGlj
IGdpbnQKLXNldHVwX3dpZGdldF9wcm90b3R5cGUoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAg
ZW5zdXJlX3dpbmRvd193aWRnZXQoKTsKLSAgICBpZiAoIWdQYXJ0cy0+cHJvdG9MYXlvdXQpIHsK
LSAgICAgICAgZ1BhcnRzLT5wcm90b0xheW91dCA9IGd0a19maXhlZF9uZXcoKTsKLSAgICAgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihnUGFydHMtPnByb3RvV2luZG93KSwgZ1Bh
cnRzLT5wcm90b0xheW91dCk7Ci0gICAgfQotCi0gICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NP
TlRBSU5FUihnUGFydHMtPnByb3RvTGF5b3V0KSwgd2lkZ2V0KTsKLSAgICBndGtfd2lkZ2V0X3Jl
YWxpemUod2lkZ2V0KTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAi
dHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7Ci0gICAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKLWVuc3VyZV9idXR0b25fd2lkZ2V0
KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+YnV0dG9uV2lkZ2V0KSB7Ci0gICAgICAgIGdQYXJ0cy0+
YnV0dG9uV2lkZ2V0ID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbCgiTSIpOwotICAgICAgICBz
ZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+YnV0dG9uV2lkZ2V0KTsKLSAgICB9Ci0gICAg
cmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKLWVuc3VyZV90b2dnbGVf
YnV0dG9uX3dpZGdldCgpCi17Ci0gICAgaWYgKCFnUGFydHMtPnRvZ2dsZUJ1dHRvbldpZGdldCkg
ewotICAgICAgICBnUGFydHMtPnRvZ2dsZUJ1dHRvbldpZGdldCA9IGd0a190b2dnbGVfYnV0dG9u
X25ldygpOwotICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+dG9nZ2xlQnV0
dG9uV2lkZ2V0KTsKLSAgICAgICAgLyogdG9nZ2xlIGJ1dHRvbiBtdXN0IGJlIHNldCBhY3RpdmUg
dG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiBob3Zlci4gKi8KLSAgICAgICAgZ3RrX3RvZ2dsZV9i
dXR0b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihnUGFydHMtPnRvZ2dsZUJ1dHRvbldp
ZGdldCksIFRSVUUpOwotICB9Ci0gIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRp
YyBnaW50Ci1lbnN1cmVfYnV0dG9uX2Fycm93X3dpZGdldCgpCi17Ci0gICAgaWYgKCFnUGFydHMt
PmJ1dHRvbkFycm93V2lkZ2V0KSB7Ci0gICAgICAgIGVuc3VyZV90b2dnbGVfYnV0dG9uX3dpZGdl
dCgpOwotCi0gICAgICAgIGdQYXJ0cy0+YnV0dG9uQXJyb3dXaWRnZXQgPSBndGtfYXJyb3dfbmV3
KEdUS19BUlJPV19ET1dOLCBHVEtfU0hBRE9XX09VVCk7Ci0gICAgICAgIGd0a19jb250YWluZXJf
YWRkKEdUS19DT05UQUlORVIoZ1BhcnRzLT50b2dnbGVCdXR0b25XaWRnZXQpLCBnUGFydHMtPmJ1
dHRvbkFycm93V2lkZ2V0KTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKGdQYXJ0cy0+YnV0
dG9uQXJyb3dXaWRnZXQpOwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQot
Ci1zdGF0aWMgZ2ludAotZW5zdXJlX2NoZWNrYm94X3dpZGdldCgpCi17Ci0gICAgaWYgKCFnUGFy
dHMtPmNoZWNrYm94V2lkZ2V0KSB7Ci0gICAgICAgIGdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQgPSBn
dGtfY2hlY2tfYnV0dG9uX25ld193aXRoX2xhYmVsKCJNIik7Ci0gICAgICAgIHNldHVwX3dpZGdl
dF9wcm90b3R5cGUoZ1BhcnRzLT5jaGVja2JveFdpZGdldCk7Ci0gICAgfQotICAgIHJldHVybiBN
T1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1lbnN1cmVfcmFkaW9idXR0b25fd2lk
Z2V0KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+cmFkaW9idXR0b25XaWRnZXQpIHsKLSAgICAgICAg
Z1BhcnRzLT5yYWRpb2J1dHRvbldpZGdldCA9IGd0a19yYWRpb19idXR0b25fbmV3X3dpdGhfbGFi
ZWwoTlVMTCwgIk0iKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnJh
ZGlvYnV0dG9uV2lkZ2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0K
LQotc3RhdGljIGdpbnQKLWVuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCkKLXsKLSAgICBpZiAoIWdQ
YXJ0cy0+dmVydFNjcm9sbGJhcldpZGdldCkgewotICAgICAgICBnUGFydHMtPnZlcnRTY3JvbGxi
YXJXaWRnZXQgPSBndGtfdnNjcm9sbGJhcl9uZXcoTlVMTCk7Ci0gICAgICAgIHNldHVwX3dpZGdl
dF9wcm90b3R5cGUoZ1BhcnRzLT52ZXJ0U2Nyb2xsYmFyV2lkZ2V0KTsKLSAgICB9Ci0gICAgaWYg
KCFnUGFydHMtPmhvcml6U2Nyb2xsYmFyV2lkZ2V0KSB7Ci0gICAgICAgIGdQYXJ0cy0+aG9yaXpT
Y3JvbGxiYXJXaWRnZXQgPSBndGtfaHNjcm9sbGJhcl9uZXcoTlVMTCk7Ci0gICAgICAgIHNldHVw
X3dpZGdldF9wcm90b3R5cGUoZ1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldCk7Ci0gICAgfQot
ICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1lbnN1cmVfZW50
cnlfd2lkZ2V0KCkKLXsKLSAgICBpZiAoIWdQYXJ0cy0+ZW50cnlXaWRnZXQpIHsKLSAgICAgICAg
Z1BhcnRzLT5lbnRyeVdpZGdldCA9IGd0a19lbnRyeV9uZXcoKTsKLSAgICAgICAgc2V0dXBfd2lk
Z2V0X3Byb3RvdHlwZShnUGFydHMtPmVudHJ5V2lkZ2V0KTsKLSAgICB9Ci0gICAgcmV0dXJuIE1P
Wl9HVEtfU1VDQ0VTUzsKLX0KLQotLyogV2UgbmVlZCB0byBoYXZlIHBvaW50ZXJzIHRvIHRoZSBp
bm5lciB3aWRnZXRzIChidXR0b24sIHNlcGFyYXRvciwgYXJyb3cpCi0gKiBvZiB0aGUgQ29tYm9C
b3ggdG8gZ2V0IHRoZSBjb3JyZWN0IHJlbmRlcmluZyBmcm9tIHRoZW1lIGVuZ2luZXMgd2hpY2gK
LSAqIHNwZWNpYWwgY2FzZXMgdGhlaXIgbG9vay4gU2luY2UgdGhlIGlubmVyIGxheW91dCBjYW4g
Y2hhbmdlLCB3ZSBhc2sgR1RLCi0gKiB0byBOVUxMIG91ciBwb2ludGVycyB3aGVuIHRoZXkgYXJl
IGFib3V0IHRvIGJlY29tZSBpbnZhbGlkIGJlY2F1c2UgdGhlCi0gKiBjb3JyZXNwb25kaW5nIHdp
ZGdldHMgZG9uJ3QgZXhpc3QgYW55bW9yZS4gSXQncyB0aGUgcm9sZSBvZgotICogZ19vYmplY3Rf
YWRkX3dlYWtfcG9pbnRlcigpLgotICogTm90ZSB0aGF0IGlmIHdlIGRvbid0IGZpbmQgdGhlIGlu
bmVyIHdpZGdldHMgKHdoaWNoIHNob3VsZG4ndCBoYXBwZW4pLCB3ZQotICogZmFsbGJhY2sgdG8g
dXNlIGdlbmVyaWMgIm5vbi1pbm5lciIgd2lkZ2V0cywgYW5kIHRoZXkgZG9uJ3QgbmVlZCB0aGF0
IGtpbmQKLSAqIG9mIHdlYWsgcG9pbnRlciBzaW5jZSB0aGV5IGFyZSBleHBsaWNpdCBjaGlsZHJl
biBvZiBnUGFydHMtPnByb3RvV2luZG93IGFuZCBhcwotICogc3VjaCBHVEsgaG9sZHMgYSBzdHJv
bmcgcmVmZXJlbmNlIHRvIHRoZW0uICovCi1zdGF0aWMgdm9pZAotbW96X2d0a19nZXRfY29tYm9f
Ym94X2lubmVyX2J1dHRvbihHdGtXaWRnZXQgKndpZGdldCwgZ3BvaW50ZXIgY2xpZW50X2RhdGEp
Ci17Ci0gICAgaWYgKEdUS19JU19UT0dHTEVfQlVUVE9OKHdpZGdldCkpIHsKLSAgICAgICAgZ1Bh
cnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCA9IHdpZGdldDsKLSAgICAgICAgZ19vYmplY3RfYWRk
X3dlYWtfcG9pbnRlcihHX09CSkVDVCh3aWRnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChncG9pbnRlcikgJmdQYXJ0cy0+Y29tYm9Cb3hCdXR0b25XaWRnZXQpOwotICAg
ICAgICBndGtfd2lkZ2V0X3JlYWxpemUod2lkZ2V0KTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5U
RVIoVFJVRSkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLW1vel9ndGtfZ2V0X2NvbWJvX2Jv
eF9idXR0b25faW5uZXJfd2lkZ2V0cyhHdGtXaWRnZXQgKndpZGdldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBjbGllbnRfZGF0YSkKLXsKLSAg
ICBpZiAoR1RLX0lTX1NFUEFSQVRPUih3aWRnZXQpKSB7Ci0gICAgICAgIGdQYXJ0cy0+Y29tYm9C
b3hTZXBhcmF0b3JXaWRnZXQgPSB3aWRnZXQ7Ci0gICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3Bv
aW50ZXIoR19PQkpFQ1Qod2lkZ2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZ3BvaW50ZXIpICZnUGFydHMtPmNvbWJvQm94U2VwYXJhdG9yV2lkZ2V0KTsKLSAgICB9IGVs
c2UgaWYgKEdUS19JU19BUlJPVyh3aWRnZXQpKSB7Ci0gICAgICAgIGdQYXJ0cy0+Y29tYm9Cb3hB
cnJvd1dpZGdldCA9IHdpZGdldDsKLSAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihH
X09CSkVDVCh3aWRnZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncG9p
bnRlcikgJmdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybjsKLSAgICBndGtfd2lkZ2V0X3JlYWxpemUod2lkZ2V0KTsKLSAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9f
UE9JTlRFUihUUlVFKSk7Ci19Ci0KLXN0YXRpYyBnaW50Ci1lbnN1cmVfY29tYm9fYm94X3dpZGdl
dHMoKQotewotICAgIEd0a1dpZGdldCogYnV0dG9uQ2hpbGQ7Ci0KLSAgICBpZiAoZ1BhcnRzLT5j
b21ib0JveEJ1dHRvbldpZGdldCAmJiBnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQpCi0gICAg
ICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci0KLSAgICAvKiBDcmVhdGUgYSBDb21ib0JveCBp
ZiBuZWVkZWQgKi8KLSAgICBpZiAoIWdQYXJ0cy0+Y29tYm9Cb3hXaWRnZXQpIHsKLSAgICAgICAg
Z1BhcnRzLT5jb21ib0JveFdpZGdldCA9IGd0a19jb21ib19ib3hfbmV3KCk7Ci0gICAgICAgIHNl
dHVwX3dpZGdldF9wcm90b3R5cGUoZ1BhcnRzLT5jb21ib0JveFdpZGdldCk7Ci0gICAgfQotCi0g
ICAgLyogR2V0IGl0cyBpbm5lciBCdXR0b24gKi8KLSAgICBndGtfY29udGFpbmVyX2ZvcmFsbChH
VEtfQ09OVEFJTkVSKGdQYXJ0cy0+Y29tYm9Cb3hXaWRnZXQpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vel9ndGtfZ2V0X2NvbWJvX2JveF9pbm5lcl9idXR0b24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBpZiAoZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdl
dCkgewotICAgICAgICAvKiBHZXQgdGhlIHdpZGdldHMgaW5zaWRlIHRoZSBCdXR0b24gKi8KLSAg
ICAgICAgYnV0dG9uQ2hpbGQgPSBndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGdQYXJ0cy0+Y29t
Ym9Cb3hCdXR0b25XaWRnZXQpKTsKLSAgICAgICAgaWYgKEdUS19JU19IQk9YKGJ1dHRvbkNoaWxk
KSkgewotICAgICAgICAgICAgLyogYXBwZWFycy1hcy1saXN0ID0gRkFMU0UsIGNlbGwtdmlldyA9
IFRSVUU7IHRoZSBidXR0b24KLSAgICAgICAgICAgICAqIGNvbnRhaW5zIGFuIGhib3guIFRoaXMg
aGJveCBpcyB0aGVyZSBiZWNhdXNlIHRoZSBDb21ib0JveAotICAgICAgICAgICAgICogbmVlZHMg
dG8gcGxhY2UgYSBjZWxsIHJlbmRlcmVyLCBhIHNlcGFyYXRvciwgYW5kIGFuIGFycm93IGluCi0g
ICAgICAgICAgICAgKiB0aGUgYnV0dG9uIHdoZW4gYXBwZWFycy1hcy1saXN0IGlzIEZBTFNFLiAq
LwotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRBSU5FUihidXR0b25D
aGlsZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3pfZ3RrX2dldF9jb21i
b19ib3hfYnV0dG9uX2lubmVyX3dpZGdldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMKTsKLSAgICAgICAgfSBlbHNlIGlmKEdUS19JU19BUlJPVyhidXR0b25DaGlsZCkp
IHsKLSAgICAgICAgICAgIC8qIGFwcGVhcnMtYXMtbGlzdCA9IFRSVUUsIG9yIGNlbGwtdmlldyA9
IEZBTFNFOwotICAgICAgICAgICAgICogdGhlIGJ1dHRvbiBvbmx5IGNvbnRhaW5zIGFuIGFycm93
ICovCi0gICAgICAgICAgICBnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQgPSBidXR0b25DaGls
ZDsKLSAgICAgICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QoYnV0dG9u
Q2hpbGQpLCAoZ3BvaW50ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQpOwotICAgICAgICAgICAgZ3RrX3dpZGdldF9y
ZWFsaXplKGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCk7Ci0gICAgICAgICAgICBnX29iamVj
dF9zZXRfZGF0YShHX09CSkVDVChnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRyYW5zcGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BP
SU5URVIoVFJVRSkpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogU2hvdWxk
bid0IGJlIHJlYWNoZWQgd2l0aCBjdXJyZW50IGludGVybmFsIGd0ayBpbXBsZW1lbnRhdGlvbjsg
d2UKLSAgICAgICAgICogdXNlIGEgZ2VuZXJpYyB0b2dnbGUgYnV0dG9uIGFzIGxhc3QgcmVzb3J0
IGZhbGxiYWNrIHRvIGF2b2lkCi0gICAgICAgICAqIGNyYXNoaW5nLiAqLwotICAgICAgICBlbnN1
cmVfdG9nZ2xlX2J1dHRvbl93aWRnZXQoKTsKLSAgICAgICAgZ1BhcnRzLT5jb21ib0JveEJ1dHRv
bldpZGdldCA9IGdQYXJ0cy0+dG9nZ2xlQnV0dG9uV2lkZ2V0OwotICAgIH0KLQotICAgIGlmICgh
Z1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0KSB7Ci0gICAgICAgIC8qIFNob3VsZG4ndCBiZSBy
ZWFjaGVkIHdpdGggY3VycmVudCBpbnRlcm5hbCBndGsgaW1wbGVtZW50YXRpb247Ci0gICAgICAg
ICAqIHdlIGdQYXJ0cy0+YnV0dG9uQXJyb3dXaWRnZXQgYXMgbGFzdCByZXNvcnQgZmFsbGJhY2sg
dG8gYXZvaWQKLSAgICAgICAgICogY3Jhc2hpbmcuICovCi0gICAgICAgIGVuc3VyZV9idXR0b25f
YXJyb3dfd2lkZ2V0KCk7Ci0gICAgICAgIGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCA9IGdQ
YXJ0cy0+YnV0dG9uQXJyb3dXaWRnZXQ7Ci0gICAgfQotCi0gICAgLyogV2UgZG9uJ3QgdGVzdCB0
aGUgdmFsaWRpdHkgb2YgZ1BhcnRzLT5jb21ib0JveFNlcGFyYXRvcldpZGdldCBzaW5jZSB0aGVy
ZQotICAgICAqIGlzIG5vbmUgd2hlbiAiYXBwZWFycy1hcy1saXN0IiA9IFRSVUUgb3IgImNlbGwt
dmlldyIgPSBGQUxTRTsgaWYgaXQKLSAgICAgKiBpcyBpbnZhbGlkIHdlIGp1c3Qgd29uJ3QgcGFp
bnQgaXQuICovCi0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2lu
dAotZW5zdXJlX3Byb2dyZXNzX3dpZGdldCgpCi17Ci0gICAgaWYgKCFnUGFydHMtPnByb2dyZXNX
aWRnZXQpIHsKLSAgICAgICAgZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0ID0gZ3RrX3Byb2dyZXNzX2Jh
cl9uZXcoKTsKLSAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnByb2dyZXNX
aWRnZXQpOwotICAgIH0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMg
Z2ludAotZW5zdXJlX3Njcm9sbGVkX3dpbmRvd193aWRnZXQoKQotewotICAgIGlmICghZ1BhcnRz
LT5zY3JvbGxlZFdpbmRvd1dpZGdldCkgewotICAgICAgICBnUGFydHMtPnNjcm9sbGVkV2luZG93
V2lkZ2V0ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19uZXcoTlVMTCwgTlVMTCk7Ci0gICAgICAgIHNl
dHVwX3dpZGdldF9wcm90b3R5cGUoZ1BhcnRzLT5zY3JvbGxlZFdpbmRvd1dpZGdldCk7Ci0gICAg
fQotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBHdGtTdGF0ZVR5cGUK
LUNvbnZlcnRHdGtTdGF0ZShHdGtXaWRnZXRTdGF0ZSogc3RhdGUpCi17Ci0gICAgaWYgKHN0YXRl
LT5kaXNhYmxlZCkKLSAgICAgICAgcmV0dXJuIEdUS19TVEFURV9JTlNFTlNJVElWRTsKLSAgICBl
bHNlIGlmIChzdGF0ZS0+ZGVwcmVzc2VkKQotICAgICAgICByZXR1cm4gKHN0YXRlLT5pbkhvdmVy
ID8gR1RLX1NUQVRFX1BSRUxJR0hUIDogR1RLX1NUQVRFX0FDVElWRSk7Ci0gICAgZWxzZSBpZiAo
c3RhdGUtPmluSG92ZXIpCi0gICAgICAgIHJldHVybiAoc3RhdGUtPmFjdGl2ZSA/IEdUS19TVEFU
RV9BQ1RJVkUgOiBHVEtfU1RBVEVfUFJFTElHSFQpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IEdUS19TVEFURV9OT1JNQUw7Ci19Ci0KLXN0YXRpYyBnaW50Ci1tb3pfZ3RrX2J1dHRvbl9wYWlu
dChjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAgICAg
R3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBHdGtSZWxpZWZTdHlsZSByZWxpZWYsCi0gICAgICAgICAg
ICAgICAgICAgICBHdGtXaWRnZXQqIHdpZGdldCwgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24p
Ci17Ci0gICAgR3RrU2hhZG93VHlwZSBzaGFkb3dfdHlwZTsKLSAgICBHdGtTdHlsZSogc3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3aWRnZXQpOwotICAgIEd0a1N0YXRlVHlwZSBidXR0b25f
c3RhdGUgPSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOwotICAgIGdpbnQgeCA9IHJlY3QtPngsIHk9
cmVjdC0+eSwgd2lkdGg9cmVjdC0+d2lkdGgsIGhlaWdodD1yZWN0LT5oZWlnaHQ7Ci0gICAgR2Rr
V2luZG93KiB3aW5kb3cgPSBndGtfd2lkZ2V0X2dldF93aW5kb3cod2lkZ2V0KTsKLQotICAgIGdi
b29sZWFuIGludGVyaW9yX2ZvY3VzOwotICAgIGdpbnQgZm9jdXNfd2lkdGgsIGZvY3VzX3BhZDsK
LQotICAgIG1vel9ndGtfd2lkZ2V0X2dldF9mb2N1cyh3aWRnZXQsICZpbnRlcmlvcl9mb2N1cywg
JmZvY3VzX3dpZHRoLCAmZm9jdXNfcGFkKTsKLQotICAgIGlmICh3aW5kb3cgJiYgZ2RrX3dpbmRv
d19pc192aXNpYmxlKHdpbmRvdykpIHsKLSAgICAgICAgZ2RrX3dpbmRvd19zZXRfYmFja2dyb3Vu
ZF9wYXR0ZXJuKHdpbmRvdywgTlVMTCk7Ci0gICAgfQotCi0gICAgZ3RrX3dpZGdldF9zZXRfc3Rh
dGUod2lkZ2V0LCBidXR0b25fc3RhdGUpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3
aWRnZXQsIGRpcmVjdGlvbik7Ci0gICAgZ3RrX2J1dHRvbl9zZXRfcmVsaWVmKEdUS19CVVRUT04o
d2lkZ2V0KSwgcmVsaWVmKTsKLQotICAgIGlmICghaW50ZXJpb3JfZm9jdXMgJiYgc3RhdGUtPmZv
Y3VzZWQpIHsKLSAgICAgICAgeCArPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZDsKLSAgICAgICAg
eSArPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZDsKLSAgICAgICAgd2lkdGggLT0gMiAqIChmb2N1
c193aWR0aCArIGZvY3VzX3BhZCk7Ci0gICAgICAgIGhlaWdodCAtPSAyICogKGZvY3VzX3dpZHRo
ICsgZm9jdXNfcGFkKTsKLSAgICB9Ci0KLSAgICBzaGFkb3dfdHlwZSA9IGJ1dHRvbl9zdGF0ZSA9
PSBHVEtfU1RBVEVfQUNUSVZFIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmRlcHJl
c3NlZCA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKLQotICAgIGlmIChzdGF0ZS0+
aXNEZWZhdWx0ICYmIHJlbGllZiA9PSBHVEtfUkVMSUVGX05PUk1BTCkgewotICAgICAgICBndGtf
cGFpbnRfYm94KHN0eWxlLCBjciwgYnV0dG9uX3N0YXRlLCBzaGFkb3dfdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgICB3aWRnZXQsICJidXR0b25kZWZhdWx0IiwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgfQotCi0gICAgaWYgKHJlbGllZiAhPSBHVEtfUkVMSUVGX05PTkUgfHwgc3RhdGUt
PmRlcHJlc3NlZCB8fAotICAgICAgICAgICAoYnV0dG9uX3N0YXRlICE9IEdUS19TVEFURV9OT1JN
QUwgJiYKLSAgICAgICAgICAgIGJ1dHRvbl9zdGF0ZSAhPSBHVEtfU1RBVEVfSU5TRU5TSVRJVkUp
KSB7Ci0gICAgICAgIC8qIHRoZSBmb2xsb3dpbmcgbGluZSBjYW4gdHJpZ2dlciBhbiBhc3NlcnRp
b24gKENydXggdGhlbWUpCi0gICAgICAgICAgIGZpbGUgLi4vLi4vZ2RrL2dka3dpbmRvdy5jOiBs
aW5lIDE4NDYgKGdka193aW5kb3dfY2xlYXJfYXJlYSk6Ci0gICAgICAgICAgIGFzc2VydGlvbiBg
R0RLX0lTX1dJTkRPVyAod2luZG93KScgZmFpbGVkICovCi0gICAgICAgIGd0a19wYWludF9ib3go
c3R5bGUsIGNyLCBidXR0b25fc3RhdGUsIHNoYWRvd190eXBlLAotICAgICAgICAgICAgICAgICAg
ICAgIHdpZGdldCwgImJ1dHRvbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLQotICAg
IGlmIChzdGF0ZS0+Zm9jdXNlZCkgewotICAgICAgICBpZiAoaW50ZXJpb3JfZm9jdXMpIHsKLSAg
ICAgICAgICAgIEd0a1N0eWxlKiBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7
Ci0gICAgICAgICAgICB4ICs9IHN0eWxlLT54dGhpY2tuZXNzICsgZm9jdXNfcGFkOwotICAgICAg
ICAgICAgeSArPSBzdHlsZS0+eXRoaWNrbmVzcyArIGZvY3VzX3BhZDsKLSAgICAgICAgICAgIHdp
ZHRoIC09IDIgKiAoc3R5bGUtPnh0aGlja25lc3MgKyBmb2N1c19wYWQpOwotICAgICAgICAgICAg
aGVpZ2h0IC09IDIgKiAoc3R5bGUtPnl0aGlja25lc3MgKyBmb2N1c19wYWQpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgeCAtPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZDsKLSAgICAg
ICAgICAgIHkgLT0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQ7Ci0gICAgICAgICAgICB3aWR0aCAr
PSAyICogKGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkKTsKLSAgICAgICAgICAgIGhlaWdodCArPSAy
ICogKGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkKTsKLSAgICAgICAgfQotCi0gICAgICAgIGd0a19w
YWludF9mb2N1cyhzdHlsZSwgY3IsIGJ1dHRvbl9zdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdpZGdldCwgImJ1dHRvbiIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLQotICAg
IHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLWdpbnQKLW1vel9ndGtfaW5pdCgpCi17Ci0g
ICAgR3RrV2lkZ2V0Q2xhc3MgKmVudHJ5X2NsYXNzOwotCi0gICAgaXNfaW5pdGlhbGl6ZWQgPSBU
UlVFOwotICAgIGhhdmVfYXJyb3dfc2NhbGluZyA9IChndGtfbWFqb3JfdmVyc2lvbiA+IDIgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgKGd0a19tYWpvcl92ZXJzaW9uID09IDIgJiYgZ3Rr
X21pbm9yX3ZlcnNpb24gPj0gMTIpKTsKLQotICAgIC8qIEFkZCBzdHlsZSBwcm9wZXJ0eSB0byBH
dGtFbnRyeS4KLSAgICAgKiBBZGRpbmcgdGhlIHN0eWxlIHByb3BlcnR5IHRvIHRoZSBub3JtYWwg
R3RrRW50cnkgY2xhc3MgbWVhbnMgdGhhdCBpdAotICAgICAqIHdpbGwgd29yayB3aXRob3V0IGlz
c3VlcyBpbnNpZGUgR3RrQ29tYm9Cb3ggYW5kIGZvciBTcGluYnV0dG9ucy4gKi8KLSAgICBlbnRy
eV9jbGFzcyA9IGdfdHlwZV9jbGFzc19yZWYoR1RLX1RZUEVfRU5UUlkpOwotICAgIGd0a193aWRn
ZXRfY2xhc3NfaW5zdGFsbF9zdHlsZV9wcm9wZXJ0eShlbnRyeV9jbGFzcywKLSAgICAgICAgZ19w
YXJhbV9zcGVjX2Jvb2xlYW4oImhvbm9ycy10cmFuc3BhcmVudC1iZy1oaW50IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIlRyYW5zcGFyZW50IEJHIGVuYWJsaW5nIGZsYWciLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgVFJVRSwgdGhlIHRoZW1lIGlzIGFibGUgdG8g
ZHJhdyB0aGUgR3RrRW50cnkgb24gbm9uLXByZWZpbGxlZCBiYWNrZ3JvdW5kLiIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHX1BBUkFNX1JFQURXUklURSkpOwotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0K
LQotZ2ludAotbW96X2d0a19jaGVja2JveF9nZXRfbWV0cmljcyhnaW50KiBpbmRpY2F0b3Jfc2l6
ZSwgZ2ludCogaW5kaWNhdG9yX3NwYWNpbmcpCi17Ci0gICAgZW5zdXJlX2NoZWNrYm94X3dpZGdl
dCgpOwotCi0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQgKGdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRpY2F0b3Jfc2l6ZSIsIGluZGljYXRvcl9z
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kaWNhdG9yX3NwYWNpbmciLCBpbmRp
Y2F0b3Jfc3BhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0KLSAgICBy
ZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1naW50Ci1tb3pfZ3RrX3JhZGlvX2dldF9tZXRy
aWNzKGdpbnQqIGluZGljYXRvcl9zaXplLCBnaW50KiBpbmRpY2F0b3Jfc3BhY2luZykKLXsKLSAg
ICBlbnN1cmVfcmFkaW9idXR0b25fd2lkZ2V0KCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dCAoZ1BhcnRzLT5yYWRpb2J1dHRvbldpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ImluZGljYXRvcl9zaXplIiwgaW5kaWNhdG9yX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbmRpY2F0b3Jfc3BhY2luZyIsIGluZGljYXRvcl9zcGFjaW5nLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0K
LWdpbnQKLW1vel9ndGtfd2lkZ2V0X2dldF9mb2N1cyhHdGtXaWRnZXQqIHdpZGdldCwgZ2Jvb2xl
YW4qIGludGVyaW9yX2ZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQqIGZvY3Vz
X3dpZHRoLCBnaW50KiBmb2N1c19wYWQpCi17Ci0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQgKHdp
ZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgaW50ZXJp
b3JfZm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwg
Zm9jdXNfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwg
Zm9jdXNfcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIHJldHVy
biBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLWdpbnQKLW1vel9ndGtfYnV0dG9uX2dldF9pbm5lcl9i
b3JkZXIoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0JvcmRlciogaW5uZXJfYm9yZGVyKQotewotICAg
IHN0YXRpYyBjb25zdCBHdGtCb3JkZXIgZGVmYXVsdF9pbm5lcl9ib3JkZXIgPSB7IDEsIDEsIDEs
IDEgfTsKLSAgICBHdGtCb3JkZXIgKnRtcF9ib3JkZXI7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxl
X2dldCAod2lkZ2V0LCAiaW5uZXItYm9yZGVyIiwgJnRtcF9ib3JkZXIsIE5VTEwpOwotCi0gICAg
aWYgKHRtcF9ib3JkZXIpIHsKLSAgICAgICAgKmlubmVyX2JvcmRlciA9ICp0bXBfYm9yZGVyOwot
ICAgICAgICBndGtfYm9yZGVyX2ZyZWUodG1wX2JvcmRlcik7Ci0gICAgfQotICAgIGVsc2UKLSAg
ICAgICAgKmlubmVyX2JvcmRlciA9IGRlZmF1bHRfaW5uZXJfYm9yZGVyOwotCi0gICAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGdpbnQKLW1vel9ndGtfdG9nZ2xlX3BhaW50
KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICBH
dGtXaWRnZXRTdGF0ZSogc3RhdGUsIGdib29sZWFuIHNlbGVjdGVkLAotICAgICAgICAgICAgICAg
ICAgICAgZ2Jvb2xlYW4gaW5jb25zaXN0ZW50LCBnYm9vbGVhbiBpc3JhZGlvLAotICAgICAgICAg
ICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgR3RrU3RhdGVU
eXBlIHN0YXRlX3R5cGUgPSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOwotICAgIEd0a1NoYWRvd1R5
cGUgc2hhZG93X3R5cGUgPSAoc2VsZWN0ZWQpP0dUS19TSEFET1dfSU46R1RLX1NIQURPV19PVVQ7
Ci0gICAgZ2ludCBpbmRpY2F0b3Jfc2l6ZSwgaW5kaWNhdG9yX3NwYWNpbmc7Ci0gICAgZ2ludCB4
LCB5LCB3aWR0aCwgaGVpZ2h0OwotICAgIGdpbnQgZm9jdXNfeCwgZm9jdXNfeSwgZm9jdXNfd2lk
dGgsIGZvY3VzX2hlaWdodDsKLSAgICBHdGtXaWRnZXQgKnc7Ci0gICAgR3RrU3R5bGUgKnN0eWxl
OwotCi0gICAgaWYgKGlzcmFkaW8pIHsKLSAgICAgICAgbW96X2d0a19yYWRpb19nZXRfbWV0cmlj
cygmaW5kaWNhdG9yX3NpemUsICZpbmRpY2F0b3Jfc3BhY2luZyk7Ci0gICAgICAgIHcgPSBnUGFy
dHMtPnJhZGlvYnV0dG9uV2lkZ2V0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1vel9ndGtfY2hl
Y2tib3hfZ2V0X21ldHJpY3MoJmluZGljYXRvcl9zaXplLCAmaW5kaWNhdG9yX3NwYWNpbmcpOwot
ICAgICAgICB3ID0gZ1BhcnRzLT5jaGVja2JveFdpZGdldDsKLSAgICB9Ci0KLSAgICAvLyAiR2V0
TWluaW11bVdpZGdldFNpemUgd2FzIGlnbm9yZWQiCi0gICAgLy8gRklYTUU6IFRoaXMgYXNzZXJ0
IGNhdXNlcyBhIGJ1aWxkIGZhaWx1cmUgaW4gV2ViS2l0R1RLKyBkZWJ1ZwotICAgIC8vIGJ1aWxk
cywgYmVjYXVzZSBpdCB1c2VzICdmYWxzZScgaW4gaXRzIGRlZmluaXRpb24uIFdlIG1heSB3YW50
Ci0gICAgLy8gdG8gZm9yY2UgdGhpcyBmaWxlIHRvIGJlIGJ1aWx0IHdpdGggZysrLCBieSByZW5h
bWluZyBpdC4KLSAgICAvLyBBU1NFUlQocmVjdC0+d2lkdGggPT0gaW5kaWNhdG9yX3NpemUpOwot
Ci0gICAgLyoKLSAgICAgKiB2ZXJ0aWNhbGx5IGNlbnRlciBpbiB0aGUgYm94LCBzaW5jZSBYVUwg
c29tZXRpbWVzIGlnbm9yZXMgb3VyCi0gICAgICogR2V0TWluaW11bVdpZGdldFNpemUgaW4gdGhl
IHZlcnRpY2FsIGRpbWVuc2lvbgotICAgICAqLwotICAgIHggPSByZWN0LT54OwotICAgIHkgPSBy
ZWN0LT55ICsgKHJlY3QtPmhlaWdodCAtIGluZGljYXRvcl9zaXplKSAvIDI7Ci0gICAgd2lkdGgg
PSBpbmRpY2F0b3Jfc2l6ZTsKLSAgICBoZWlnaHQgPSBpbmRpY2F0b3Jfc2l6ZTsKLQotICAgIGZv
Y3VzX3ggPSB4IC0gaW5kaWNhdG9yX3NwYWNpbmc7Ci0gICAgZm9jdXNfeSA9IHkgLSBpbmRpY2F0
b3Jfc3BhY2luZzsKLSAgICBmb2N1c193aWR0aCA9IHdpZHRoICsgMiAqIGluZGljYXRvcl9zcGFj
aW5nOwotICAgIGZvY3VzX2hlaWdodCA9IGhlaWdodCArIDIgKiBpbmRpY2F0b3Jfc3BhY2luZzsK
LQotICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUodyk7Ci0KLSAgICBndGtfd2lkZ2V0
X3NldF9zZW5zaXRpdmUodywgIXN0YXRlLT5kaXNhYmxlZCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRf
ZGlyZWN0aW9uKHcsIGRpcmVjdGlvbik7Ci0gICAgZ3RrX3RvZ2dsZV9idXR0b25fc2V0X2FjdGl2
ZShHVEtfVE9HR0xFX0JVVFRPTih3KSwgc2VsZWN0ZWQpOwotCi0gICAgaWYgKGlzcmFkaW8pIHsK
LSAgICAgICAgZ3RrX3BhaW50X29wdGlvbihzdHlsZSwgY3IsIHN0YXRlX3R5cGUsIHNoYWRvd190
eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+cmFkaW9idXR0b25XaWRnZXQs
ICJyYWRpb2J1dHRvbiIsIHgsIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCkgewotICAgICAgICAgICAgZ3RrX3Bh
aW50X2ZvY3VzKHN0eWxlLCBjciwgR1RLX1NUQVRFX0FDVElWRSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnUGFydHMtPnJhZGlvYnV0dG9uV2lkZ2V0LCAicmFkaW9idXR0b24iLCBmb2N1
c194LCBmb2N1c195LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzX3dpZHRoLCBm
b2N1c19oZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgIC8qCi0g
ICAgICAgICogJ2luZGV0ZXJtaW5hdGUnIHR5cGUgb24gY2hlY2tib3hlcy4gSW4gR1RLLCB0aGUg
c2hhZG93IHR5cGUKLSAgICAgICAgKiBtdXN0IGFsc28gYmUgY2hhbmdlZCBmb3IgdGhlIHN0YXRl
IHRvIGJlIGRyYXduLgotICAgICAgICAqLwotICAgICAgICBpZiAoaW5jb25zaXN0ZW50KSB7Ci0g
ICAgICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVf
QlVUVE9OKGdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQpLCBUUlVFKTsKLSAgICAgICAgICAgIHNoYWRv
d190eXBlID0gR1RLX1NIQURPV19FVENIRURfSU47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfaW5jb25zaXN0ZW50KEdUS19UT0dHTEVfQlVUVE9O
KGdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQpLCBGQUxTRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBn
dGtfcGFpbnRfY2hlY2soc3R5bGUsIGNyLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQsICJjaGVja2J1dHRvbiIs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBpZiAoc3RhdGUtPmZvY3VzZWQpIHsKLSAg
ICAgICAgICAgIGd0a19wYWludF9mb2N1cyhzdHlsZSwgY3IsIEdUS19TVEFURV9BQ1RJVkUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5jaGVja2JveFdpZGdldCwgImNoZWNr
YnV0dG9uIiwgZm9jdXNfeCwgZm9jdXNfeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b2N1c193aWR0aCwgZm9jdXNfaGVpZ2h0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBnaW50Ci1jYWxjdWxhdGVfYnV0dG9uX2lu
bmVyX3JlY3QoR3RrV2lkZ2V0KiBidXR0b24sIEdka1JlY3RhbmdsZSogcmVjdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGlubmVyX3JlY3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaWdub3JlX2ZvY3VzKQotewotICAgIEd0a0JvcmRl
ciBpbm5lcl9ib3JkZXI7Ci0gICAgZ2Jvb2xlYW4gaW50ZXJpb3JfZm9jdXM7Ci0gICAgZ2ludCBm
b2N1c193aWR0aCwgZm9jdXNfcGFkOwotICAgIEd0a1N0eWxlKiBzdHlsZTsKLQotICAgIHN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoYnV0dG9uKTsKLQotICAgIC8qIFRoaXMgbWlycm9ycyBn
dGtidXR0b24ncyBjaGlsZCBwb3NpdGlvbmluZyAqLwotICAgIG1vel9ndGtfYnV0dG9uX2dldF9p
bm5lcl9ib3JkZXIoYnV0dG9uLCAmaW5uZXJfYm9yZGVyKTsKLSAgICBtb3pfZ3RrX3dpZGdldF9n
ZXRfZm9jdXMoYnV0dG9uLCAmaW50ZXJpb3JfZm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZmb2N1c193aWR0aCwgJmZvY3VzX3BhZCk7Ci0KLSAgICBpZiAoaWdub3JlX2ZvY3Vz
KQotICAgICAgICBmb2N1c193aWR0aCA9IGZvY3VzX3BhZCA9IDA7Ci0KLSAgICBpbm5lcl9yZWN0
LT54ID0gcmVjdC0+eCArIFhUSElDS05FU1Moc3R5bGUpICsgZm9jdXNfd2lkdGggKyBmb2N1c19w
YWQ7Ci0gICAgaW5uZXJfcmVjdC0+eCArPSBkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUiA/
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbm5lcl9ib3JkZXIubGVmdCA6IGlubmVyX2JvcmRl
ci5yaWdodDsKLSAgICBpbm5lcl9yZWN0LT55ID0gcmVjdC0+eSArIGlubmVyX2JvcmRlci50b3Ag
KyBZVEhJQ0tORVNTKHN0eWxlKSArCi0gICAgICAgICAgICAgICAgICAgIGZvY3VzX3dpZHRoICsg
Zm9jdXNfcGFkOwotICAgIGlubmVyX3JlY3QtPndpZHRoID0gTUFYKDEsIHJlY3QtPndpZHRoIC0g
aW5uZXJfYm9yZGVyLmxlZnQgLQotICAgICAgIGlubmVyX2JvcmRlci5yaWdodCAtIChYVEhJQ0tO
RVNTKHN0eWxlKSArIGZvY3VzX3BhZCArIGZvY3VzX3dpZHRoKSAqIDIpOwotICAgIGlubmVyX3Jl
Y3QtPmhlaWdodCA9IE1BWCgxLCByZWN0LT5oZWlnaHQgLSBpbm5lcl9ib3JkZXIudG9wIC0KLSAg
ICAgICBpbm5lcl9ib3JkZXIuYm90dG9tIC0gKFlUSElDS05FU1Moc3R5bGUpICsgZm9jdXNfcGFk
ICsgZm9jdXNfd2lkdGgpICogMik7Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQot
Ci0KLXN0YXRpYyBnaW50Ci1jYWxjdWxhdGVfYXJyb3dfcmVjdChHdGtXaWRnZXQqIGFycm93LCBH
ZGtSZWN0YW5nbGUqIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIGFy
cm93X3JlY3QsIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIC8qIGRlZmluZWQg
aW4gZ3RrYXJyb3cuYyAqLwotICAgIGdmbG9hdCBhcnJvd19zY2FsaW5nID0gMC43OwotICAgIGdm
bG9hdCB4YWxpZ24sIHhwYWQ7Ci0gICAgZ2ludCBleHRlbnQ7Ci0gICAgR3RrTWlzYyogbWlzYyA9
IEdUS19NSVNDKGFycm93KTsKLSAgICBnZmxvYXQgbWlzY194YWxpZ24sIG1pc2NfeWFsaWduOwot
ICAgIGdpbnQgbWlzY194cGFkLCBtaXNjX3lwYWQ7Ci0KLSAgICBpZiAoaGF2ZV9hcnJvd19zY2Fs
aW5nKQotICAgICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChhcnJvdywgImFycm93X3NjYWxpbmci
LCAmYXJyb3dfc2NhbGluZywgTlVMTCk7Ci0KLSAgICBndGtfbWlzY19nZXRfcGFkZGluZyhtaXNj
LCAmbWlzY194cGFkLCAmbWlzY195cGFkKTsKLSAgICBndGtfbWlzY19nZXRfYWxpZ25tZW50KG1p
c2MsICZtaXNjX3hhbGlnbiwgJm1pc2NfeWFsaWduKTsKLQotICAgIGV4dGVudCA9IE1JTigocmVj
dC0+d2lkdGggLSBtaXNjX3hwYWQgKiAyKSwKLSAgICAgICAgICAgICAgICAgKHJlY3QtPmhlaWdo
dCAtIG1pc2NfeXBhZCAqIDIpKSAqIGFycm93X3NjYWxpbmc7Ci0KLSAgICB4YWxpZ24gPSBkaXJl
Y3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUiA/IG1pc2NfeGFsaWduIDogMS4wIC0gbWlzY194YWxp
Z247Ci0gICAgeHBhZCA9IG1pc2NfeHBhZCArIChyZWN0LT53aWR0aCAtIGV4dGVudCkgKiB4YWxp
Z247Ci0KLSAgICBhcnJvd19yZWN0LT54ID0gZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIg
PwotICAgICAgICAgICAgICAgICAgICAgICAgZmxvb3IocmVjdC0+eCArIHhwYWQpIDogY2VpbChy
ZWN0LT54ICsgeHBhZCk7Ci0gICAgYXJyb3dfcmVjdC0+eSA9IGZsb29yKHJlY3QtPnkgKyBtaXNj
X3lwYWQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAoKHJlY3QtPmhlaWdodCAtIGV4dGVu
dCkgKiBtaXNjX3lhbGlnbikpOwotCi0gICAgYXJyb3dfcmVjdC0+d2lkdGggPSBhcnJvd19yZWN0
LT5oZWlnaHQgPSBleHRlbnQ7Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1z
dGF0aWMgZ2ludAotbW96X2d0a19zY3JvbGxlZF93aW5kb3dfcGFpbnQoY2Fpcm9fdCogY3IsIEdk
a1JlY3RhbmdsZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1dpZGdl
dFN0YXRlKiBzdGF0ZSkKLXsKLSAgICBHdGtTdHlsZSogc3R5bGU7Ci0gICAgR3RrQWxsb2NhdGlv
biBhbGxvY2F0aW9uOwotICAgIEd0a1dpZGdldCogd2lkZ2V0OwotCi0gICAgZW5zdXJlX3Njcm9s
bGVkX3dpbmRvd193aWRnZXQoKTsKLSAgICB3aWRnZXQgPSBnUGFydHMtPnNjcm9sbGVkV2luZG93
V2lkZ2V0OwotCi0gICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0
aW9uKTsKLSAgICBhbGxvY2F0aW9uLnggPSByZWN0LT54OwotICAgIGFsbG9jYXRpb24ueSA9IHJl
Y3QtPnk7Ci0gICAgYWxsb2NhdGlvbi53aWR0aCA9IHJlY3QtPndpZHRoOwotICAgIGFsbG9jYXRp
b24uaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwotICAgIGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24o
d2lkZ2V0LCAmYWxsb2NhdGlvbik7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxl
KHdpZGdldCk7Ci0gICAgZ3RrX3BhaW50X3NoYWRvdyhzdHlsZSwgY3IsIEdUS19TVEFURV9OT1JN
QUwsIEdUS19TSEFET1dfSU4sCi0gICAgICAgICAgICAgICAgICAgICB3aWRnZXQsICJzY3JvbGxl
ZF93aW5kb3ciLCByZWN0LT54ICwgcmVjdC0+eSwKLSAgICAgICAgICAgICAgICAgICAgIHJlY3Qt
PndpZHRoLCByZWN0LT5oZWlnaHQpOwotICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci19Ci0K
LXN0YXRpYyBnaW50Ci1tb3pfZ3RrX3Njcm9sbGJhcl9idXR0b25fcGFpbnQoY2Fpcm9fdCogY3Is
IEdka1JlY3RhbmdsZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHdGtX
aWRnZXRTdGF0ZSogc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrU2Ny
b2xsYmFyQnV0dG9uRmxhZ3MgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5
cGUgPSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOwotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5
cGUgPSAoc3RhdGUtPmFjdGl2ZSkgPwotICAgICAgICBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURP
V19PVVQ7Ci0gICAgR2RrUmVjdGFuZ2xlIGFycm93X3JlY3Q7Ci0gICAgR3RrU3R5bGUqIHN0eWxl
OwotICAgIEd0a1dpZGdldCAqc2Nyb2xsYmFyOwotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlv
bjsKLSAgICBHdGtBcnJvd1R5cGUgYXJyb3dfdHlwZTsKLSAgICBnaW50IGFycm93X2Rpc3BsYWNl
bWVudF94LCBhcnJvd19kaXNwbGFjZW1lbnRfeTsKLSAgICBjb25zdCBjaGFyKiBkZXRhaWwgPSAo
ZmxhZ3MgJiBNT1pfR1RLX1NURVBQRVJfVkVSVElDQUwpID8KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ2c2Nyb2xsYmFyIiA6ICJoc2Nyb2xsYmFyIjsKLQotICAgIGVuc3VyZV9zY3JvbGxi
YXJfd2lkZ2V0KCk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQRVJfVkVSVElDQUwp
Ci0gICAgICAgIHNjcm9sbGJhciA9IGdQYXJ0cy0+dmVydFNjcm9sbGJhcldpZGdldDsKLSAgICBl
bHNlCi0gICAgICAgIHNjcm9sbGJhciA9IGdQYXJ0cy0+aG9yaXpTY3JvbGxiYXJXaWRnZXQ7Ci0K
LSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24oc2Nyb2xsYmFyLCBkaXJlY3Rpb24pOwotCi0g
ICAgLyogU29tZSB0aGVtZSBlbmdpbmVzIChpLmUuLCBDbGVhckxvb2tzKSBjaGVjayB0aGUgc2Ny
b2xsYmFyJ3MgYWxsb2NhdGlvbgotICAgICAgIHRvIGRldGVybWluZSB3aGVyZSBpdCBzaG91bGQg
cGFpbnQgcm91bmRlZCBjb3JuZXJzIG9uIHRoZSBidXR0b25zLgotICAgICAgIFdlIG5lZWQgdG8g
dHJpY2sgdGhlbSBpbnRvIGRyYXdpbmcgdGhlIGJ1dHRvbnMgdGhlIHdheSB3ZSB3YW50IHRoZW0u
ICovCi0KLSAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKHNjcm9sbGJhciwgJmFsbG9jYXRp
b24pOwotICAgIGFsbG9jYXRpb24ueCA9IHJlY3QtPng7Ci0gICAgYWxsb2NhdGlvbi55ID0gcmVj
dC0+eTsKLSAgICBhbGxvY2F0aW9uLndpZHRoID0gcmVjdC0+d2lkdGg7Ci0gICAgYWxsb2NhdGlv
bi5oZWlnaHQgPSByZWN0LT5oZWlnaHQ7Ci0KLSAgICBpZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQ
RVJfVkVSVElDQUwpIHsKLSAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQgKj0gNTsKLSAgICAgICAg
aWYgKGZsYWdzICYgTU9aX0dUS19TVEVQUEVSX0RPV04pIHsKLSAgICAgICAgICAgIGFycm93X3R5
cGUgPSBHVEtfQVJST1dfRE9XTjsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIE1PWl9HVEtfU1RF
UFBFUl9CT1RUT00pCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbi55IC09IDQgKiByZWN0LT5o
ZWlnaHQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbi55IC09
IHJlY3QtPmhlaWdodDsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXJyb3dfdHlw
ZSA9IEdUS19BUlJPV19VUDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIE1PWl9HVEtfU1RFUFBF
Ul9CT1RUT00pCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbi55IC09IDMgKiByZWN0LT5oZWln
aHQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBhbGxvY2F0aW9uLndpZHRoICo9
IDU7Ci0gICAgICAgIGlmIChmbGFncyAmIE1PWl9HVEtfU1RFUFBFUl9ET1dOKSB7Ci0gICAgICAg
ICAgICBhcnJvd190eXBlID0gR1RLX0FSUk9XX1JJR0hUOwotICAgICAgICAgICAgaWYgKGZsYWdz
ICYgTU9aX0dUS19TVEVQUEVSX0JPVFRPTSkKLSAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLngg
LT0gNCAqIHJlY3QtPndpZHRoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFs
bG9jYXRpb24ueCAtPSByZWN0LT53aWR0aDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGFycm93X3R5cGUgPSBHVEtfQVJST1dfTEVGVDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIE1P
Wl9HVEtfU1RFUFBFUl9CT1RUT00pCi0gICAgICAgICAgICAgICAgYWxsb2NhdGlvbi54IC09IDMg
KiByZWN0LT53aWR0aDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGd0a193aWRnZXRfc2V0X2Fs
bG9jYXRpb24oc2Nyb2xsYmFyLCAmYWxsb2NhdGlvbik7Ci0gICAgc3R5bGUgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZShzY3JvbGxiYXIpOwotCi0gICAgZ3RrX3BhaW50X2JveChzdHlsZSwgY3IsIHN0
YXRlX3R5cGUsIHNoYWRvd190eXBlLAotICAgICAgICAgICAgICAgICAgc2Nyb2xsYmFyLCBkZXRh
aWwsIHJlY3QtPngsIHJlY3QtPnksCi0gICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVj
dC0+aGVpZ2h0KTsKLQotICAgIGFycm93X3JlY3Qud2lkdGggPSByZWN0LT53aWR0aCAvIDI7Ci0g
ICAgYXJyb3dfcmVjdC5oZWlnaHQgPSByZWN0LT5oZWlnaHQgLyAyOwotICAgIGFycm93X3JlY3Qu
eCA9IHJlY3QtPnggKyAocmVjdC0+d2lkdGggLSBhcnJvd19yZWN0LndpZHRoKSAvIDI7Ci0gICAg
YXJyb3dfcmVjdC55ID0gcmVjdC0+eSArIChyZWN0LT5oZWlnaHQgLSBhcnJvd19yZWN0LmhlaWdo
dCkgLyAyOwotCi0gICAgaWYgKHN0YXRlX3R5cGUgPT0gR1RLX1NUQVRFX0FDVElWRSkgewotICAg
ICAgICBndGtfd2lkZ2V0X3N0eWxlX2dldChzY3JvbGxiYXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJhcnJvdy1kaXNwbGFjZW1lbnQteCIsICZhcnJvd19kaXNwbGFjZW1lbnRfeCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC15IiwgJmFy
cm93X2Rpc3BsYWNlbWVudF95LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsK
LQotICAgICAgICBhcnJvd19yZWN0LnggKz0gYXJyb3dfZGlzcGxhY2VtZW50X3g7Ci0gICAgICAg
IGFycm93X3JlY3QueSArPSBhcnJvd19kaXNwbGFjZW1lbnRfeTsKLSAgICB9Ci0KLSAgICBndGtf
cGFpbnRfYXJyb3coc3R5bGUsIGNyLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwKLSAgICAgICAg
ICAgICAgICAgICAgc2Nyb2xsYmFyLCBkZXRhaWwsIGFycm93X3R5cGUsIFRSVUUsIGFycm93X3Jl
Y3QueCwKLSAgICAgICAgICAgICAgICAgICAgYXJyb3dfcmVjdC55LCBhcnJvd19yZWN0LndpZHRo
LCBhcnJvd19yZWN0LmhlaWdodCk7Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQot
Ci1zdGF0aWMgZ2ludAotbW96X2d0a19zY3JvbGxiYXJfdHJvdWdoX3BhaW50KEd0a1RoZW1lV2lk
Z2V0VHlwZSB3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fdCog
Y3IsIEdka1JlY3RhbmdsZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
dGtXaWRnZXRTdGF0ZSogc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3Rr
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgR3RrU3R5bGUqIHN0eWxlOwotICAgIEd0
a1Njcm9sbGJhciAqc2Nyb2xsYmFyOwotCi0gICAgZW5zdXJlX3Njcm9sbGJhcl93aWRnZXQoKTsK
LQotICAgIGlmICh3aWRnZXQgPT0gIE1PWl9HVEtfU0NST0xMQkFSX1RSQUNLX0hPUklaT05UQUwp
Ci0gICAgICAgIHNjcm9sbGJhciA9IEdUS19TQ1JPTExCQVIoZ1BhcnRzLT5ob3JpelNjcm9sbGJh
cldpZGdldCk7Ci0gICAgZWxzZQotICAgICAgICBzY3JvbGxiYXIgPSBHVEtfU0NST0xMQkFSKGdQ
YXJ0cy0+dmVydFNjcm9sbGJhcldpZGdldCk7Ci0KLSAgICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rp
b24oR1RLX1dJREdFVChzY3JvbGxiYXIpLCBkaXJlY3Rpb24pOwotCi0gICAgc3R5bGUgPSBndGtf
d2lkZ2V0X2dldF9zdHlsZShHVEtfV0lER0VUKHNjcm9sbGJhcikpOwotCi0gICAgZ3RrX3BhaW50
X2JveChzdHlsZSwgY3IsIEdUS19TVEFURV9BQ1RJVkUsIEdUS19TSEFET1dfSU4sCi0gICAgICAg
ICAgICAgICAgICBHVEtfV0lER0VUKHNjcm9sbGJhciksICJ0cm91Z2giLCByZWN0LT54LCByZWN0
LT55LAotICAgICAgICAgICAgICAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7Ci0KLSAg
ICBpZiAoc3RhdGUtPmZvY3VzZWQpIHsKLSAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBj
ciwgR1RLX1NUQVRFX0FDVElWRSwKLSAgICAgICAgICAgICAgICAgICAgICAgIEdUS19XSURHRVQo
c2Nyb2xsYmFyKSwgInRyb3VnaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LT54LCBy
ZWN0LT55LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
TU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotbW96X2d0a19zY3JvbGxiYXJfdGh1
bWJfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHdGtTdGF0
ZVR5cGUgc3RhdGVfdHlwZSA9IChzdGF0ZS0+aW5Ib3ZlciB8fCBzdGF0ZS0+YWN0aXZlKSA/Ci0g
ICAgICAgIEdUS19TVEFURV9QUkVMSUdIVCA6IEdUS19TVEFURV9OT1JNQUw7Ci0gICAgR3RrU2hh
ZG93VHlwZSBzaGFkb3dfdHlwZSA9IEdUS19TSEFET1dfT1VUOwotICAgIEd0a1N0eWxlKiBzdHls
ZTsKLSAgICBHdGtTY3JvbGxiYXIgKnNjcm9sbGJhcjsKLSAgICBHdGtBZGp1c3RtZW50ICphZGo7
Ci0KLSAgICBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpOwotCi0gICAgaWYgKHdpZGdldCA9PSBN
T1pfR1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJWk9OVEFMKQotICAgICAgICBzY3JvbGxiYXIgPSBH
VEtfU0NST0xMQkFSKGdQYXJ0cy0+aG9yaXpTY3JvbGxiYXJXaWRnZXQpOwotICAgIGVsc2UKLSAg
ICAgICAgc2Nyb2xsYmFyID0gR1RLX1NDUk9MTEJBUihnUGFydHMtPnZlcnRTY3JvbGxiYXJXaWRn
ZXQpOwotCi0gICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKEdUS19XSURHRVQoc2Nyb2xsYmFy
KSwgZGlyZWN0aW9uKTsKLQotICAgIC8qIE1ha2Ugc3VyZSB0byBzZXQgdGhlIHNjcm9sbGJhciBy
YW5nZSBiZWZvcmUgcGFpbnRpbmcgc28gdGhhdAotICAgICAgIGV2ZXJ5dGhpbmcgaXMgZHJhd24g
cHJvcGVybHkuICBBdCBsZWFzdCB0aGUgYmx1ZWN1cnZlIChhbmQKLSAgICAgICBtYXliZSBvdGhl
cikgdGhlbWVzIGRvbid0IGRyYXcgdGhlIHRvcCBvciBib3R0b20gYmxhY2sgbGluZQotICAgICAg
IHN1cnJvdW5kaW5nIHRoZSBzY3JvbGxiYXIgaWYgdGhlIHRoZW1lIHRoaW5rcyB0aGF0IGl0J3Mg
YnV0dGVkCi0gICAgICAgdXAgYWdhaW5zdCB0aGUgc2Nyb2xsYmFyIGFycm93cy4gIE5vdGUgdGhl
IGluY3JlYXNlcyBvZiB0aGUKLSAgICAgICBjbGlwIHJlY3QgYmVsb3cuICovCi0gICAgYWRqID0g
Z3RrX3JhbmdlX2dldF9hZGp1c3RtZW50KEdUS19SQU5HRShzY3JvbGxiYXIpKTsKLQotICAgIGlm
ICh3aWRnZXQgPT0gTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTCkgewotICAgICAg
ICBndGtfYWRqdXN0bWVudF9zZXRfcGFnZV9zaXplKGFkaiwgcmVjdC0+d2lkdGgpOwotICAgIH0K
LSAgICBlbHNlIHsKLSAgICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShhZGosIHJl
Y3QtPmhlaWdodCk7Ci0gICAgfQotCi0gICAgZ3RrX2FkanVzdG1lbnRfY29uZmlndXJlKGFkaiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmN1cnBvcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUt
Pm1heHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX2FkanVzdG1lbnRfZ2V0
X3N0ZXBfaW5jcmVtZW50KGFkaiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0a19h
ZGp1c3RtZW50X2dldF9wYWdlX2luY3JlbWVudChhZGopLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndGtfYWRqdXN0bWVudF9nZXRfcGFnZV9zaXplKGFkaikpOwotCi0gICAgc3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZShHVEtfV0lER0VUKHNjcm9sbGJhcikpOwotCi0gICAgZ3Rr
X3BhaW50X3NsaWRlcihzdHlsZSwgY3IsIHN0YXRlX3R5cGUsIHNoYWRvd190eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgR1RLX1dJREdFVChzY3JvbGxiYXIpLCAic2xpZGVyIiwgcmVjdC0+eCwg
cmVjdC0+eSwKLSAgICAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCAgcmVjdC0+aGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgKHdpZGdldCA9PSBNT1pfR1RLX1NDUk9MTEJBUl9USFVN
Ql9IT1JJWk9OVEFMKSA/Ci0gICAgICAgICAgICAgICAgICAgICBHVEtfT1JJRU5UQVRJT05fSE9S
SVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0KLSAgICByZXR1cm4gTU9aX0dU
S19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotbW96X2d0a19lbnRyeV9wYWludChjYWlyb190
KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRT
dGF0ZSogc3RhdGUsIEd0a1dpZGdldCogd2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICBHdGtU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBHdGtTdGF0ZVR5cGUgYmdfc3RhdGUgPSBz
dGF0ZS0+ZGlzYWJsZWQgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RB
VEVfSU5TRU5TSVRJVkUgOiBHVEtfU1RBVEVfTk9STUFMOwotICAgIGdpbnQgeCwgeSwgd2lkdGgg
PSByZWN0LT53aWR0aCwgaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwotICAgIEd0a1N0eWxlKiBzdHls
ZTsKLSAgICBnYm9vbGVhbiBpbnRlcmlvcl9mb2N1czsKLSAgICBnYm9vbGVhbiB0aGVtZV9ob25v
cnNfdHJhbnNwYXJlbmN5ID0gRkFMU0U7Ci0gICAgZ2ludCBmb2N1c193aWR0aDsKLQotICAgIGd0
a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGRpcmVjdGlvbik7Ci0KLSAgICBzdHlsZSA9
IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7Ci0KLSAgICBndGtfd2lkZ2V0X3N0eWxlX2dl
dCh3aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmlu
dGVyaW9yX2ZvY3VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRo
IiwgJmZvY3VzX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob25vcnMtdHJhbnNw
YXJlbnQtYmctaGludCIsICZ0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgLyogZ3RrZW50cnkuYyB1c2VzIHR3byB3aW5kb3dz
LCBvbmUgZm9yIHRoZSBlbnRpcmUgd2lkZ2V0IGFuZCBvbmUgZm9yIHRoZQotICAgICAqIHRleHQg
YXJlYSBpbnNpZGUgaXQuIFRoZSBiYWNrZ3JvdW5kIG9mIGJvdGggd2luZG93cyBpcyBzZXQgdG8g
dGhlICJiYXNlIgotICAgICAqIGNvbG9yIG9mIHRoZSBuZXcgc3RhdGUgaW4gZ3RrX2VudHJ5X3N0
YXRlX2NoYW5nZWQsIGJ1dCBvbmx5IHRoZSBpbm5lcgotICAgICAqIHRleHRhcmVhIHdpbmRvdyB1
c2VzIGd0a19wYWludF9mbGF0X2JveCB3aGVuIGV4cG9zZWQgKi8KLQotICAgIC8qIFRoaXMgZ2V0
cyB1cyBhIGxvdmVseSBncmV5aXNoIGRpc2FibGVkaXNoIGxvb2sgKi8KLSAgICBndGtfd2lkZ2V0
X3NldF9zZW5zaXRpdmUod2lkZ2V0LCAhc3RhdGUtPmRpc2FibGVkKTsKLQotICAgIC8qIEdUSyBm
aWxscyB0aGUgb3V0ZXIgd2lkZ2V0IHdpbmRvdyB3aXRoIHRoZSBiYXNlIGNvbG9yIGJlZm9yZSBk
cmF3aW5nIHRoZSB3aWRnZXQuCi0gICAgICogU29tZSBvbGRlciB0aGVtZXMgcmVseSBvbiB0aGlz
IGJlaGF2aW9yLCBidXQgbWFueSB0aGVtZXMgbm93YWRheXMgdXNlIHJvdW5kZWQKLSAgICAgKiBj
b3JuZXJzIG9uIHRoZWlyIHdpZGdldHMuIFdoaWxlIG1vc3QgR1RLIGFwcHMgYXJlIGJsaXNzZnVs
bHkgdW5hd2FyZSBvZiB0aGlzCi0gICAgICogcHJvYmxlbSBkdWUgdG8gdGhlaXIgdXNlIG9mIHRo
ZSBkZWZhdWx0IHdpbmRvdyBiYWNrZ3JvdW5kLCB3ZSByZW5kZXIgd2lkZ2V0cyBvbgotICAgICAq
IG1hbnkga2luZHMgb2YgYmFja2dyb3VuZHMgb24gdGhlIHdlYi4KLSAgICAgKiBJZiB0aGUgdGhl
bWUgaXMgYWJsZSB0byBjb3BlIHdpdGggdHJhbnNwYXJlbmN5LCB0aGVuIHdlIGNhbiBza2lwIHBy
ZS1maWxsaW5nCi0gICAgICogYW5kIG5vdGlmeSB0aGUgdGhlbWUgaXQgd2lsbCBwYWludCBkaXJl
Y3RseSBvbiB0aGUgY2FudmFzLiAqLwotICAgIGlmICh0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5
KSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3Bh
cmVudC1iZy1oaW50IiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICAgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfY29sb3Io
Y3IsIChjb25zdCBHZGtDb2xvciopJnN0eWxlLT5iYXNlW2JnX3N0YXRlXSk7Ci0gICAgICAgIGNh
aXJvX3BhdHRlcm5fc2V0X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNyKSwgQ0FJUk9fRVhURU5E
X1JFUEVBVCk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5z
cGFyZW50LWJnLWhpbnQiLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKLSAgICB9Ci0KLSAgICAv
KiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBpbm5lciB3aW5kb3csIHNlZSBfZ3RrX2VudHJ5X2dl
dF9ib3JkZXJzICovCi0gICAgeCA9IFhUSElDS05FU1Moc3R5bGUpOwotICAgIHkgPSBZVEhJQ0tO
RVNTKHN0eWxlKTsKLQotICAgIGlmICghaW50ZXJpb3JfZm9jdXMpIHsKLSAgICAgICAgeCArPSBm
b2N1c193aWR0aDsKLSAgICAgICAgeSArPSBmb2N1c193aWR0aDsKLSAgICB9Ci0KLSAgICAvKiBT
aW11bGF0ZSBhbiBleHBvc2Ugb2YgdGhlIGlubmVyIHdpbmRvdyAqLwotICAgIGd0a19wYWludF9m
bGF0X2JveChzdHlsZSwgY3IsIGJnX3N0YXRlLCBHVEtfU0hBRE9XX05PTkUsCi0gICAgICAgICAg
ICAgICAgICAgICAgIHdpZGdldCwgImVudHJ5X2JnIiwgIHJlY3QtPnggKyB4LAotICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LT55ICsgeSwgcmVjdC0+d2lkdGggLSAyKngsIHJlY3QtPmhlaWdo
dCAtIDIqeSk7Ci0KLSAgICAvKiBOb3cgcGFpbnQgdGhlIHNoYWRvdyBhbmQgZm9jdXMgYm9yZGVy
LgotICAgICAqIFdlIGRvIGxpa2UgaW4gZ3RrX2VudHJ5X2RyYXdfZnJhbWUsIHdlIGZpcnN0IGRy
YXcgdGhlIHNoYWRvdywgYSB0YWQKLSAgICAgKiBzbWFsbGVyIHdoZW4gZm9jdXNlZCBpZiB0aGUg
Zm9jdXMgaXMgbm90IGludGVyaW9yLCB0aGVuIHRoZSBmb2N1cy4gKi8KLSAgICB4ID0gcmVjdC0+
eDsKLSAgICB5ID0gcmVjdC0+eTsKLQotICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCAmJiAhc3RhdGUt
PmRpc2FibGVkKSB7Ci0gICAgICAgIC8qIFRoaXMgd2lsbCBnZXQgdXMgdGhlIGxpdCBib3JkZXJz
IHRoYXQgZm9jdXNlZCB0ZXh0Ym94ZXMgZW5qb3kgb24KLSAgICAgICAgICogc29tZSB0aGVtZXMu
ICovCi0gICAgICAgIGlmICghaW50ZXJpb3JfZm9jdXMpIHsKLSAgICAgICAgICAgIC8qIEluZGVu
dCB0aGUgYm9yZGVyIGEgbGl0dGxlIGJpdCBpZiB3ZSBoYXZlIGV4dGVyaW9yIGZvY3VzCi0gICAg
ICAgICAgICAgICAodGhpcyBpcyB3aGF0IEdUSyBkb2VzIHRvIGRyYXcgbmF0aXZlIGVudHJpZXMp
ICovCi0gICAgICAgICAgICB4ICs9IGZvY3VzX3dpZHRoOwotICAgICAgICAgICAgeSArPSBmb2N1
c193aWR0aDsKLSAgICAgICAgICAgIHdpZHRoIC09IDIgKiBmb2N1c193aWR0aDsKLSAgICAgICAg
ICAgIGhlaWdodCAtPSAyICogZm9jdXNfd2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBn
dGtfcGFpbnRfc2hhZG93KHN0eWxlLCBjciwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19J
TiwKLSAgICAgICAgICAgICAgICAgICAgIHdpZGdldCwgImVudHJ5IiwgeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci0KLSAgICBpZiAoc3RhdGUtPmZvY3VzZWQgJiYgIXN0YXRlLT5kaXNhYmxlZCkgewot
ICAgICAgICBpZiAoIWludGVyaW9yX2ZvY3VzKSB7Ci0gICAgICAgICAgICBndGtfcGFpbnRfZm9j
dXMoc3R5bGUsIGNyLCAgR1RLX1NUQVRFX05PUk1BTCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3aWRnZXQsICJlbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+
eCwgcmVjdC0+eSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotbW96X2d0
a19jb21ib19ib3hfcGFpbnQoY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogcmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgZ2Jvb2xlYW4gaXNodG1s
LAotICAgICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17
Ci0gICAgR2RrUmVjdGFuZ2xlIGFycm93X3JlY3QsIHJlYWxfYXJyb3dfcmVjdDsKLSAgICBnaW50
IC8qIGFycm93X3NpemUsICovIHNlcGFyYXRvcl93aWR0aDsKLSAgICBnYm9vbGVhbiB3aWRlX3Nl
cGFyYXRvcnM7Ci0gICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5cGUgPSBDb252ZXJ0R3RrU3RhdGUo
c3RhdGUpOwotICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGUgPSBzdGF0ZS0+YWN0aXZlID8g
R1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOwotICAgIEd0a1N0eWxlKiBzdHlsZTsKLSAg
ICBHdGtSZXF1aXNpdGlvbiBhcnJvd19yZXE7Ci0KLSAgICBlbnN1cmVfY29tYm9fYm94X3dpZGdl
dHMoKTsKLQotICAgIC8qIEFsc28gc2V0cyB0aGUgZGlyZWN0aW9uIG9uIGdQYXJ0cy0+Y29tYm9C
b3hCdXR0b25XaWRnZXQsIHdoaWNoIGlzIHRoZW4KLSAgICAgKiBpbmhlcml0ZWQgYnkgdGhlIHNl
cGFyYXRvciBhbmQgYXJyb3cgKi8KLSAgICBtb3pfZ3RrX2J1dHRvbl9wYWludChjciwgcmVjdCwg
c3RhdGUsIEdUS19SRUxJRUZfTk9STUFMLAotICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0
cy0+Y29tYm9Cb3hCdXR0b25XaWRnZXQsIGRpcmVjdGlvbik7Ci0KLSAgICBjYWxjdWxhdGVfYnV0
dG9uX2lubmVyX3JlY3QoZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVjdCwgJmFycm93X3JlY3QsIGRpcmVjdGlvbiwgaXNodG1s
KTsKLSAgICAvKiBOb3cgYXJyb3dfcmVjdCBjb250YWlucyB0aGUgaW5uZXIgcmVjdCA7IHdlIHdh
bnQgdG8gY29ycmVjdCB0aGUgd2lkdGgKLSAgICAgKiB0byB3aGF0IHRoZSBhcnJvdyBuZWVkcyAo
c2VlIGd0a19jb21ib19ib3hfc2l6ZV9hbGxvY2F0ZSkgKi8KLSAgICBndGtfd2lkZ2V0X2dldF9w
cmVmZXJyZWRfc2l6ZShnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQsICZhcnJvd19yZXEsIE5V
TEwpOwotICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgYXJy
b3dfcmVjdC54ICs9IGFycm93X3JlY3Qud2lkdGggLSBhcnJvd19yZXEud2lkdGg7Ci0gICAgYXJy
b3dfcmVjdC53aWR0aCA9IGFycm93X3JlcS53aWR0aDsKLQotICAgIGNhbGN1bGF0ZV9hcnJvd19y
ZWN0KGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAmYXJyb3dfcmVjdCwgJnJlYWxfYXJyb3dfcmVjdCwgZGlyZWN0aW9uKTsKLQotICAgIHN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0KTsKLQot
ICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShnUGFydHMtPmNvbWJvQm94V2lkZ2V0LCByZWN0
KTsKLQotICAgIGd0a19wYWludF9hcnJvdyhzdHlsZSwgY3IsIHN0YXRlX3R5cGUsIHNoYWRvd190
eXBlLAotICAgICAgICAgICAgICAgICAgICBnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQsICJh
cnJvdyIsICBHVEtfQVJST1dfRE9XTiwgVFJVRSwKLSAgICAgICAgICAgICAgICAgICAgcmVhbF9h
cnJvd19yZWN0LngsIHJlYWxfYXJyb3dfcmVjdC55LAotICAgICAgICAgICAgICAgICAgICByZWFs
X2Fycm93X3JlY3Qud2lkdGgsIHJlYWxfYXJyb3dfcmVjdC5oZWlnaHQpOwotCi0KLSAgICAvKiBJ
ZiB0aGVyZSBpcyBubyBzZXBhcmF0b3IgaW4gdGhlIHRoZW1lLCB0aGVyZSdzIG5vdGhpbmcgbGVm
dCB0byBkby4gKi8KLSAgICBpZiAoIWdQYXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQpCi0g
ICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRf
Z2V0X3N0eWxlKGdQYXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQpOwotCi0gICAgZ3RrX3dp
ZGdldF9zdHlsZV9nZXQoZ1BhcnRzLT5jb21ib0JveFNlcGFyYXRvcldpZGdldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVfc2VwYXJhdG9ycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcl93aWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIGlmICh3aWRlX3NlcGFy
YXRvcnMpIHsKLSAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQotICAg
ICAgICAgICAgYXJyb3dfcmVjdC54IC09IHNlcGFyYXRvcl93aWR0aDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgYXJyb3dfcmVjdC54ICs9IGFycm93X3JlY3Qud2lkdGg7Ci0KLSAgICAgICAg
Z3RrX3BhaW50X2JveChzdHlsZSwgY3IsCi0gICAgICAgICAgICAgICAgICAgICAgR1RLX1NUQVRF
X05PUk1BTCwgR1RLX1NIQURPV19FVENIRURfT1VULAotICAgICAgICAgICAgICAgICAgICAgIGdQ
YXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQsICJ2c2VwYXJhdG9yIiwKLSAgICAgICAgICAg
ICAgICAgICAgICBhcnJvd19yZWN0LngsIGFycm93X3JlY3QueSwKLSAgICAgICAgICAgICAgICAg
ICAgICBzZXBhcmF0b3Jfd2lkdGgsIGFycm93X3JlY3QuaGVpZ2h0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgICAgICBh
cnJvd19yZWN0LnggLT0gWFRISUNLTkVTUyhzdHlsZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGFycm93X3JlY3QueCArPSBhcnJvd19yZWN0LndpZHRoOwotCi0gICAgICAgIGd0a19wYWlu
dF92bGluZShzdHlsZSwgY3IsIEdUS19TVEFURV9OT1JNQUwsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBnUGFydHMtPmNvbWJvQm94U2VwYXJhdG9yV2lkZ2V0LCAidnNlcGFyYXRvciIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBhcnJvd19yZWN0LnksIGFycm93X3JlY3QueSArIGFycm93X3Jl
Y3QuaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dfcmVjdC54KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwotfQotCi1zdGF0aWMgZ2ludAotbW96X2d0
a19wcm9ncmVzc2Jhcl9wYWludChjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAg
ICBHdGtTdHlsZSogc3R5bGU7Ci0KLSAgICBlbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0KCk7Ci0gICAg
Z3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCwgZGlyZWN0aW9u
KTsKLQotICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5wcm9ncmVzV2lk
Z2V0KTsKLQotICAgIGd0a19wYWludF9ib3goc3R5bGUsIGNyLCBHVEtfU1RBVEVfTk9STUFMLCBH
VEtfU0hBRE9XX0lOLAotICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0LCAi
dHJvdWdoIiwgcmVjdC0+eCwgcmVjdC0+eSwKLSAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRo
LCByZWN0LT5oZWlnaHQpOwotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQotc3Rh
dGljIGdpbnQKLW1vel9ndGtfcHJvZ3Jlc3NfY2h1bmtfcGFpbnQoY2Fpcm9fdCogY3IsIEdka1Jl
Y3RhbmdsZSogcmVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgR3RrU3R5bGUqIHN0eWxlOwotCi0gICAgZW5zdXJlX3By
b2dyZXNzX3dpZGdldCgpOwotICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbihnUGFydHMtPnBy
b2dyZXNXaWRnZXQsIGRpcmVjdGlvbik7Ci0KLSAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0
eWxlKGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCk7Ci0KLSAgICBndGtfcGFpbnRfYm94KHN0eWxlLCBj
ciwgR1RLX1NUQVRFX1BSRUxJR0hULCBHVEtfU0hBRE9XX09VVCwKLSAgICAgICAgICAgICAgICAg
IGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCwgImJhciIsIHJlY3QtPngsIHJlY3QtPnksCi0gICAgICAg
ICAgICAgICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKLQotICAgIHJldHVybiBNT1pf
R1RLX1NVQ0NFU1M7Ci19Ci0KLWdpbnQKLW1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhl
bWVXaWRnZXRUeXBlIHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBnaW50KiByaWdodCwgZ2ludCogYm90dG9tLCBHdGtUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaW5odG1sKQot
ewotICAgIEd0a1dpZGdldCogdzsKLSAgICBHdGtTdHlsZSAqc3R5bGU7Ci0KLSAgICBzd2l0Y2gg
KHdpZGdldCkgewotICAgIGNhc2UgTU9aX0dUS19CVVRUT046Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIEd0a0JvcmRlciBpbm5lcl9ib3JkZXI7Ci0gICAgICAgICAgICBnYm9vbGVhbiBpbnRlcmlv
cl9mb2N1czsKLSAgICAgICAgICAgIGdpbnQgZm9jdXNfd2lkdGgsIGZvY3VzX3BhZDsKLSAgICAg
ICAgICAgIEd0a1N0eWxlICpzdHlsZTsKLQotICAgICAgICAgICAgZW5zdXJlX2J1dHRvbl93aWRn
ZXQoKTsKLSAgICAgICAgICAgICpsZWZ0ID0gKnRvcCA9ICpyaWdodCA9ICpib3R0b20gPSBndGtf
Y29udGFpbmVyX2dldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihnUGFydHMtPmJ1dHRvbldp
ZGdldCkpOwotCi0gICAgICAgICAgICAvKiBEb24ndCBhZGQgdGhpcyBwYWRkaW5nIGluIEhUTUws
IG90aGVyd2lzZSB0aGUgYnV0dG9ucyB3aWxsCi0gICAgICAgICAgICAgICBiZWNvbWUgdG9vIGJp
ZyBhbmQgc3R1ZmYgdGhlIGxheW91dC4gKi8KLSAgICAgICAgICAgIGlmICghaW5odG1sKSB7Ci0g
ICAgICAgICAgICAgICAgbW96X2d0a193aWRnZXRfZ2V0X2ZvY3VzKGdQYXJ0cy0+YnV0dG9uV2lk
Z2V0LCAmaW50ZXJpb3JfZm9jdXMsICZmb2N1c193aWR0aCwgJmZvY3VzX3BhZCk7Ci0gICAgICAg
ICAgICAgICAgbW96X2d0a19idXR0b25fZ2V0X2lubmVyX2JvcmRlcihnUGFydHMtPmJ1dHRvbldp
ZGdldCwgJmlubmVyX2JvcmRlcik7Ci0gICAgICAgICAgICAgICAgKmxlZnQgKz0gZm9jdXNfd2lk
dGggKyBmb2N1c19wYWQgKyBpbm5lcl9ib3JkZXIubGVmdDsKLSAgICAgICAgICAgICAgICAqcmln
aHQgKz0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQgKyBpbm5lcl9ib3JkZXIucmlnaHQ7Ci0gICAg
ICAgICAgICAgICAgKnRvcCArPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZCArIGlubmVyX2JvcmRl
ci50b3A7Ci0gICAgICAgICAgICAgICAgKmJvdHRvbSArPSBmb2N1c193aWR0aCArIGZvY3VzX3Bh
ZCArIGlubmVyX2JvcmRlci5ib3R0b207Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0
eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5idXR0b25XaWRnZXQpOwotICAgICAg
ICAgICAgKmxlZnQgKz0gc3R5bGUtPnh0aGlja25lc3M7Ci0gICAgICAgICAgICAqcmlnaHQgKz0g
c3R5bGUtPnh0aGlja25lc3M7Ci0gICAgICAgICAgICAqdG9wICs9IHN0eWxlLT55dGhpY2tuZXNz
OwotICAgICAgICAgICAgKmJvdHRvbSArPSBzdHlsZS0+eXRoaWNrbmVzczsKLSAgICAgICAgICAg
IHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci0gICAgICAgIH0KLSAgICBjYXNlIE1PWl9HVEtfRU5U
Ulk6Ci0gICAgICAgIGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKLSAgICAgICAgdyA9IGdQYXJ0cy0+
ZW50cnlXaWRnZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19EUk9QRE9XTjoK
LSAgICAgICAgewotICAgICAgICAgICAgLyogV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgYXJy
b3cgb24gdGhlIGRyb3Bkb3duLCBzbyB0ZXh0Ci0gICAgICAgICAgICAgKiBkb2Vzbid0IGNvbWUg
dG9vIGNsb3NlIHRvIHRoZSBhcnJvdywgb3IgaW4gc29tZSBjYXNlcyBzcGlsbAotICAgICAgICAg
ICAgICogaW50byB0aGUgYXJyb3cuICovCi0gICAgICAgICAgICBnYm9vbGVhbiBpZ25vcmVkX2lu
dGVyaW9yX2ZvY3VzLCB3aWRlX3NlcGFyYXRvcnM7Ci0gICAgICAgICAgICBnaW50IGZvY3VzX3dp
ZHRoLCBmb2N1c19wYWQsIHNlcGFyYXRvcl93aWR0aDsKLSAgICAgICAgICAgIEd0a1JlcXVpc2l0
aW9uIGFycm93X3JlcTsKLSAgICAgICAgICAgIEd0a1N0eWxlKiBzdHlsZTsKLQotICAgICAgICAg
ICAgZW5zdXJlX2NvbWJvX2JveF93aWRnZXRzKCk7Ci0KLSAgICAgICAgICAgICpsZWZ0ID0gZ3Rr
X2NvbnRhaW5lcl9nZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoZ1BhcnRzLT5jb21ib0Jv
eEJ1dHRvbldpZGdldCkpOwotCi0gICAgICAgICAgICBpZiAoIWluaHRtbCkgewotICAgICAgICAg
ICAgICAgIG1vel9ndGtfd2lkZ2V0X2dldF9mb2N1cyhnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lk
Z2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWdub3JlZF9p
bnRlcmlvcl9mb2N1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JmZvY3VzX3dpZHRoLCAmZm9jdXNfcGFkKTsKLSAgICAgICAgICAgICAgICAqbGVmdCArPSBmb2N1
c193aWR0aCArIGZvY3VzX3BhZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3R5bGUg
PSBndGtfd2lkZ2V0X2dldF9zdHlsZShnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0KTsKLSAg
ICAgICAgICAgICp0b3AgPSAqbGVmdCArIHN0eWxlLT55dGhpY2tuZXNzOwotICAgICAgICAgICAg
KmxlZnQgKz0gc3R5bGUtPnh0aGlja25lc3M7Ci0KLSAgICAgICAgICAgICpyaWdodCA9ICpsZWZ0
OyAqYm90dG9tID0gKnRvcDsKLQotICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgbm8gc2VwYXJh
dG9yLCBkb24ndCB0cnkgdG8gY291bnQgaXRzIHdpZHRoLiAqLwotICAgICAgICAgICAgc2VwYXJh
dG9yX3dpZHRoID0gMDsKLSAgICAgICAgICAgIGlmIChnUGFydHMtPmNvbWJvQm94U2VwYXJhdG9y
V2lkZ2V0KSB7Ci0gICAgICAgICAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoZ1BhcnRzLT5j
b21ib0JveFNlcGFyYXRvcldpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVfc2VwYXJhdG9ycywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcl93aWR0
aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgICAg
ICAgICAgICAgIGlmICghd2lkZV9zZXBhcmF0b3JzKQotICAgICAgICAgICAgICAgICAgICBzZXBh
cmF0b3Jfd2lkdGggPQotICAgICAgICAgICAgICAgICAgICAgICAgWFRISUNLTkVTUyhzdHlsZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9z
aXplKGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCwgJmFycm93X3JlcSwgTlVMTCk7Ci0gICAg
ICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9SVEwpCi0gICAgICAgICAgICAg
ICAgKmxlZnQgKz0gc2VwYXJhdG9yX3dpZHRoICsgYXJyb3dfcmVxLndpZHRoOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICpyaWdodCArPSBzZXBhcmF0b3Jfd2lkdGggKyBhcnJv
d19yZXEud2lkdGg7Ci0KLSAgICAgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Ci0gICAg
ICAgIH0KLSAgICBjYXNlIE1PWl9HVEtfUFJPR1JFU1NCQVI6Ci0gICAgICAgIGVuc3VyZV9wcm9n
cmVzc193aWRnZXQoKTsKLSAgICAgICAgdyA9IGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgLyogVGhlc2Ugd2lkZ2V0cyBoYXZlIG5vIGJvcmRlcnMsIHNpbmNlIHRo
ZXkgYXJlIG5vdCBjb250YWluZXJzLiAqLwotICAgIGNhc2UgTU9aX0dUS19DSEVDS0JVVFRPTjoK
LSAgICBjYXNlIE1PWl9HVEtfUkFESU9CVVRUT046Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJB
Ul9CVVRUT046Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMOgot
ICAgIGNhc2UgTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUw6Ci0gICAgY2FzZSBNT1pf
R1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJWk9OVEFMOgotICAgIGNhc2UgTU9aX0dUS19TQ1JPTExC
QVJfVEhVTUJfVkVSVElDQUw6Ci0gICAgY2FzZSBNT1pfR1RLX1BST0dSRVNTX0NIVU5LOgotICAg
ICAgICAqbGVmdCA9ICp0b3AgPSAqcmlnaHQgPSAqYm90dG9tID0gMDsKLSAgICAgICAgcmV0dXJu
IE1PWl9HVEtfU1VDQ0VTUzsKLSAgICBkZWZhdWx0OgotICAgICAgICBnX3dhcm5pbmcoIlVuc3Vw
cG9ydGVkIHdpZGdldCB0eXBlOiAlZCIsIHdpZGdldCk7Ci0gICAgICAgIHJldHVybiBNT1pfR1RL
X1VOS05PV05fV0lER0VUOwotICAgIH0KLQotICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5
bGUodyk7Ci0gICAgKnJpZ2h0ID0gKmxlZnQgPSBYVEhJQ0tORVNTKHN0eWxlKTsKLSAgICAqYm90
dG9tID0gKnRvcCA9IFlUSElDS05FU1Moc3R5bGUpOwotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VD
Q0VTUzsKLX0KLQotZ2ludAotbW96X2d0a19nZXRfc2Nyb2xsYmFyX21ldHJpY3MoTW96R3RrU2Ny
b2xsYmFyTWV0cmljcyAqbWV0cmljcykKLXsKLSAgICBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgp
OwotCi0gICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQgKGdQYXJ0cy0+aG9yaXpTY3JvbGxiYXJXaWRn
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzbGlkZXJfd2lkdGgiLCAmbWV0cmljcy0+
c2xpZGVyX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoX2JvcmRlciIs
ICZtZXRyaWNzLT50cm91Z2hfYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAic3Rl
cHBlcl9zaXplIiwgJm1ldHJpY3MtPnN0ZXBwZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgInN0ZXBwZXJfc3BhY2luZyIsICZtZXRyaWNzLT5zdGVwcGVyX3NwYWNpbmcsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICJ0cm91Z2hfdW5kZXJfc3RlcHBlcnMiLCAmbWV0cmljcy0+
dHJvdWdoX3VuZGVyX3N0ZXBwZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzX3Nl
Y29uZGFyeV9mb3J3YXJkX3N0ZXBwZXIiLCAmbWV0cmljcy0+aGFzX3NlY29uZGFyeV9mb3J3YXJk
X3N0ZXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJoYXNfc2Vjb25kYXJ5X2JhY2t3
YXJkX3N0ZXBwZXIiLCAmbWV0cmljcy0+aGFzX3NlY29uZGFyeV9iYWNrd2FyZF9zdGVwcGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIG1ldHJpY3MtPm1pbl9zbGlk
ZXJfc2l6ZSA9IGd0a19yYW5nZV9nZXRfbWluX3NsaWRlcl9zaXplKEdUS19SQU5HRShnUGFydHMt
Pmhvcml6U2Nyb2xsYmFyV2lkZ2V0KSk7Ci0KLSAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwot
fQotCi1naW50Ci1tb3pfZ3RrX3dpZGdldF9wYWludChHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0
LCBjYWlyb190KiBjciwKLSAgICAgICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogcmVjdCwg
R3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgZ2ludCBmbGFncywg
R3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgc3dpdGNoICh3aWRnZXQpIHsKLSAg
ICBjYXNlIE1PWl9HVEtfQlVUVE9OOgotICAgICAgICBpZiAoc3RhdGUtPmRlcHJlc3NlZCkgewot
ICAgICAgICAgICAgZW5zdXJlX3RvZ2dsZV9idXR0b25fd2lkZ2V0KCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbW96X2d0a19idXR0b25fcGFpbnQoY3IsIHJlY3QsIHN0YXRlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHdGtSZWxpZWZTdHlsZSkgZmxhZ3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1BhcnRzLT50b2dnbGVCdXR0b25X
aWRnZXQsIGRpcmVjdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgZW5zdXJlX2J1dHRvbl93aWRn
ZXQoKTsKLSAgICAgICAgcmV0dXJuIG1vel9ndGtfYnV0dG9uX3BhaW50KGNyLCByZWN0LCBzdGF0
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHdGtSZWxpZWZTdHlsZSkg
ZmxhZ3MsIGdQYXJ0cy0+YnV0dG9uV2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RLX0NI
RUNLQlVUVE9OOgotICAgIGNhc2UgTU9aX0dUS19SQURJT0JVVFRPTjoKLSAgICAgICAgcmV0dXJu
IG1vel9ndGtfdG9nZ2xlX3BhaW50KGNyLCByZWN0LCBzdGF0ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICEhKGZsYWdzICYgTU9aX0dUS19XSURHRVRfQ0hFQ0tFRCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIShmbGFncyAmIE1PWl9HVEtfV0lE
R0VUX0lOQ09OU0lTVEVOVCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
d2lkZ2V0ID09IE1PWl9HVEtfUkFESU9CVVRUT04pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGlyZWN0aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RL
X1NDUk9MTEJBUl9CVVRUT046Ci0gICAgICAgIHJldHVybiBtb3pfZ3RrX3Njcm9sbGJhcl9idXR0
b25fcGFpbnQoY3IsIHJlY3QsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChHdGtTY3JvbGxiYXJCdXR0b25GbGFncykgZmxhZ3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMOgot
ICAgIGNhc2UgTU9aX0dUS19TQ1JPTExCQVJfVFJBQ0tfVkVSVElDQUw6Ci0gICAgICAgIHJldHVy
biBtb3pfZ3RrX3Njcm9sbGJhcl90cm91Z2hfcGFpbnQod2lkZ2V0LCBjciwgcmVjdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgZGlyZWN0aW9u
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9USFVNQl9IT1JJ
Wk9OVEFMOgotICAgIGNhc2UgTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfVkVSVElDQUw6Ci0gICAg
ICAgIHJldHVybiBtb3pfZ3RrX3Njcm9sbGJhcl90aHVtYl9wYWludCh3aWRnZXQsIGNyLCByZWN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIGRp
cmVjdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9aX0dUS19TQ1JPTExFRF9XSU5E
T1c6Ci0gICAgICAgIHJldHVybiBtb3pfZ3RrX3Njcm9sbGVkX3dpbmRvd19wYWludChjciwgcmVj
dCwgc3RhdGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PWl9HVEtfRU5UUlk6Ci0gICAg
ICAgIGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKLSAgICAgICAgcmV0dXJuIG1vel9ndGtfZW50cnlf
cGFpbnQoY3IsIHJlY3QsIHN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnUGFydHMtPmVudHJ5V2lkZ2V0LCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1PWl9HVEtfRFJPUERPV046Ci0gICAgICAgIHJldHVybiBtb3pfZ3RrX2NvbWJvX2JveF9w
YWludChjciwgcmVjdCwgc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZ2Jvb2xlYW4pIGZsYWdzLCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIE1PWl9HVEtfUFJPR1JFU1NCQVI6Ci0gICAgICAgIHJldHVybiBtb3pfZ3RrX3Byb2dyZXNz
YmFyX3BhaW50KGNyLCByZWN0LCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE1PWl9HVEtfUFJPR1JFU1NfQ0hVTks6Ci0gICAgICAgIHJldHVybiBtb3pfZ3RrX3Byb2dyZXNz
X2NodW5rX3BhaW50KGNyLCByZWN0LCBkaXJlY3Rpb24pOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBnX3dhcm5pbmcoIlVua25vd24gd2lkZ2V0IHR5cGU6ICVkIiwgd2lk
Z2V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTU9aX0dUS19VTktOT1dOX1dJREdFVDsKLX0KLQot
R3RrV2lkZ2V0KiBtb3pfZ3RrX2dldF9zY3JvbGxiYXJfd2lkZ2V0KHZvaWQpCi17Ci0gICAgaWYg
KCFpc19pbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZW5zdXJlX3Njcm9s
bGJhcl93aWRnZXQoKTsKLSAgICByZXR1cm4gZ1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldDsK
LX0KLQotZ2ludAotbW96X2d0a19zaHV0ZG93bigpCi17Ci0gICAgR3RrV2lkZ2V0Q2xhc3MgKmVu
dHJ5X2NsYXNzOwotICAgIGVudHJ5X2NsYXNzID0gZ190eXBlX2NsYXNzX3BlZWsoR1RLX1RZUEVf
RU5UUlkpOwotICAgIGdfdHlwZV9jbGFzc191bnJlZihlbnRyeV9jbGFzcyk7Ci0KLSAgICBpc19p
bml0aWFsaXplZCA9IEZBTFNFOwotCi0gICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKLX0KLQot
dm9pZCBtb3pfZ3RrX2Rlc3Ryb3lfdGhlbWVfcGFydHNfd2lkZ2V0cyhHdGtUaGVtZVBhcnRzKiBw
YXJ0cykKLXsKLSAgICBpZiAoIXBhcnRzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocGFy
dHMtPnByb3RvV2luZG93KSB7Ci0gICAgICAgIGd0a193aWRnZXRfZGVzdHJveShwYXJ0cy0+cHJv
dG9XaW5kb3cpOwotICAgICAgICBwYXJ0cy0+cHJvdG9XaW5kb3cgPSBOVUxMOwotICAgIH0KLX0K
LQotR3RrV2lkZ2V0KiBtb3pfZ3RrX2dldF9wcm9ncmVzc193aWRnZXQoKQotewotICAgIGlmICgh
aXNfaW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGVuc3VyZV9wcm9ncmVz
c193aWRnZXQoKTsKLSAgICByZXR1cm4gZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0OwotfQotCi0jZW5k
aWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9ndGtkcmF3aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrZHJh
d2luZy5oCmluZGV4IDlkMTNhMDcuLjQxMmExZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL2d0a2RyYXdpbmcuaApAQCAtODEsOSArODEsNyBAQCB0eXBlZGVmIHN0cnVjdCB7CiB9IE1v
ekd0a1Njcm9sbGJhck1ldHJpY3M7CiAKIHR5cGVkZWYgc3RydWN0IF9HdGtUaGVtZVBhcnRzIHsK
LSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIEdka0NvbG9ybWFwKiBjb2xvcm1hcDsKLSNl
bmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgogICAgIEd0a1dpZGdldCogcHJvdG9XaW5kb3c7CiAg
ICAgR3RrV2lkZ2V0KiBwcm90b0xheW91dDsKICAgICBHdGtXaWRnZXQqIGJ1dHRvbldpZGdldDsK
QEAgLTIwNSwxOCArMjAzLDExIEBAIHZvaWQgbW96X2d0a19kZXN0cm95X3RoZW1lX3BhcnRzX3dp
ZGdldHMoR3RrVGhlbWVQYXJ0cyogcGFydHMpOwogICogZmxhZ3M6ICAgICB3aWRnZXQtZGVwZW5k
YW50IGZsYWdzOyBzZWUgdGhlIEd0a1RoZW1lV2lkZ2V0VHlwZSBkZWZpbml0aW9uLgogICogZGly
ZWN0aW9uOiB0aGUgdGV4dCBkaXJlY3Rpb24sIHRvIGRyYXcgdGhlIHdpZGdldCBjb3JyZWN0bHkg
TFRSIGFuZCBSVEwuCiAgKi8KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogZ2ludAogbW96X2d0
a193aWRnZXRfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgR2RrRHJhd2FibGUqIGRy
YXdhYmxlLAogICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlKiByZWN0LCBHZGtSZWN0
YW5nbGUqIGNsaXByZWN0LAogICAgICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0
YXRlLCBnaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pOwotI2Vsc2UKLWdpbnQKLW1vel9ndGtfd2lkZ2V0X3BhaW50KEd0a1RoZW1lV2lk
Z2V0VHlwZSB3aWRnZXQsIGNhaXJvX3QqIGNyLAotICAgICAgICAgICAgICAgICAgICAgR2RrUmVj
dGFuZ2xlKiByZWN0LCBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsCi0gICAgICAgICAgICAgICAgICAg
ICBnaW50IGZsYWdzLCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbik7Ci0jZW5kaWYKIAogLyoq
KiBXaWRnZXQgbWV0cmljcyAqKiovCiAvKioKLS0gCjEuNy4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>