<?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>114249</bug_id>
          
          <creation_ts>2013-04-09 00:18:17 -0700</creation_ts>
          <short_desc>Remove the WebKit copy of GLU and the file using it</short_desc>
          <delta_ts>2013-04-09 11:03:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>dino</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>871513</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-09 00:18:17 -0700</bug_when>
    <thetext>Remove the WebKit copy of GLU and the file using it</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871516</commentid>
    <comment_count>1</comment_count>
      <attachid>197008</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-09 00:18:50 -0700</bug_when>
    <thetext>Created attachment 197008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>871963</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-04-09 11:03:00 -0700</bug_when>
    <thetext>Committed r148032: &lt;http://trac.webkit.org/changeset/148032&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197008</attachid>
            <date>2013-04-09 00:18:50 -0700</date>
            <delta_ts>2013-04-09 09:38:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-114249-20130409001830.patch</filename>
            <type>text/plain</type>
            <size>326239</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ3OTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9DaGFuZ2VMb2cKaW5kZXggOWNhZDNkZjhm
MWU4MzY5YTllNmQ2ODA4ODA3ZjQ4OGQ0NTI4MDQzMC4uYmQ3NWY5NDczMDc3NmZhNWMzOGY1NTcw
MzFhYzc2MjA1MjRlNDk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEz
LTA0LTA5ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSB0aGUgV2ViS2l0IGNvcHkgb2YgR0xVIGFuZCB0aGUgZmlsZSB1c2luZyBpdAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0MjQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBnbHUvLmdpdGln
bm9yZTogUmVtb3ZlZC4KKyAgICAgICAgKiBnbHUvTElDRU5TRS50eHQ6IFJlbW92ZWQuCisgICAg
ICAgICogZ2x1L1JFQURNRS53ZWJraXQ6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2dsdS5neXA6
IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2dsdW9zLmg6IFJlbW92ZWQuCisgICAgICAgICogZ2x1
L2ludGVybmFsX2dsdS5oOiBSZW1vdmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL0dOVW1ha2Vm
aWxlOiBSZW1vdmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL0ltYWtlZmlsZTogUmVtb3ZlZC4K
KyAgICAgICAgKiBnbHUvbGlidGVzcy9SRUFETUU6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xp
YnRlc3MvYWxnLW91dGxpbmU6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xpYnRlc3MvZGljdC1s
aXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xpYnRlc3MvZGljdC5jOiBSZW1vdmVkLgor
ICAgICAgICAqIGdsdS9saWJ0ZXNzL2RpY3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBnbHUvbGli
dGVzcy9nZW9tLmM6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xpYnRlc3MvZ2VvbS5oOiBSZW1v
dmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL21lbWFsbG9jLmM6IFJlbW92ZWQuCisgICAgICAg
ICogZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBnbHUvbGlidGVz
cy9tZXNoLmM6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xpYnRlc3MvbWVzaC5oOiBSZW1vdmVk
LgorICAgICAgICAqIGdsdS9saWJ0ZXNzL25vcm1hbC5jOiBSZW1vdmVkLgorICAgICAgICAqIGds
dS9saWJ0ZXNzL25vcm1hbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL3ByaW9y
aXR5cS1oZWFwLmM6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhl
YXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBnbHUvbGlidGVzcy9wcmlvcml0eXEtc29ydC5oOiBS
ZW1vdmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jOiBSZW1vdmVkLgorICAg
ICAgICAqIGdsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oOiBSZW1vdmVkLgorICAgICAgICAqIGdsdS9s
aWJ0ZXNzL3JlbmRlci5jOiBSZW1vdmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL3JlbmRlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIGdsdS9saWJ0ZXNzL3N3ZWVwLmM6IFJlbW92ZWQuCisgICAg
ICAgICogZ2x1L2xpYnRlc3Mvc3dlZXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBnbHUvbGlidGVz
cy90ZXNzLmM6IFJlbW92ZWQuCisgICAgICAgICogZ2x1L2xpYnRlc3MvdGVzcy5oOiBSZW1vdmVk
LgorICAgICAgICAqIGdsdS9saWJ0ZXNzL3Rlc3Ntb25vLmM6IFJlbW92ZWQuCisgICAgICAgICog
Z2x1L2xpYnRlc3MvdGVzc21vbm8uaDogUmVtb3ZlZC4KKwogMjAxMy0wNC0wNSAgR2VvZmZyZXkg
R2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1hZGUgVVNFKEpTQykgdW5jb25k
aXRpb25hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDg3MmMwNTQzOGQ4MzdiYzZiNDIxOGY0MWFlMTJjOWYwYTY3
ZmJlOTUuLjlhMjYzZjVlNjUwMmM4OTViNjQxYmQyOWQxNmUwNGM4YTc3OTc1Y2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0wNC0wOSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgdGhlIFdlYktpdCBjb3B5IG9mIEdMVSBh
bmQgdGhlIGZpbGUgdXNpbmcgaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExNDI0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNz
b3IuY3BwOiBSZW1vdmVkLgorCiAyMDEzLTA0LTA4ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFt
aW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgSFRNTCBOb3RpZmljYXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS8uZ2l0aWdub3JlIGIvU291cmNlL1RoaXJkUGFy
dHkvZ2x1Ly5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlZTRmOGMw
NzRlMTI4NDc3M2FiMmM5MjlmYjI4NjU4MDc1OTBkZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvZ2x1Ly5naXRpZ25vcmUK
KysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSouTWFrZWZpbGUKLSoubWsKLSouc2xuCi0q
LnZjcHJvagotKi52Y3hwcm9qKgotZ2x1Lnhjb2RlcHJvagpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvZ2x1L0xJQ0VOU0UudHh0IGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L0xJQ0VOU0Uu
dHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNThhZTM4ODBkNmY2NjE1ZjE2YWE4
NmU5OWVkNWIzN2ZlYTJiZWQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9MSUNFTlNFLnR4dAorKysgL2Rldi9udWxs
CkBAIC0xLDMxICswLDAgQEAKLVNHSSBGUkVFIFNPRlRXQVJFIExJQ0VOU0UgQiAoVmVyc2lvbiAy
LjAsIFNlcHQuIDE4LCAyMDA4KSAKLQotQ29weXJpZ2h0IChDKSBbZGF0ZXMgb2YgZmlyc3QgcHVi
bGljYXRpb25dIFNpbGljb24gR3JhcGhpY3MsIEluYy4gQWxsCi1SaWdodHMgUmVzZXJ2ZWQuCi0K
LVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy
c29uIG9idGFpbmluZwotYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j
dW1lbnRhdGlvbiBmaWxlcyAodGhlCi0iU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdh
cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi13aXRob3V0IGxpbWl0YXRpb24gdGhl
IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi1kaXN0cmlidXRl
LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8K
LXBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz
bywgc3ViamVjdCB0bwotdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIGRhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uCi1h
bmQgZWl0aGVyIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugb3IgYSByZWZlcmVuY2UgdG8gSFlQRVJM
SU5LCi0iaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLyJodHRwOi8vb3NzLnNnaS5j
b20vcHJvamVjdHMvRnJlZUIvCi1zaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1
YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotU29mdHdhcmUuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotRVhQUkVTUyBP
UiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G
Ci1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAot
Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09OIEdSQVBISUNTLCBJTkMu
IEJFIExJQUJMRQotRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQU4gQUNUSU9OIE9GCi1DT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ
TkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KLVdJVEggVEhFIFNPRlRXQVJFIE9SIFRI
RSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotCi1FeGNlcHQgYXMgY29u
dGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBTaWxpY29uIEdyYXBoaWNzLAotSW5j
LiBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90
ZSB0aGUKLXNhbGUsIHVzZSBvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhv
dXQgcHJpb3Igd3JpdHRlbgotYXV0aG9yaXphdGlvbiBmcm9tIFNpbGljb24gR3JhcGhpY3MsIElu
Yy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9SRUFETUUud2Via2l0IGIvU291
cmNlL1RoaXJkUGFydHkvZ2x1L1JFQURNRS53ZWJraXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGU3ZDRlMjFkMTNkZDgwZWRmYWQ3YzIzMDVkMjk3NGMwMGU0YTQ4OTEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
Z2x1L1JFQURNRS53ZWJraXQKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi1UaGlzIGlz
IGEgbmVhcmx5IHZlcmJhdGltIGNvcHkgb2YgdGhlIEdMVSB0ZXNzZWxsYXRvciBzb3VyY2UgY29k
ZSBmcm9tCi1TR0kncyBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uIGF0Ci1odHRwOi8vb3Nz
LnNnaS5jb20vcHJvamVjdHMvb2dsLXNhbXBsZS8gLiBQZXIKLWh0dHA6Ly9vc3Muc2dpLmNvbS9w
cm9qZWN0cy9GcmVlQi8gLCB0aGUgY29kZSBpcyBjb3ZlcmVkIHVuZGVyIHRoZSBTR0kKLUZyZWUg
U29mdHdhcmUgTGljZW5zZSBCLCB2ZXJzaW9uIDIuMCwgYSBjb3B5IG9mIHdoaWNoIGlzIGluCi1M
SUNFTlNFLnR4dCBpbiB0aGlzIGRpcmVjdG9yeS4KLQotVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHdl
cmUgbWFkZSBpbiBvcmRlciB0byBpbmNvcnBvcmF0ZSB0aGlzIGNvZGU6Ci0KLSAgLSBUaGUgYWRk
aXRpb24gb2YgYSBzaW1wbGlmaWVkIGdsdW9zLmggdG8gZWxpbWluYXRlIG9wZXJhdGluZyBzeXN0
ZW0KLSAgICBkZXBlbmRlbmNpZXMuICBBbGwgZW50cnkgcG9pbnRzIHRvIHRoZSB0ZXNzZWxhdG9y
IHdlcmUgcHJlZml4ZWQKLSAgICB3aXRoIGludGVybmFsXyB2aWEgI2RlZmluZXMsIHRvIGF2b2lk
IHN5bWJvbCBjb2xsaXNpb25zIHdpdGggYW55Ci0gICAgaG9zdCBPUyB2ZXJzaW9uIG9mIEdMVS4K
LQotICAtIFRoZSByZW1vdmFsIG9mIGluY2x1c2lvbiBvZiBHTC9nbHUuaCBhbmQgcmVwbGFjZW1l
bnQgd2l0aCBhbgotICAgIGluY2x1ZGUgb2YgaW50ZXJuYWxfZ2x1LmguCi0KLSAgLSBJbiB0ZXNz
LmMsIHRoZSBvYnNvbGV0ZSBlbnRyeSBwb2ludHMgZ2x1QmVnaW5Qb2x5Z29uLAotICAgIGdsdU5l
eHRDb250b3VyIGFuZCBnbHVFbmRQb2x5Z29uIGluIHRlc3MuYyB3ZXJlICNpZiAwJ2Qgb3V0Lgot
ICAgIERlZmF1bHQgYnJhbmNoZXMgd2VyZSBhZGRlZCB0byB0aGUgc3dpdGNoIHN0YXRlbWVudHMg
aW4gR290b1N0YXRlLgotCi0gIC0gSW4gbWVtYWxsb2MuaCwgdGhlIGluY2x1ZGUgb2YgbWFsbG9j
Lmggd2FzIGNoYW5nZWQgdG8gYW4gaW5jbHVkZQotICAgIG9mIHN0ZGxpYi5oLgotCi0gIC0gSW4g
bm9ybWFsLmMsIGFuIHVudXNlZCB2YXJpYWJsZSAidyIgd2FzIHJlbW92ZWQgZnJvbQotICAgIF9f
Z2xfcHJvamVjdFBvbHlnb24uICNpZiBndWFyZHMgd2VyZSBwbGFjZWQgYXJvdW5kIHRoZSBkZWZp
bml0aW9uCi0gICAgb2YgdGhlIHVudXNlZCBOb3JtYWxpemUgZnVuY3Rpb24uCi0KLSAgLSBJbiBw
cmlvcml0eXEtaGVhcC5jLCBhbiAjaW5jbHVkZSBvZiA8bGltaXRzLmg+IHdhcyBhZGRlZC4KLQot
ICAtIEluIHN3ZWVwLmMsIElzV2luZGluZ0luc2lkZSgpIHdhcyBnaXZlbiBhIHJldHVybiB2YWx1
ZSB0byBzaWxlbmNlIGEKLSAgICB3YXJuaW5nLWFzLWVycm9yIGluIHJlbGVhc2UgYnVpbGRzLgot
Ci0gIC0gSW4gc3dlZXAuYywgRG9uZUVkZ2VEaWN0KCkncyBmaXhlZEVkZ2VzIHdhcyB3cmFwcGVk
IGluICNpbmRlZiBOREVCVUcsIHRvCi0gICAgc2lsZW5jZSBhIHdhcm5pbmctYXMtZXJyb3IgaW4g
cmVsZWFzZSBidWlsZHMuCi0KLSAgLSBJbiBwcmlvcml0eXEuYywgcmVuZGVyLmMsIGFuZCBvdGhl
cnM6ICB0aGUgY29uc3RydWN0ICJpZigxKS4uLmVsc2UiIHdhcwotICByZXBsYWNlZCB3aXRoICJk
b3suLi59d2hpbGUoMSkiIHRvIHNpbGVuY2UgYSB3YXJuaW5nLWFzLWVycm9yIGluIE1hYyBidWls
ZHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvZ2x1Lmd5cCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2dsdS9nbHUuZ3lwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWRh
YzAwZWYxOWEzMzlhYTc1ZDlhZjk5MGQxOGNjYmIxYjhiMTlhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9nbHUuZ3lw
CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotewotICAndGFyZ2V0cyc6IFt7Ci0gICAg
J3RhcmdldF9uYW1lJzogJ2xpYnRlc3MnLAotICAgICd0eXBlJzogJ3N0YXRpY19saWJyYXJ5JywK
LSAgICAnaW5jbHVkZV9kaXJzJzogWwotICAgICAgJy4nLAotICAgIF0sCi0gICAgJ3NvdXJjZXMn
OiBbCi0gICAgICAnZ2x1b3MuaCcsCi0gICAgICAnaW50ZXJuYWxfZ2x1LmgnLAotICAgICAgJ2xp
YnRlc3MvZGljdC1saXN0LmgnLAotICAgICAgJ2xpYnRlc3MvZGljdC5jJywKLSAgICAgICdsaWJ0
ZXNzL2RpY3QuaCcsCi0gICAgICAnbGlidGVzcy9nZW9tLmMnLAotICAgICAgJ2xpYnRlc3MvZ2Vv
bS5oJywKLSAgICAgICdsaWJ0ZXNzL21lbWFsbG9jLmMnLAotICAgICAgJ2xpYnRlc3MvbWVtYWxs
b2MuaCcsCi0gICAgICAnbGlidGVzcy9tZXNoLmMnLAotICAgICAgJ2xpYnRlc3MvbWVzaC5oJywK
LSAgICAgICdsaWJ0ZXNzL25vcm1hbC5jJywKLSAgICAgICdsaWJ0ZXNzL25vcm1hbC5oJywKLSAg
ICAgICdsaWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgnLAotICAgICAgJ2xpYnRlc3MvcHJpb3JpdHlx
LXNvcnQuaCcsCi0gICAgICAnbGlidGVzcy9wcmlvcml0eXEuYycsCi0gICAgICAnbGlidGVzcy9w
cmlvcml0eXEuaCcsCi0gICAgICAnbGlidGVzcy9yZW5kZXIuYycsCi0gICAgICAnbGlidGVzcy9y
ZW5kZXIuaCcsCi0gICAgICAnbGlidGVzcy9zd2VlcC5jJywKLSAgICAgICdsaWJ0ZXNzL3N3ZWVw
LmgnLAotICAgICAgJ2xpYnRlc3MvdGVzcy5jJywKLSAgICAgICdsaWJ0ZXNzL3Rlc3MuaCcsCi0g
ICAgICAnbGlidGVzcy90ZXNzbW9uby5jJywKLSAgICAgICdsaWJ0ZXNzL3Rlc3Ntb25vLmgnLAot
ICAgIF0sCi0gIH1dLAotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2dsdW9z
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvZ2x1b3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggM2VmYzhjNzQ4NjI4N2EwOGZiMTBiNDc2Mjg5NjkwM2EwODg4OGY4Ni4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9nbHUvZ2x1b3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHTFVP
U19IXwotI2RlZmluZSBHTFVPU19IXwotCi0vLyBUaGlzIGhlYWRlciBwcm92aWRlcyB0aGUgbWlu
aW1hbCBkZWZpbml0aW9ucyBuZWVkZWQgdG8gY29tcGlsZSB0aGUKLS8vIEdMVSB0ZXNzZWxsYXRv
ciBzb3VyY2VzLgotI2RlZmluZSBHTEFQSUVOVFJZCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBH
TGJvb2xlYW47Ci10eXBlZGVmIGRvdWJsZSBHTGRvdWJsZTsKLXR5cGVkZWYgdW5zaWduZWQgaW50
IEdMZW51bTsKLXR5cGVkZWYgZmxvYXQgR0xmbG9hdDsKLXR5cGVkZWYgdm9pZCBHTHZvaWQ7Ci0K
LSNkZWZpbmUgZ2x1TmV3VGVzcyBpbnRlcm5hbF9nbHVOZXdUZXNzCi0jZGVmaW5lIGdsdURlbGV0
ZVRlc3MgaW50ZXJuYWxfZ2x1RGVsZXRlVGVzcwotI2RlZmluZSBnbHVUZXNzUHJvcGVydHkgaW50
ZXJuYWxfZ2x1VGVzc1Byb3BlcnR5Ci0jZGVmaW5lIGdsdUdldFRlc3NQcm9wZXJ0eSBpbnRlcm5h
bF9nbHVHZXRUZXNzUHJvcGVydHkKLSNkZWZpbmUgZ2x1VGVzc05vcm1hbCBpbnRlcm5hbF9nbHVU
ZXNzTm9ybWFsCi0jZGVmaW5lIGdsdVRlc3NDYWxsYmFjayBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJh
Y2sKLSNkZWZpbmUgZ2x1VGVzc1ZlcnRleCBpbnRlcm5hbF9nbHVUZXNzVmVydGV4Ci0jZGVmaW5l
IGdsdVRlc3NCZWdpblBvbHlnb24gaW50ZXJuYWxfZ2x1VGVzc0JlZ2luUG9seWdvbgotI2RlZmlu
ZSBnbHVUZXNzQmVnaW5Db250b3VyIGludGVybmFsX2dsdVRlc3NCZWdpbkNvbnRvdXIKLSNkZWZp
bmUgZ2x1VGVzc0VuZENvbnRvdXIgaW50ZXJuYWxfZ2x1VGVzc0VuZENvbnRvdXIKLSNkZWZpbmUg
Z2x1VGVzc0VuZFBvbHlnb24gaW50ZXJuYWxfZ2x1VGVzc0VuZFBvbHlnb24KLQotI3VuZGVmIE1J
TgotI3VuZGVmIE1BWAotCi0jZW5kaWYgIC8vIEdMVU9TX0hfCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvaW50ZXJuYWxfZ2x1LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvaW50
ZXJuYWxfZ2x1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyYzljYzgwODM1Yjhm
YjI5ZTljYjc1ZTA1OTJhZjMwYmY2ODUzZmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2ludGVybmFsX2dsdS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAxMCwgR29v
Z2xlIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gVGhpcyBoZWFkZXIgaXMgYSBza2VsZXRv
biBzdWJzdGl0dXRlIGZvciBHTC9nbHUuaCB3aGljaCBjb250YWlucwotLy8gb25seSB0aGUgZGVm
aW5pdGlvbnMsIGNvbnN0YW50cyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIG5lY2Vzc2FyeQot
Ly8gdG8gY29tcGlsZSB0aGUgR0xVIHRlc3NlbGxhdG9yLgotCi0jaWZuZGVmIElOVEVSTkFMX0dM
VV9IXwotI2RlZmluZSBJTlRFUk5BTF9HTFVfSF8KLQotI2luY2x1ZGUgImdsdW9zLmgiCi0KLS8q
IFByaW1pdGl2ZXMgKi8KLSNkZWZpbmUgR0xfTElORV9MT09QICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDB4MDAwMgotI2RlZmluZSBHTF9UUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMHgwMDA0Ci0jZGVmaW5lIEdMX1RSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDUKLSNkZWZpbmUgR0xfVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAgICAg
ICAgIDB4MDAwNgotCi0vKiBFcnJvckNvZGUgKi8KLSNkZWZpbmUgR0xVX0lOVkFMSURfRU5VTSAg
ICAgICAgICAgICAgICAgICAgIDEwMDkwMAotI2RlZmluZSBHTFVfSU5WQUxJRF9WQUxVRSAgICAg
ICAgICAgICAgICAgICAgMTAwOTAxCi0jZGVmaW5lIEdMVV9PVVRfT0ZfTUVNT1JZICAgICAgICAg
ICAgICAgICAgICAxMDA5MDIKLQotLyogVGVzc0NhbGxiYWNrICovCi0jZGVmaW5lIEdMVV9URVNT
X0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAxMDAxMDAKLSNkZWZpbmUgR0xVX0JFR0lOICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEwMAotI2RlZmluZSBHTFVfVEVTU19WRVJURVgg
ICAgICAgICAgICAgICAgICAgICAgMTAwMTAxCi0jZGVmaW5lIEdMVV9WRVJURVggICAgICAgICAg
ICAgICAgICAgICAgICAgICAxMDAxMDEKLSNkZWZpbmUgR0xVX1RFU1NfRU5EICAgICAgICAgICAg
ICAgICAgICAgICAgIDEwMDEwMgotI2RlZmluZSBHTFVfRU5EICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMTAwMTAyCi0jZGVmaW5lIEdMVV9URVNTX0VSUk9SICAgICAgICAgICAgICAgICAg
ICAgICAxMDAxMDMKLSNkZWZpbmUgR0xVX1RFU1NfRURHRV9GTEFHICAgICAgICAgICAgICAgICAg
IDEwMDEwNAotI2RlZmluZSBHTFVfRURHRV9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgMTAw
MTA0Ci0jZGVmaW5lIEdMVV9URVNTX0NPTUJJTkUgICAgICAgICAgICAgICAgICAgICAxMDAxMDUK
LSNkZWZpbmUgR0xVX1RFU1NfQkVHSU5fREFUQSAgICAgICAgICAgICAgICAgIDEwMDEwNgotI2Rl
ZmluZSBHTFVfVEVTU19WRVJURVhfREFUQSAgICAgICAgICAgICAgICAgMTAwMTA3Ci0jZGVmaW5l
IEdMVV9URVNTX0VORF9EQVRBICAgICAgICAgICAgICAgICAgICAxMDAxMDgKLSNkZWZpbmUgR0xV
X1RFU1NfRVJST1JfREFUQSAgICAgICAgICAgICAgICAgIDEwMDEwOQotI2RlZmluZSBHTFVfVEVT
U19FREdFX0ZMQUdfREFUQSAgICAgICAgICAgICAgMTAwMTEwCi0jZGVmaW5lIEdMVV9URVNTX0NP
TUJJTkVfREFUQSAgICAgICAgICAgICAgICAxMDAxMTEKLQotLyogVGVzc0NvbnRvdXIgKi8KLSNk
ZWZpbmUgR0xVX0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEyMAotI2RlZmlu
ZSBHTFVfQ0NXICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTIxCi0jZGVmaW5lIEdM
VV9JTlRFUklPUiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAxMjIKLSNkZWZpbmUgR0xVX0VY
VEVSSU9SICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDEyMwotI2RlZmluZSBHTFVfVU5LTk9X
TiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMTI0Ci0KLS8qIFRlc3NQcm9wZXJ0eSAqLwot
I2RlZmluZSBHTFVfVEVTU19XSU5ESU5HX1JVTEUgICAgICAgICAgICAgICAgMTAwMTQwCi0jZGVm
aW5lIEdMVV9URVNTX0JPVU5EQVJZX09OTFkgICAgICAgICAgICAgICAxMDAxNDEKLSNkZWZpbmUg
R0xVX1RFU1NfVE9MRVJBTkNFICAgICAgICAgICAgICAgICAgIDEwMDE0MgotCi0vKiBUZXNzRXJy
b3IgKi8KLSNkZWZpbmUgR0xVX1RFU1NfRVJST1IxICAgICAgICAgICAgICAgICAgICAgIDEwMDE1
MQotI2RlZmluZSBHTFVfVEVTU19FUlJPUjIgICAgICAgICAgICAgICAgICAgICAgMTAwMTUyCi0j
ZGVmaW5lIEdMVV9URVNTX0VSUk9SMyAgICAgICAgICAgICAgICAgICAgICAxMDAxNTMKLSNkZWZp
bmUgR0xVX1RFU1NfRVJST1I0ICAgICAgICAgICAgICAgICAgICAgIDEwMDE1NAotI2RlZmluZSBH
TFVfVEVTU19FUlJPUjUgICAgICAgICAgICAgICAgICAgICAgMTAwMTU1Ci0jZGVmaW5lIEdMVV9U
RVNTX0VSUk9SNiAgICAgICAgICAgICAgICAgICAgICAxMDAxNTYKLSNkZWZpbmUgR0xVX1RFU1Nf
RVJST1I3ICAgICAgICAgICAgICAgICAgICAgIDEwMDE1NwotI2RlZmluZSBHTFVfVEVTU19FUlJP
UjggICAgICAgICAgICAgICAgICAgICAgMTAwMTU4Ci0jZGVmaW5lIEdMVV9URVNTX01JU1NJTkdf
QkVHSU5fUE9MWUdPTiAgICAgICAxMDAxNTEKLSNkZWZpbmUgR0xVX1RFU1NfTUlTU0lOR19CRUdJ
Tl9DT05UT1VSICAgICAgIDEwMDE1MgotI2RlZmluZSBHTFVfVEVTU19NSVNTSU5HX0VORF9QT0xZ
R09OICAgICAgICAgMTAwMTUzCi0jZGVmaW5lIEdMVV9URVNTX01JU1NJTkdfRU5EX0NPTlRPVVIg
ICAgICAgICAxMDAxNTQKLSNkZWZpbmUgR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFICAgICAgICAg
ICAgIDEwMDE1NQotI2RlZmluZSBHTFVfVEVTU19ORUVEX0NPTUJJTkVfQ0FMTEJBQ0sgICAgICAg
MTAwMTU2Ci0KLS8qIFRlc3NXaW5kaW5nICovCi0jZGVmaW5lIEdMVV9URVNTX1dJTkRJTkdfT0RE
ICAgICAgICAgICAgICAgICAxMDAxMzAKLSNkZWZpbmUgR0xVX1RFU1NfV0lORElOR19OT05aRVJP
ICAgICAgICAgICAgIDEwMDEzMQotI2RlZmluZSBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFICAg
ICAgICAgICAgMTAwMTMyCi0jZGVmaW5lIEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUgICAgICAg
ICAgICAxMDAxMzMKLSNkZWZpbmUgR0xVX1RFU1NfV0lORElOR19BQlNfR0VRX1RXTyAgICAgICAg
IDEwMDEzNAotCi0jZGVmaW5lIEdMVV9URVNTX01BWF9DT09SRCAxLjBlMTUwCi0KLXR5cGVkZWYg
c3RydWN0IEdMVXRlc3NlbGF0b3IgR0xVdGVzc2VsYXRvcjsKLQotI2lmZGVmIF9fY3BsdXNwbHVz
Ci1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1leHRlcm4gR0xVdGVzc2VsYXRvciAqIEdMQVBJRU5U
UlkgaW50ZXJuYWxfZ2x1TmV3VGVzcyh2b2lkKTsKLWV4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50
ZXJuYWxfZ2x1RGVsZXRlVGVzcyhHTFV0ZXNzZWxhdG9yICp0ZXNzKTsKLWV4dGVybiB2b2lkIEdM
QVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc1Byb3BlcnR5KEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gd2hp
Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRv
dWJsZSB2YWx1ZSk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdUdldFRlc3NQ
cm9wZXJ0eShHTFV0ZXNzZWxhdG9yICp0ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIHdoaWNoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xkb3VibGUgKnZhbHVlKTsKLWV4dGVy
biB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc05vcm1hbChHTFV0ZXNzZWxhdG9yICp0
ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZG91
YmxlIHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xk
b3VibGUgeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGRvdWJsZSB6KTsKLWV4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc0NhbGxi
YWNrKEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gd2hpY2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkIChHTEFQSUVOVFJZICpmbikoKSk7Ci1leHRlcm4g
dm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NWZXJ0ZXgoR0xVdGVzc2VsYXRvciAqdGVz
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGRvdWJs
ZSBjb29yZHNbM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRlc3NC
ZWdpblBvbHlnb24oR0xVdGVzc2VsYXRvciAqdGVzcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIEdM
QVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc0JlZ2luQ29udG91cihHTFV0ZXNzZWxhdG9yICp0ZXNz
KTsKLWV4dGVybiB2b2lkIEdMQVBJRU5UUlkgaW50ZXJuYWxfZ2x1VGVzc0VuZENvbnRvdXIoR0xV
dGVzc2VsYXRvciAqdGVzcyk7Ci1leHRlcm4gdm9pZCBHTEFQSUVOVFJZIGludGVybmFsX2dsdVRl
c3NFbmRQb2x5Z29uKEdMVXRlc3NlbGF0b3IgKnRlc3MpOwotCi0jaWZkZWYgX19jcGx1c3BsdXMK
LX0KLSNlbmRpZgotCi0jZW5kaWYgIC8vIElOVEVSTkFMX0dMVV9IXwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvR05VbWFrZWZpbGUgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9nbHUvbGlidGVzcy9HTlVtYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGFlODU5ZjI0MzcyN2Q2YmI0YTgyNWQ0YTFkMzJkNTRkZTJlNWM1YS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGli
dGVzcy9HTlVtYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0jIWdtYWtl
Ci0jCi0jIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlv
bnMgb2YgdGhpcyBmaWxlIGFyZQotIyBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGlj
ZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0jIFNvZnR3YXJlIExpY2Vuc2UgQiwg
VmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotIyBmaWxl
IGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBt
YXkgbm90IHVzZQotIyB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGlj
ZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0jIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24g
R3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0jIEFtcGhpdGhlYXRy
ZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSMKLSMgaHR0
cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0jCi0jIE5vdGUgdGhhdCwgYXMgcHJvdmlk
ZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAi
QVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5E
IENPTkRJVElPTlMKLSMgRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04s
IEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0jIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklM
SVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBV
UlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotIwotIyBPcmlnaW5hbCBDb2RlLiBUaGUgT3Jp
Z2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSMgVmVyc2lvbiAx
LjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3Jh
cGhpY3MsCi0jIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIw
MDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotIyBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSMgZWxzZXdoZXJlIGhlcmVp
bi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9u
czogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSMgZXN0YWJsaXNoZWQg
YnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotIyBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEp
LCByZWxlYXNlZAotIyBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3Rl
bSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSMgMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwg
MTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0jIFdpbmRvdyBTeXN0ZW0o
UikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2Fy
ZQotIyB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxl
IEltcGxlbWVudGF0aW9uCi0jIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5k
ZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotIyBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSMKLSMgJERhdGUkICRSZXZpc2lvbiQK
LSMgJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvR05VbWFrZWZpbGUj
OSAkCi0KLU9CSkVDVF9TVFlMRSA9IE4zMgotCi1pbmNsdWRlICQoUk9PVCkvdXNyL2luY2x1ZGUv
bWFrZS9jb21tb25kZWZzCi0KLVRBUkdFVCA9IGxpYnRlc3MuYQotCi1UQVJHRVRTID0gJChUQVJH
RVQpCi0KLUxDSU5DUyA9IC1JLi4vaW5jbHVkZQotCi0jIENvbXBpbGF0aW9uIGZsYWdzOgotIwot
IyAtRE5ERUJVRyBpcyBmb3IgdGhlIHByb2R1Y3Rpb24gY29kZTsgaXQgcmVtb3ZlcyBhbGwgYXNz
ZXJ0aW9uIGNoZWNrcwotIyAgICAobm90ZSB0aGF0IDxhc3NlcnQuaD4gbG9va3MgYXQgdGhpcyBz
eW1ib2wpLgotIwotIyAtRE5PX01BTExPUFQgdXNlcyByZWd1bGFyIG1hbGxvYyBpbnN0ZWFkIG9m
IHRoZSBtYWxsb3B0KCkgdmVyc2lvbi4KLSMgICAqKioqKiBVbmxlc3MgeW91IHVzZSB0aGlzIGZs
YWcsIHlvdSBtdXN0IHVzZSAiLWxtYWxsb2MiIHRvIGxpbmsKLSMgICAqKioqKiB5b3VyIGFwcGxp
Y2F0aW9uIQotIwotIyAtRE1FTU9SWV9ERUJVRyB0dXJucyBvbiB0aGUgTV9ERUJVRyBvcHRpb24g
b2YgbWFsbG9wdDsgdGhpcyBjYW4KLSMgICAgaW5jcmVhc2UgdGhlIHJ1bm5pbmcgdGltZSBhIExP
VC4KLSMKLSMgLURHTFVfVEVTU19BUElfRkxPQVQgY29tcGlsZXMgYSBzaW5nbGUtcHJlY2lzaW9u
IHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCi0jCi0jIC1mbG9hdCBwcmV2ZW50cyBhdXRvbWF0aWMg
cHJvbW90aW9uIHRvIGRvdWJsZSBwcmVjaXNpb247IHRoaXMgd2lsbCBwcm9kdWNlCi0jICAgIGZh
c3RlciBjb2RlIHdoZW4gY29tcGlsZWQgd2l0aCAtREdMVV9URVNTX0FQSV9GTE9BVC4KLSMKLSMg
LUROT19CUkFOQ0hfQ09ORElUSU9OUyB1c2VzICYgYW5kIHwgaW5zdGVhZCBvZiAmJiBhbmQgfHwg
b24gYSBjb3VwbGUKLSMgICAgb2YgaGVhdmlseS11c2VkIHRlc3RzIChWZXJ0RXEgYW5kIFZlcnRM
ZXEpOyBzb21lIGNvbXBpbGVycyBjYW4gZ2VuZXJhdGUKLSMgICAgYmV0dGVyIGNvZGUgd2l0aCB0
aGVzZSAodXNlIHNwZWNpYWwgaW5zdHJ1Y3Rpb25zIHRvIGF2b2lkIGJyYW5jaGluZykuCi0jCi0j
IC1ERk9SX1RSSVRFX1RFU1RfUFJPR1JBTSBpcyAqb25seSogZm9yIHVzZSB3aXRoIHRoZSB0ZXN0
IHByb2dyYW0gY2FsbGVkCi0jICAgICJ0cml0ZSIuICBJdCB1c2VzIHNvbWUgdmFyaWFibGVzIHdo
aWNoIGFyZSBkZWZpbmVkIGJ5IHRoZSB0ZXN0IHByb2dyYW0sCi0jICAgIHNvIHlvdSB3b24ndCBi
ZSBhYmxlIHRvIGxpbmsgaXQgd2l0aCBhbnl0aGluZyBlbHNlLgotCi1IRklMRVMgPSBcCi0JZGlj
dC5oIFwKLQlkaWN0LWxpc3QuaCBcCi0JZ2VvbS5oIFwKLQltZW1hbGxvYy5oIFwKLQltZXNoLmgg
XAotCW5vcm1hbC5oIFwKLQlwcmlvcml0eXEtaGVhcC5oIFwKLQlwcmlvcml0eXEtaGVhcC5jIFwK
LQlwcmlvcml0eXEtc29ydC5oIFwKLQlwcmlvcml0eXEuaCBcCi0JcmVuZGVyLmggXAotCXN3ZWVw
LmggXAotCXRlc3MuaCBcCi0JdGVzc21vbm8uaCBcCi0JJChOVUxMKQotCi1DRklMRVMgPSBcCi0J
ZGljdC5jIFwKLQlnZW9tLmMgXAotCW1lbWFsbG9jLmMgXAotCW1lc2guYyBcCi0Jbm9ybWFsLmMg
XAotCXByaW9yaXR5cS5jIFwKLQlyZW5kZXIuYyBcCi0Jc3dlZXAuYyBcCi0JdGVzcy5jIFwKLQl0
ZXNzbW9uby5jIFwKLQkkKE5VTEwpCi0KLWRlZmF1bHQgbGlicyBsaWJzX2luc3RhbGwgaW5zdGFs
bDogJChUQVJHRVQpCi0KLWhlYWRlcnMgaGVhZGVyc19pbnN0YWxsIGFwcHM6Ci0KLSQoVEFSR0VU
KTogJChPQkpFQ1RTKQotCSQoQVIpIGNybCAkQCAkKE9CSkVDVFMpOwotCi1pbmNsdWRlICQoQ09N
TU9OUlVMRVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9JbWFr
ZWZpbGUgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9JbWFrZWZpbGUKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiOTljZTIyZTRmZTUwY2I2Y2QzNTUwNGRmNjYxZTEyYTMx
MWFmNTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvSW1ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEs
NjEgKzAsMCBAQAotWENPTU0gTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi1YQ09NTSBtYWRlIHN1YmplY3QgdG8gYW4g
YWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi1YQ09NTSBT
b2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRl
bnRzIG9mIHRoaXMKLVhDT01NIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9u
cyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi1YQ09NTSB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci1Y
Q09NTSBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdh
bCBTZXJ2aWNlcywgMTYwMAotWENPTU0gQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZp
ZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotWENPTU0gCi1YQ09NTSBodHRwOi8vb3NzLnNnaS5j
b20vcHJvamVjdHMvRnJlZUIKLVhDT01NIAotWENPTU0gTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBp
biB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi1YQ09NTSAi
QVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5E
IENPTkRJVElPTlMKLVhDT01NIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFU
SU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotWENPTU0gQ09ORElUSU9OUyBPRiBNRVJD
SEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi1YQ09NTSBQ
QVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotWENPTU0gCi1YQ09NTSBP
cmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1l
bnRhdGlvbiwKLVhDT01NIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAs
IGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotWENPTU0gSW5jLiBUaGUgT3JpZ2luYWwg
Q29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi1Y
Q09NTSBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKLVhDT01NIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi1YQ09NTSAKLVhDT01NIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBs
aWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi1YQ09NTSBlc3RhYmxpc2hlZCBieSBTR0kg
aW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi1YQ09NTSBPcGVu
R0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCBy
ZWxlYXNlZAotWENPTU0gQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi1YQ09NTSAxLjMpLCByZWxlYXNlZCBOb3ZlbWJl
ciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLVhDT01NIFdpbmRv
dyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhp
cyBzb2Z0d2FyZQotWENPTU0gd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9u
IDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotWENPTU0gcHVibGlzaGVkIGJ5IFNHSSwgYnV0
IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi1YQ09NTSBjb21w
bGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLVhD
T01NCi0KLSNpbmNsdWRlIDxMaWJyYXJ5LnRtcGw+Ci0KLU9CSlMgPSBcCi0JZGljdC5vIFwKLQln
ZW9tLm8gXAotCW1lbWFsbG9jLm8gXAotCW1lc2gubyBcCi0Jbm9ybWFsLm8gXAotCXByaW9yaXR5
cS5vIFwKLQlyZW5kZXIubyBcCi0Jc3dlZXAubyBcCi0JdGVzcy5vIFwKLQl0ZXNzbW9uby5vCi0K
LUlOQ0xVREVTID0gXAotCS1JLi4vaW5jbHVkZSBcCi0JLUkkKFRPUCkvaW5jbHVkZSBcCi0JLUkk
KFRPUCkvaW5jbHVkZS9HTAotCi1ERUZJTkVTID0gXAotCS1ETkRFQlVHCi0KLU5vcm1hbExpYnJh
cnlPYmplY3RSdWxlKCkKLQotTm9ybWFsTGlicmFyeVRhcmdldCh0ZXNzLCAkKE9CSlMpKQotCi1E
ZXBlbmRUYXJnZXQoKQotQ2xlYW5UYXJnZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvUkVBRE1FIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvUkVB
RE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWY0ZmYyZWY2NzY5NjExODdlYmNh
NmE0M2U5YjcxZTk4ZmJlYjU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL1JFQURNRQorKysgL2Rldi9u
dWxsCkBAIC0xLDQ0NyArMCwwIEBACi0vKgotKiogJEhlYWRlcjogL2N2cy9wcm9qZWN0cy9vZ2wt
c2FtcGxlL21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9SRUFETUUsdiAxLjEgMjAwMC8wNC8yNiAw
NTo1Mzo1OSBsanAgRXhwICQKLSovCi0KLUdlbmVyYWwgUG9seWdvbiBUZXNzZWxhdGlvbgotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgVGhpcyBub3RlIGRlc2NyaWJlcyBhIHRlc3Nl
bGF0b3IgZm9yIHBvbHlnb25zIGNvbnNpc3Rpbmcgb2Ygb25lIG9yCi0gIG1vcmUgY2xvc2VkIGNv
bnRvdXJzLiAgSXQgaXMgYmFja3dhcmQtY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50Ci0gIE9w
ZW5HTCBVdGlsaXRpZXMgdGVzc2VsYXRvciwgYW5kIGlzIGludGVuZGVkIHRvIHJlcGxhY2UgaXQu
ICBIZXJlIGlzCi0gIGEgc3VtbWFyeSBvZiB0aGUgbWFqb3IgZGlmZmVyZW5jZXM6Ci0KLSAgIC0g
aW5wdXQgY29udG91cnMgY2FuIGJlIGludGVyc2VjdGluZywgc2VsZi1pbnRlcnNlY3RpbmcsIG9y
IGRlZ2VuZXJhdGUuCi0gIAotICAgLSBzdXBwb3J0cyBhIGNob2ljZSBvZiBzZXZlcmFsIHdpbmRp
bmcgcnVsZXMgZm9yIGRldGVybWluaW5nIHdoaWNoIHBhcnRzCi0gICAgIG9mIHRoZSBwb2x5Z29u
IGFyZSBvbiB0aGUgImludGVyaW9yIi4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZG8KLSAg
ICAgQ1NHIG9wZXJhdGlvbnMgb24gcG9seWdvbnMuCi0gIAotICAgLSBib3VuZGFyeSBleHRyYWN0
aW9uOiBpbnN0ZWFkIG9mIHRlc3NlbGF0aW5nIHRoZSBwb2x5Z29uLCByZXR1cm5zIGEKLSAgICAg
c2V0IG9mIGNsb3NlZCBjb250b3VycyB3aGljaCBzZXBhcmF0ZSB0aGUgaW50ZXJpb3IgZnJvbSB0
aGUgZXh0ZXJpb3IuCi0gIAotICAgLSByZXR1cm5zIHRoZSBvdXRwdXQgYXMgYSBzbWFsbCBudW1i
ZXIgb2YgdHJpYW5nbGUgZmFucyBhbmQgc3RyaXBzLAotICAgICByYXRoZXIgdGhhbiBhIGxpc3Qg
b2YgaW5kZXBlbmRlbnQgdHJpYW5nbGVzICh3aGVuIHBvc3NpYmxlKS4KLSAgCi0gICAtIG91dHB1
dCBpcyBhdmFpbGFibGUgYXMgYW4gZXhwbGljaXQgbWVzaCAoYSBxdWFkLWVkZ2Ugc3RydWN0dXJl
KSwKLSAgICAgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBjYWxsYmFjayBpbnRlcmZhY2UuCi0g
IAotICAgLSB0aGUgYWxnb3JpdGhtIHVzZWQgaXMgZXh0cmVtZWx5IHJvYnVzdC4KLQotCi1UaGUg
aW50ZXJmYWNlCi0tLS0tLS0tLS0tLS0tCi0KLSAgVGhlIHRlc3NlbGF0b3Igc3RhdGUgaXMgbWFp
bnRhaW5lZCBpbiBhICJ0ZXNzZWxhdG9yIG9iamVjdCIuCi0gIFRoZXNlIGFyZSBhbGxvY2F0ZWQg
YW5kIGRlc3Ryb3llZCB1c2luZwotCi0gICAgIEdMVXRlc3NlbGF0b3IgKmdsdU5ld1Rlc3MoIHZv
aWQgKTsKLSAgICAgdm9pZCBnbHVEZWxldGVUZXNzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0K
LSAgU2V2ZXJhbCB0ZXNzZWxhdG9yIG9iamVjdHMgbWF5IGJlIHVzZWQgc2ltdWx0YW5lb3VzbHku
Ci0KLSAgSW5wdXRzCi0gIC0tLS0tLQotICAKLSAgVGhlIGlucHV0IGNvbnRvdXJzIGFyZSBzcGVj
aWZpZWQgd2l0aCB0aGUgZm9sbG93aW5nIHJvdXRpbmVzOgotCi0gICAgIHZvaWQgZ2x1VGVzc0Jl
Z2luUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotICAgICB2b2lkIGdsdVRlc3NCZWdp
bkNvbnRvdXIoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgICAgdm9pZCBnbHVUZXNzVmVydGV4
KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVjb29yZCBjb29yZHNbM10sIHZvaWQgKmRhdGEgKTsK
LSAgICAgdm9pZCBnbHVUZXNzRW5kQ29udG91ciggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotICAg
ICB2b2lkIGdsdVRlc3NFbmRQb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0KLSAgV2l0
aGluIGVhY2ggQmVnaW5Qb2x5Z29uL0VuZFBvbHlnb24gcGFpciwgdGhlcmUgY2FuIGJlIHplcm8g
b3IgbW9yZQotICBjYWxscyB0byBCZWdpbkNvbnRvdXIvRW5kQ29udG91ci4gIFdpdGhpbiBlYWNo
IGNvbnRvdXIsIHRoZXJlIGFyZSB6ZXJvCi0gIG9yIG1vcmUgY2FsbHMgdG8gZ2x1VGVzc1ZlcnRl
eCgpLiAgVGhlIHZlcnRpY2VzIHNwZWNpZnkgYSBjbG9zZWQKLSAgY29udG91ciAodGhlIGxhc3Qg
dmVydGV4IG9mIGVhY2ggY29udG91ciBpcyBhdXRvbWF0aWNhbGx5IGxpbmtlZCB0bwotICB0aGUg
Zmlyc3QpLgotCi0gICJjb29yZHMiIGdpdmUgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0ZXgg
aW4gMy1zcGFjZS4gIEZvciB1c2VmdWwKLSAgcmVzdWx0cywgYWxsIHZlcnRpY2VzIHNob3VsZCBs
aWUgaW4gc29tZSBwbGFuZSwgc2luY2UgdGhlIHZlcnRpY2VzCi0gIGFyZSBwcm9qZWN0ZWQgb250
byBhIHBsYW5lIGJlZm9yZSB0ZXNzZWxhdGlvbi4gICJkYXRhIiBpcyBhIHBvaW50ZXIKLSAgdG8g
YSB1c2VyLWRlZmluZWQgdmVydGV4IHN0cnVjdHVyZSwgd2hpY2ggdHlwaWNhbGx5IGNvbnRhaW5z
IG90aGVyCi0gIGluZm9ybWF0aW9uIHN1Y2ggYXMgY29sb3IsIHRleHR1cmUgY29vcmRpbmF0ZXMs
IG5vcm1hbCwgZXRjLiAgSXQgaXMKLSAgdXNlZCB0byByZWZlciB0byB0aGUgdmVydGV4IGR1cmlu
ZyByZW5kZXJpbmcuCi0KLSAgVGhlIGxpYnJhcnkgY2FuIGJlIGNvbXBpbGVkIGluIHNpbmdsZS0g
b3IgZG91YmxlLXByZWNpc2lvbjsgdGhlIHR5cGUKLSAgR0xVY29vcmQgcmVwcmVzZW50cyBlaXRo
ZXIgImZsb2F0IiBvciAiZG91YmxlIiBhY2NvcmRpbmdseS4gIFRoZSBHTFUKLSAgdmVyc2lvbiB3
aWxsIGJlIGF2YWlsYWJsZSBpbiBkb3VibGUtcHJlY2lzaW9uIG9ubHkuICBDb21waWxlIHdpdGgK
LSAgR0xVX1RFU1NfQVBJX0ZMT0FUIGRlZmluZWQgdG8gZ2V0IHRoZSBzaW5nbGUtcHJlY2lzaW9u
IHZlcnNpb24uCi0KLSAgV2hlbiBFbmRQb2x5Z29uIGlzIGNhbGxlZCwgdGhlIHRlc3NlbGF0aW9u
IGFsZ29yaXRobSBkZXRlcm1pbmVzCi0gIHdoaWNoIHJlZ2lvbnMgYXJlIGludGVyaW9yIHRvIHRo
ZSBnaXZlbiBjb250b3VycywgYWNjb3JkaW5nIHRvIG9uZQotICBvZiBzZXZlcmFsICJ3aW5kaW5n
IHJ1bGVzIiBkZXNjcmliZWQgYmVsb3cuICBUaGUgaW50ZXJpb3IgcmVnaW9ucwotICBhcmUgdGhl
biB0ZXNzZWxhdGVkLCBhbmQgdGhlIG91dHB1dCBpcyBwcm92aWRlZCBhcyBjYWxsYmFja3MuCi0K
LQotICBSZW5kZXJpbmcgQ2FsbGJhY2tzCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICBDYWxs
YmFja3MgYXJlIHNwZWNpZmllZCBieSB0aGUgY2xpZW50IHVzaW5nCi0KLSAgICAgdm9pZCBnbHVU
ZXNzQ2FsbGJhY2soIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB3aGljaCwgdm9pZCAoKmZu
KSgpKTsKLQotICBJZiAiZm4iIGlzIE5VTEwsIGFueSBwcmV2aW91c2x5IGRlZmluZWQgY2FsbGJh
Y2sgaXMgZGlzY2FyZGVkLgotICAKLSAgVGhlIGNhbGxiYWNrcyB1c2VkIHRvIHByb3ZpZGUgb3V0
cHV0IGFyZToJLyogd2hpY2ggPT0gKi8KLQotICAgICB2b2lkIGJlZ2luKCBHTGVudW0gdHlwZSAp
OwkJCS8qIEdMVV9URVNTX0JFR0lOICovCi0gICAgIHZvaWQgZWRnZUZsYWcoIEdMYm9vbGVhbiBm
bGFnICk7CQkvKiBHTFVfVEVTU19FREdFX0ZMQUcgKi8KLSAgICAgdm9pZCB2ZXJ0ZXgoIHZvaWQg
KmRhdGEgKTsJCQkvKiBHTFVfVEVTU19WRVJURVggKi8KLSAgICAgdm9pZCBlbmQoIHZvaWQgKTsJ
CQkJLyogR0xVX1RFU1NfRU5EICovCi0KLSAgQW55IG9mIHRoZSBjYWxsYmFja3MgbWF5IGJlIGxl
ZnQgdW5kZWZpbmVkOyBpZiBzbywgdGhlIGNvcnJlc3BvbmRpbmcKLSAgaW5mb3JtYXRpb24gd2ls
bCBub3QgYmUgc3VwcGxpZWQgZHVyaW5nIHJlbmRlcmluZy4KLQotICBUaGUgImJlZ2luIiBjYWxs
YmFjayBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgcHJpbWl0aXZlOyB0eXBlIGlzIG9uZQotICBv
ZiBHTF9UUklBTkdMRV9TVFJJUCwgR0xfVFJJQU5HTEVfRkFOLCBvciBHTF9UUklBTkdMRVMgKGJ1
dCBzZWUgdGhlCi0gIG5vdGVzIG9uICJib3VuZGFyeSBleHRyYWN0aW9uIiBiZWxvdykuCi0gIAot
ICBJdCBpcyBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mICJ2ZXJ0ZXgiIGNhbGxiYWNrcywgd2hp
Y2ggc3VwcGx5IHRoZQotICB2ZXJ0aWNlcyBpbiB0aGUgc2FtZSBvcmRlciBhcyBleHBlY3RlZCBi
eSB0aGUgY29ycmVzcG9uZGluZyBnbEJlZ2luKCkKLSAgY2FsbC4gIEFmdGVyIHRoZSBsYXN0IHZl
cnRleCBvZiBhIGdpdmVuIHByaW1pdGl2ZSwgdGhlcmUgaXMgYSBjYWxsYmFjawotICB0byAiZW5k
Ii4KLQotICBJZiB0aGUgImVkZ2VGbGFnIiBjYWxsYmFjayBpcyBwcm92aWRlZCwgbm8gdHJpYW5n
bGUgZmFucyBvciBzdHJpcHMKLSAgd2lsbCBiZSB1c2VkLiAgV2hlbiBlZGdlRmxhZyBpcyBjYWxs
ZWQsIGlmICJmbGFnIiBpcyBHTF9UUlVFIHRoZW4gZWFjaAotICB2ZXJ0ZXggd2hpY2ggZm9sbG93
cyBiZWdpbnMgYW4gZWRnZSB3aGljaCBsaWVzIG9uIHRoZSBwb2x5Z29uIGJvdW5kYXJ5Ci0gIChp
ZS4gYW4gZWRnZSB3aGljaCBzZXBhcmF0ZXMgYW4gaW50ZXJpb3IgcmVnaW9uIGZyb20gYW4gZXh0
ZXJpb3Igb25lKS4KLSAgSWYgImZsYWciIGlzIEdMX0ZBTFNFLCBlYWNoIHZlcnRleCB3aGljaCBm
b2xsb3dzIGJlZ2lucyBhbiBlZGdlIHdoaWNoIGxpZXMKLSAgaW4gdGhlIHBvbHlnb24gaW50ZXJp
b3IuICAiZWRnZUZsYWciIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QKLSAgY2FsbCB0
byAidmVydGV4Ii4KLQotICBPdGhlciBDYWxsYmFja3MKLSAgLS0tLS0tLS0tLS0tLS0tCi0KLSAg
IHZvaWQgbWVzaCggR0xVbWVzaCAqbWVzaCApOwkJCS8qIEdMVV9URVNTX01FU0ggKi8KLQotICAg
LSBSZXR1cm5zIGFuIGV4cGxpY2l0IG1lc2gsIHJlcHJlc2VudGVkIHVzaW5nIHRoZSBxdWFkLWVk
Z2Ugc3RydWN0dXJlCi0gICAgIChHdWliYXMvU3RvbGZpICc4NSkuICBPdGhlciBpbXBsZW1lbnRh
dGlvbnMgb2YgdGhpcyBpbnRlcmZhY2UgbWlnaHQKLSAgICAgdXNlIGEgZGlmZmVyZW50IG1lc2gg
c3RydWN0dXJlLCBzbyB0aGlzIGlzIGF2YWlsYWJsZSBvbmx5IG9ubHkgYXMgYW4KLSAgICAgU0dJ
IGV4dGVuc2lvbi4gIFdoZW4gdGhlIG1lc2ggaXMgbm8gbG9uZ2VyIG5lZWRlZCwgaXQgc2hvdWxk
IGJlIGZyZWVkCi0gICAgIHVzaW5nCi0KLQl2b2lkIGdsdURlbGV0ZU1lc2goIEdMVW1lc2ggKm1l
c2ggKTsKLQotICAgICBUaGVyZSBpcyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoaXMgZGF0YSBz
dHJ1Y3R1cmUgaW4gdGhlIGluY2x1ZGUKLSAgICAgZmlsZSAibWVzaC5oIi4gIEZvciB0aGUgZnVs
bCBkZXRhaWxzLCBzZWUgTC4gR3VpYmFzIGFuZCBKLiBTdG9sZmksCi0gICAgIFByaW1pdGl2ZXMg
Zm9yIHRoZSBtYW5pcHVsYXRpb24gb2YgZ2VuZXJhbCBzdWJkaXZpc2lvbnMgYW5kIHRoZQotICAg
ICBjb21wdXRhdGlvbiBvZiBWb3Jvbm9pIGRpYWdyYW1zLCBBQ00gVHJhbnNhY3Rpb25zIG9uIEdy
YXBoaWNzLAotICAgICA0KDIpOjc0LTEyMywgQXByaWwgMTk4NS4gIEZvciBhbiBpbnRyb2R1Y3Rp
b24sIHNlZSB0aGUgY291cnNlIG5vdGVzCi0gICAgIGZvciBDUzM0OGEsICJNYXRoZW1hdGljYWwg
Rm91bmRhdGlvbnMgb2YgQ29tcHV0ZXIgR3JhcGhpY3MiLAotICAgICBhdmFpbGFibGUgYXQgdGhl
IFN0YW5mb3JkIGJvb2tzdG9yZSAoYW5kIHRhdWdodCBkdXJpbmcgdGhlIGZhbGwKLSAgICAgcXVh
cnRlcikuCi0KLSAgIHZvaWQgZXJyb3IoIEdMZW51bSBlcnJubyApOwkJCS8qIEdMVV9URVNTX0VS
Uk9SICovCi0KLSAgIC0gZXJybm8gaXMgb25lIG9mCUdMVV9URVNTX01JU1NJTkdfQkVHSU5fUE9M
WUdPTiwKLQkJCUdMVV9URVNTX01JU1NJTkdfRU5EX1BPTFlHT04sCi0JCQlHTFVfVEVTU19NSVNT
SU5HX0JFR0lOX0NPTlRPVVIsCi0JCQlHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSLAotCQkJ
R0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFLAotCQkJR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExC
QUNLCi0KLSAgICAgVGhlIGZpcnN0IGZvdXIgYXJlIG9idmlvdXMuICBUaGUgaW50ZXJmYWNlIHJl
Y292ZXJzIGZyb20gdGhlc2UKLSAgICAgZXJyb3JzIGJ5IGluc2VydGluZyB0aGUgbWlzc2luZyBj
YWxsKHMpLgotICAKLSAgICAgR0xVX1RFU1NfQ09PUkRfVE9PX0xBUkdFIHNheXMgdGhhdCBzb21l
IHZlcnRleCBjb29yZGluYXRlIGV4Y2VlZGVkCi0gICAgIHRoZSBwcmVkZWZpbmVkIGNvbnN0YW50
IEdMVV9URVNTX01BWF9DT09SRCBpbiBhYnNvbHV0ZSB2YWx1ZSwgYW5kCi0gICAgIHRoYXQgdGhl
IHZhbHVlIGhhcyBiZWVuIGNsYW1wZWQuICAoQ29vcmRpbmF0ZSB2YWx1ZXMgbXVzdCBiZSBzbWFs
bAotICAgICBlbm91Z2ggc28gdGhhdCB0d28gY2FuIGJlIG11bHRpcGxpZWQgdG9nZXRoZXIgd2l0
aG91dCBvdmVyZmxvdy4pCi0KLSAgICAgR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLIHNh
eXMgdGhhdCB0aGUgYWxnb3JpdGhtIGRldGVjdGVkIGFuCi0gICAgIGludGVyc2VjdGlvbiBiZXR3
ZWVuIHR3byBlZGdlcyBpbiB0aGUgaW5wdXQgZGF0YSwgYW5kIHRoZSAiY29tYmluZSIKLSAgICAg
Y2FsbGJhY2sgKGJlbG93KSB3YXMgbm90IHByb3ZpZGVkLiAgTm8gb3V0cHV0IHdpbGwgYmUgZ2Vu
ZXJhdGVkLgotCi0KLSAgIHZvaWQgY29tYmluZSggR0xVY29vcmQgY29vcmRzWzNdLCB2b2lkICpk
YXRhWzRdLAkvKiBHTFVfVEVTU19DT01CSU5FICovCi0JCSBHTFVjb29yZCB3ZWlnaHRbNF0sIHZv
aWQgKipvdXREYXRhICk7Ci0KLSAgIC0gV2hlbiB0aGUgYWxnb3JpdGhtIGRldGVjdHMgYW4gaW50
ZXJzZWN0aW9uLCBvciB3aXNoZXMgdG8gbWVyZ2UKLSAgICAgZmVhdHVyZXMsIGl0IG5lZWRzIHRv
IGNyZWF0ZSBhIG5ldyB2ZXJ0ZXguICBUaGUgdmVydGV4IGlzIGRlZmluZWQKLSAgICAgYXMgYSBs
aW5lYXIgY29tYmluYXRpb24gb2YgdXAgdG8gNCBleGlzdGluZyB2ZXJ0aWNlcywgcmVmZXJlbmNl
ZAotICAgICBieSBkYXRhWzAuLjNdLiAgVGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgbGluZWFyIGNv
bWJpbmF0aW9uIGFyZQotICAgICBnaXZlbiBieSB3ZWlnaHRbMC4uM107IHRoZXNlIHdlaWdodHMg
YWx3YXlzIHN1bSB0byAxLjAuICBBbGwgdmVydGV4Ci0gICAgIHBvaW50ZXJzIGFyZSB2YWxpZCBl
dmVuIHdoZW4gc29tZSBvZiB0aGUgd2VpZ2h0cyBhcmUgemVyby4KLSAgICAgImNvb3JkcyIgZ2l2
ZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBuZXcgdmVydGV4LgotCi0gICAgIFRoZSB1c2VyIG11c3Qg
YWxsb2NhdGUgYW5vdGhlciB2ZXJ0ZXgsIGludGVycG9sYXRlIHBhcmFtZXRlcnMKLSAgICAgdXNp
bmcgImRhdGEiIGFuZCAid2VpZ2h0cyIsIGFuZCByZXR1cm4gdGhlIG5ldyB2ZXJ0ZXggcG9pbnRl
ciBpbgotICAgICAib3V0RGF0YSIuICBUaGlzIGhhbmRsZSBpcyBzdXBwbGllZCBkdXJpbmcgcmVu
ZGVyaW5nIGNhbGxiYWNrcy4KLSAgICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBwb2x5Z29uIGxpZXMg
aW4gYW4gYXJiaXRyYXJ5IHBsYW5lIGluIDMtc3BhY2UsCi0gICAgIGFuZCB3ZSBhc3NvY2lhdGUg
YSBjb2xvciB3aXRoIGVhY2ggdmVydGV4LCB0aGUgY29tYmluZSBjYWxsYmFjayBtaWdodAotICAg
ICBsb29rIGxpa2UgdGhpczoKLSAgICAKLSAgICAgdm9pZCBteUNvbWJpbmUoIEdMVWNvb3JkIGNv
b3Jkc1szXSwgVkVSVEVYICpkWzRdLAotICAgICAgICAgICAgICAgICAgICAgR0xVY29vcmQgd1s0
XSwgVkVSVEVYICoqZGF0YU91dCApCi0gICAgIHsKLSAgICAgICAgVkVSVEVYICpuZXcgPSBuZXdf
dmVydGV4KCk7Ci0gICAgICAgCi0gICAgICAgIG5ldy0+eCA9IGNvb3Jkc1swXTsKLSAgICAgICAg
bmV3LT55ID0gY29vcmRzWzFdOwotICAgICAgICBuZXctPnogPSBjb29yZHNbMl07Ci0gICAgICAg
IG5ldy0+ciA9IHdbMF0qZFswXS0+ciArIHdbMV0qZFsxXS0+ciArIHdbMl0qZFsyXS0+ciArIHdb
M10qZFszXS0+cjsKLSAgICAgICAgbmV3LT5nID0gd1swXSpkWzBdLT5nICsgd1sxXSpkWzFdLT5n
ICsgd1syXSpkWzJdLT5nICsgd1szXSpkWzNdLT5nOwotICAgICAgICBuZXctPmIgPSB3WzBdKmRb
MF0tPmIgKyB3WzFdKmRbMV0tPmIgKyB3WzJdKmRbMl0tPmIgKyB3WzNdKmRbM10tPmI7Ci0gICAg
ICAgIG5ldy0+YSA9IHdbMF0qZFswXS0+YSArIHdbMV0qZFsxXS0+YSArIHdbMl0qZFsyXS0+YSAr
IHdbM10qZFszXS0+YTsKLSAgICAgICAgKmRhdGFPdXQgPSBuZXc7Ci0gICAgIH0KLQotICAgICBJ
ZiB0aGUgYWxnb3JpdGhtIGRldGVjdHMgYW4gaW50ZXJzZWN0aW9uLCB0aGVuIHRoZSAiY29tYmlu
ZSIgY2FsbGJhY2sKLSAgICAgbXVzdCBiZSBkZWZpbmVkLCBhbmQgbXVzdCB3cml0ZSBhIG5vbi1O
VUxMIHBvaW50ZXIgaW50byAiZGF0YU91dCIuCi0gICAgIE90aGVyd2lzZSB0aGUgR0xVX1RFU1Nf
TkVFRF9DT01CSU5FX0NBTExCQUNLIGVycm9yIG9jY3VycywgYW5kIG5vCi0gICAgIG91dHB1dCBp
cyBnZW5lcmF0ZWQuICBUaGlzIGlzIHRoZSBvbmx5IGVycm9yIHRoYXQgY2FuIG9jY3VyIGR1cmlu
ZwotICAgICB0ZXNzZWxhdGlvbiBhbmQgcmVuZGVyaW5nLgotCi0KLSAgQ29udHJvbCBvdmVyIFRl
c3NlbGF0aW9uCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAKLSAgIHZvaWQgZ2x1VGVz
c1Byb3BlcnR5KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gd2hpY2gsIEdMVWNvb3JkIHZh
bHVlICk7Ci0KLSAgIFByb3BlcnRpZXMgZGVmaW5lZDoKLQotICAgIC0gR0xVX1RFU1NfV0lORElO
R19SVUxFLiAgUG9zc2libGUgdmFsdWVzOgotCi0JICBHTFVfVEVTU19XSU5ESU5HX09ERAotCSAg
R0xVX1RFU1NfV0lORElOR19OT05aRVJPCi0JICBHTFVfVEVTU19XSU5ESU5HX1BPU0lUSVZFCi0J
ICBHTFVfVEVTU19XSU5ESU5HX05FR0FUSVZFCi0JICBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFf
VFdPCi0KLSAgICAgIFRoZSBpbnB1dCBjb250b3VycyBwYXJpdGlvbiB0aGUgcGxhbmUgaW50byBy
ZWdpb25zLiAgQSB3aW5kaW5nCi0gICAgICBydWxlIGRldGVybWluZXMgd2hpY2ggb2YgdGhlc2Ug
cmVnaW9ucyBhcmUgaW5zaWRlIHRoZSBwb2x5Z29uLgotICAgICAgCi0gICAgICBGb3IgYSBzaW5n
bGUgY29udG91ciBDLCB0aGUgd2luZGluZyBudW1iZXIgb2YgYSBwb2ludCB4IGlzIHNpbXBseQot
ICAgICAgdGhlIHNpZ25lZCBudW1iZXIgb2YgcmV2b2x1dGlvbnMgd2UgbWFrZSBhcm91bmQgeCBh
cyB3ZSB0cmF2ZWwKLSAgICAgIG9uY2UgYXJvdW5kIEMgKHdoZXJlIENDVyBpcyBwb3NpdGl2ZSku
ICBXaGVuIHRoZXJlIGFyZSBzZXZlcmFsCi0gICAgICBjb250b3VycywgdGhlIGluZGl2aWR1YWwg
d2luZGluZyBudW1iZXJzIGFyZSBzdW1tZWQuICBUaGlzCi0gICAgICBwcm9jZWR1cmUgYXNzb2Np
YXRlcyBhIHNpZ25lZCBpbnRlZ2VyIHZhbHVlIHdpdGggZWFjaCBwb2ludCB4IGluCi0gICAgICB0
aGUgcGxhbmUuICBOb3RlIHRoYXQgdGhlIHdpbmRpbmcgbnVtYmVyIGlzIHRoZSBzYW1lIGZvciBh
bGwKLSAgICAgIHBvaW50cyBpbiBhIHNpbmdsZSByZWdpb24uCi0KLSAgICAgIFRoZSB3aW5kaW5n
IHJ1bGUgY2xhc3NpZmllcyBhIHJlZ2lvbiBhcyAiaW5zaWRlIiBpZiBpdHMgd2luZGluZwotICAg
ICAgbnVtYmVyIGJlbG9uZ3MgdG8gdGhlIGNob3NlbiBjYXRlZ29yeSAob2RkLCBub256ZXJvLCBw
b3NpdGl2ZSwKLSAgICAgIG5lZ2F0aXZlLCBvciBhYnNvbHV0ZSB2YWx1ZSBvZiBhdCBsZWFzdCB0
d28pLiAgVGhlIGN1cnJlbnQgR0xVCi0gICAgICB0ZXNzZWxhdG9yIGltcGxlbWVudHMgdGhlICJv
ZGQiIHJ1bGUuICBUaGUgIm5vbnplcm8iIHJ1bGUgaXMgYW5vdGhlcgotICAgICAgY29tbW9uIHdh
eSB0byBkZWZpbmUgdGhlIGludGVyaW9yLiAgVGhlIG90aGVyIHRocmVlIHJ1bGVzIGFyZQotICAg
ICAgdXNlZnVsIGZvciBwb2x5Z29uIENTRyBvcGVyYXRpb25zIChzZWUgYmVsb3cpLgotCi0gICAg
LSBHTFVfVEVTU19CT1VOREFSWV9PTkxZLiAgVmFsdWVzOiBUUlVFIChub24temVybykgb3IgRkFM
U0UgKHplcm8pLgotCi0gICAgICBJZiBUUlVFLCByZXR1cm5zIGEgc2V0IG9mIGNsb3NlZCBjb250
b3VycyB3aGljaCBzZXBhcmF0ZSB0aGUKLSAgICAgIHBvbHlnb24gaW50ZXJpb3IgYW5kIGV4dGVy
aW9yIChyYXRoZXIgdGhhbiBhIHRlc3NlbGF0aW9uKS4KLSAgICAgIEV4dGVyaW9yIGNvbnRvdXJz
IGFyZSBvcmllbnRlZCBDQ1cgd2l0aCByZXNwZWN0IHRvIHRoZSBub3JtYWwsCi0gICAgICBpbnRl
cmlvciBjb250b3VycyBhcmUgb3JpZW50ZWQgQ1cuICBUaGUgR0xVX1RFU1NfQkVHSU4gY2FsbGJh
Y2sKLSAgICAgIHVzZXMgdGhlIHR5cGUgR0xfTElORV9MT09QIGZvciBlYWNoIGNvbnRvdXIuCi0g
ICAgICAKLSAgICAtIEdMVV9URVNTX1RPTEVSQU5DRS4gIFZhbHVlOiBhIHJlYWwgbnVtYmVyIGJl
dHdlZW4gMC4wIGFuZCAxLjAuCi0KLSAgICAgIFRoaXMgc3BlY2lmaWVzIGEgdG9sZXJhbmNlIGZv
ciBtZXJnaW5nIGZlYXR1cmVzIHRvIHJlZHVjZSB0aGUgc2l6ZQotICAgICAgb2YgdGhlIG91dHB1
dC4gIEZvciBleGFtcGxlLCB0d28gdmVydGljZXMgd2hpY2ggYXJlIHZlcnkgY2xvc2UgdG8KLSAg
ICAgIGVhY2ggb3RoZXIgbWlnaHQgYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgdmVydGV4LiAgVGhl
IHRvbGVyYW5jZQotICAgICAgaXMgbXVsdGlwbGllZCBieSB0aGUgbGFyZ2VzdCBjb29yZGluYXRl
IG1hZ25pdHVkZSBvZiBhbnkgaW5wdXQgdmVydGV4OwotICAgICAgdGhpcyBzcGVjaWZpZXMgdGhl
IG1heGltdW0gZGlzdGFuY2UgdGhhdCBhbnkgZmVhdHVyZSBjYW4gbW92ZSBhcyB0aGUKLSAgICAg
IHJlc3VsdCBvZiBhIHNpbmdsZSBtZXJnZSBvcGVyYXRpb24uICBJZiBhIHNpbmdsZSBmZWF0dXJl
IHRha2VzIHBhcnQKLSAgICAgIGluIHNldmVyYWwgbWVyZ2Ugb3BlcmF0aW9ucywgdGhlIHRvdGFs
IGRpc3RhbmNlIG1vdmVkIGNvdWxkIGJlIGxhcmdlci4KLQotICAgICAgRmVhdHVyZSBtZXJnaW5n
IGlzIGNvbXBsZXRlbHkgb3B0aW9uYWw7IHRoZSB0b2xlcmFuY2UgaXMgb25seSBhIGhpbnQuCi0g
ICAgICBUaGUgaW1wbGVtZW50YXRpb24gaXMgZnJlZSB0byBtZXJnZSBpbiBzb21lIGNhc2VzIGFu
ZCBub3QgaW4gb3RoZXJzLAotICAgICAgb3IgdG8gbmV2ZXIgbWVyZ2UgZmVhdHVyZXMgYXQgYWxs
LiAgVGhlIGRlZmF1bHQgdG9sZXJhbmNlIGlzIHplcm8uCi0gICAgICAKLSAgICAgIFRoZSBjdXJy
ZW50IGltcGxlbWVudGF0aW9uIG1lcmdlcyB2ZXJ0aWNlcyBvbmx5IGlmIHRoZXkgYXJlIGV4YWN0
bHkKLSAgICAgIGNvaW5jaWRlbnQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgdG9sZXJhbmNl
LiAgQSB2ZXJ0ZXggaXMKLSAgICAgIHNwbGljZWQgaW50byBhbiBlZGdlIG9ubHkgaWYgdGhlIGlt
cGxlbWVudGF0aW9uIGlzIHVuYWJsZSB0bwotICAgICAgZGlzdGluZ3Vpc2ggd2hpY2ggc2lkZSBv
ZiB0aGUgZWRnZSB0aGUgdmVydGV4IGxpZXMgb24uCi0gICAgICBUd28gZWRnZXMgYXJlIG1lcmdl
ZCBvbmx5IHdoZW4gYm90aCBlbmRwb2ludHMgYXJlIGlkZW50aWNhbC4KLQotCi0gICB2b2lkIGds
dVRlc3NOb3JtYWwoIEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0JCSAgICAgIEdMVWNvb3JkIHgsIEdM
VWNvb3JkIHksIEdMVWNvb3JkIHogKQotCi0gICAgLSBMZXRzIHRoZSB1c2VyIHN1cHBseSB0aGUg
cG9seWdvbiBub3JtYWwsIGlmIGtub3duLiAgQWxsIGlucHV0IGRhdGEKLSAgICAgIGlzIHByb2pl
Y3RlZCBpbnRvIGEgcGxhbmUgcGVycGVuZGljdWxhciB0byB0aGUgbm9ybWFsIGJlZm9yZQotICAg
ICAgdGVzc2VsYXRpb24uICBBbGwgb3V0cHV0IHRyaWFuZ2xlcyBhcmUgb3JpZW50ZWQgQ0NXIHdp
dGgKLSAgICAgIHJlc3BlY3QgdG8gdGhlIG5vcm1hbCAoQ1cgb3JpZW50YXRpb24gY2FuIGJlIG9i
dGFpbmVkIGJ5Ci0gICAgICByZXZlcnNpbmcgdGhlIHNpZ24gb2YgdGhlIHN1cHBsaWVkIG5vcm1h
bCkuICBGb3IgZXhhbXBsZSwgaWYKLSAgICAgIHlvdSBrbm93IHRoYXQgYWxsIHBvbHlnb25zIGxp
ZSBpbiB0aGUgeC15IHBsYW5lLCBjYWxsCi0gICAgICAiZ2x1VGVzc05vcm1hbCh0ZXNzLCAwLjAs
IDAuMCwgMS4wKSIgYmVmb3JlIHJlbmRlcmluZyBhbnkgcG9seWdvbnMuCi0gICAgICAKLSAgICAt
IElmIHRoZSBzdXBwbGllZCBub3JtYWwgaXMgKDAsMCwwKSAodGhlIGRlZmF1bHQgdmFsdWUpLCB0
aGUKLSAgICAgIG5vcm1hbCBpcyBkZXRlcm1pbmVkIGFzIGZvbGxvd3MuICBUaGUgZGlyZWN0aW9u
IG9mIHRoZSBub3JtYWwsCi0gICAgICB1cCB0byBpdHMgc2lnbiwgaXMgZm91bmQgYnkgZml0dGlu
ZyBhIHBsYW5lIHRvIHRoZSB2ZXJ0aWNlcywKLSAgICAgIHdpdGhvdXQgcmVnYXJkIHRvIGhvdyB0
aGUgdmVydGljZXMgYXJlIGNvbm5lY3RlZC4gIEl0IGlzCi0gICAgICBleHBlY3RlZCB0aGF0IHRo
ZSBpbnB1dCBkYXRhIGxpZXMgYXBwcm94aW1hdGVseSBpbiBwbGFuZTsKLSAgICAgIG90aGVyd2lz
ZSBwcm9qZWN0aW9uIHBlcnBlbmRpY3VsYXIgdG8gdGhlIGNvbXB1dGVkIG5vcm1hbCBtYXkKLSAg
ICAgIHN1YnN0YW50aWFsbHkgY2hhbmdlIHRoZSBnZW9tZXRyeS4gIFRoZSBzaWduIG9mIHRoZSBu
b3JtYWwgaXMKLSAgICAgIGNob3NlbiBzbyB0aGF0IHRoZSBzdW0gb2YgdGhlIHNpZ25lZCBhcmVh
cyBvZiBhbGwgaW5wdXQgY29udG91cnMKLSAgICAgIGlzIG5vbi1uZWdhdGl2ZSAod2hlcmUgYSBD
Q1cgY29udG91ciBoYXMgcG9zaXRpdmUgYXJlYSkuCi0gICAgCi0gICAgLSBUaGUgc3VwcGxpZWQg
bm9ybWFsIHBlcnNpc3RzIHVudGlsIGl0IGlzIGNoYW5nZWQgYnkgYW5vdGhlcgotICAgICAgY2Fs
bCB0byBnbHVUZXNzTm9ybWFsLgotCi0KLSAgQmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRo
ZSBHTFUgdGVzc2VsYXRvcgotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLSAgVGhlIHByZWZlcnJlZCBpbnRlcmZhY2UgaXMgdGhlIG9uZSBkZXNjcmli
ZWQgYWJvdmUuICBUaGUgZm9sbG93aW5nCi0gIHJvdXRpbmVzIGFyZSBvYnNvbGV0ZSwgYW5kIGFy
ZSBwcm92aWRlZCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgotCi0gICAgdHlwZWRl
ZiBHTFV0ZXNzZWxhdG9yIEdMVXRyaWFuZ3VsYXRvck9iajsJLyogb2Jzb2xldGUgbmFtZSAqLwot
Ci0gICAgdm9pZCBnbHVCZWdpblBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSAgICB2
b2lkIGdsdU5leHRDb250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGVudW0gdHlwZSApOwot
ICAgIHZvaWQgZ2x1RW5kUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotICAKLSAgInR5
cGUiIGlzIG9uZSBvZiBHTFVfRVhURVJJT1IsIEdMVV9JTlRFUklPUiwgR0xVX0NDVywgR0xVX0NX
LCBvcgotICBHTFVfVU5LTk9XTi4gIEl0IGlzIGlnbm9yZWQgYnkgdGhlIGN1cnJlbnQgR0xVIHRl
c3NlbGF0b3IuCi0gIAotICBHTFVfQkVHSU4sIEdMVV9WRVJURVgsIEdMVV9FTkQsIEdMVV9FUlJP
UiwgYW5kIEdMVV9FREdFX0ZMQUcgYXJlIGRlZmluZWQKLSAgYXMgc3lub255bXMgZm9yIEdMVV9U
RVNTX0JFR0lOLCBHTFVfVEVTU19WRVJURVgsIEdMVV9URVNTX0VORCwKLSAgR0xVX1RFU1NfRVJS
T1IsIGFuZCBHTFVfVEVTU19FREdFX0ZMQUcuCi0KLQotUG9seWdvbiBDU0cgb3BlcmF0aW9ucwot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gIFRoZSBmZWF0dXJlcyBvZiB0aGUgdGVzc2VsYXRv
ciBtYWtlIGl0IGVhc3kgdG8gZmluZCB0aGUgdW5pb24sIGRpZmZlcmVuY2UsCi0gIG9yIGludGVy
c2VjdGlvbiBvZiBzZXZlcmFsIHBvbHlnb25zLgotCi0gIEZpcnN0LCBhc3N1bWUgdGhhdCBlYWNo
IHBvbHlnb24gaXMgZGVmaW5lZCBzbyB0aGF0IHRoZSB3aW5kaW5nIG51bWJlcgotICBpcyAwIGZv
ciBlYWNoIGV4dGVyaW9yIHJlZ2lvbiwgYW5kIDEgZm9yIGVhY2ggaW50ZXJpb3IgcmVnaW9uLiAg
VW5kZXIKLSAgdGhpcyBtb2RlbCwgQ0NXIGNvbnRvdXJzIGRlZmluZSB0aGUgb3V0ZXIgYm91bmRh
cnkgb2YgdGhlIHBvbHlnb24sIGFuZAotICBDVyBjb250b3VycyBkZWZpbmUgaG9sZXMuICBDb250
b3VycyBtYXkgYmUgbmVzdGVkLCBidXQgYSBuZXN0ZWQKLSAgY29udG91ciBtdXN0IGJlIG9yaWVu
dGVkIG9wcG9zaXRlbHkgZnJvbSB0aGUgY29udG91ciB0aGF0IGNvbnRhaW5zIGl0LgotCi0gIElm
IHRoZSBvcmlnaW5hbCBwb2x5Z29ucyBkbyBub3Qgc2F0aXNmeSB0aGlzIGRlc2NyaXB0aW9uLCB0
aGV5IGNhbiBiZQotICBjb252ZXJ0ZWQgdG8gdGhpcyBmb3JtIGJ5IGZpcnN0IHJ1bm5pbmcgdGhl
IHRlc3NlbGF0b3Igd2l0aCB0aGUKLSAgR0xVX1RFU1NfQk9VTkRBUllfT05MWSBwcm9wZXJ0eSB0
dXJuZWQgb24uICBUaGlzIHJldHVybnMgYSBsaXN0IG9mCi0gIGNvbnRvdXJzIHNhdGlzZnlpbmcg
dGhlIHJlc3RyaWN0aW9uIGFib3ZlLiAgQnkgYWxsb2NhdGluZyB0d28KLSAgdGVzc2VsYXRvciBv
YmplY3RzLCB0aGUgY2FsbGJhY2tzIGZyb20gb25lIHRlc3NlbGF0b3IgY2FuIGJlIGZlZAotICBk
aXJlY3RseSB0byB0aGUgaW5wdXQgb2YgYW5vdGhlci4KLQotICBHaXZlbiB0d28gb3IgbW9yZSBw
b2x5Z29ucyBvZiB0aGUgZm9ybSBhYm92ZSwgQ1NHIG9wZXJhdGlvbnMgY2FuIGJlCi0gIGltcGxl
bWVudGVkIGFzIGZvbGxvd3M6Ci0KLSAgVW5pb24KLSAgICAgRHJhdyBhbGwgdGhlIGlucHV0IGNv
bnRvdXJzIGFzIGEgc2luZ2xlIHBvbHlnb24uICBUaGUgd2luZGluZyBudW1iZXIKLSAgICAgb2Yg
ZWFjaCByZXN1bHRpbmcgcmVnaW9uIGlzIHRoZSBudW1iZXIgb2Ygb3JpZ2luYWwgcG9seWdvbnMK
LSAgICAgd2hpY2ggY292ZXIgaXQuICBUaGUgdW5pb24gY2FuIGJlIGV4dHJhY3RlZCB1c2luZyB0
aGUKLSAgICAgR0xVX1RFU1NfV0lORElOR19OT05aRVJPIG9yIEdMVV9URVNTX1dJTkRJTkdfUE9T
SVRJVkUgd2luZGluZyBydWxlcy4KLSAgICAgTm90ZSB0aGF0IHdpdGggdGhlIG5vbnplcm8gcnVs
ZSwgd2Ugd291bGQgZ2V0IHRoZSBzYW1lIHJlc3VsdCBpZgotICAgICBhbGwgY29udG91ciBvcmll
bnRhdGlvbnMgd2VyZSByZXZlcnNlZC4KLQotICBJbnRlcnNlY3Rpb24gKHR3byBwb2x5Z29ucyBh
dCBhIHRpbWUgb25seSkKLSAgICAgRHJhdyBhIHNpbmdsZSBwb2x5Z29uIHVzaW5nIHRoZSBjb250
b3VycyBmcm9tIGJvdGggaW5wdXQgcG9seWdvbnMuCi0gICAgIEV4dHJhY3QgdGhlIHJlc3VsdCB1
c2luZyBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPLiAgKFNpbmNlIHRoaXMKLSAgICAgd2lu
ZGluZyBydWxlIGxvb2tzIGF0IHRoZSBhYnNvbHV0ZSB2YWx1ZSwgcmV2ZXJzaW5nIGFsbCBjb250
b3VyCi0gICAgIG9yaWVudGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHJlc3VsdC4pCi0KLSAg
RGlmZmVyZW5jZQotICAKLSAgICAgU3VwcG9zZSB3ZSB3YW50IHRvIGNvbXB1dGUgQSBcIChCIHVu
aW9uIEMgdW5pb24gRCkuICBEcmF3IGEgc2luZ2xlCi0gICAgIHBvbHlnb24gY29uc2lzdGluZyBv
ZiB0aGUgdW5tb2RpZmllZCBjb250b3VycyBmcm9tIEEsIGZvbGxvd2VkIGJ5Ci0gICAgIHRoZSBj
b250b3VycyBvZiBCLEMsRCB3aXRoIHRoZSB2ZXJ0ZXggb3JkZXIgcmV2ZXJzZWQgKHRoaXMgY2hh
bmdlcwotICAgICB0aGUgd2luZGluZyBudW1iZXIgb2YgdGhlIGludGVyaW9yIHJlZ2lvbnMgdG8g
LTEpLiAgVG8gZXh0cmFjdCB0aGUKLSAgICAgcmVzdWx0LCB1c2UgdGhlIEdMVV9URVNTX1dJTkRJ
TkdfUE9TSVRJVkUgcnVsZS4KLSAgIAotICAgICBJZiBCLEMsRCBhcmUgdGhlIHJlc3VsdCBvZiBh
IEdMVV9URVNTX0JPVU5EQVJZX09OTFkgY2FsbCwgYW4KLSAgICAgYWx0ZXJuYXRpdmUgdG8gcmV2
ZXJzaW5nIHRoZSB2ZXJ0ZXggb3JkZXIgaXMgdG8gcmV2ZXJzZSB0aGUgc2lnbiBvZgotICAgICB0
aGUgc3VwcGxpZWQgbm9ybWFsLiAgRm9yIGV4YW1wbGUgaW4gdGhlIHgteSBwbGFuZSwgY2FsbAot
ICAgICBnbHVUZXNzTm9ybWFsKCB0ZXNzLCAwLjAsIDAuMCwgLTEuMCApLgotIAotCi1QZXJmb3Jt
YW5jZQotLS0tLS0tLS0tLS0KLQotICBUaGUgdGVzc2VsYXRvciBpcyBub3QgaW50ZW5kZWQgZm9y
IGltbWVkaWF0ZS1tb2RlIHJlbmRlcmluZzsgd2hlbgotICBwb3NzaWJsZSB0aGUgb3V0cHV0IHNo
b3VsZCBiZSBjYWNoZWQgaW4gYSB1c2VyIHN0cnVjdHVyZSBvciBkaXNwbGF5Ci0gIGxpc3QuICBH
ZW5lcmFsIHBvbHlnb24gdGVzc2VsYXRpb24gaXMgYW4gaW5oZXJlbnRseSBkaWZmaWN1bHQgcHJv
YmxlbSwKLSAgZXNwZWNpYWxseSBnaXZlbiB0aGUgZ29hbCBvZiBleHRyZW1lIHJvYnVzdG5lc3Mu
Ci0KLSAgVGhlIGltcGxlbWVudGF0aW9uIG1ha2VzIGFuIGVmZm9ydCB0byBvdXRwdXQgYSBzbWFs
bCBudW1iZXIgb2YgZmFucwotICBhbmQgc3RyaXBzOyB0aGlzIHNob3VsZCBpbXByb3ZlIHRoZSBy
ZW5kZXJpbmcgcGVyZm9ybWFuY2Ugd2hlbiB0aGUKLSAgb3V0cHV0IGlzIHVzZWQgaW4gYSBkaXNw
bGF5IGxpc3QuCi0KLSAgU2luZ2xlLWNvbnRvdXIgaW5wdXQgcG9seWdvbnMgYXJlIGZpcnN0IHRl
c3RlZCB0byBzZWUgd2hldGhlciB0aGV5IGNhbgotICBiZSByZW5kZXJlZCBhcyBhIHRyaWFuZ2xl
IGZhbiB3aXRoIHJlc3BlY3QgdG8gdGhlIGZpcnN0IHZlcnRleCAodG8KLSAgYXZvaWQgcnVubmlu
ZyB0aGUgZnVsbCBkZWNvbXBvc2l0aW9uIGFsZ29yaXRobSBvbiBjb252ZXggcG9seWdvbnMpLgot
ICBOb24tY29udmV4IHBvbHlnb25zIG1heSBiZSByZW5kZXJlZCBieSB0aGlzICJmYXN0IHBhdGgi
IGFzIHdlbGwsIGlmCi0gIHRoZSBhbGdvcml0aG0gZ2V0cyBsdWNreSBpbiBpdHMgY2hvaWNlIG9m
IGEgc3RhcnRpbmcgdmVydGV4LgotCi0gIEZvciBiZXN0IHBlcmZvcm1hbmNlIGZvbGxvdyB0aGVz
ZSBndWlkZWxpbmVzOgotCi0gICAtIHN1cHBseSB0aGUgcG9seWdvbiBub3JtYWwsIGlmIGF2YWls
YWJsZSwgdXNpbmcgZ2x1VGVzc05vcm1hbCgpLgotICAgICBUaGlzIHJlcHJlc2VudHMgYWJvdXQg
MTAlIG9mIHRoZSBjb21wdXRhdGlvbiB0aW1lLiAgRm9yIGV4YW1wbGUsCi0gICAgIGlmIGFsbCBw
b2x5Z29ucyBsaWUgaW4gdGhlIHgteSBwbGFuZSwgdXNlIGdsdVRlc3NOb3JtYWwodGVzcywwLDAs
MSkuCi0KLSAgIC0gcmVuZGVyIG1hbnkgcG9seWdvbnMgdXNpbmcgdGhlIHNhbWUgdGVzc2VsYXRv
ciBvYmplY3QsIHJhdGhlciB0aGFuCi0gICAgIGFsbG9jYXRpbmcgYSBuZXcgdGVzc2VsYXRvciBm
b3IgZWFjaCBvbmUuICAoSW4gYSBtdWx0aS10aHJlYWRlZCwKLSAgICAgbXVsdGktcHJvY2Vzc29y
IGVudmlyb25tZW50IHlvdSBtYXkgZ2V0IGJldHRlciBwZXJmb3JtYW5jZSB1c2luZwotICAgICBz
ZXZlcmFsIHRlc3NlbGF0b3JzLikKLQotCi1Db21wYXJpc29uIHdpdGggdGhlIEdMVSB0ZXNzZWxh
dG9yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgT24gcG9seWdvbnMg
d2hpY2ggbWFrZSBpdCB0aHJvdWdoIHRoZSAiZmFzdCBwYXRoIiwgdGhlIHRlc3NlbGF0b3IgaXMK
LSAgMyB0byA1IHRpbWVzIGZhc3RlciB0aGFuIHRoZSBHTFUgdGVzc2VsYXRvci4KLQotICBPbiBw
b2x5Z29ucyB3aGljaCBkb24ndCBtYWtlIGl0IHRocm91Z2ggdGhlIGZhc3QgcGF0aCAoYnV0IHdo
aWNoIGRvbid0Ci0gIGhhdmUgc2VsZi1pbnRlcnNlY3Rpb25zIG9yIGRlZ2VuZXJhY2llcyksIGl0
IGlzIGFib3V0IDIgdGltZXMgc2xvd2VyLgotCi0gIE9uIHBvbHlnb25zIHdpdGggc2VsZi1pbnRl
cnNlY3Rpb25zIG9yIGRlZ2VuZXJhY2VzLCB0aGVyZSBpcyBub3RoaW5nCi0gIHRvIGNvbXBhcmUg
YWdhaW5zdC4KLQotICBUaGUgbmV3IHRlc3NlbGF0b3IgZ2VuZXJhdGVzIG1hbnkgbW9yZSBmYW5z
IGFuZCBzdHJpcHMsIHJlZHVjaW5nIHRoZQotICBudW1iZXIgb2YgdmVydGljZXMgdGhhdCBuZWVk
IHRvIGJlIHNlbnQgdG8gdGhlIGhhcmR3YXJlLgotCi0gIEtleSB0byB0aGUgc3RhdGlzdGljczoK
LQotCXZlcnQJCW51bWJlciBvZiBpbnB1dCB2ZXJ0aWNlcyBvbiBhbGwgY29udG91cnMKLQljbnRy
CQludW1iZXIgb2YgaW5wdXQgY29udG91cnMKLQl0cmkJCW51bWJlciBvZiB0cmlhbmdsZXMgaW4g
YWxsIG91dHB1dCBwcmltaXRpdmVzCi0Jc3RyaXAJCW51bWJlciBvZiB0cmlhbmdsZSBzdHJpcHMK
LQlmYW4JCW51bWJlciBvZiB0cmlhbmdsZSBmYW5zCi0JaW5kCQludW1iZXIgb2YgaW5kZXBlbmRl
bnQgdHJpYW5nbGVzCi0JbXMJCW51bWJlciBvZiBtaWxsaXNlY29uZHMgZm9yIHRlc3NlbGF0aW9u
Ci0JCQkob24gYSAxNTBNSHogUjQ0MDAgSW5keSkKLQotICBDb252ZXggcG9seWdvbiBleGFtcGxl
czoKLQotTmV3OiAgICAgMyB2ZXJ0LCAgIDEgY250ciwgICAgIDEgdHJpLCAgIDAgc3RyaXAsICAg
MCBmYW4sICAgICAxIGluZCwgIDAuMDQ1OSBtcwotT2xkOiAgICAgMyB2ZXJ0LCAgIDEgY250ciwg
ICAgIDEgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICAxIGluZCwgICAwLjE0OSBtcwotTmV3
OiAgICAgNCB2ZXJ0LCAgIDEgY250ciwgICAgIDIgdHJpLCAgIDAgc3RyaXAsICAgMSBmYW4sICAg
ICAwIGluZCwgIDAuMDQ1OSBtcwotT2xkOiAgICAgNCB2ZXJ0LCAgIDEgY250ciwgICAgIDIgdHJp
LCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICAyIGluZCwgICAwLjE2MSBtcwotTmV3OiAgICAzNiB2
ZXJ0LCAgIDEgY250ciwgICAgMzQgdHJpLCAgIDAgc3RyaXAsICAgMSBmYW4sICAgICAwIGluZCwg
ICAwLjE1MyBtcwotT2xkOiAgICAzNiB2ZXJ0LCAgIDEgY250ciwgICAgMzQgdHJpLCAgIDAgc3Ry
aXAsICAgMCBmYW4sICAgIDM0IGluZCwgICAwLjYyMSBtcwotCi0gIENvbmNhdmUgc2luZ2xlLWNv
bnRvdXIgcG9seWdvbnM6Ci0KLU5ldzogICAgIDUgdmVydCwgICAxIGNudHIsICAgICAzIHRyaSwg
ICAwIHN0cmlwLCAgIDEgZmFuLCAgICAgMCBpbmQsICAgMC4wNTIgbXMKLU9sZDogICAgIDUgdmVy
dCwgICAxIGNudHIsICAgICAzIHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAgMyBpbmQsICAg
MC4yNTIgbXMKLU5ldzogICAgMTkgdmVydCwgICAxIGNudHIsICAgIDE3IHRyaSwgICAyIHN0cmlw
LCAgIDIgZmFuLCAgICAgMSBpbmQsICAgMC45MTEgbXMKLU9sZDogICAgMTkgdmVydCwgICAxIGNu
dHIsICAgIDE3IHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAgICAxNyBpbmQsICAgMC41MjkgbXMK
LU5ldzogICAxNTEgdmVydCwgICAxIGNudHIsICAgMTQ5IHRyaSwgIDEzIHN0cmlwLCAgMTggZmFu
LCAgICAgMyBpbmQsICAgIDYuODIgbXMKLU9sZDogICAxNTEgdmVydCwgICAxIGNudHIsICAgMTQ5
IHRyaSwgICAwIHN0cmlwLCAgIDMgZmFuLCAgIDE0MyBpbmQsICAgICAyLjcgbXMKLU5ldzogICA1
NzQgdmVydCwgICAxIGNudHIsICAgNTcyIHRyaSwgIDU5IHN0cmlwLCAgNTQgZmFuLCAgICAxMSBp
bmQsICAgIDI2LjYgbXMKLU9sZDogICA1NzQgdmVydCwgICAxIGNudHIsICAgNTcyIHRyaSwgICAw
IHN0cmlwLCAgMzEgZmFuLCAgIDQ5OSBpbmQsICAgIDEyLjQgbXMKLQotICBNdWx0aXBsZSBjb250
b3VycywgYnV0IG5vIGludGVyc2VjdGlvbnM6Ci0KLU5ldzogICAgIDcgdmVydCwgICAyIGNudHIs
ICAgICA3IHRyaSwgICAxIHN0cmlwLCAgIDAgZmFuLCAgICAgMCBpbmQsICAgMC41MjcgbXMKLU9s
ZDogICAgIDcgdmVydCwgICAyIGNudHIsICAgICA3IHRyaSwgICAwIHN0cmlwLCAgIDAgZmFuLCAg
ICAgNyBpbmQsICAgMC4yNzQgbXMKLU5ldzogICAgODEgdmVydCwgICA2IGNudHIsICAgIDg5IHRy
aSwgICA5IHN0cmlwLCAgIDcgZmFuLCAgICAgNiBpbmQsICAgIDMuODggbXMKLU9sZDogICAgODEg
dmVydCwgICA2IGNudHIsICAgIDg5IHRyaSwgICAwIHN0cmlwLCAgMTMgZmFuLCAgICA2MSBpbmQs
ICAgICAyLjIgbXMKLU5ldzogICAzOTEgdmVydCwgIDE5IGNudHIsICAgNDEzIHRyaSwgIDM3IHN0
cmlwLCAgMzIgZmFuLCAgICAyNiBpbmQsICAgIDIwLjIgbXMKLU9sZDogICAzOTEgdmVydCwgIDE5
IGNudHIsICAgNDEzIHRyaSwgICAwIHN0cmlwLCAgMjUgZmFuLCAgIDM2MyBpbmQsICAgIDguNjgg
bXMKLQotICBTZWxmLWludGVyc2VjdGluZyBhbmQgZGVnZW5lcmF0ZSBleGFtcGxlczoKLQotQm93
dGllOiAgNCB2ZXJ0LCAgIDEgY250ciwgICAgIDIgdHJpLCAgIDAgc3RyaXAsICAgMCBmYW4sICAg
ICAyIGluZCwgICAwLjQ4MyBtcwotU3RhcjogICAgNSB2ZXJ0LCAgIDEgY250ciwgICAgIDUgdHJp
LCAgIDAgc3RyaXAsICAgMCBmYW4sICAgICA1IGluZCwgICAgMC45MSBtcwotUmFuZG9tOiAyNCB2
ZXJ0LCAgIDcgY250ciwgICAgNDYgdHJpLCAgIDIgc3RyaXAsICAxMiBmYW4sICAgICA3IGluZCwg
ICAgNS4zMiBtcwotRm9udDogIDMzMyB2ZXJ0LCAgIDIgY250ciwgICAzMzEgdHJpLCAgMzIgc3Ry
aXAsICAxNiBmYW4sICAgICAzIGluZCwgICAgMTQuMSBtcwotOiAgICAgIDE2NyB2ZXJ0LCAgMzUg
Y250ciwgICAyNTQgdHJpLCAgIDggc3RyaXAsICA1NiBmYW4sICAgIDUyIGluZCwgICAgNDYuMyBt
cwotOiAgICAgICA3OCB2ZXJ0LCAgIDEgY250ciwgIDI2NzUgdHJpLCAxNDggc3RyaXAsIDIwNyBm
YW4sICAgMTgwIGluZCwgICAgIDI0MyBtcwotOiAgICAxMjQ4MCB2ZXJ0LCAgIDIgY250ciwgMTI0
NzggdHJpLCA3MzYgc3RyaXAsMTI3NSBmYW4sICAgICA1IGluZCwgICAgMTAxMCBtcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvYWxnLW91dGxpbmUgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9hbGctb3V0bGluZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTFlZDdmMzJjYWZmZTI5MWE5ZjA3ODhmMDYyOGRiN2M2YmQyYmY0Zi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9nbHUvbGlidGVzcy9hbGctb3V0bGluZQorKysgL2Rldi9udWxsCkBAIC0xLDIyOSArMCwwIEBA
Ci0vKgotKiogJEhlYWRlcjogL2N2cy9wcm9qZWN0cy9vZ2wtc2FtcGxlL21haW4vZ2Z4L2xpYi9n
bHUvbGlidGVzcy9hbGctb3V0bGluZSx2IDEuMSAyMDAwLzA0LzI2IDA1OjUzOjU5IGxqcCBFeHAg
JAotKi8KLQotVGhpcyBpcyBvbmx5IGEgdmVyeSBicmllZiBvdmVydmlldy4gIFRoZXJlIGlzIHF1
aXRlIGEgYml0IG9mCi1hZGRpdGlvbmFsIGRvY3VtZW50YXRpb24gaW4gdGhlIHNvdXJjZSBjb2Rl
IGl0c2VsZi4KLQotCi1Hb2FscyBvZiByb2J1c3QgdGVzc2VsYXRpb24KLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1UaGUgdGVzc2VsYXRpb24gYWxnb3JpdGhtIGlzIGZ1bmRhbWVudGFs
bHkgYSAyRCBhbGdvcml0aG0uICBXZQotaW5pdGlhbGx5IHByb2plY3QgYWxsIGRhdGEgaW50byBh
IHBsYW5lOyBvdXIgZ29hbCBpcyB0byByb2J1c3RseQotdGVzc2VsYXRlIHRoZSBwcm9qZWN0ZWQg
ZGF0YS4gIFRoZSBzYW1lIHRvcG9sb2dpY2FsIHRlc3NlbGF0aW9uIGlzCi10aGVuIGFwcGxpZWQg
dG8gdGhlIGlucHV0IGRhdGEuCi0KLVRvcG9sb2dpY2FsbHksIHRoZSBvdXRwdXQgc2hvdWxkIGFs
d2F5cyBiZSBhIHRlc3NlbGF0aW9uLiAgSWYgdGhlCi1pbnB1dCBpcyBldmVuIHNsaWdodGx5IG5v
bi1wbGFuYXIsIHRoZW4gc29tZSB0cmlhbmdsZXMgd2lsbAotbmVjZXNzYXJpbHkgYmUgYmFjay1m
YWNpbmcgd2hlbiB2aWV3ZWQgZnJvbSBzb21lIGFuZ2xlcywgYnV0IHRoZSBnb2FsCi1pcyB0byBt
aW5pbWl6ZSB0aGlzIGVmZmVjdC4KLQotVGhlIGFsZ29yaXRobSBuZWVkcyBzb21lIGNhcGFiaWxp
dHkgb2YgY2xlYW5pbmcgdXAgdGhlIGlucHV0IGRhdGEgYXMKLXdlbGwgYXMgdGhlIG51bWVyaWNh
bCBlcnJvcnMgaW4gaXRzIG93biBjYWxjdWxhdGlvbnMuICBPbmUgd2F5IHRvIGRvCi10aGlzIGlz
IHRvIHNwZWNpZnkgYSB0b2xlcmFuY2UgYXMgZGVmaW5lZCBhYm92ZSwgYW5kIGNsZWFuIHVwIHRo
ZQotaW5wdXQgYW5kIG91dHB1dCBkdXJpbmcgdGhlIGxpbmUgc3dlZXAgcHJvY2Vzcy4gIEF0IHRo
ZSB2ZXJ5IGxlYXN0LAotdGhlIGFsZ29yaXRobSBtdXN0IGhhbmRsZSBjb2luY2lkZW50IHZlcnRp
Y2VzLCB2ZXJ0aWNlcyBpbmNpZGVudCB0byBhbgotZWRnZSwgYW5kIGNvaW5jaWRlbnQgZWRnZXMu
Ci0KLQotUGhhc2VzIG9mIHRoZSBhbGdvcml0aG0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LTEuIEZpbmQgdGhlIHBvbHlnb24gbm9ybWFsIE4uCi0yLiBQcm9qZWN0IHRoZSB2ZXJ0ZXggZGF0
YSBvbnRvIGEgcGxhbmUuICBJdCBkb2VzIG5vdCBuZWVkIHRvIGJlCi0gICBwZXJwZW5kaWN1bGFy
IHRvIHRoZSBub3JtYWwsIGVnLiB3ZSBjYW4gcHJvamVjdCBvbnRvIHRoZSBwbGFuZQotICAgcGVy
cGVuZGljdWxhciB0byB0aGUgY29vcmRpbmF0ZSBheGlzIHdob3NlIGRvdCBwcm9kdWN0IHdpdGgg
TgotICAgaXMgbGFyZ2VzdC4KLTMuIFVzaW5nIGEgbGluZS1zd2VlcCBhbGdvcml0aG0sIHBhcnRp
dGlvbiB0aGUgcGxhbmUgaW50byB4LW1vbm90b25lCi0gICByZWdpb25zLiAgQW55IHZlcnRpY2Fs
IGxpbmUgaW50ZXJzZWN0cyBhbiB4LW1vbm90b25lIHJlZ2lvbiBpbgotICAgYXQgbW9zdCBvbmUg
aW50ZXJ2YWwuCi00LiBUcmlhbmd1bGF0ZSB0aGUgeC1tb25vdG9uZSByZWdpb25zLgotNS4gR3Jv
dXAgdGhlIHRyaWFuZ2xlcyBpbnRvIHN0cmlwcyBhbmQgZmFucy4KLQotCi1GaW5kaW5nIHRoZSBu
b3JtYWwgdmVjdG9yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUEgY29tbW9uIHdheSB0
byBmaW5kIGEgcG9seWdvbiBub3JtYWwgaXMgdG8gY29tcHV0ZSB0aGUgc2lnbmVkIGFyZWEKLXdo
ZW4gdGhlIHBvbHlnb24gaXMgcHJvamVjdGVkIGFsb25nIHRoZSB0aHJlZSBjb29yZGluYXRlIGF4
ZXMuICBXZQotY2FuJ3QgZG8gdGhpcywgc2luY2UgY29udG91cnMgY2FuIGhhdmUgemVybyBhcmVh
IHdpdGhvdXQgYmVpbmcKLWRlZ2VuZXJhdGUgKGVnLiBhIGJvd3RpZSkuCi0KLVdlIGZpdCBhIHBs
YW5lIHRvIHRoZSB2ZXJ0ZXggZGF0YSwgaWdub3JpbmcgaG93IHRoZXkgYXJlIGNvbm5lY3RlZAot
aW50byBjb250b3Vycy4gIElkZWFsbHkgdGhpcyB3b3VsZCBiZSBhIGxlYXN0LXNxdWFyZXMgZml0
OyBob3dldmVyIGZvcgotb3VyIHB1cnBvc2UgdGhlIGFjY3VyYWN5IG9mIHRoZSBub3JtYWwgaXMg
bm90IGltcG9ydGFudC4gIEluc3RlYWQgd2UKLWZpbmQgdGhyZWUgdmVydGljZXMgd2hpY2ggYXJl
IHdpZGVseSBzZXBhcmF0ZWQsIGFuZCBjb21wdXRlIHRoZSBub3JtYWwKLXRvIHRoZSB0cmlhbmds
ZSB0aGV5IGZvcm0uICBUaGUgdmVydGljZXMgYXJlIGNob3NlbiBzbyB0aGF0IHRoZQotdHJpYW5n
bGUgaGFzIGFuIGFyZWEgYXQgbGVhc3QgMS9zcXJ0KDMpIHRpbWVzIHRoZSBsYXJnZXN0IGFyZWEg
b2YgYW55Ci10cmlhbmdsZSBmb3JtZWQgdXNpbmcgdGhlIGlucHV0IHZlcnRpY2VzLiAgCi0KLVRo
ZSBjb250b3VycyBkbyBhZmZlY3QgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBub3JtYWw7IGFmdGVy
IGNvbXB1dGluZwotdGhlIG5vcm1hbCwgd2UgY2hlY2sgdGhhdCB0aGUgc3VtIG9mIHRoZSBzaWdu
ZWQgY29udG91ciBhcmVhcyBpcwotbm9uLW5lZ2F0aXZlLCBhbmQgcmV2ZXJzZSB0aGUgbm9ybWFs
IGlmIG5lY2Vzc2FyeS4KLQotCi1Qcm9qZWN0aW5nIHRoZSB2ZXJ0aWNlcwotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotV2UgcHJvamVjdCB0aGUgdmVydGljZXMgb250byBhIHBsYW5lIHBlcnBl
bmRpY3VsYXIgdG8gb25lIG9mIHRoZSB0aHJlZQotY29vcmRpbmF0ZSBheGVzLiAgVGhpcyBoZWxw
cyBudW1lcmljYWwgYWNjdXJhY3kgYnkgcmVtb3ZpbmcgYQotdHJhbnNmb3JtYXRpb24gc3RlcCBi
ZXR3ZWVuIHRoZSBvcmlnaW5hbCBpbnB1dCBkYXRhIGFuZCB0aGUgZGF0YQotcHJvY2Vzc2VkIGJ5
IHRoZSBhbGdvcml0aG0uICBUaGUgcHJvamVjdGlvbiBhbHNvIGNvbXByZXNzZXMgdGhlIGlucHV0
Ci1kYXRhOyB0aGUgMkQgZGlzdGFuY2UgYmV0d2VlbiB2ZXJ0aWNlcyBhZnRlciBwcm9qZWN0aW9u
IG1heSBiZSBzbWFsbGVyCi10aGFuIHRoZSBvcmlnaW5hbCAyRCBkaXN0YW5jZS4gIEhvd2V2ZXIg
YnkgY2hvb3NpbmcgdGhlIGNvb3JkaW5hdGUKLWF4aXMgd2hvc2UgZG90IHByb2R1Y3Qgd2l0aCB0
aGUgbm9ybWFsIGlzIGdyZWF0ZXN0LCB0aGUgY29tcHJlc3Npb24KLWZhY3RvciBpcyBhdCBtb3N0
IDEvc3FydCgzKS4KLQotRXZlbiB0aG91Z2ggdGhlICphY2N1cmFjeSogb2YgdGhlIG5vcm1hbCBp
cyBub3QgdGhhdCBpbXBvcnRhbnQgKHNpbmNlCi13ZSBhcmUgcHJvamVjdGluZyBwZXJwZW5kaWN1
bGFyIHRvIGEgY29vcmRpbmF0ZSBheGlzIGFueXdheSksIHRoZQotKnJvYnVzdG5lc3MqIG9mIHRo
ZSBjb21wdXRhdGlvbiBpcyBpbXBvcnRhbnQuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUKLWFyZSBt
YW55IHZlcnRpY2VzIHdoaWNoIGxpZSBhbG1vc3QgYWxvbmcgYSBsaW5lLCBhbmQgb25lIHZlcnRl
eCBWCi13aGljaCBpcyB3ZWxsLXNlcGFyYXRlZCBmcm9tIHRoZSBsaW5lLCB0aGVuIG91ciBub3Jt
YWwgY29tcHV0YXRpb24KLXNob3VsZCBpbnZvbHZlIFYgb3RoZXJ3aXNlIHRoZSByZXN1bHRzIHdp
bGwgYmUgZ2FyYmFnZS4KLQotVGhlIGFkdmFudGFnZSBvZiBwcm9qZWN0aW5nIHBlcnBlbmRpY3Vs
YXIgdG8gdGhlIHBvbHlnb24gbm9ybWFsIGlzCi10aGF0IGNvbXB1dGVkIGludGVyc2VjdGlvbiBw
b2ludHMgd2lsbCBiZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0bwotdGhlaXIgaWRlYWwgbG9jYXRp
b25zLiAgVG8gZ2V0IHRoaXMgYmVoYXZpb3IsIGRlZmluZSBUUlVFX1BST0pFQ1QuCi0KLQotVGhl
IExpbmUgU3dlZXAKLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSB0aHJlZSBkYXRhIHN0cnVj
dHVyZXM6IHRoZSBtZXNoLCB0aGUgZXZlbnQgcXVldWUsIGFuZCB0aGUKLWVkZ2UgZGljdGlvbmFy
eS4KLQotVGhlIG1lc2ggaXMgYSAicXVhZC1lZGdlIiBkYXRhIHN0cnVjdHVyZSB3aGljaCByZWNv
cmRzIHRoZSB0b3BvbG9neSBvZgotdGhlIGN1cnJlbnQgZGVjb21wb3NpdGlvbjsgZm9yIGRldGFp
bHMgc2VlIHRoZSBpbmNsdWRlIGZpbGUgIm1lc2guaCIuCi0KLVRoZSBldmVudCBxdWV1ZSBzaW1w
bHkgaG9sZHMgYWxsIHZlcnRpY2VzIChib3RoIG9yaWdpbmFsIGFuZCBjb21wdXRlZAotb25lcyks
IG9yZ2FuaXplZCBzbyB0aGF0IHdlIGNhbiBxdWlja2x5IGV4dHJhY3QgdGhlIHZlcnRleCB3aXRo
IHRoZQotbWluaW11bSB4LWNvb3JkIChhbmQgYW1vbmcgdGhvc2UsIHRoZSBvbmUgd2l0aCB0aGUg
bWluaW11bSB5LWNvb3JkKS4KLQotVGhlIGVkZ2UgZGljdGlvbmFyeSBkZXNjcmliZXMgdGhlIGN1
cnJlbnQgaW50ZXJzZWN0aW9uIG9mIHRoZSBzd2VlcAotbGluZSB3aXRoIHRoZSByZWdpb25zIG9m
IHRoZSBwb2x5Z29uLiAgVGhpcyBpcyBqdXN0IGFuIG9yZGVyaW5nIG9mIHRoZQotZWRnZXMgd2hp
Y2ggaW50ZXJzZWN0IHRoZSBzd2VlcCBsaW5lLCBzb3J0ZWQgYnkgdGhlaXIgY3VycmVudCBvcmRl
ciBvZgotaW50ZXJzZWN0aW9uLiAgRm9yIGVhY2ggcGFpciBvZiBlZGdlcywgd2Ugc3RvcmUgc29t
ZSBpbmZvcm1hdGlvbiBhYm91dAotdGhlIG1vbm90b25lIHJlZ2lvbiBiZXR3ZWVuIHRoZW0gLS0g
dGhlc2UgYXJlIGNhbGwgImFjdGl2ZSByZWdpb25zIgotKHNpbmNlIHRoZXkgYXJlIGNyb3NzZWQg
YnkgdGhlIGN1cnJlbnQgc3dlZXAgbGluZSkuCi0KLVRoZSBiYXNpYyBhbGdvcml0aG0gaXMgdG8g
c3dlZXAgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBwcm9jZXNzaW5nIGVhY2gKLXZlcnRleC4gIFRoZSBw
cm9jZXNzZWQgcG9ydGlvbiBvZiB0aGUgbWVzaCAobGVmdCBvZiB0aGUgc3dlZXAgbGluZSkgaXMK
LWEgcGxhbmFyIGRlY29tcG9zaXRpb24uICBBcyB3ZSBjcm9zcyBlYWNoIHZlcnRleCwgd2UgdXBk
YXRlIHRoZSBtZXNoCi1hbmQgdGhlIGVkZ2UgZGljdGlvbmFyeSwgdGhlbiB3ZSBjaGVjayBhbnkg
bmV3bHkgYWRqYWNlbnQgcGFpcnMgb2YKLWVkZ2VzIHRvIHNlZSBpZiB0aGV5IGludGVyc2VjdC4K
LQotQSB2ZXJ0ZXggY2FuIGhhdmUgYW55IG51bWJlciBvZiBlZGdlcy4gIFZlcnRpY2VzIHdpdGgg
bWFueSBlZGdlcyBjYW4KLWJlIGNyZWF0ZWQgYXMgdmVydGljZXMgYXJlIG1lcmdlZCBhbmQgaW50
ZXJzZWN0aW9uIHBvaW50cyBhcmUKLWNvbXB1dGVkLiAgRm9yIHVucHJvY2Vzc2VkIHZlcnRpY2Vz
IChyaWdodCBvZiB0aGUgc3dlZXAgbGluZSksIHRoZXNlCi1lZGdlcyBhcmUgaW4gbm8gcGFydGlj
dWxhciBvcmRlciBhcm91bmQgdGhlIHZlcnRleDsgZm9yIHByb2Nlc3NlZAotdmVydGljZXMsIHRo
ZSB0b3BvbG9naWNhbCBvcmRlcmluZyBzaG91bGQgbWF0Y2ggdGhlIGdlb21ldHJpYyBvcmRlcmlu
Zy4KLQotVGhlIHZlcnRleCBwcm9jZXNzaW5nIGhhcHBlbnMgaW4gdHdvIHBoYXNlczogZmlyc3Qg
d2UgcHJvY2VzcyBhcmUgdGhlCi1sZWZ0LWdvaW5nIGVkZ2VzIChhbGwgdGhlc2UgZWRnZXMgYXJl
IGN1cnJlbnRseSBpbiB0aGUgZWRnZQotZGljdGlvbmFyeSkuICBUaGlzIGludm9sdmVzOgotCi0g
LSBkZWxldGluZyB0aGUgbGVmdC1nb2luZyBlZGdlcyBmcm9tIHRoZSBkaWN0aW9uYXJ5OwotIC0g
cmVsaW5raW5nIHRoZSBtZXNoIGlmIG5lY2Vzc2FyeSwgc28gdGhhdCB0aGUgb3JkZXIgb2YgdGhl
c2UgZWRnZXMgYXJvdW5kCi0gICB0aGUgZXZlbnQgdmVydGV4IG1hdGNoZXMgdGhlIG9yZGVyIGlu
IHRoZSBkaWN0aW9uYXJ5OwotIC0gbWFya2luZyBhbnkgdGVybWluYXRlZCByZWdpb25zIChyZWdp
b25zIHdoaWNoIGxpZSBiZXR3ZWVuIHR3byBsZWZ0LWdvaW5nCi0gICBlZGdlcykgYXMgZWl0aGVy
ICJpbnNpZGUiIG9yICJvdXRzaWRlIiBhY2NvcmRpbmcgdG8gdGhlaXIgd2luZGluZyBudW1iZXIu
Ci0KLVdoZW4gdGhlcmUgYXJlIG5vIGxlZnQtZ29pbmcgZWRnZXMsIGFuZCB0aGUgZXZlbnQgdmVy
dGV4IGlzIGluIGFuCi0iaW50ZXJpb3IiIHJlZ2lvbiwgd2UgbmVlZCB0byBhZGQgYW4gZWRnZSAo
dG8gc3BsaXQgdGhlIHJlZ2lvbiBpbnRvCi1tb25vdG9uZSBwaWVjZXMpLiAgVG8gZG8gdGhpcyB3
ZSBzaW1wbHkgam9pbiB0aGUgZXZlbnQgdmVydGV4IHRvIHRoZQotcmlnaHRtb3N0IGxlZnQgZW5k
cG9pbnQgb2YgdGhlIHVwcGVyIG9yIGxvd2VyIGVkZ2Ugb2YgdGhlIGNvbnRhaW5pbmcKLXJlZ2lv
bi4KLQotVGhlbiB3ZSBwcm9jZXNzIHRoZSByaWdodC1nb2luZyBlZGdlcy4gIFRoaXMgaW52b2x2
ZXM6Ci0KLSAtIGluc2VydGluZyB0aGUgZWRnZXMgaW4gdGhlIGVkZ2UgZGljdGlvbmFyeTsKLSAt
IGNvbXB1dGluZyB0aGUgd2luZGluZyBudW1iZXIgb2YgYW55IG5ld2x5IGNyZWF0ZWQgYWN0aXZl
IHJlZ2lvbnMuCi0gICBXZSBjYW4gY29tcHV0ZSB0aGlzIGluY3JlbWVudGFsbHkgdXNpbmcgdGhl
IHdpbmRpbmcgb2YgZWFjaCBlZGdlCi0gICB0aGF0IHdlIGNyb3NzIGFzIHdlIHdhbGsgdGhyb3Vn
aCB0aGUgZGljdGlvbmFyeS4KLSAtIHJlbGlua2luZyB0aGUgbWVzaCBpZiBuZWNlc3NhcnksIHNv
IHRoYXQgdGhlIG9yZGVyIG9mIHRoZXNlIGVkZ2VzIGFyb3VuZAotICAgdGhlIGV2ZW50IHZlcnRl
eCBtYXRjaGVzIHRoZSBvcmRlciBpbiB0aGUgZGljdGlvbmFyeTsKLSAtIGNoZWNraW5nIGFueSBu
ZXdseSBhZGphY2VudCBlZGdlcyBmb3IgaW50ZXJzZWN0aW9uIGFuZC9vciBtZXJnaW5nLgotCi1J
ZiB0aGVyZSBhcmUgbm8gcmlnaHQtZ29pbmcgZWRnZXMsIGFnYWluIHdlIG5lZWQgdG8gYWRkIG9u
ZSB0byBzcGxpdAotdGhlIGNvbnRhaW5pbmcgcmVnaW9uIGludG8gbW9ub3RvbmUgcGllY2VzLiAg
SW4gb3VyIGNhc2UgaXQgaXMgbW9zdAotY29udmVuaWVudCB0byBhZGQgYW4gZWRnZSB0byB0aGUg
bGVmdG1vc3QgcmlnaHQgZW5kcG9pbnQgb2YgZWl0aGVyCi1jb250YWluaW5nIGVkZ2U7IGhvd2V2
ZXIgd2UgbWF5IG5lZWQgdG8gY2hhbmdlIHRoaXMgbGF0ZXIgKHNlZSB0aGUKLWNvZGUgZm9yIGRl
dGFpbHMpLgotCi0KLUludmFyaWFudHMKLS0tLS0tLS0tLS0KLQotVGhlc2UgYXJlIHRoZSBtb3N0
IGltcG9ydGFudCBpbnZhcmlhbnRzIG1haW50YWluZWQgZHVyaW5nIHRoZSBzd2VlcC4KLVdlIGRl
ZmluZSBhIGZ1bmN0aW9uIFZlcnRMZXEodjEsdjIpIHdoaWNoIGRlZmluZXMgdGhlIG9yZGVyIGlu
IHdoaWNoCi12ZXJ0aWNlcyBjcm9zcyB0aGUgc3dlZXAgbGluZSwgYW5kIGEgZnVuY3Rpb24gRWRn
ZUxlcShlMSxlMjsgbG9jKQotd2hpY2ggc2F5cyB3aGV0aGVyIGUxIGlzIGJlbG93IGUyIGF0IHRo
ZSBzd2VlcCBldmVudCBsb2NhdGlvbiAibG9jIi4KLVRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBv
bmx5IGF0IHN3ZWVwIGV2ZW50IGxvY2F0aW9ucyB3aGljaCBsaWUKLWJldHdlZW4gdGhlIHJpZ2h0
bW9zdCBsZWZ0IGVuZHBvaW50IG9mIHtlMSxlMn0sIGFuZCB0aGUgbGVmdG1vc3QgcmlnaHQKLWVu
ZHBvaW50IG9mIHtlMSxlMn0uCi0KLUludmFyaWFudHMgZm9yIHRoZSBFZGdlIERpY3Rpb25hcnku
Ci0KLSAtIEVhY2ggcGFpciBvZiBhZGphY2VudCBlZGdlcyBlMj1TdWNjKGUxKSBzYXRpc2ZpZXMg
RWRnZUxlcShlMSxlMikKLSAgIGF0IGFueSB2YWxpZCBsb2NhdGlvbiBvZiB0aGUgc3dlZXAgZXZl
bnQuCi0gLSBJZiBFZGdlTGVxKGUyLGUxKSBhcyB3ZWxsIChhdCBhbnkgdmFsaWQgc3dlZXAgZXZl
bnQpLCB0aGVuIGUxIGFuZCBlMgotICAgc2hhcmUgYSBjb21tb24gZW5kcG9pbnQuCi0gLSBGb3Ig
ZWFjaCBlIGluIHRoZSBkaWN0aW9uYXJ5LCBlLT5Ec3QgaGFzIGJlZW4gcHJvY2Vzc2VkIGJ1dCBu
b3QgZS0+T3JnLgotIC0gRWFjaCBlZGdlIGUgc2F0aXNmaWVzIFZlcnRMZXEoZS0+RHN0LGV2ZW50
KSAmJiBWZXJ0TGVxKGV2ZW50LGUtPk9yZykKLSAgIHdoZXJlICJldmVudCIgaXMgdGhlIGN1cnJl
bnQgc3dlZXAgbGluZSBldmVudC4KLSAtIE5vIGVkZ2UgZSBoYXMgemVybyBsZW5ndGguCi0gLSBO
byB0d28gZWRnZXMgaGF2ZSBpZGVudGljYWwgbGVmdCBhbmQgcmlnaHQgZW5kcG9pbnRzLgotIAot
SW52YXJpYW50cyBmb3IgdGhlIE1lc2ggKHRoZSBwcm9jZXNzZWQgcG9ydGlvbikuCi0KLSAtIFRo
ZSBwb3J0aW9uIG9mIHRoZSBtZXNoIGxlZnQgb2YgdGhlIHN3ZWVwIGxpbmUgaXMgYSBwbGFuYXIg
Z3JhcGgsCi0gICBpZS4gdGhlcmUgaXMgKnNvbWUqIHdheSB0byBlbWJlZCBpdCBpbiB0aGUgcGxh
bmUuCi0gLSBObyBwcm9jZXNzZWQgZWRnZSBoYXMgemVybyBsZW5ndGguCi0gLSBObyB0d28gcHJv
Y2Vzc2VkIHZlcnRpY2VzIGhhdmUgaWRlbnRpY2FsIGNvb3JkaW5hdGVzLgotIC0gRWFjaCAiaW5z
aWRlIiByZWdpb24gaXMgbW9ub3RvbmUsIGllLiBjYW4gYmUgYnJva2VuIGludG8gdHdvIGNoYWlu
cwotICAgb2YgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHZlcnRpY2VzIGFjY29yZGluZyB0byBW
ZXJ0TGVxKHYxLHYyKQotICAgLSBhIG5vbi1pbnZhcmlhbnQ6IHRoZXNlIGNoYWlucyBtYXkgaW50
ZXJzZWN0IChzbGlnaHRseSkgZHVlIHRvCi0gICAgIG51bWVyaWNhbCBlcnJvcnMsIGJ1dCB0aGlz
IGRvZXMgbm90IGFmZmVjdCB0aGUgYWxnb3JpdGhtJ3Mgb3BlcmF0aW9uLgotCi1JbnZhcmlhbnRz
IGZvciB0aGUgU3dlZXAuCi0KLSAtIElmIGEgdmVydGV4IGhhcyBhbnkgbGVmdC1nb2luZyBlZGdl
cywgdGhlbiB0aGVzZSBtdXN0IGJlIGluIHRoZSBlZGdlCi0gICBkaWN0aW9uYXJ5IGF0IHRoZSB0
aW1lIHRoZSB2ZXJ0ZXggaXMgcHJvY2Vzc2VkLgotIC0gSWYgYW4gZWRnZSBpcyBtYXJrZWQgImZp
eFVwcGVyRWRnZSIgKGl0IGlzIGEgdGVtcG9yYXJ5IGVkZ2UgaW50cm9kdWNlZAotICAgYnkgQ29u
bmVjdFJpZ2h0VmVydGV4KSwgdGhlbiBpdCBpcyB0aGUgb25seSByaWdodC1nb2luZyBlZGdlIGZy
b20KLSAgIGl0cyBhc3NvY2lhdGVkIHZlcnRleC4gIChUaGlzIHNheXMgdGhhdCB0aGVzZSBlZGdl
cyBleGlzdCBvbmx5Ci0gICB3aGVuIGl0IGlzIG5lY2Vzc2FyeS4pCi0KLQotUm9idXN0bmVzcwot
LS0tLS0tLS0tLQotCi1UaGUga2V5IHRvIHRoZSByb2J1c3RuZXNzIG9mIHRoZSBhbGdvcml0aG0g
aXMgbWFpbnRhaW5pbmcgdGhlCi1pbnZhcmlhbnRzIGFib3ZlLCBlc3BlY2lhbGx5IHRoZSBjb3Jy
ZWN0IG9yZGVyaW5nIG9mIHRoZSBlZGdlCi1kaWN0aW9uYXJ5LiAgV2UgYWNoaWV2ZSB0aGlzIGJ5
OgotCi0gIDEuIFdyaXRpbmcgdGhlIG51bWVyaWNhbCBjb21wdXRhdGlvbnMgZm9yIG1heGltdW0g
cHJlY2lzaW9uIHJhdGhlcgotICAgICB0aGFuIG1heGltdW0gc3BlZWQuCi0gICAgIAotICAyLiBN
YWtpbmcgbm8gYXNzdW1wdGlvbnMgYXQgYWxsIGFib3V0IHRoZSByZXN1bHRzIG9mIHRoZSBlZGdl
Ci0gICAgIGludGVyc2VjdGlvbiBjYWxjdWxhdGlvbnMgLS0gZm9yIHN1ZmZpY2llbnRseSBkZWdl
bmVyYXRlIGlucHV0cywKLSAgICAgdGhlIGNvbXB1dGVkIGxvY2F0aW9uIGlzIG5vdCBtdWNoIGJl
dHRlciB0aGFuIGEgcmFuZG9tIG51bWJlci4KLSAgICAgCi0gIDMuIFdoZW4gbnVtZXJpY2FsIGVy
cm9ycyB2aW9sYXRlIHRoZSBpbnZhcmlhbnRzLCByZXN0b3JlIHRoZW0KLSAgICAgYnkgbWFraW5n
ICp0b3BvbG9naWNhbCogY2hhbmdlcyB3aGVuIG5lY2Vzc2FyeSAoaWUuIHJlbGlua2luZwotICAg
ICB0aGUgbWVzaCBzdHJ1Y3R1cmUpLgotICAgICAKLSAgICAgCi1Ucmlhbmd1bGF0aW9uIGFuZCBH
cm91cGluZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotV2UgZmluaXNoIHRoZSBsaW5l
IHN3ZWVwIGJlZm9yZSBkb2luZyBhbnkgdHJpYW5ndWxhdGlvbi4gIFRoaXMgaXMKLWJlY2F1c2Ug
ZXZlbiBhZnRlciBhIG1vbm90b25lIHJlZ2lvbiBpcyBjb21wbGV0ZSwgdGhlcmUgY2FuIGJlIGZ1
cnRoZXIKLWNoYW5nZXMgdG8gaXRzIHZlcnRleCBkYXRhIGJlY2F1c2Ugb2YgZnVydGhlciB2ZXJ0
ZXggbWVyZ2luZy4KLQotQWZ0ZXIgdHJpYW5ndWxhdGluZyBhbGwgbW9ub3RvbmUgcmVnaW9ucywg
d2Ugd2FudCB0byBncm91cCB0aGUKLXRyaWFuZ2xlcyBpbnRvIGZhbnMgYW5kIHN0cmlwcy4gIFdl
IGRvIHRoaXMgdXNpbmcgYSBncmVlZHkgYXBwcm9hY2guCi1UaGUgdHJpYW5ndWxhdGlvbiBpdHNl
bGYgaXMgbm90IG9wdGltaXplZCB0byByZWR1Y2UgdGhlIG51bWJlciBvZgotcHJpbWl0aXZlczsg
d2UganVzdCB0cnkgdG8gZ2V0IGEgcmVhc29uYWJsZSBkZWNvbXBvc2l0aW9uIG9mIHRoZQotY29t
cHV0ZWQgdHJpYW5ndWxhdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9s
aWJ0ZXNzL2RpY3QtbGlzdC5oIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZGljdC1s
aXN0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNjdjNDlmMzU4OWZiMWRmMDk3
YTUwNjYwNjNmMjBmN2FlY2I5M2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZGljdC1saXN0LmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0
eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFk
ZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBT
R0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNl
IiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhl
IHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxl
IGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEg
Y29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjog
TGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBW
aWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3By
b2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vu
c2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywg
d2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0q
KiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQg
V0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZB
Q1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQg
Tk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENv
ZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCBy
ZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywK
LSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2ls
aWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVk
IGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25z
OiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQg
YnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiog
T3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4x
KSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lz
dGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIg
NCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lz
dGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29m
dHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBT
YW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJl
ZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBB
dXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAot
KiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvZGljdC1saXN0Lmgj
NSAkCi0qLwotCi0jaWZuZGVmIF9fZGljdF9saXN0X2hfCi0jZGVmaW5lIF9fZGljdF9saXN0X2hf
Ci0KLS8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1wbGVtZW50YXRpb24g
Y2FuIHVzZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIERpY3RLZXkJCURpY3RMaXN0S2V5Ci0jZGVm
aW5lIERpY3QJCURpY3RMaXN0Ci0jZGVmaW5lIERpY3ROb2RlCURpY3RMaXN0Tm9kZQotCi0jZGVm
aW5lIGRpY3ROZXdEaWN0KGZyYW1lLGxlcSkJCV9fZ2xfZGljdExpc3ROZXdEaWN0KGZyYW1lLGxl
cSkKLSNkZWZpbmUgZGljdERlbGV0ZURpY3QoZGljdCkJCV9fZ2xfZGljdExpc3REZWxldGVEaWN0
KGRpY3QpCi0KLSNkZWZpbmUgZGljdFNlYXJjaChkaWN0LGtleSkJCV9fZ2xfZGljdExpc3RTZWFy
Y2goZGljdCxrZXkpCi0jZGVmaW5lIGRpY3RJbnNlcnQoZGljdCxrZXkpCQlfX2dsX2RpY3RMaXN0
SW5zZXJ0KGRpY3Qsa2V5KQotI2RlZmluZSBkaWN0SW5zZXJ0QmVmb3JlKGRpY3Qsbm9kZSxrZXkp
CV9fZ2xfZGljdExpc3RJbnNlcnRCZWZvcmUoZGljdCxub2RlLGtleSkKLSNkZWZpbmUgZGljdERl
bGV0ZShkaWN0LG5vZGUpCQlfX2dsX2RpY3RMaXN0RGVsZXRlKGRpY3Qsbm9kZSkKLQotI2RlZmlu
ZSBkaWN0S2V5KG4pCQkJX19nbF9kaWN0TGlzdEtleShuKQotI2RlZmluZSBkaWN0U3VjYyhuKQkJ
CV9fZ2xfZGljdExpc3RTdWNjKG4pCi0jZGVmaW5lIGRpY3RQcmVkKG4pCQkJX19nbF9kaWN0TGlz
dFByZWQobikKLSNkZWZpbmUgZGljdE1pbihkKQkJCV9fZ2xfZGljdExpc3RNaW4oZCkKLSNkZWZp
bmUgZGljdE1heChkKQkJCV9fZ2xfZGljdExpc3RNYXgoZCkKLQotCi0KLXR5cGVkZWYgdm9pZCAq
RGljdEtleTsKLXR5cGVkZWYgc3RydWN0IERpY3QgRGljdDsKLXR5cGVkZWYgc3RydWN0IERpY3RO
b2RlIERpY3ROb2RlOwotCi1EaWN0CQkqZGljdE5ld0RpY3QoCi0JCQl2b2lkICpmcmFtZSwKLQkJ
CWludCAoKmxlcSkodm9pZCAqZnJhbWUsIERpY3RLZXkga2V5MSwgRGljdEtleSBrZXkyKSApOwot
CQkJCi12b2lkCQlkaWN0RGVsZXRlRGljdCggRGljdCAqZGljdCApOwotCi0vKiBTZWFyY2ggcmV0
dXJucyB0aGUgbm9kZSB3aXRoIHRoZSBzbWFsbGVzdCBrZXkgZ3JlYXRlciB0aGFuIG9yIGVxdWFs
Ci0gKiB0byB0aGUgZ2l2ZW4ga2V5LiAgSWYgdGhlcmUgaXMgbm8gc3VjaCBrZXksIHJldHVybnMg
YSBub2RlIHdob3NlCi0gKiBrZXkgaXMgTlVMTC4gIFNpbWlsYXJseSwgU3VjYyhNYXgoZCkpIGhh
cyBhIE5VTEwga2V5LCBldGMuCi0gKi8KLURpY3ROb2RlCSpkaWN0U2VhcmNoKCBEaWN0ICpkaWN0
LCBEaWN0S2V5IGtleSApOwotRGljdE5vZGUJKmRpY3RJbnNlcnRCZWZvcmUoIERpY3QgKmRpY3Qs
IERpY3ROb2RlICpub2RlLCBEaWN0S2V5IGtleSApOwotdm9pZAkJZGljdERlbGV0ZSggRGljdCAq
ZGljdCwgRGljdE5vZGUgKm5vZGUgKTsKLQotI2RlZmluZQkJX19nbF9kaWN0TGlzdEtleShuKQko
KG4pLT5rZXkpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0U3VjYyhuKQkoKG4pLT5uZXh0KQotI2Rl
ZmluZQkJX19nbF9kaWN0TGlzdFByZWQobikJKChuKS0+cHJldikKLSNkZWZpbmUJCV9fZ2xfZGlj
dExpc3RNaW4oZCkJKChkKS0+aGVhZC5uZXh0KQotI2RlZmluZQkJX19nbF9kaWN0TGlzdE1heChk
KQkoKGQpLT5oZWFkLnByZXYpCi0jZGVmaW5lCSAgICAgICBfX2dsX2RpY3RMaXN0SW5zZXJ0KGQs
aykgKGRpY3RJbnNlcnRCZWZvcmUoKGQpLCYoZCktPmhlYWQsKGspKSkKLQotCi0vKioqIFByaXZh
dGUgZGF0YSBzdHJ1Y3R1cmVzICoqKi8KLQotc3RydWN0IERpY3ROb2RlIHsKLSAgRGljdEtleQlr
ZXk7Ci0gIERpY3ROb2RlCSpuZXh0OwotICBEaWN0Tm9kZQkqcHJldjsKLX07Ci0KLXN0cnVjdCBE
aWN0IHsKLSAgRGljdE5vZGUJaGVhZDsKLSAgdm9pZAkJKmZyYW1lOwotICBpbnQJCSgqbGVxKSh2
b2lkICpmcmFtZSwgRGljdEtleSBrZXkxLCBEaWN0S2V5IGtleTIpOwotfTsKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGUxNDlmZDU0OTk0MjUzNGFhZTQ3ZmRiNDI0ZTU1NGEwM2JjZTE0ZWUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvZGljdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0qKiBM
aWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRo
aXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFz
IHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lv
biAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUg
c3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5v
dCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3Jh
cGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUg
UGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0
dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHBy
b3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4K
LSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElF
UyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlU
QVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNI
QU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJ
Q1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENv
ZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAot
KiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5
IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdo
dCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBh
bnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiog
ZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25h
bCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFj
ZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5h
bCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNh
dGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3Bl
bkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyks
IHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0
aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVy
IDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkg
U0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoq
IGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9u
LgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiog
JERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9s
aWJ0ZXNzL2RpY3QuYyM1ICQKLSovCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJk
aWN0LWxpc3QuaCIKLSNpbmNsdWRlICJtZW1hbGxvYy5oIgotCi0vKiByZWFsbHkgX19nbF9kaWN0
TGlzdE5ld0RpY3QgKi8KLURpY3QgKmRpY3ROZXdEaWN0KCB2b2lkICpmcmFtZSwKLQkJICAgaW50
ICgqbGVxKSh2b2lkICpmcmFtZSwgRGljdEtleSBrZXkxLCBEaWN0S2V5IGtleTIpICkKLXsKLSAg
RGljdCAqZGljdCA9IChEaWN0ICopIG1lbUFsbG9jKCBzaXplb2YoIERpY3QgKSk7Ci0gIERpY3RO
b2RlICpoZWFkOwotCi0gIGlmIChkaWN0ID09IE5VTEwpIHJldHVybiBOVUxMOwotCi0gIGhlYWQg
PSAmZGljdC0+aGVhZDsKLQotICBoZWFkLT5rZXkgPSBOVUxMOwotICBoZWFkLT5uZXh0ID0gaGVh
ZDsKLSAgaGVhZC0+cHJldiA9IGhlYWQ7Ci0KLSAgZGljdC0+ZnJhbWUgPSBmcmFtZTsKLSAgZGlj
dC0+bGVxID0gbGVxOwotCi0gIHJldHVybiBkaWN0OwotfQotCi0vKiByZWFsbHkgX19nbF9kaWN0
TGlzdERlbGV0ZURpY3QgKi8KLXZvaWQgZGljdERlbGV0ZURpY3QoIERpY3QgKmRpY3QgKQotewot
ICBEaWN0Tm9kZSAqbm9kZTsKLQotICBmb3IoIG5vZGUgPSBkaWN0LT5oZWFkLm5leHQ7IG5vZGUg
IT0gJmRpY3QtPmhlYWQ7IG5vZGUgPSBub2RlLT5uZXh0ICkgewotICAgIG1lbUZyZWUoIG5vZGUg
KTsKLSAgfQotICBtZW1GcmVlKCBkaWN0ICk7Ci19Ci0KLS8qIHJlYWxseSBfX2dsX2RpY3RMaXN0
SW5zZXJ0QmVmb3JlICovCi1EaWN0Tm9kZSAqZGljdEluc2VydEJlZm9yZSggRGljdCAqZGljdCwg
RGljdE5vZGUgKm5vZGUsIERpY3RLZXkga2V5ICkKLXsKLSAgRGljdE5vZGUgKm5ld05vZGU7Ci0K
LSAgZG8gewotICAgIG5vZGUgPSBub2RlLT5wcmV2OwotICB9IHdoaWxlKCBub2RlLT5rZXkgIT0g
TlVMTCAmJiAhICgqZGljdC0+bGVxKShkaWN0LT5mcmFtZSwgbm9kZS0+a2V5LCBrZXkpKTsKLQot
ICBuZXdOb2RlID0gKERpY3ROb2RlICopIG1lbUFsbG9jKCBzaXplb2YoIERpY3ROb2RlICkpOwot
ICBpZiAobmV3Tm9kZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICBuZXdOb2RlLT5rZXkgPSBr
ZXk7Ci0gIG5ld05vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotICBub2RlLT5uZXh0LT5wcmV2ID0g
bmV3Tm9kZTsKLSAgbmV3Tm9kZS0+cHJldiA9IG5vZGU7Ci0gIG5vZGUtPm5leHQgPSBuZXdOb2Rl
OwotCi0gIHJldHVybiBuZXdOb2RlOwotfQotCi0vKiByZWFsbHkgX19nbF9kaWN0TGlzdERlbGV0
ZSAqLwotdm9pZCBkaWN0RGVsZXRlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSApIC8qQVJH
U1VTRUQqLwotewotICBub2RlLT5uZXh0LT5wcmV2ID0gbm9kZS0+cHJldjsKLSAgbm9kZS0+cHJl
di0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0gIG1lbUZyZWUoIG5vZGUgKTsKLX0KLQotLyogcmVhbGx5
IF9fZ2xfZGljdExpc3RTZWFyY2ggKi8KLURpY3ROb2RlICpkaWN0U2VhcmNoKCBEaWN0ICpkaWN0
LCBEaWN0S2V5IGtleSApCi17Ci0gIERpY3ROb2RlICpub2RlID0gJmRpY3QtPmhlYWQ7Ci0KLSAg
ZG8gewotICAgIG5vZGUgPSBub2RlLT5uZXh0OwotICB9IHdoaWxlKCBub2RlLT5rZXkgIT0gTlVM
TCAmJiAhICgqZGljdC0+bGVxKShkaWN0LT5mcmFtZSwga2V5LCBub2RlLT5rZXkpKTsKLQotICBy
ZXR1cm4gbm9kZTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNz
L2RpY3QuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzg1MWJhYzMxOWY1NmJmMzEyZTA0MWQ0NWJjNzFlNjlhOTgz
ZWNmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcg
KzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRl
bnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVy
bmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUg
TGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0
aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExp
Y2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vu
c2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAK
LSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBv
ciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoq
IE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBk
aXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQg
SU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJ
TkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENP
TkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVT
UyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoq
IAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUg
SW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAy
MDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFs
IENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgot
KiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMg
YXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
KiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJv
Z3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9u
IHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5
c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmls
IDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAo
VmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChS
KSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyks
IHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVk
IHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24K
LSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJp
ZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEu
Mi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1
bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9t
YWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvZGljdC5oIzUgJAotKi8KLQotI2lmbmRlZiBfX2RpY3Rf
bGlzdF9oXwotI2RlZmluZSBfX2RpY3RfbGlzdF9oXwotCi0vKiBVc2UgI2RlZmluZSdzIHNvIHRo
YXQgYW5vdGhlciBoZWFwIGltcGxlbWVudGF0aW9uIGNhbiB1c2UgdGhpcyBvbmUgKi8KLQotI2Rl
ZmluZSBEaWN0S2V5CQlEaWN0TGlzdEtleQotI2RlZmluZSBEaWN0CQlEaWN0TGlzdAotI2RlZmlu
ZSBEaWN0Tm9kZQlEaWN0TGlzdE5vZGUKLQotI2RlZmluZSBkaWN0TmV3RGljdChmcmFtZSxsZXEp
CQlfX2dsX2RpY3RMaXN0TmV3RGljdChmcmFtZSxsZXEpCi0jZGVmaW5lIGRpY3REZWxldGVEaWN0
KGRpY3QpCQlfX2dsX2RpY3RMaXN0RGVsZXRlRGljdChkaWN0KQotCi0jZGVmaW5lIGRpY3RTZWFy
Y2goZGljdCxrZXkpCQlfX2dsX2RpY3RMaXN0U2VhcmNoKGRpY3Qsa2V5KQotI2RlZmluZSBkaWN0
SW5zZXJ0KGRpY3Qsa2V5KQkJX19nbF9kaWN0TGlzdEluc2VydChkaWN0LGtleSkKLSNkZWZpbmUg
ZGljdEluc2VydEJlZm9yZShkaWN0LG5vZGUsa2V5KQlfX2dsX2RpY3RMaXN0SW5zZXJ0QmVmb3Jl
KGRpY3Qsbm9kZSxrZXkpCi0jZGVmaW5lIGRpY3REZWxldGUoZGljdCxub2RlKQkJX19nbF9kaWN0
TGlzdERlbGV0ZShkaWN0LG5vZGUpCi0KLSNkZWZpbmUgZGljdEtleShuKQkJCV9fZ2xfZGljdExp
c3RLZXkobikKLSNkZWZpbmUgZGljdFN1Y2MobikJCQlfX2dsX2RpY3RMaXN0U3VjYyhuKQotI2Rl
ZmluZSBkaWN0UHJlZChuKQkJCV9fZ2xfZGljdExpc3RQcmVkKG4pCi0jZGVmaW5lIGRpY3RNaW4o
ZCkJCQlfX2dsX2RpY3RMaXN0TWluKGQpCi0jZGVmaW5lIGRpY3RNYXgoZCkJCQlfX2dsX2RpY3RM
aXN0TWF4KGQpCi0KLQotCi10eXBlZGVmIHZvaWQgKkRpY3RLZXk7Ci10eXBlZGVmIHN0cnVjdCBE
aWN0IERpY3Q7Ci10eXBlZGVmIHN0cnVjdCBEaWN0Tm9kZSBEaWN0Tm9kZTsKLQotRGljdAkJKmRp
Y3ROZXdEaWN0KAotCQkJdm9pZCAqZnJhbWUsCi0JCQlpbnQgKCpsZXEpKHZvaWQgKmZyYW1lLCBE
aWN0S2V5IGtleTEsIERpY3RLZXkga2V5MikgKTsKLQkJCQotdm9pZAkJZGljdERlbGV0ZURpY3Qo
IERpY3QgKmRpY3QgKTsKLQotLyogU2VhcmNoIHJldHVybnMgdGhlIG5vZGUgd2l0aCB0aGUgc21h
bGxlc3Qga2V5IGdyZWF0ZXIgdGhhbiBvciBlcXVhbAotICogdG8gdGhlIGdpdmVuIGtleS4gIElm
IHRoZXJlIGlzIG5vIHN1Y2gga2V5LCByZXR1cm5zIGEgbm9kZSB3aG9zZQotICoga2V5IGlzIE5V
TEwuICBTaW1pbGFybHksIFN1Y2MoTWF4KGQpKSBoYXMgYSBOVUxMIGtleSwgZXRjLgotICovCi1E
aWN0Tm9kZQkqZGljdFNlYXJjaCggRGljdCAqZGljdCwgRGljdEtleSBrZXkgKTsKLURpY3ROb2Rl
CSpkaWN0SW5zZXJ0QmVmb3JlKCBEaWN0ICpkaWN0LCBEaWN0Tm9kZSAqbm9kZSwgRGljdEtleSBr
ZXkgKTsKLXZvaWQJCWRpY3REZWxldGUoIERpY3QgKmRpY3QsIERpY3ROb2RlICpub2RlICk7Ci0K
LSNkZWZpbmUJCV9fZ2xfZGljdExpc3RLZXkobikJKChuKS0+a2V5KQotI2RlZmluZQkJX19nbF9k
aWN0TGlzdFN1Y2MobikJKChuKS0+bmV4dCkKLSNkZWZpbmUJCV9fZ2xfZGljdExpc3RQcmVkKG4p
CSgobiktPnByZXYpCi0jZGVmaW5lCQlfX2dsX2RpY3RMaXN0TWluKGQpCSgoZCktPmhlYWQubmV4
dCkKLSNkZWZpbmUJCV9fZ2xfZGljdExpc3RNYXgoZCkJKChkKS0+aGVhZC5wcmV2KQotI2RlZmlu
ZQkgICAgICAgX19nbF9kaWN0TGlzdEluc2VydChkLGspIChkaWN0SW5zZXJ0QmVmb3JlKChkKSwm
KGQpLT5oZWFkLChrKSkpCi0KLQotLyoqKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyAqKiovCi0K
LXN0cnVjdCBEaWN0Tm9kZSB7Ci0gIERpY3RLZXkJa2V5OwotICBEaWN0Tm9kZQkqbmV4dDsKLSAg
RGljdE5vZGUJKnByZXY7Ci19OwotCi1zdHJ1Y3QgRGljdCB7Ci0gIERpY3ROb2RlCWhlYWQ7Ci0g
IHZvaWQJCSpmcmFtZTsKLSAgaW50CQkoKmxlcSkodm9pZCAqZnJhbWUsIERpY3RLZXkga2V5MSwg
RGljdEtleSBrZXkyKTsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvZ2VvbS5jIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZ2Vv
bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjFkOGI0YTIwMTViMDAyYTczMzhm
MTRiZDY5OTYzMjcyYzIxN2UyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYworKysgL2Rldi9u
dWxsCkBAIC0xLDI3MSArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNl
cHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1Ympl
Y3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVl
Ci0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhl
IGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0q
KiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBT
ZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENB
IDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhl
IFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFM
TCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NM
QUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5U
SUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBR
VUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5G
UklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczog
T3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2Vk
IEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5j
LiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdy
YXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhp
cmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBh
cHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kg
aW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxl
YXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRp
bGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4
OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikg
KFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQot
Kiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJ
bXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRl
cGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjog
RXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVh
ZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9nZW9tLmMjNSAkCi0qLwotCi0j
aW5jbHVkZSAiZ2x1b3MuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlICJtZXNoLmgi
Ci0jaW5jbHVkZSAiZ2VvbS5oIgotCi1pbnQgX19nbF92ZXJ0TGVxKCBHTFV2ZXJ0ZXggKnUsIEdM
VXZlcnRleCAqdiApCi17Ci0gIC8qIFJldHVybnMgVFJVRSBpZiB1IGlzIGxleGljb2dyYXBoaWNh
bGx5IDw9IHYuICovCi0KLSAgcmV0dXJuIFZlcnRMZXEoIHUsIHYgKTsKLX0KLQotR0xkb3VibGUg
X19nbF9lZGdlRXZhbCggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyAp
Ci17Ci0gIC8qIEdpdmVuIHRocmVlIHZlcnRpY2VzIHUsdix3IHN1Y2ggdGhhdCBWZXJ0TGVxKHUs
dikgJiYgVmVydExlcSh2LHcpLAotICAgKiBldmFsdWF0ZXMgdGhlIHQtY29vcmQgb2YgdGhlIGVk
Z2UgdXcgYXQgdGhlIHMtY29vcmQgb2YgdGhlIHZlcnRleCB2LgotICAgKiBSZXR1cm5zIHYtPnQg
LSAodXcpKHYtPnMpLCBpZS4gdGhlIHNpZ25lZCBkaXN0YW5jZSBmcm9tIHV3IHRvIHYuCi0gICAq
IElmIHV3IGlzIHZlcnRpY2FsIChhbmQgdGh1cyBwYXNzZXMgdGhydSB2KSwgdGhlIHJlc3VsdCBp
cyB6ZXJvLgotICAgKgotICAgKiBUaGUgY2FsY3VsYXRpb24gaXMgZXh0cmVtZWx5IGFjY3VyYXRl
IGFuZCBzdGFibGUsIGV2ZW4gd2hlbiB2Ci0gICAqIGlzIHZlcnkgY2xvc2UgdG8gdSBvciB3LiAg
SW4gcGFydGljdWxhciBpZiB3ZSBzZXQgdi0+dCA9IDAgYW5kCi0gICAqIGxldCByIGJlIHRoZSBu
ZWdhdGVkIHJlc3VsdCAodGhpcyBldmFsdWF0ZXMgKHV3KSh2LT5zKSksIHRoZW4KLSAgICogciBp
cyBndWFyYW50ZWVkIHRvIHNhdGlzZnkgTUlOKHUtPnQsdy0+dCkgPD0gciA8PSBNQVgodS0+dCx3
LT50KS4KLSAgICovCi0gIEdMZG91YmxlIGdhcEwsIGdhcFI7Ci0KLSAgYXNzZXJ0KCBWZXJ0TGVx
KCB1LCB2ICkgJiYgVmVydExlcSggdiwgdyApKTsKLSAgCi0gIGdhcEwgPSB2LT5zIC0gdS0+czsK
LSAgZ2FwUiA9IHctPnMgLSB2LT5zOwotCi0gIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7Ci0gICAg
aWYoIGdhcEwgPCBnYXBSICkgewotICAgICAgcmV0dXJuICh2LT50IC0gdS0+dCkgKyAodS0+dCAt
IHctPnQpICogKGdhcEwgLyAoZ2FwTCArIGdhcFIpKTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0
dXJuICh2LT50IC0gdy0+dCkgKyAody0+dCAtIHUtPnQpICogKGdhcFIgLyAoZ2FwTCArIGdhcFIp
KTsKLSAgICB9Ci0gIH0KLSAgLyogdmVydGljYWwgbGluZSAqLwotICByZXR1cm4gMDsKLX0KLQot
R0xkb3VibGUgX19nbF9lZGdlU2lnbiggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZl
cnRleCAqdyApCi17Ci0gIC8qIFJldHVybnMgYSBudW1iZXIgd2hvc2Ugc2lnbiBtYXRjaGVzIEVk
Z2VFdmFsKHUsdix3KSBidXQgd2hpY2gKLSAgICogaXMgY2hlYXBlciB0byBldmFsdWF0ZS4gIFJl
dHVybnMgPiAwLCA9PSAwICwgb3IgPCAwCi0gICAqIGFzIHYgaXMgYWJvdmUsIG9uLCBvciBiZWxv
dyB0aGUgZWRnZSB1dy4KLSAgICovCi0gIEdMZG91YmxlIGdhcEwsIGdhcFI7Ci0KLSAgYXNzZXJ0
KCBWZXJ0TGVxKCB1LCB2ICkgJiYgVmVydExlcSggdiwgdyApKTsKLSAgCi0gIGdhcEwgPSB2LT5z
IC0gdS0+czsKLSAgZ2FwUiA9IHctPnMgLSB2LT5zOwotCi0gIGlmKCBnYXBMICsgZ2FwUiA+IDAg
KSB7Ci0gICAgcmV0dXJuICh2LT50IC0gdy0+dCkgKiBnYXBMICsgKHYtPnQgLSB1LT50KSAqIGdh
cFI7Ci0gIH0KLSAgLyogdmVydGljYWwgbGluZSAqLwotICByZXR1cm4gMDsKLX0KLQotCi0vKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioKLSAqIERlZmluZSB2ZXJzaW9ucyBvZiBFZGdlU2lnbiwgRWRnZUV2YWwgd2l0
aCBzIGFuZCB0IHRyYW5zcG9zZWQuCi0gKi8KLQotR0xkb3VibGUgX19nbF90cmFuc0V2YWwoIEdM
VXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0ZXggKncgKQotewotICAvKiBHaXZlbiB0
aHJlZSB2ZXJ0aWNlcyB1LHYsdyBzdWNoIHRoYXQgVHJhbnNMZXEodSx2KSAmJiBUcmFuc0xlcSh2
LHcpLAotICAgKiBldmFsdWF0ZXMgdGhlIHQtY29vcmQgb2YgdGhlIGVkZ2UgdXcgYXQgdGhlIHMt
Y29vcmQgb2YgdGhlIHZlcnRleCB2LgotICAgKiBSZXR1cm5zIHYtPnMgLSAodXcpKHYtPnQpLCBp
ZS4gdGhlIHNpZ25lZCBkaXN0YW5jZSBmcm9tIHV3IHRvIHYuCi0gICAqIElmIHV3IGlzIHZlcnRp
Y2FsIChhbmQgdGh1cyBwYXNzZXMgdGhydSB2KSwgdGhlIHJlc3VsdCBpcyB6ZXJvLgotICAgKgot
ICAgKiBUaGUgY2FsY3VsYXRpb24gaXMgZXh0cmVtZWx5IGFjY3VyYXRlIGFuZCBzdGFibGUsIGV2
ZW4gd2hlbiB2Ci0gICAqIGlzIHZlcnkgY2xvc2UgdG8gdSBvciB3LiAgSW4gcGFydGljdWxhciBp
ZiB3ZSBzZXQgdi0+cyA9IDAgYW5kCi0gICAqIGxldCByIGJlIHRoZSBuZWdhdGVkIHJlc3VsdCAo
dGhpcyBldmFsdWF0ZXMgKHV3KSh2LT50KSksIHRoZW4KLSAgICogciBpcyBndWFyYW50ZWVkIHRv
IHNhdGlzZnkgTUlOKHUtPnMsdy0+cykgPD0gciA8PSBNQVgodS0+cyx3LT5zKS4KLSAgICovCi0g
IEdMZG91YmxlIGdhcEwsIGdhcFI7Ci0KLSAgYXNzZXJ0KCBUcmFuc0xlcSggdSwgdiApICYmIFRy
YW5zTGVxKCB2LCB3ICkpOwotICAKLSAgZ2FwTCA9IHYtPnQgLSB1LT50OwotICBnYXBSID0gdy0+
dCAtIHYtPnQ7Ci0KLSAgaWYoIGdhcEwgKyBnYXBSID4gMCApIHsKLSAgICBpZiggZ2FwTCA8IGdh
cFIgKSB7Ci0gICAgICByZXR1cm4gKHYtPnMgLSB1LT5zKSArICh1LT5zIC0gdy0+cykgKiAoZ2Fw
TCAvIChnYXBMICsgZ2FwUikpOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gKHYtPnMgLSB3
LT5zKSArICh3LT5zIC0gdS0+cykgKiAoZ2FwUiAvIChnYXBMICsgZ2FwUikpOwotICAgIH0KLSAg
fQotICAvKiB2ZXJ0aWNhbCBsaW5lICovCi0gIHJldHVybiAwOwotfQotCi1HTGRvdWJsZSBfX2ds
X3RyYW5zU2lnbiggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApCi17
Ci0gIC8qIFJldHVybnMgYSBudW1iZXIgd2hvc2Ugc2lnbiBtYXRjaGVzIFRyYW5zRXZhbCh1LHYs
dykgYnV0IHdoaWNoCi0gICAqIGlzIGNoZWFwZXIgdG8gZXZhbHVhdGUuICBSZXR1cm5zID4gMCwg
PT0gMCAsIG9yIDwgMAotICAgKiBhcyB2IGlzIGFib3ZlLCBvbiwgb3IgYmVsb3cgdGhlIGVkZ2Ug
dXcuCi0gICAqLwotICBHTGRvdWJsZSBnYXBMLCBnYXBSOwotCi0gIGFzc2VydCggVHJhbnNMZXEo
IHUsIHYgKSAmJiBUcmFuc0xlcSggdiwgdyApKTsKLSAgCi0gIGdhcEwgPSB2LT50IC0gdS0+dDsK
LSAgZ2FwUiA9IHctPnQgLSB2LT50OwotCi0gIGlmKCBnYXBMICsgZ2FwUiA+IDAgKSB7Ci0gICAg
cmV0dXJuICh2LT5zIC0gdy0+cykgKiBnYXBMICsgKHYtPnMgLSB1LT5zKSAqIGdhcFI7Ci0gIH0K
LSAgLyogdmVydGljYWwgbGluZSAqLwotICByZXR1cm4gMDsKLX0KLQotCi1pbnQgX19nbF92ZXJ0
Q0NXKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiwgR0xVdmVydGV4ICp3ICkKLXsKLSAgLyog
Rm9yIGFsbW9zdC1kZWdlbmVyYXRlIHNpdHVhdGlvbnMsIHRoZSByZXN1bHRzIGFyZSBub3QgcmVs
aWFibGUuCi0gICAqIFVubGVzcyB0aGUgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYyBjYW4gYmUg
cGVyZm9ybWVkIHdpdGhvdXQKLSAgICogcm91bmRpbmcgZXJyb3JzLCAqYW55KiBpbXBsZW1lbnRh
dGlvbiB3aWxsIGdpdmUgaW5jb3JyZWN0IHJlc3VsdHMKLSAgICogb24gc29tZSBkZWdlbmVyYXRl
IGlucHV0cywgc28gdGhlIGNsaWVudCBtdXN0IGhhdmUgc29tZSB3YXkgdG8KLSAgICogaGFuZGxl
IHRoaXMgc2l0dWF0aW9uLgotICAgKi8KLSAgcmV0dXJuICh1LT5zKih2LT50IC0gdy0+dCkgKyB2
LT5zKih3LT50IC0gdS0+dCkgKyB3LT5zKih1LT50IC0gdi0+dCkpID49IDA7Ci19Ci0KLS8qIEdp
dmVuIHBhcmFtZXRlcnMgYSx4LGIseSByZXR1cm5zIHRoZSB2YWx1ZSAoYip4K2EqeSkvKGErYiks
Ci0gKiBvciAoeCt5KS8yIGlmIGE9PWI9PTAuICBJdCByZXF1aXJlcyB0aGF0IGEsYiA+PSAwLCBh
bmQgZW5mb3JjZXMKLSAqIHRoaXMgaW4gdGhlIHJhcmUgY2FzZSB0aGF0IG9uZSBhcmd1bWVudCBp
cyBzbGlnaHRseSBuZWdhdGl2ZS4KLSAqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBleHRyZW1lbHkg
c3RhYmxlIG51bWVyaWNhbGx5LgotICogSW4gcGFydGljdWxhciBpdCBndWFyYW50ZWVzIHRoYXQg
dGhlIHJlc3VsdCByIHNhdGlzZmllcwotICogTUlOKHgseSkgPD0gciA8PSBNQVgoeCx5KSwgYW5k
IHRoZSByZXN1bHRzIGFyZSB2ZXJ5IGFjY3VyYXRlCi0gKiBldmVuIHdoZW4gYSBhbmQgYiBkaWZm
ZXIgZ3JlYXRseSBpbiBtYWduaXR1ZGUuCi0gKi8KLSNkZWZpbmUgUmVhbEludGVycG9sYXRlKGEs
eCxiLHkpCQkJXAotICAoYSA9IChhIDwgMCkgPyAwIDogYSwgYiA9IChiIDwgMCkgPyAwIDogYiwJ
CVwKLSAgKChhIDw9IGIpID8gKChiID09IDApID8gKCh4K3kpIC8gMikJCQlcCi0gICAgICAgICAg
ICAgICAgICAgICAgICA6ICh4ICsgKHkteCkgKiAoYS8oYStiKSkpKQlcCi0gICAgICAgICAgICA6
ICh5ICsgKHgteSkgKiAoYi8oYStiKSkpKSkKLQotI2lmbmRlZiBGT1JfVFJJVEVfVEVTVF9QUk9H
UkFNCi0jZGVmaW5lIEludGVycG9sYXRlKGEseCxiLHkpCVJlYWxJbnRlcnBvbGF0ZShhLHgsYix5
KQotI2Vsc2UKLQotLyogQ2xhaW06IHRoZSBPTkxZIHByb3BlcnR5IHRoZSBzd2VlcCBhbGdvcml0
aG0gcmVsaWVzIG9uIGlzIHRoYXQKLSAqIE1JTih4LHkpIDw9IHIgPD0gTUFYKHgseSkuICBUaGlz
IGlzIGEgbmFzdHkgd2F5IHRvIHRlc3QgdGhhdC4KLSAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
ZXh0ZXJuIGludCBSYW5kb21JbnRlcnBvbGF0ZTsKLQotR0xkb3VibGUgSW50ZXJwb2xhdGUoIEdM
ZG91YmxlIGEsIEdMZG91YmxlIHgsIEdMZG91YmxlIGIsIEdMZG91YmxlIHkpCi17Ci1wcmludGYo
IioqKioqKioqKioqKioqKioqKioqKiVkXG4iLFJhbmRvbUludGVycG9sYXRlKTsKLSAgaWYoIFJh
bmRvbUludGVycG9sYXRlICkgewotICAgIGEgPSAxLjIgKiBkcmFuZDQ4KCkgLSAwLjE7Ci0gICAg
YSA9IChhIDwgMCkgPyAwIDogKChhID4gMSkgPyAxIDogYSk7Ci0gICAgYiA9IDEuMCAtIGE7Ci0g
IH0KLSAgcmV0dXJuIFJlYWxJbnRlcnBvbGF0ZShhLHgsYix5KTsKLX0KLQotI2VuZGlmCi0KLSNk
ZWZpbmUgU3dhcChhLGIpCWRvIHsgR0xVdmVydGV4ICp0ID0gYTsgYSA9IGI7IGIgPSB0OyB9IHdo
aWxlKDApCi0KLXZvaWQgX19nbF9lZGdlSW50ZXJzZWN0KCBHTFV2ZXJ0ZXggKm8xLCBHTFV2ZXJ0
ZXggKmQxLAotCQkJIEdMVXZlcnRleCAqbzIsIEdMVXZlcnRleCAqZDIsCi0JCQkgR0xVdmVydGV4
ICp2ICkKLS8qIEdpdmVuIGVkZ2VzIChvMSxkMSkgYW5kIChvMixkMiksIGNvbXB1dGUgdGhlaXIg
cG9pbnQgb2YgaW50ZXJzZWN0aW9uLgotICogVGhlIGNvbXB1dGVkIHBvaW50IGlzIGd1YXJhbnRl
ZWQgdG8gbGllIGluIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCi0gKiBib3VuZGluZyByZWN0YW5n
bGVzIGRlZmluZWQgYnkgZWFjaCBlZGdlLgotICovCi17Ci0gIEdMZG91YmxlIHoxLCB6MjsKLQot
ICAvKiBUaGlzIGlzIGNlcnRhaW5seSBub3QgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byBmaW5k
IHRoZSBpbnRlcnNlY3Rpb24KLSAgICogb2YgdHdvIGxpbmUgc2VnbWVudHMsIGJ1dCBpdCBpcyB2
ZXJ5IG51bWVyaWNhbGx5IHN0YWJsZS4KLSAgICoKLSAgICogU3RyYXRlZ3k6IGZpbmQgdGhlIHR3
byBtaWRkbGUgdmVydGljZXMgaW4gdGhlIFZlcnRMZXEgb3JkZXJpbmcsCi0gICAqIGFuZCBpbnRl
cnBvbGF0ZSB0aGUgaW50ZXJzZWN0aW9uIHMtdmFsdWUgZnJvbSB0aGVzZS4gIFRoZW4gcmVwZWF0
Ci0gICAqIHVzaW5nIHRoZSBUcmFuc0xlcSBvcmRlcmluZyB0byBmaW5kIHRoZSBpbnRlcnNlY3Rp
b24gdC12YWx1ZS4KLSAgICovCi0KLSAgaWYoICEgVmVydExlcSggbzEsIGQxICkpIHsgU3dhcCgg
bzEsIGQxICk7IH0KLSAgaWYoICEgVmVydExlcSggbzIsIGQyICkpIHsgU3dhcCggbzIsIGQyICk7
IH0KLSAgaWYoICEgVmVydExlcSggbzEsIG8yICkpIHsgU3dhcCggbzEsIG8yICk7IFN3YXAoIGQx
LCBkMiApOyB9Ci0KLSAgaWYoICEgVmVydExlcSggbzIsIGQxICkpIHsKLSAgICAvKiBUZWNobmlj
YWxseSwgbm8gaW50ZXJzZWN0aW9uIC0tIGRvIG91ciBiZXN0ICovCi0gICAgdi0+cyA9IChvMi0+
cyArIGQxLT5zKSAvIDI7Ci0gIH0gZWxzZSBpZiggVmVydExlcSggZDEsIGQyICkpIHsKLSAgICAv
KiBJbnRlcnBvbGF0ZSBiZXR3ZWVuIG8yIGFuZCBkMSAqLwotICAgIHoxID0gRWRnZUV2YWwoIG8x
LCBvMiwgZDEgKTsKLSAgICB6MiA9IEVkZ2VFdmFsKCBvMiwgZDEsIGQyICk7Ci0gICAgaWYoIHox
K3oyIDwgMCApIHsgejEgPSAtejE7IHoyID0gLXoyOyB9Ci0gICAgdi0+cyA9IEludGVycG9sYXRl
KCB6MSwgbzItPnMsIHoyLCBkMS0+cyApOwotICB9IGVsc2UgewotICAgIC8qIEludGVycG9sYXRl
IGJldHdlZW4gbzIgYW5kIGQyICovCi0gICAgejEgPSBFZGdlU2lnbiggbzEsIG8yLCBkMSApOwot
ICAgIHoyID0gLUVkZ2VTaWduKCBvMSwgZDIsIGQxICk7Ci0gICAgaWYoIHoxK3oyIDwgMCApIHsg
ejEgPSAtejE7IHoyID0gLXoyOyB9Ci0gICAgdi0+cyA9IEludGVycG9sYXRlKCB6MSwgbzItPnMs
IHoyLCBkMi0+cyApOwotICB9Ci0KLSAgLyogTm93IHJlcGVhdCB0aGUgcHJvY2VzcyBmb3IgdCAq
LwotCi0gIGlmKCAhIFRyYW5zTGVxKCBvMSwgZDEgKSkgeyBTd2FwKCBvMSwgZDEgKTsgfQotICBp
ZiggISBUcmFuc0xlcSggbzIsIGQyICkpIHsgU3dhcCggbzIsIGQyICk7IH0KLSAgaWYoICEgVHJh
bnNMZXEoIG8xLCBvMiApKSB7IFN3YXAoIG8xLCBvMiApOyBTd2FwKCBkMSwgZDIgKTsgfQotCi0g
IGlmKCAhIFRyYW5zTGVxKCBvMiwgZDEgKSkgewotICAgIC8qIFRlY2huaWNhbGx5LCBubyBpbnRl
cnNlY3Rpb24gLS0gZG8gb3VyIGJlc3QgKi8KLSAgICB2LT50ID0gKG8yLT50ICsgZDEtPnQpIC8g
MjsKLSAgfSBlbHNlIGlmKCBUcmFuc0xlcSggZDEsIGQyICkpIHsKLSAgICAvKiBJbnRlcnBvbGF0
ZSBiZXR3ZWVuIG8yIGFuZCBkMSAqLwotICAgIHoxID0gVHJhbnNFdmFsKCBvMSwgbzIsIGQxICk7
Ci0gICAgejIgPSBUcmFuc0V2YWwoIG8yLCBkMSwgZDIgKTsKLSAgICBpZiggejErejIgPCAwICkg
eyB6MSA9IC16MTsgejIgPSAtejI7IH0KLSAgICB2LT50ID0gSW50ZXJwb2xhdGUoIHoxLCBvMi0+
dCwgejIsIGQxLT50ICk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogSW50ZXJwb2xhdGUgYmV0d2VlbiBv
MiBhbmQgZDIgKi8KLSAgICB6MSA9IFRyYW5zU2lnbiggbzEsIG8yLCBkMSApOwotICAgIHoyID0g
LVRyYW5zU2lnbiggbzEsIGQyLCBkMSApOwotICAgIGlmKCB6MSt6MiA8IDAgKSB7IHoxID0gLXox
OyB6MiA9IC16MjsgfQotICAgIHYtPnQgPSBJbnRlcnBvbGF0ZSggejEsIG8yLT50LCB6MiwgZDIt
PnQgKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mv
Z2VvbS5oIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiNGQwYzY2NzgyMjRlZTdhYWZkNmQzNGZiY2QyNTU4ODdlNjdm
MDYwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDkwICsw
LDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50
IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5h
dGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExp
Y2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhp
cwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNl
IGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0q
KiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3Ig
YXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBO
b3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlz
dHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElN
UExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5H
LCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05E
SVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1Mg
Rk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAK
LSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIElt
cGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAw
MCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoq
IENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFz
IGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoq
IAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dy
YW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3
aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAx
LCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZl
cnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikg
R3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCBy
ZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1
c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0q
KiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZp
ZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIu
MSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5
IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFp
bi9nZngvbGliL2dsdS9saWJ0ZXNzL2dlb20uaCM1ICQKLSovCi0KLSNpZm5kZWYgX19nZW9tX2hf
Ci0jZGVmaW5lIF9fZ2VvbV9oXwotCi0jaW5jbHVkZSAibWVzaC5oIgotCi0jaWZkZWYgTk9fQlJB
TkNIX0NPTkRJVElPTlMKLS8qIE1JUFMgYXJjaGl0ZWN0dXJlIGhhcyBzcGVjaWFsIGluc3RydWN0
aW9ucyB0byBldmFsdWF0ZSBib29sZWFuCi0gKiBjb25kaXRpb25zIC0tIG1vcmUgZWZmaWNpZW50
IHRoYW4gYnJhbmNoaW5nLCBJRiB5b3UgY2FuIGdldCB0aGUKLSAqIGNvbXBpbGVyIHRvIGdlbmVy
YXRlIHRoZSByaWdodCBpbnN0cnVjdGlvbnMgKFNHSSBjb21waWxlciBkb2Vzbid0KQotICovCi0j
ZGVmaW5lIFZlcnRFcSh1LHYpCSgoKHUpLT5zID09ICh2KS0+cykgJiAoKHUpLT50ID09ICh2KS0+
dCkpCi0jZGVmaW5lIFZlcnRMZXEodSx2KQkoKCh1KS0+cyA8ICh2KS0+cykgfCBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgKCh1KS0+cyA9PSAodiktPnMgJiAodSktPnQgPD0gKHYpLT50KSkK
LSNlbHNlCi0jZGVmaW5lIFZlcnRFcSh1LHYpCSgodSktPnMgPT0gKHYpLT5zICYmICh1KS0+dCA9
PSAodiktPnQpCi0jZGVmaW5lIFZlcnRMZXEodSx2KQkoKCh1KS0+cyA8ICh2KS0+cykgfHwgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICgodSktPnMgPT0gKHYpLT5zICYmICh1KS0+dCA8PSAo
diktPnQpKQotI2VuZGlmCi0KLSNkZWZpbmUgRWRnZUV2YWwodSx2LHcpCV9fZ2xfZWRnZUV2YWwo
dSx2LHcpCi0jZGVmaW5lIEVkZ2VTaWduKHUsdix3KQlfX2dsX2VkZ2VTaWduKHUsdix3KQotCi0v
KiBWZXJzaW9ucyBvZiBWZXJ0TGVxLCBFZGdlU2lnbiwgRWRnZUV2YWwgd2l0aCBzIGFuZCB0IHRy
YW5zcG9zZWQuICovCi0KLSNkZWZpbmUgVHJhbnNMZXEodSx2KQkoKCh1KS0+dCA8ICh2KS0+dCkg
fHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICgodSktPnQgPT0gKHYpLT50ICYmICh1KS0+
cyA8PSAodiktPnMpKQotI2RlZmluZSBUcmFuc0V2YWwodSx2LHcpCV9fZ2xfdHJhbnNFdmFsKHUs
dix3KQotI2RlZmluZSBUcmFuc1NpZ24odSx2LHcpCV9fZ2xfdHJhbnNTaWduKHUsdix3KQotCi0K
LSNkZWZpbmUgRWRnZUdvZXNMZWZ0KGUpCQlWZXJ0TGVxKCAoZSktPkRzdCwgKGUpLT5PcmcgKQot
I2RlZmluZSBFZGdlR29lc1JpZ2h0KGUpCVZlcnRMZXEoIChlKS0+T3JnLCAoZSktPkRzdCApCi0K
LSNkZWZpbmUgQUJTKHgpCSgoeCkgPCAwID8gLSh4KSA6ICh4KSkKLSNkZWZpbmUgVmVydEwxZGlz
dCh1LHYpCShBQlModS0+cyAtIHYtPnMpICsgQUJTKHUtPnQgLSB2LT50KSkKLQotI2RlZmluZSBW
ZXJ0Q0NXKHUsdix3KQlfX2dsX3ZlcnRDQ1codSx2LHcpCi0KLWludAkJX19nbF92ZXJ0TGVxKCBH
TFV2ZXJ0ZXggKnUsIEdMVXZlcnRleCAqdiApOwotR0xkb3VibGUJX19nbF9lZGdlRXZhbCggR0xV
dmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApOwotR0xkb3VibGUJX19nbF9l
ZGdlU2lnbiggR0xVdmVydGV4ICp1LCBHTFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApOwotR0xk
b3VibGUJX19nbF90cmFuc0V2YWwoIEdMVXZlcnRleCAqdSwgR0xVdmVydGV4ICp2LCBHTFV2ZXJ0
ZXggKncgKTsKLUdMZG91YmxlCV9fZ2xfdHJhbnNTaWduKCBHTFV2ZXJ0ZXggKnUsIEdMVXZlcnRl
eCAqdiwgR0xVdmVydGV4ICp3ICk7Ci1pbnQJCV9fZ2xfdmVydENDVyggR0xVdmVydGV4ICp1LCBH
TFV2ZXJ0ZXggKnYsIEdMVXZlcnRleCAqdyApOwotdm9pZAkJX19nbF9lZGdlSW50ZXJzZWN0KCBH
TFV2ZXJ0ZXggKm8xLCBHTFV2ZXJ0ZXggKmQxLAotCQkJCSAgICBHTFV2ZXJ0ZXggKm8yLCBHTFV2
ZXJ0ZXggKmQyLAotCQkJCSAgICBHTFV2ZXJ0ZXggKnYgKTsKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1hbGxvYy5jIGIvU291cmNlL1RoaXJk
UGFydHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYmQ1YjRhYzc5OGRkZmVhODJlNmViNTFiNDM5NGM2YzljMDQzYzM3ZC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUv
bGlidGVzcy9tZW1hbGxvYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSoq
IExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2Yg
dGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2Ug
YXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJz
aW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFy
ZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkg
bm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBH
cmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRy
ZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiog
aHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMg
cHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBh
bgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5U
SUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElN
SVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVS
Q0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFS
VElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwg
Q29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24s
Ci0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQg
YnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJp
Z2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGlu
IGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0q
KiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlv
bmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJm
YWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdp
bmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZp
Y2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4z
KSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRo
IHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9i
ZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVu
R0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBi
eSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwot
KiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRp
b24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0q
KiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1
L2xpYnRlc3MvbWVtYWxsb2MuYyM1ICQKLSovCi0KLSNpbmNsdWRlICJtZW1hbGxvYy5oIgotI2lu
Y2x1ZGUgInN0cmluZy5oIgotCi1pbnQgX19nbF9tZW1Jbml0KCBzaXplX3QgbWF4RmFzdCApCi17
Ci0jaWZuZGVmIE5PX01BTExPUFQKLS8qICBtYWxsb3B0KCBNX01YRkFTVCwgbWF4RmFzdCApOyov
Ci0jaWZkZWYgTUVNT1JZX0RFQlVHCi0gIG1hbGxvcHQoIE1fREVCVUcsIDEgKTsKLSNlbmRpZgot
I2VuZGlmCi0gICByZXR1cm4gMTsKLX0KLQotI2lmZGVmIE1FTU9SWV9ERUJVRwotdm9pZCAqX19n
bF9tZW1BbGxvYyggc2l6ZV90IG4gKQotewotICByZXR1cm4gbWVtc2V0KCBtYWxsb2MoIG4gKSwg
MHhhNSwgbiApOwotfQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL21lbWFsbG9jLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZW1h
bGxvYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTM3ZjdhZDViOGNmNTI3YmFk
ODAyMzY1YjAxMDMzNjdkYzRkNzQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5
LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRl
IHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNH
SSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2Ui
KSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUg
cHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBj
b3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBM
ZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZp
ZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJv
amVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5z
ZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3
aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoq
IERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBX
QVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFD
VE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBO
T04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29k
ZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJl
bGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAot
KiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6
IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBi
eSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEp
LCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0
LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0
ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0
d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNh
bXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVl
biBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUg
T3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1
dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0q
KiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9tZW1hbGxvYy5oIzUg
JAotKi8KLQotI2lmbmRlZiBfX21lbWFsbG9jX3NpbXBsZV9oXwotI2RlZmluZSBfX21lbWFsbG9j
X3NpbXBsZV9oXwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNkZWZpbmUgbWVtUmVhbGxvYwly
ZWFsbG9jCi0jZGVmaW5lIG1lbUZyZWUJCWZyZWUKLQotI2RlZmluZSBtZW1Jbml0CQlfX2dsX21l
bUluaXQKLS8qZXh0ZXJuIHZvaWQJCV9fZ2xfbWVtSW5pdCggc2l6ZV90ICk7Ki8KLWV4dGVybiBp
bnQJCV9fZ2xfbWVtSW5pdCggc2l6ZV90ICk7Ci0KLSNpZm5kZWYgTUVNT1JZX0RFQlVHCi0jZGVm
aW5lIG1lbUFsbG9jCW1hbGxvYwotI2Vsc2UKLSNkZWZpbmUgbWVtQWxsb2MJX19nbF9tZW1BbGxv
YwotZXh0ZXJuIHZvaWQgKgkJX19nbF9tZW1BbGxvYyggc2l6ZV90ICk7Ci0jZW5kaWYKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDczMDVmYWIxZDJmZGY3ZjY0ZTA2YWY0YzcxNzI0MWNiZDFmNTJkOGIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvZ2x1L2xpYnRlc3MvbWVzaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzk2ICswLDAgQEAKLS8q
Ci0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25z
IG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNl
bnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwg
VmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhpcwotKiogZmls
ZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3Ug
bWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBM
aWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGlj
b24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRo
ZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAK
LSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQs
IGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQg
b24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FS
UkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VU
IExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9G
IE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoq
IFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdp
bmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0
aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxv
cGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENv
cHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdo
dCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRl
ZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRk
aXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGlu
dGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBP
cmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3Bl
Y2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBU
aGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoq
IDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mg
d2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBP
Y3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUg
T3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNo
ZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVp
bmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZp
Y2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0q
KgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGli
L2dsdS9saWJ0ZXNzL21lc2guYyM2ICQKLSovCi0KLSNpbmNsdWRlICJnbHVvcy5oIgotI2luY2x1
ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgIm1lc2guaCIKLSNp
bmNsdWRlICJtZW1hbGxvYy5oIgotCi0jZGVmaW5lIFRSVUUgMQotI2RlZmluZSBGQUxTRSAwCi0K
LXN0YXRpYyBHTFV2ZXJ0ZXggKmFsbG9jVmVydGV4KCkKLXsKLSAgIHJldHVybiAoR0xVdmVydGV4
ICopbWVtQWxsb2MoIHNpemVvZiggR0xVdmVydGV4ICkpOwotfQotCi1zdGF0aWMgR0xVZmFjZSAq
YWxsb2NGYWNlKCkKLXsKLSAgIHJldHVybiAoR0xVZmFjZSAqKW1lbUFsbG9jKCBzaXplb2YoIEdM
VWZhY2UgKSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKiogVXRpbGl0eSBSb3V0aW5l
cyAqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIEFsbG9jYXRlIGFuZCBmcmVlIGhhbGYt
ZWRnZXMgaW4gcGFpcnMgZm9yIGVmZmljaWVuY3kuCi0gKiBUaGUgKm9ubHkqIHBsYWNlIHRoYXQg
c2hvdWxkIHVzZSB0aGlzIGZhY3QgaXMgYWxsb2NhdGlvbi9mcmVlLgotICovCi10eXBlZGVmIHN0
cnVjdCB7IEdMVWhhbGZFZGdlIGUsIGVTeW07IH0gRWRnZVBhaXI7Ci0KLS8qIE1ha2VFZGdlIGNy
ZWF0ZXMgYSBuZXcgcGFpciBvZiBoYWxmLWVkZ2VzIHdoaWNoIGZvcm0gdGhlaXIgb3duIGxvb3Au
Ci0gKiBObyB2ZXJ0ZXggb3IgZmFjZSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIGJ1dCB0aGVz
ZSBtdXN0IGJlIGFzc2lnbmVkCi0gKiBiZWZvcmUgdGhlIGN1cnJlbnQgZWRnZSBvcGVyYXRpb24g
aXMgY29tcGxldGVkLgotICovCi1zdGF0aWMgR0xVaGFsZkVkZ2UgKk1ha2VFZGdlKCBHTFVoYWxm
RWRnZSAqZU5leHQgKQotewotICBHTFVoYWxmRWRnZSAqZTsKLSAgR0xVaGFsZkVkZ2UgKmVTeW07
Ci0gIEdMVWhhbGZFZGdlICplUHJldjsKLSAgRWRnZVBhaXIgKnBhaXIgPSAoRWRnZVBhaXIgKilt
ZW1BbGxvYyggc2l6ZW9mKCBFZGdlUGFpciApKTsKLSAgaWYgKHBhaXIgPT0gTlVMTCkgcmV0dXJu
IE5VTEw7Ci0KLSAgZSA9ICZwYWlyLT5lOwotICBlU3ltID0gJnBhaXItPmVTeW07Ci0KLSAgLyog
TWFrZSBzdXJlIGVOZXh0IHBvaW50cyB0byB0aGUgZmlyc3QgZWRnZSBvZiB0aGUgZWRnZSBwYWly
ICovCi0gIGlmKCBlTmV4dC0+U3ltIDwgZU5leHQgKSB7IGVOZXh0ID0gZU5leHQtPlN5bTsgfQot
Ci0gIC8qIEluc2VydCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3QgYmVmb3JlIGVOZXh0
LgotICAgKiBOb3RlIHRoYXQgdGhlIHByZXYgcG9pbnRlciBpcyBzdG9yZWQgaW4gU3ltLT5uZXh0
LgotICAgKi8KLSAgZVByZXYgPSBlTmV4dC0+U3ltLT5uZXh0OwotICBlU3ltLT5uZXh0ID0gZVBy
ZXY7Ci0gIGVQcmV2LT5TeW0tPm5leHQgPSBlOwotICBlLT5uZXh0ID0gZU5leHQ7Ci0gIGVOZXh0
LT5TeW0tPm5leHQgPSBlU3ltOwotCi0gIGUtPlN5bSA9IGVTeW07Ci0gIGUtPk9uZXh0ID0gZTsK
LSAgZS0+TG5leHQgPSBlU3ltOwotICBlLT5PcmcgPSBOVUxMOwotICBlLT5MZmFjZSA9IE5VTEw7
Ci0gIGUtPndpbmRpbmcgPSAwOwotICBlLT5hY3RpdmVSZWdpb24gPSBOVUxMOwotCi0gIGVTeW0t
PlN5bSA9IGU7Ci0gIGVTeW0tPk9uZXh0ID0gZVN5bTsKLSAgZVN5bS0+TG5leHQgPSBlOwotICBl
U3ltLT5PcmcgPSBOVUxMOwotICBlU3ltLT5MZmFjZSA9IE5VTEw7Ci0gIGVTeW0tPndpbmRpbmcg
PSAwOwotICBlU3ltLT5hY3RpdmVSZWdpb24gPSBOVUxMOwotCi0gIHJldHVybiBlOwotfQotCi0v
KiBTcGxpY2UoIGEsIGIgKSBpcyBiZXN0IGRlc2NyaWJlZCBieSB0aGUgR3VpYmFzL1N0b2xmaSBw
YXBlciBvciB0aGUKLSAqIENTMzQ4YSBub3RlcyAoc2VlIG1lc2guaCkuICBCYXNpY2FsbHkgaXQg
bW9kaWZpZXMgdGhlIG1lc2ggc28gdGhhdAotICogYS0+T25leHQgYW5kIGItPk9uZXh0IGFyZSBl
eGNoYW5nZWQuICBUaGlzIGNhbiBoYXZlIHZhcmlvdXMgZWZmZWN0cwotICogZGVwZW5kaW5nIG9u
IHdoZXRoZXIgYSBhbmQgYiBiZWxvbmcgdG8gZGlmZmVyZW50IGZhY2Ugb3IgdmVydGV4IHJpbmdz
LgotICogRm9yIG1vcmUgZXhwbGFuYXRpb24gc2VlIF9fZ2xfbWVzaFNwbGljZSgpIGJlbG93Lgot
ICovCi1zdGF0aWMgdm9pZCBTcGxpY2UoIEdMVWhhbGZFZGdlICphLCBHTFVoYWxmRWRnZSAqYiAp
Ci17Ci0gIEdMVWhhbGZFZGdlICphT25leHQgPSBhLT5PbmV4dDsKLSAgR0xVaGFsZkVkZ2UgKmJP
bmV4dCA9IGItPk9uZXh0OwotCi0gIGFPbmV4dC0+U3ltLT5MbmV4dCA9IGI7Ci0gIGJPbmV4dC0+
U3ltLT5MbmV4dCA9IGE7Ci0gIGEtPk9uZXh0ID0gYk9uZXh0OwotICBiLT5PbmV4dCA9IGFPbmV4
dDsKLX0KLQotLyogTWFrZVZlcnRleCggbmV3VmVydGV4LCBlT3JpZywgdk5leHQgKSBhdHRhY2hl
cyBhIG5ldyB2ZXJ0ZXggYW5kIG1ha2VzIGl0IHRoZQotICogb3JpZ2luIG9mIGFsbCBlZGdlcyBp
biB0aGUgdmVydGV4IGxvb3AgdG8gd2hpY2ggZU9yaWcgYmVsb25ncy4gInZOZXh0IiBnaXZlcwot
ICogYSBwbGFjZSB0byBpbnNlcnQgdGhlIG5ldyB2ZXJ0ZXggaW4gdGhlIGdsb2JhbCB2ZXJ0ZXgg
bGlzdC4gIFdlIGluc2VydAotICogdGhlIG5ldyB2ZXJ0ZXggKmJlZm9yZSogdk5leHQgc28gdGhh
dCBhbGdvcml0aG1zIHdoaWNoIHdhbGsgdGhlIHZlcnRleAotICogbGlzdCB3aWxsIG5vdCBzZWUg
dGhlIG5ld2x5IGNyZWF0ZWQgdmVydGljZXMuCi0gKi8KLXN0YXRpYyB2b2lkIE1ha2VWZXJ0ZXgo
IEdMVXZlcnRleCAqbmV3VmVydGV4LCAKLQkJCUdMVWhhbGZFZGdlICplT3JpZywgR0xVdmVydGV4
ICp2TmV4dCApCi17Ci0gIEdMVWhhbGZFZGdlICplOwotICBHTFV2ZXJ0ZXggKnZQcmV2OwotICBH
TFV2ZXJ0ZXggKnZOZXcgPSBuZXdWZXJ0ZXg7Ci0KLSAgYXNzZXJ0KHZOZXcgIT0gTlVMTCk7Ci0K
LSAgLyogaW5zZXJ0IGluIGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCBiZWZvcmUgdk5leHQg
Ki8KLSAgdlByZXYgPSB2TmV4dC0+cHJldjsKLSAgdk5ldy0+cHJldiA9IHZQcmV2OwotICB2UHJl
di0+bmV4dCA9IHZOZXc7Ci0gIHZOZXctPm5leHQgPSB2TmV4dDsKLSAgdk5leHQtPnByZXYgPSB2
TmV3OwotCi0gIHZOZXctPmFuRWRnZSA9IGVPcmlnOwotICB2TmV3LT5kYXRhID0gTlVMTDsKLSAg
LyogbGVhdmUgY29vcmRzLCBzLCB0IHVuZGVmaW5lZCAqLwotCi0gIC8qIGZpeCBvdGhlciBlZGdl
cyBvbiB0aGlzIHZlcnRleCBsb29wICovCi0gIGUgPSBlT3JpZzsKLSAgZG8gewotICAgIGUtPk9y
ZyA9IHZOZXc7Ci0gICAgZSA9IGUtPk9uZXh0OwotICB9IHdoaWxlKCBlICE9IGVPcmlnICk7Ci19
Ci0KLS8qIE1ha2VGYWNlKCBuZXdGYWNlLCBlT3JpZywgZk5leHQgKSBhdHRhY2hlcyBhIG5ldyBm
YWNlIGFuZCBtYWtlcyBpdCB0aGUgbGVmdAotICogZmFjZSBvZiBhbGwgZWRnZXMgaW4gdGhlIGZh
Y2UgbG9vcCB0byB3aGljaCBlT3JpZyBiZWxvbmdzLiAgImZOZXh0IiBnaXZlcwotICogYSBwbGFj
ZSB0byBpbnNlcnQgdGhlIG5ldyBmYWNlIGluIHRoZSBnbG9iYWwgZmFjZSBsaXN0LiAgV2UgaW5z
ZXJ0Ci0gKiB0aGUgbmV3IGZhY2UgKmJlZm9yZSogZk5leHQgc28gdGhhdCBhbGdvcml0aG1zIHdo
aWNoIHdhbGsgdGhlIGZhY2UKLSAqIGxpc3Qgd2lsbCBub3Qgc2VlIHRoZSBuZXdseSBjcmVhdGVk
IGZhY2VzLgotICovCi1zdGF0aWMgdm9pZCBNYWtlRmFjZSggR0xVZmFjZSAqbmV3RmFjZSwgR0xV
aGFsZkVkZ2UgKmVPcmlnLCBHTFVmYWNlICpmTmV4dCApCi17Ci0gIEdMVWhhbGZFZGdlICplOwot
ICBHTFVmYWNlICpmUHJldjsKLSAgR0xVZmFjZSAqZk5ldyA9IG5ld0ZhY2U7Ci0KLSAgYXNzZXJ0
KGZOZXcgIT0gTlVMTCk7IAotCi0gIC8qIGluc2VydCBpbiBjaXJjdWxhciBkb3VibHktbGlua2Vk
IGxpc3QgYmVmb3JlIGZOZXh0ICovCi0gIGZQcmV2ID0gZk5leHQtPnByZXY7Ci0gIGZOZXctPnBy
ZXYgPSBmUHJldjsKLSAgZlByZXYtPm5leHQgPSBmTmV3OwotICBmTmV3LT5uZXh0ID0gZk5leHQ7
Ci0gIGZOZXh0LT5wcmV2ID0gZk5ldzsKLQotICBmTmV3LT5hbkVkZ2UgPSBlT3JpZzsKLSAgZk5l
dy0+ZGF0YSA9IE5VTEw7Ci0gIGZOZXctPnRyYWlsID0gTlVMTDsKLSAgZk5ldy0+bWFya2VkID0g
RkFMU0U7Ci0KLSAgLyogVGhlIG5ldyBmYWNlIGlzIG1hcmtlZCAiaW5zaWRlIiBpZiB0aGUgb2xk
IG9uZSB3YXMuICBUaGlzIGlzIGEKLSAgICogY29udmVuaWVuY2UgZm9yIHRoZSBjb21tb24gY2Fz
ZSB3aGVyZSBhIGZhY2UgaGFzIGJlZW4gc3BsaXQgaW4gdHdvLgotICAgKi8KLSAgZk5ldy0+aW5z
aWRlID0gZk5leHQtPmluc2lkZTsKLQotICAvKiBmaXggb3RoZXIgZWRnZXMgb24gdGhpcyBmYWNl
IGxvb3AgKi8KLSAgZSA9IGVPcmlnOwotICBkbyB7Ci0gICAgZS0+TGZhY2UgPSBmTmV3OwotICAg
IGUgPSBlLT5MbmV4dDsKLSAgfSB3aGlsZSggZSAhPSBlT3JpZyApOwotfQotCi0vKiBLaWxsRWRn
ZSggZURlbCApIGRlc3Ryb3lzIGFuIGVkZ2UgKHRoZSBoYWxmLWVkZ2VzIGVEZWwgYW5kIGVEZWwt
PlN5bSksCi0gKiBhbmQgcmVtb3ZlcyBmcm9tIHRoZSBnbG9iYWwgZWRnZSBsaXN0LgotICovCi1z
dGF0aWMgdm9pZCBLaWxsRWRnZSggR0xVaGFsZkVkZ2UgKmVEZWwgKQotewotICBHTFVoYWxmRWRn
ZSAqZVByZXYsICplTmV4dDsKLQotICAvKiBIYWxmLWVkZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gcGFp
cnMsIHNlZSBFZGdlUGFpciBhYm92ZSAqLwotICBpZiggZURlbC0+U3ltIDwgZURlbCApIHsgZURl
bCA9IGVEZWwtPlN5bTsgfQotCi0gIC8qIGRlbGV0ZSBmcm9tIGNpcmN1bGFyIGRvdWJseS1saW5r
ZWQgbGlzdCAqLwotICBlTmV4dCA9IGVEZWwtPm5leHQ7Ci0gIGVQcmV2ID0gZURlbC0+U3ltLT5u
ZXh0OwotICBlTmV4dC0+U3ltLT5uZXh0ID0gZVByZXY7Ci0gIGVQcmV2LT5TeW0tPm5leHQgPSBl
TmV4dDsKLQotICBtZW1GcmVlKCBlRGVsICk7Ci19Ci0KLQotLyogS2lsbFZlcnRleCggdkRlbCAp
IGRlc3Ryb3lzIGEgdmVydGV4IGFuZCByZW1vdmVzIGl0IGZyb20gdGhlIGdsb2JhbAotICogdmVy
dGV4IGxpc3QuICBJdCB1cGRhdGVzIHRoZSB2ZXJ0ZXggbG9vcCB0byBwb2ludCB0byBhIGdpdmVu
IG5ldyB2ZXJ0ZXguCi0gKi8KLXN0YXRpYyB2b2lkIEtpbGxWZXJ0ZXgoIEdMVXZlcnRleCAqdkRl
bCwgR0xVdmVydGV4ICpuZXdPcmcgKQotewotICBHTFVoYWxmRWRnZSAqZSwgKmVTdGFydCA9IHZE
ZWwtPmFuRWRnZTsKLSAgR0xVdmVydGV4ICp2UHJldiwgKnZOZXh0OwotCi0gIC8qIGNoYW5nZSB0
aGUgb3JpZ2luIG9mIGFsbCBhZmZlY3RlZCBlZGdlcyAqLwotICBlID0gZVN0YXJ0OwotICBkbyB7
Ci0gICAgZS0+T3JnID0gbmV3T3JnOwotICAgIGUgPSBlLT5PbmV4dDsKLSAgfSB3aGlsZSggZSAh
PSBlU3RhcnQgKTsKLQotICAvKiBkZWxldGUgZnJvbSBjaXJjdWxhciBkb3VibHktbGlua2VkIGxp
c3QgKi8KLSAgdlByZXYgPSB2RGVsLT5wcmV2OwotICB2TmV4dCA9IHZEZWwtPm5leHQ7Ci0gIHZO
ZXh0LT5wcmV2ID0gdlByZXY7Ci0gIHZQcmV2LT5uZXh0ID0gdk5leHQ7Ci0KLSAgbWVtRnJlZSgg
dkRlbCApOwotfQotCi0vKiBLaWxsRmFjZSggZkRlbCApIGRlc3Ryb3lzIGEgZmFjZSBhbmQgcmVt
b3ZlcyBpdCBmcm9tIHRoZSBnbG9iYWwgZmFjZQotICogbGlzdC4gIEl0IHVwZGF0ZXMgdGhlIGZh
Y2UgbG9vcCB0byBwb2ludCB0byBhIGdpdmVuIG5ldyBmYWNlLgotICovCi1zdGF0aWMgdm9pZCBL
aWxsRmFjZSggR0xVZmFjZSAqZkRlbCwgR0xVZmFjZSAqbmV3TGZhY2UgKQotewotICBHTFVoYWxm
RWRnZSAqZSwgKmVTdGFydCA9IGZEZWwtPmFuRWRnZTsKLSAgR0xVZmFjZSAqZlByZXYsICpmTmV4
dDsKLQotICAvKiBjaGFuZ2UgdGhlIGxlZnQgZmFjZSBvZiBhbGwgYWZmZWN0ZWQgZWRnZXMgKi8K
LSAgZSA9IGVTdGFydDsKLSAgZG8gewotICAgIGUtPkxmYWNlID0gbmV3TGZhY2U7Ci0gICAgZSA9
IGUtPkxuZXh0OwotICB9IHdoaWxlKCBlICE9IGVTdGFydCApOwotCi0gIC8qIGRlbGV0ZSBmcm9t
IGNpcmN1bGFyIGRvdWJseS1saW5rZWQgbGlzdCAqLwotICBmUHJldiA9IGZEZWwtPnByZXY7Ci0g
IGZOZXh0ID0gZkRlbC0+bmV4dDsKLSAgZk5leHQtPnByZXYgPSBmUHJldjsKLSAgZlByZXYtPm5l
eHQgPSBmTmV4dDsKLQotICBtZW1GcmVlKCBmRGVsICk7Ci19Ci0KLQotLyoqKioqKioqKioqKioq
KioqKiBCYXNpYyBFZGdlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyog
X19nbF9tZXNoTWFrZUVkZ2UgY3JlYXRlcyBvbmUgZWRnZSwgdHdvIHZlcnRpY2VzLCBhbmQgYSBs
b29wIChmYWNlKS4KLSAqIFRoZSBsb29wIGNvbnNpc3RzIG9mIHRoZSB0d28gbmV3IGhhbGYtZWRn
ZXMuCi0gKi8KLUdMVWhhbGZFZGdlICpfX2dsX21lc2hNYWtlRWRnZSggR0xVbWVzaCAqbWVzaCAp
Ci17Ci0gIEdMVXZlcnRleCAqbmV3VmVydGV4MT0gYWxsb2NWZXJ0ZXgoKTsKLSAgR0xVdmVydGV4
ICpuZXdWZXJ0ZXgyPSBhbGxvY1ZlcnRleCgpOwotICBHTFVmYWNlICpuZXdGYWNlPSBhbGxvY0Zh
Y2UoKTsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0KLSAgLyogaWYgYW55IG9uZSBpcyBudWxsIHRoZW4g
YWxsIGdldCBmcmVlZCAqLwotICBpZiAobmV3VmVydGV4MSA9PSBOVUxMIHx8IG5ld1ZlcnRleDIg
PT0gTlVMTCB8fCBuZXdGYWNlID09IE5VTEwpIHsKLSAgICAgaWYgKG5ld1ZlcnRleDEgIT0gTlVM
TCkgbWVtRnJlZShuZXdWZXJ0ZXgxKTsKLSAgICAgaWYgKG5ld1ZlcnRleDIgIT0gTlVMTCkgbWVt
RnJlZShuZXdWZXJ0ZXgyKTsKLSAgICAgaWYgKG5ld0ZhY2UgIT0gTlVMTCkgbWVtRnJlZShuZXdG
YWNlKTsgICAgIAotICAgICByZXR1cm4gTlVMTDsKLSAgfSAKLQotICBlID0gTWFrZUVkZ2UoICZt
ZXNoLT5lSGVhZCApOwotICBpZiAoZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICBNYWtlVmVy
dGV4KCBuZXdWZXJ0ZXgxLCBlLCAmbWVzaC0+dkhlYWQgKTsKLSAgTWFrZVZlcnRleCggbmV3VmVy
dGV4MiwgZS0+U3ltLCAmbWVzaC0+dkhlYWQgKTsKLSAgTWFrZUZhY2UoIG5ld0ZhY2UsIGUsICZt
ZXNoLT5mSGVhZCApOwotICByZXR1cm4gZTsKLX0KLSAgCi0KLS8qIF9fZ2xfbWVzaFNwbGljZSgg
ZU9yZywgZURzdCApIGlzIHRoZSBiYXNpYyBvcGVyYXRpb24gZm9yIGNoYW5naW5nIHRoZQotICog
bWVzaCBjb25uZWN0aXZpdHkgYW5kIHRvcG9sb2d5LiAgSXQgY2hhbmdlcyB0aGUgbWVzaCBzbyB0
aGF0Ci0gKgllT3JnLT5PbmV4dCA8LSBPTEQoIGVEc3QtPk9uZXh0ICkKLSAqCWVEc3QtPk9uZXh0
IDwtIE9MRCggZU9yZy0+T25leHQgKQotICogd2hlcmUgT0xEKC4uLikgbWVhbnMgdGhlIHZhbHVl
IGJlZm9yZSB0aGUgbWVzaFNwbGljZSBvcGVyYXRpb24uCi0gKgotICogVGhpcyBjYW4gaGF2ZSB0
d28gZWZmZWN0cyBvbiB0aGUgdmVydGV4IHN0cnVjdHVyZToKLSAqICAtIGlmIGVPcmctPk9yZyAh
PSBlRHN0LT5PcmcsIHRoZSB0d28gdmVydGljZXMgYXJlIG1lcmdlZCB0b2dldGhlcgotICogIC0g
aWYgZU9yZy0+T3JnID09IGVEc3QtPk9yZywgdGhlIG9yaWdpbiBpcyBzcGxpdCBpbnRvIHR3byB2
ZXJ0aWNlcwotICogSW4gYm90aCBjYXNlcywgZURzdC0+T3JnIGlzIGNoYW5nZWQgYW5kIGVPcmct
Pk9yZyBpcyB1bnRvdWNoZWQuCi0gKgotICogU2ltaWxhcmx5IChhbmQgaW5kZXBlbmRlbnRseSkg
Zm9yIHRoZSBmYWNlIHN0cnVjdHVyZSwKLSAqICAtIGlmIGVPcmctPkxmYWNlID09IGVEc3QtPkxm
YWNlLCBvbmUgbG9vcCBpcyBzcGxpdCBpbnRvIHR3bwotICogIC0gaWYgZU9yZy0+TGZhY2UgIT0g
ZURzdC0+TGZhY2UsIHR3byBkaXN0aW5jdCBsb29wcyBhcmUgam9pbmVkIGludG8gb25lCi0gKiBJ
biBib3RoIGNhc2VzLCBlRHN0LT5MZmFjZSBpcyBjaGFuZ2VkIGFuZCBlT3JnLT5MZmFjZSBpcyB1
bmFmZmVjdGVkLgotICoKLSAqIFNvbWUgc3BlY2lhbCBjYXNlczoKLSAqIElmIGVEc3QgPT0gZU9y
ZywgdGhlIG9wZXJhdGlvbiBoYXMgbm8gZWZmZWN0LgotICogSWYgZURzdCA9PSBlT3JnLT5MbmV4
dCwgdGhlIG5ldyBmYWNlIHdpbGwgaGF2ZSBhIHNpbmdsZSBlZGdlLgotICogSWYgZURzdCA9PSBl
T3JnLT5McHJldiwgdGhlIG9sZCBmYWNlIHdpbGwgaGF2ZSBhIHNpbmdsZSBlZGdlLgotICogSWYg
ZURzdCA9PSBlT3JnLT5PbmV4dCwgdGhlIG5ldyB2ZXJ0ZXggd2lsbCBoYXZlIGEgc2luZ2xlIGVk
Z2UuCi0gKiBJZiBlRHN0ID09IGVPcmctPk9wcmV2LCB0aGUgb2xkIHZlcnRleCB3aWxsIGhhdmUg
YSBzaW5nbGUgZWRnZS4KLSAqLwotaW50IF9fZ2xfbWVzaFNwbGljZSggR0xVaGFsZkVkZ2UgKmVP
cmcsIEdMVWhhbGZFZGdlICplRHN0ICkKLXsKLSAgaW50IGpvaW5pbmdMb29wcyA9IEZBTFNFOwot
ICBpbnQgam9pbmluZ1ZlcnRpY2VzID0gRkFMU0U7Ci0KLSAgaWYoIGVPcmcgPT0gZURzdCApIHJl
dHVybiAxOwotCi0gIGlmKCBlRHN0LT5PcmcgIT0gZU9yZy0+T3JnICkgewotICAgIC8qIFdlIGFy
ZSBtZXJnaW5nIHR3byBkaXNqb2ludCB2ZXJ0aWNlcyAtLSBkZXN0cm95IGVEc3QtPk9yZyAqLwot
ICAgIGpvaW5pbmdWZXJ0aWNlcyA9IFRSVUU7Ci0gICAgS2lsbFZlcnRleCggZURzdC0+T3JnLCBl
T3JnLT5PcmcgKTsKLSAgfQotICBpZiggZURzdC0+TGZhY2UgIT0gZU9yZy0+TGZhY2UgKSB7Ci0g
ICAgLyogV2UgYXJlIGNvbm5lY3RpbmcgdHdvIGRpc2pvaW50IGxvb3BzIC0tIGRlc3Ryb3kgZURz
dC0+TGZhY2UgKi8KLSAgICBqb2luaW5nTG9vcHMgPSBUUlVFOwotICAgIEtpbGxGYWNlKCBlRHN0
LT5MZmFjZSwgZU9yZy0+TGZhY2UgKTsKLSAgfQotCi0gIC8qIENoYW5nZSB0aGUgZWRnZSBzdHJ1
Y3R1cmUgKi8KLSAgU3BsaWNlKCBlRHN0LCBlT3JnICk7Ci0KLSAgaWYoICEgam9pbmluZ1ZlcnRp
Y2VzICkgewotICAgIEdMVXZlcnRleCAqbmV3VmVydGV4PSBhbGxvY1ZlcnRleCgpOwotICAgIGlm
IChuZXdWZXJ0ZXggPT0gTlVMTCkgcmV0dXJuIDA7Ci0KLSAgICAvKiBXZSBzcGxpdCBvbmUgdmVy
dGV4IGludG8gdHdvIC0tIHRoZSBuZXcgdmVydGV4IGlzIGVEc3QtPk9yZy4KLSAgICAgKiBNYWtl
IHN1cmUgdGhlIG9sZCB2ZXJ0ZXggcG9pbnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdlLgotICAgICAq
LwotICAgIE1ha2VWZXJ0ZXgoIG5ld1ZlcnRleCwgZURzdCwgZU9yZy0+T3JnICk7Ci0gICAgZU9y
Zy0+T3JnLT5hbkVkZ2UgPSBlT3JnOwotICB9Ci0gIGlmKCAhIGpvaW5pbmdMb29wcyApIHsKLSAg
ICBHTFVmYWNlICpuZXdGYWNlPSBhbGxvY0ZhY2UoKTsgIAotICAgIGlmIChuZXdGYWNlID09IE5V
TEwpIHJldHVybiAwOwotCi0gICAgLyogV2Ugc3BsaXQgb25lIGxvb3AgaW50byB0d28gLS0gdGhl
IG5ldyBsb29wIGlzIGVEc3QtPkxmYWNlLgotICAgICAqIE1ha2Ugc3VyZSB0aGUgb2xkIGZhY2Ug
cG9pbnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdlLgotICAgICAqLwotICAgIE1ha2VGYWNlKCBuZXdG
YWNlLCBlRHN0LCBlT3JnLT5MZmFjZSApOwotICAgIGVPcmctPkxmYWNlLT5hbkVkZ2UgPSBlT3Jn
OwotICB9Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotLyogX19nbF9tZXNoRGVsZXRlKCBlRGVsICkg
cmVtb3ZlcyB0aGUgZWRnZSBlRGVsLiAgVGhlcmUgYXJlIHNldmVyYWwgY2FzZXM6Ci0gKiBpZiAo
ZURlbC0+TGZhY2UgIT0gZURlbC0+UmZhY2UpLCB3ZSBqb2luIHR3byBsb29wcyBpbnRvIG9uZTsg
dGhlIGxvb3AKLSAqIGVEZWwtPkxmYWNlIGlzIGRlbGV0ZWQuICBPdGhlcndpc2UsIHdlIGFyZSBz
cGxpdHRpbmcgb25lIGxvb3AgaW50byB0d287Ci0gKiB0aGUgbmV3bHkgY3JlYXRlZCBsb29wIHdp
bGwgY29udGFpbiBlRGVsLT5Ec3QuICBJZiB0aGUgZGVsZXRpb24gb2YgZURlbAotICogd291bGQg
Y3JlYXRlIGlzb2xhdGVkIHZlcnRpY2VzLCB0aG9zZSBhcmUgZGVsZXRlZCBhcyB3ZWxsLgotICoK
LSAqIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgaW1wbGVtZW50ZWQgYXMgdHdvIGNhbGxzIHRvIF9f
Z2xfbWVzaFNwbGljZQotICogcGx1cyBhIGZldyBjYWxscyB0byBtZW1GcmVlLCBidXQgdGhpcyB3
b3VsZCBhbGxvY2F0ZSBhbmQgZGVsZXRlCi0gKiB1bm5lY2Vzc2FyeSB2ZXJ0aWNlcyBhbmQgZmFj
ZXMuCi0gKi8KLWludCBfX2dsX21lc2hEZWxldGUoIEdMVWhhbGZFZGdlICplRGVsICkKLXsKLSAg
R0xVaGFsZkVkZ2UgKmVEZWxTeW0gPSBlRGVsLT5TeW07Ci0gIGludCBqb2luaW5nTG9vcHMgPSBG
QUxTRTsKLQotICAvKiBGaXJzdCBzdGVwOiBkaXNjb25uZWN0IHRoZSBvcmlnaW4gdmVydGV4IGVE
ZWwtPk9yZy4gIFdlIG1ha2UgYWxsCi0gICAqIGNoYW5nZXMgdG8gZ2V0IGEgY29uc2lzdGVudCBt
ZXNoIGluIHRoaXMgImludGVybWVkaWF0ZSIgc3RhdGUuCi0gICAqLwotICBpZiggZURlbC0+TGZh
Y2UgIT0gZURlbC0+UmZhY2UgKSB7Ci0gICAgLyogV2UgYXJlIGpvaW5pbmcgdHdvIGxvb3BzIGlu
dG8gb25lIC0tIHJlbW92ZSB0aGUgbGVmdCBmYWNlICovCi0gICAgam9pbmluZ0xvb3BzID0gVFJV
RTsKLSAgICBLaWxsRmFjZSggZURlbC0+TGZhY2UsIGVEZWwtPlJmYWNlICk7Ci0gIH0KLQotICBp
ZiggZURlbC0+T25leHQgPT0gZURlbCApIHsKLSAgICBLaWxsVmVydGV4KCBlRGVsLT5PcmcsIE5V
TEwgKTsKLSAgfSBlbHNlIHsKLSAgICAvKiBNYWtlIHN1cmUgdGhhdCBlRGVsLT5PcmcgYW5kIGVE
ZWwtPlJmYWNlIHBvaW50IHRvIHZhbGlkIGhhbGYtZWRnZXMgKi8KLSAgICBlRGVsLT5SZmFjZS0+
YW5FZGdlID0gZURlbC0+T3ByZXY7Ci0gICAgZURlbC0+T3JnLT5hbkVkZ2UgPSBlRGVsLT5PbmV4
dDsKLQotICAgIFNwbGljZSggZURlbCwgZURlbC0+T3ByZXYgKTsKLSAgICBpZiggISBqb2luaW5n
TG9vcHMgKSB7Ci0gICAgICBHTFVmYWNlICpuZXdGYWNlPSBhbGxvY0ZhY2UoKTsKLSAgICAgIGlm
IChuZXdGYWNlID09IE5VTEwpIHJldHVybiAwOyAKLQotICAgICAgLyogV2UgYXJlIHNwbGl0dGlu
ZyBvbmUgbG9vcCBpbnRvIHR3byAtLSBjcmVhdGUgYSBuZXcgbG9vcCBmb3IgZURlbC4gKi8KLSAg
ICAgIE1ha2VGYWNlKCBuZXdGYWNlLCBlRGVsLCBlRGVsLT5MZmFjZSApOwotICAgIH0KLSAgfQot
Ci0gIC8qIENsYWltOiB0aGUgbWVzaCBpcyBub3cgaW4gYSBjb25zaXN0ZW50IHN0YXRlLCBleGNl
cHQgdGhhdCBlRGVsLT5PcmcKLSAgICogbWF5IGhhdmUgYmVlbiBkZWxldGVkLiAgTm93IHdlIGRp
c2Nvbm5lY3QgZURlbC0+RHN0LgotICAgKi8KLSAgaWYoIGVEZWxTeW0tPk9uZXh0ID09IGVEZWxT
eW0gKSB7Ci0gICAgS2lsbFZlcnRleCggZURlbFN5bS0+T3JnLCBOVUxMICk7Ci0gICAgS2lsbEZh
Y2UoIGVEZWxTeW0tPkxmYWNlLCBOVUxMICk7Ci0gIH0gZWxzZSB7Ci0gICAgLyogTWFrZSBzdXJl
IHRoYXQgZURlbC0+RHN0IGFuZCBlRGVsLT5MZmFjZSBwb2ludCB0byB2YWxpZCBoYWxmLWVkZ2Vz
ICovCi0gICAgZURlbC0+TGZhY2UtPmFuRWRnZSA9IGVEZWxTeW0tPk9wcmV2OwotICAgIGVEZWxT
eW0tPk9yZy0+YW5FZGdlID0gZURlbFN5bS0+T25leHQ7Ci0gICAgU3BsaWNlKCBlRGVsU3ltLCBl
RGVsU3ltLT5PcHJldiApOwotICB9Ci0KLSAgLyogQW55IGlzb2xhdGVkIHZlcnRpY2VzIG9yIGZh
Y2VzIGhhdmUgYWxyZWFkeSBiZWVuIGZyZWVkLiAqLwotICBLaWxsRWRnZSggZURlbCApOwotCi0g
IHJldHVybiAxOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKiBPdGhlciBFZGdlIE9wZXJh
dGlvbnMgKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQWxsIHRoZXNlIHJvdXRpbmVzIGNh
biBiZSBpbXBsZW1lbnRlZCB3aXRoIHRoZSBiYXNpYyBlZGdlCi0gKiBvcGVyYXRpb25zIGFib3Zl
LiAgVGhleSBhcmUgcHJvdmlkZWQgZm9yIGNvbnZlbmllbmNlIGFuZCBlZmZpY2llbmN5LgotICov
Ci0KLQotLyogX19nbF9tZXNoQWRkRWRnZVZlcnRleCggZU9yZyApIGNyZWF0ZXMgYSBuZXcgZWRn
ZSBlTmV3IHN1Y2ggdGhhdAotICogZU5ldyA9PSBlT3JnLT5MbmV4dCwgYW5kIGVOZXctPkRzdCBp
cyBhIG5ld2x5IGNyZWF0ZWQgdmVydGV4LgotICogZU9yZyBhbmQgZU5ldyB3aWxsIGhhdmUgdGhl
IHNhbWUgbGVmdCBmYWNlLgotICovCi1HTFVoYWxmRWRnZSAqX19nbF9tZXNoQWRkRWRnZVZlcnRl
eCggR0xVaGFsZkVkZ2UgKmVPcmcgKQotewotICBHTFVoYWxmRWRnZSAqZU5ld1N5bTsKLSAgR0xV
aGFsZkVkZ2UgKmVOZXcgPSBNYWtlRWRnZSggZU9yZyApOwotICBpZiAoZU5ldyA9PSBOVUxMKSBy
ZXR1cm4gTlVMTDsKLQotICBlTmV3U3ltID0gZU5ldy0+U3ltOwotCi0gIC8qIENvbm5lY3QgdGhl
IG5ldyBlZGdlIGFwcHJvcHJpYXRlbHkgKi8KLSAgU3BsaWNlKCBlTmV3LCBlT3JnLT5MbmV4dCAp
OwotCi0gIC8qIFNldCB0aGUgdmVydGV4IGFuZCBmYWNlIGluZm9ybWF0aW9uICovCi0gIGVOZXct
Pk9yZyA9IGVPcmctPkRzdDsKLSAgewotICAgIEdMVXZlcnRleCAqbmV3VmVydGV4PSBhbGxvY1Zl
cnRleCgpOwotICAgIGlmIChuZXdWZXJ0ZXggPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0KLSAgICBN
YWtlVmVydGV4KCBuZXdWZXJ0ZXgsIGVOZXdTeW0sIGVOZXctPk9yZyApOwotICB9Ci0gIGVOZXct
PkxmYWNlID0gZU5ld1N5bS0+TGZhY2UgPSBlT3JnLT5MZmFjZTsKLQotICByZXR1cm4gZU5ldzsK
LX0KLQotCi0vKiBfX2dsX21lc2hTcGxpdEVkZ2UoIGVPcmcgKSBzcGxpdHMgZU9yZyBpbnRvIHR3
byBlZGdlcyBlT3JnIGFuZCBlTmV3LAotICogc3VjaCB0aGF0IGVOZXcgPT0gZU9yZy0+TG5leHQu
ICBUaGUgbmV3IHZlcnRleCBpcyBlT3JnLT5Ec3QgPT0gZU5ldy0+T3JnLgotICogZU9yZyBhbmQg
ZU5ldyB3aWxsIGhhdmUgdGhlIHNhbWUgbGVmdCBmYWNlLgotICovCi1HTFVoYWxmRWRnZSAqX19n
bF9tZXNoU3BsaXRFZGdlKCBHTFVoYWxmRWRnZSAqZU9yZyApCi17Ci0gIEdMVWhhbGZFZGdlICpl
TmV3OwotICBHTFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hBZGRFZGdlVmVydGV4
KCBlT3JnICk7Ci0gIGlmICh0ZW1wSGFsZkVkZ2UgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0KLSAg
ZU5ldyA9IHRlbXBIYWxmRWRnZS0+U3ltOwotCi0gIC8qIERpc2Nvbm5lY3QgZU9yZyBmcm9tIGVP
cmctPkRzdCBhbmQgY29ubmVjdCBpdCB0byBlTmV3LT5PcmcgKi8KLSAgU3BsaWNlKCBlT3JnLT5T
eW0sIGVPcmctPlN5bS0+T3ByZXYgKTsKLSAgU3BsaWNlKCBlT3JnLT5TeW0sIGVOZXcgKTsKLQot
ICAvKiBTZXQgdGhlIHZlcnRleCBhbmQgZmFjZSBpbmZvcm1hdGlvbiAqLwotICBlT3JnLT5Ec3Qg
PSBlTmV3LT5Pcmc7Ci0gIGVOZXctPkRzdC0+YW5FZGdlID0gZU5ldy0+U3ltOwkvKiBtYXkgaGF2
ZSBwb2ludGVkIHRvIGVPcmctPlN5bSAqLwotICBlTmV3LT5SZmFjZSA9IGVPcmctPlJmYWNlOwot
ICBlTmV3LT53aW5kaW5nID0gZU9yZy0+d2luZGluZzsJLyogY29weSBvbGQgd2luZGluZyBpbmZv
cm1hdGlvbiAqLwotICBlTmV3LT5TeW0tPndpbmRpbmcgPSBlT3JnLT5TeW0tPndpbmRpbmc7Ci0K
LSAgcmV0dXJuIGVOZXc7Ci19Ci0KLQotLyogX19nbF9tZXNoQ29ubmVjdCggZU9yZywgZURzdCAp
IGNyZWF0ZXMgYSBuZXcgZWRnZSBmcm9tIGVPcmctPkRzdAotICogdG8gZURzdC0+T3JnLCBhbmQg
cmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBoYWxmLWVkZ2UgZU5ldy4KLSAqIElmIGVPcmctPkxm
YWNlID09IGVEc3QtPkxmYWNlLCB0aGlzIHNwbGl0cyBvbmUgbG9vcCBpbnRvIHR3bywKLSAqIGFu
ZCB0aGUgbmV3bHkgY3JlYXRlZCBsb29wIGlzIGVOZXctPkxmYWNlLiAgT3RoZXJ3aXNlLCB0d28g
ZGlzam9pbnQKLSAqIGxvb3BzIGFyZSBtZXJnZWQgaW50byBvbmUsIGFuZCB0aGUgbG9vcCBlRHN0
LT5MZmFjZSBpcyBkZXN0cm95ZWQuCi0gKgotICogSWYgKGVPcmcgPT0gZURzdCksIHRoZSBuZXcg
ZmFjZSB3aWxsIGhhdmUgb25seSB0d28gZWRnZXMuCi0gKiBJZiAoZU9yZy0+TG5leHQgPT0gZURz
dCksIHRoZSBvbGQgZmFjZSBpcyByZWR1Y2VkIHRvIGEgc2luZ2xlIGVkZ2UuCi0gKiBJZiAoZU9y
Zy0+TG5leHQtPkxuZXh0ID09IGVEc3QpLCB0aGUgb2xkIGZhY2UgaXMgcmVkdWNlZCB0byB0d28g
ZWRnZXMuCi0gKi8KLUdMVWhhbGZFZGdlICpfX2dsX21lc2hDb25uZWN0KCBHTFVoYWxmRWRnZSAq
ZU9yZywgR0xVaGFsZkVkZ2UgKmVEc3QgKQotewotICBHTFVoYWxmRWRnZSAqZU5ld1N5bTsKLSAg
aW50IGpvaW5pbmdMb29wcyA9IEZBTFNFOyAgCi0gIEdMVWhhbGZFZGdlICplTmV3ID0gTWFrZUVk
Z2UoIGVPcmcgKTsKLSAgaWYgKGVOZXcgPT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0KLSAgZU5ld1N5
bSA9IGVOZXctPlN5bTsKLQotICBpZiggZURzdC0+TGZhY2UgIT0gZU9yZy0+TGZhY2UgKSB7Ci0g
ICAgLyogV2UgYXJlIGNvbm5lY3RpbmcgdHdvIGRpc2pvaW50IGxvb3BzIC0tIGRlc3Ryb3kgZURz
dC0+TGZhY2UgKi8KLSAgICBqb2luaW5nTG9vcHMgPSBUUlVFOwotICAgIEtpbGxGYWNlKCBlRHN0
LT5MZmFjZSwgZU9yZy0+TGZhY2UgKTsKLSAgfQotCi0gIC8qIENvbm5lY3QgdGhlIG5ldyBlZGdl
IGFwcHJvcHJpYXRlbHkgKi8KLSAgU3BsaWNlKCBlTmV3LCBlT3JnLT5MbmV4dCApOwotICBTcGxp
Y2UoIGVOZXdTeW0sIGVEc3QgKTsKLQotICAvKiBTZXQgdGhlIHZlcnRleCBhbmQgZmFjZSBpbmZv
cm1hdGlvbiAqLwotICBlTmV3LT5PcmcgPSBlT3JnLT5Ec3Q7Ci0gIGVOZXdTeW0tPk9yZyA9IGVE
c3QtPk9yZzsKLSAgZU5ldy0+TGZhY2UgPSBlTmV3U3ltLT5MZmFjZSA9IGVPcmctPkxmYWNlOwot
Ci0gIC8qIE1ha2Ugc3VyZSB0aGUgb2xkIGZhY2UgcG9pbnRzIHRvIGEgdmFsaWQgaGFsZi1lZGdl
ICovCi0gIGVPcmctPkxmYWNlLT5hbkVkZ2UgPSBlTmV3U3ltOwotCi0gIGlmKCAhIGpvaW5pbmdM
b29wcyApIHsKLSAgICBHTFVmYWNlICpuZXdGYWNlPSBhbGxvY0ZhY2UoKTsKLSAgICBpZiAobmV3
RmFjZSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKLQotICAgIC8qIFdlIHNwbGl0IG9uZSBsb29wIGlu
dG8gdHdvIC0tIHRoZSBuZXcgbG9vcCBpcyBlTmV3LT5MZmFjZSAqLwotICAgIE1ha2VGYWNlKCBu
ZXdGYWNlLCBlTmV3LCBlT3JnLT5MZmFjZSApOwotICB9Ci0gIHJldHVybiBlTmV3OwotfQotCi0K
LS8qKioqKioqKioqKioqKioqKioqKiBPdGhlciBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioq
KioqKiovCi0KLS8qIF9fZ2xfbWVzaFphcEZhY2UoIGZaYXAgKSBkZXN0cm95cyBhIGZhY2UgYW5k
IHJlbW92ZXMgaXQgZnJvbSB0aGUKLSAqIGdsb2JhbCBmYWNlIGxpc3QuICBBbGwgZWRnZXMgb2Yg
ZlphcCB3aWxsIGhhdmUgYSBOVUxMIHBvaW50ZXIgYXMgdGhlaXIKLSAqIGxlZnQgZmFjZS4gIEFu
eSBlZGdlcyB3aGljaCBhbHNvIGhhdmUgYSBOVUxMIHBvaW50ZXIgYXMgdGhlaXIgcmlnaHQgZmFj
ZQotICogYXJlIGRlbGV0ZWQgZW50aXJlbHkgKGFsb25nIHdpdGggYW55IGlzb2xhdGVkIHZlcnRp
Y2VzIHRoaXMgcHJvZHVjZXMpLgotICogQW4gZW50aXJlIG1lc2ggY2FuIGJlIGRlbGV0ZWQgYnkg
emFwcGluZyBpdHMgZmFjZXMsIG9uZSBhdCBhIHRpbWUsCi0gKiBpbiBhbnkgb3JkZXIuICBaYXBw
ZWQgZmFjZXMgY2Fubm90IGJlIHVzZWQgaW4gZnVydGhlciBtZXNoIG9wZXJhdGlvbnMhCi0gKi8K
LXZvaWQgX19nbF9tZXNoWmFwRmFjZSggR0xVZmFjZSAqZlphcCApCi17Ci0gIEdMVWhhbGZFZGdl
ICplU3RhcnQgPSBmWmFwLT5hbkVkZ2U7Ci0gIEdMVWhhbGZFZGdlICplLCAqZU5leHQsICplU3lt
OwotICBHTFVmYWNlICpmUHJldiwgKmZOZXh0OwotCi0gIC8qIHdhbGsgYXJvdW5kIGZhY2UsIGRl
bGV0aW5nIGVkZ2VzIHdob3NlIHJpZ2h0IGZhY2UgaXMgYWxzbyBOVUxMICovCi0gIGVOZXh0ID0g
ZVN0YXJ0LT5MbmV4dDsKLSAgZG8gewotICAgIGUgPSBlTmV4dDsKLSAgICBlTmV4dCA9IGUtPkxu
ZXh0OwotCi0gICAgZS0+TGZhY2UgPSBOVUxMOwotICAgIGlmKCBlLT5SZmFjZSA9PSBOVUxMICkg
ewotICAgICAgLyogZGVsZXRlIHRoZSBlZGdlIC0tIHNlZSBfX2dsX01lc2hEZWxldGUgYWJvdmUg
Ki8KLQotICAgICAgaWYoIGUtPk9uZXh0ID09IGUgKSB7Ci0JS2lsbFZlcnRleCggZS0+T3JnLCBO
VUxMICk7Ci0gICAgICB9IGVsc2UgewotCS8qIE1ha2Ugc3VyZSB0aGF0IGUtPk9yZyBwb2ludHMg
dG8gYSB2YWxpZCBoYWxmLWVkZ2UgKi8KLQllLT5PcmctPmFuRWRnZSA9IGUtPk9uZXh0OwotCVNw
bGljZSggZSwgZS0+T3ByZXYgKTsKLSAgICAgIH0KLSAgICAgIGVTeW0gPSBlLT5TeW07Ci0gICAg
ICBpZiggZVN5bS0+T25leHQgPT0gZVN5bSApIHsKLQlLaWxsVmVydGV4KCBlU3ltLT5PcmcsIE5V
TEwgKTsKLSAgICAgIH0gZWxzZSB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgZVN5bS0+T3JnIHBvaW50
cyB0byBhIHZhbGlkIGhhbGYtZWRnZSAqLwotCWVTeW0tPk9yZy0+YW5FZGdlID0gZVN5bS0+T25l
eHQ7Ci0JU3BsaWNlKCBlU3ltLCBlU3ltLT5PcHJldiApOwotICAgICAgfQotICAgICAgS2lsbEVk
Z2UoIGUgKTsKLSAgICB9Ci0gIH0gd2hpbGUoIGUgIT0gZVN0YXJ0ICk7Ci0KLSAgLyogZGVsZXRl
IGZyb20gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0ICovCi0gIGZQcmV2ID0gZlphcC0+cHJl
djsKLSAgZk5leHQgPSBmWmFwLT5uZXh0OwotICBmTmV4dC0+cHJldiA9IGZQcmV2OwotICBmUHJl
di0+bmV4dCA9IGZOZXh0OwotCi0gIG1lbUZyZWUoIGZaYXAgKTsKLX0KLQotCi0vKiBfX2dsX21l
c2hOZXdNZXNoKCkgY3JlYXRlcyBhIG5ldyBtZXNoIHdpdGggbm8gZWRnZXMsIG5vIHZlcnRpY2Vz
LAotICogYW5kIG5vIGxvb3BzICh3aGF0IHdlIHVzdWFsbHkgY2FsbCBhICJmYWNlIikuCi0gKi8K
LUdMVW1lc2ggKl9fZ2xfbWVzaE5ld01lc2goIHZvaWQgKQotewotICBHTFV2ZXJ0ZXggKnY7Ci0g
IEdMVWZhY2UgKmY7Ci0gIEdMVWhhbGZFZGdlICplOwotICBHTFVoYWxmRWRnZSAqZVN5bTsKLSAg
R0xVbWVzaCAqbWVzaCA9IChHTFVtZXNoICopbWVtQWxsb2MoIHNpemVvZiggR0xVbWVzaCApKTsK
LSAgaWYgKG1lc2ggPT0gTlVMTCkgewotICAgICByZXR1cm4gTlVMTDsKLSAgfQotICAKLSAgdiA9
ICZtZXNoLT52SGVhZDsKLSAgZiA9ICZtZXNoLT5mSGVhZDsKLSAgZSA9ICZtZXNoLT5lSGVhZDsK
LSAgZVN5bSA9ICZtZXNoLT5lSGVhZFN5bTsKLQotICB2LT5uZXh0ID0gdi0+cHJldiA9IHY7Ci0g
IHYtPmFuRWRnZSA9IE5VTEw7Ci0gIHYtPmRhdGEgPSBOVUxMOwotCi0gIGYtPm5leHQgPSBmLT5w
cmV2ID0gZjsKLSAgZi0+YW5FZGdlID0gTlVMTDsKLSAgZi0+ZGF0YSA9IE5VTEw7Ci0gIGYtPnRy
YWlsID0gTlVMTDsKLSAgZi0+bWFya2VkID0gRkFMU0U7Ci0gIGYtPmluc2lkZSA9IEZBTFNFOwot
Ci0gIGUtPm5leHQgPSBlOwotICBlLT5TeW0gPSBlU3ltOwotICBlLT5PbmV4dCA9IE5VTEw7Ci0g
IGUtPkxuZXh0ID0gTlVMTDsKLSAgZS0+T3JnID0gTlVMTDsKLSAgZS0+TGZhY2UgPSBOVUxMOwot
ICBlLT53aW5kaW5nID0gMDsKLSAgZS0+YWN0aXZlUmVnaW9uID0gTlVMTDsKLQotICBlU3ltLT5u
ZXh0ID0gZVN5bTsKLSAgZVN5bS0+U3ltID0gZTsKLSAgZVN5bS0+T25leHQgPSBOVUxMOwotICBl
U3ltLT5MbmV4dCA9IE5VTEw7Ci0gIGVTeW0tPk9yZyA9IE5VTEw7Ci0gIGVTeW0tPkxmYWNlID0g
TlVMTDsKLSAgZVN5bS0+d2luZGluZyA9IDA7Ci0gIGVTeW0tPmFjdGl2ZVJlZ2lvbiA9IE5VTEw7
Ci0KLSAgcmV0dXJuIG1lc2g7Ci19Ci0KLQotLyogX19nbF9tZXNoVW5pb24oIG1lc2gxLCBtZXNo
MiApIGZvcm1zIHRoZSB1bmlvbiBvZiBhbGwgc3RydWN0dXJlcyBpbgotICogYm90aCBtZXNoZXMs
IGFuZCByZXR1cm5zIHRoZSBuZXcgbWVzaCAodGhlIG9sZCBtZXNoZXMgYXJlIGRlc3Ryb3llZCku
Ci0gKi8KLUdMVW1lc2ggKl9fZ2xfbWVzaFVuaW9uKCBHTFVtZXNoICptZXNoMSwgR0xVbWVzaCAq
bWVzaDIgKQotewotICBHTFVmYWNlICpmMSA9ICZtZXNoMS0+ZkhlYWQ7Ci0gIEdMVXZlcnRleCAq
djEgPSAmbWVzaDEtPnZIZWFkOwotICBHTFVoYWxmRWRnZSAqZTEgPSAmbWVzaDEtPmVIZWFkOwot
ICBHTFVmYWNlICpmMiA9ICZtZXNoMi0+ZkhlYWQ7Ci0gIEdMVXZlcnRleCAqdjIgPSAmbWVzaDIt
PnZIZWFkOwotICBHTFVoYWxmRWRnZSAqZTIgPSAmbWVzaDItPmVIZWFkOwotCi0gIC8qIEFkZCB0
aGUgZmFjZXMsIHZlcnRpY2VzLCBhbmQgZWRnZXMgb2YgbWVzaDIgdG8gdGhvc2Ugb2YgbWVzaDEg
Ki8KLSAgaWYoIGYyLT5uZXh0ICE9IGYyICkgewotICAgIGYxLT5wcmV2LT5uZXh0ID0gZjItPm5l
eHQ7Ci0gICAgZjItPm5leHQtPnByZXYgPSBmMS0+cHJldjsKLSAgICBmMi0+cHJldi0+bmV4dCA9
IGYxOwotICAgIGYxLT5wcmV2ID0gZjItPnByZXY7Ci0gIH0KLQotICBpZiggdjItPm5leHQgIT0g
djIgKSB7Ci0gICAgdjEtPnByZXYtPm5leHQgPSB2Mi0+bmV4dDsKLSAgICB2Mi0+bmV4dC0+cHJl
diA9IHYxLT5wcmV2OwotICAgIHYyLT5wcmV2LT5uZXh0ID0gdjE7Ci0gICAgdjEtPnByZXYgPSB2
Mi0+cHJldjsKLSAgfQotCi0gIGlmKCBlMi0+bmV4dCAhPSBlMiApIHsKLSAgICBlMS0+U3ltLT5u
ZXh0LT5TeW0tPm5leHQgPSBlMi0+bmV4dDsKLSAgICBlMi0+bmV4dC0+U3ltLT5uZXh0ID0gZTEt
PlN5bS0+bmV4dDsKLSAgICBlMi0+U3ltLT5uZXh0LT5TeW0tPm5leHQgPSBlMTsKLSAgICBlMS0+
U3ltLT5uZXh0ID0gZTItPlN5bS0+bmV4dDsKLSAgfQotCi0gIG1lbUZyZWUoIG1lc2gyICk7Ci0g
IHJldHVybiBtZXNoMTsKLX0KLQotCi0jaWZkZWYgREVMRVRFX0JZX1pBUFBJTkcKLQotLyogX19n
bF9tZXNoRGVsZXRlTWVzaCggbWVzaCApIHdpbGwgZnJlZSBhbGwgc3RvcmFnZSBmb3IgYW55IHZh
bGlkIG1lc2guCi0gKi8KLXZvaWQgX19nbF9tZXNoRGVsZXRlTWVzaCggR0xVbWVzaCAqbWVzaCAp
Ci17Ci0gIEdMVWZhY2UgKmZIZWFkID0gJm1lc2gtPmZIZWFkOwotCi0gIHdoaWxlKCBmSGVhZC0+
bmV4dCAhPSBmSGVhZCApIHsKLSAgICBfX2dsX21lc2haYXBGYWNlKCBmSGVhZC0+bmV4dCApOwot
ICB9Ci0gIGFzc2VydCggbWVzaC0+dkhlYWQubmV4dCA9PSAmbWVzaC0+dkhlYWQgKTsKLQotICBt
ZW1GcmVlKCBtZXNoICk7Ci19Ci0KLSNlbHNlCi0KLS8qIF9fZ2xfbWVzaERlbGV0ZU1lc2goIG1l
c2ggKSB3aWxsIGZyZWUgYWxsIHN0b3JhZ2UgZm9yIGFueSB2YWxpZCBtZXNoLgotICovCi12b2lk
IF9fZ2xfbWVzaERlbGV0ZU1lc2goIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmLCAq
Zk5leHQ7Ci0gIEdMVXZlcnRleCAqdiwgKnZOZXh0OwotICBHTFVoYWxmRWRnZSAqZSwgKmVOZXh0
OwotCi0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1lc2gtPmZIZWFkOyBmID0g
Zk5leHQgKSB7Ci0gICAgZk5leHQgPSBmLT5uZXh0OwotICAgIG1lbUZyZWUoIGYgKTsKLSAgfQot
Ci0gIGZvciggdiA9IG1lc2gtPnZIZWFkLm5leHQ7IHYgIT0gJm1lc2gtPnZIZWFkOyB2ID0gdk5l
eHQgKSB7Ci0gICAgdk5leHQgPSB2LT5uZXh0OwotICAgIG1lbUZyZWUoIHYgKTsKLSAgfQotCi0g
IGZvciggZSA9IG1lc2gtPmVIZWFkLm5leHQ7IGUgIT0gJm1lc2gtPmVIZWFkOyBlID0gZU5leHQg
KSB7Ci0gICAgLyogT25lIGNhbGwgZnJlZXMgYm90aCBlIGFuZCBlLT5TeW0gKHNlZSBFZGdlUGFp
ciBhYm92ZSkgKi8KLSAgICBlTmV4dCA9IGUtPm5leHQ7Ci0gICAgbWVtRnJlZSggZSApOwotICB9
Ci0KLSAgbWVtRnJlZSggbWVzaCApOwotfQotCi0jZW5kaWYKLQotI2lmbmRlZiBOREVCVUcKLQot
LyogX19nbF9tZXNoQ2hlY2tNZXNoKCBtZXNoICkgY2hlY2tzIGEgbWVzaCBmb3Igc2VsZi1jb25z
aXN0ZW5jeS4KLSAqLwotdm9pZCBfX2dsX21lc2hDaGVja01lc2goIEdMVW1lc2ggKm1lc2ggKQot
ewotICBHTFVmYWNlICpmSGVhZCA9ICZtZXNoLT5mSGVhZDsKLSAgR0xVdmVydGV4ICp2SGVhZCA9
ICZtZXNoLT52SGVhZDsKLSAgR0xVaGFsZkVkZ2UgKmVIZWFkID0gJm1lc2gtPmVIZWFkOwotICBH
TFVmYWNlICpmLCAqZlByZXY7Ci0gIEdMVXZlcnRleCAqdiwgKnZQcmV2OwotICBHTFVoYWxmRWRn
ZSAqZSwgKmVQcmV2OwotCi0gIGZQcmV2ID0gZkhlYWQ7Ci0gIGZvciggZlByZXYgPSBmSGVhZCA7
IChmID0gZlByZXYtPm5leHQpICE9IGZIZWFkOyBmUHJldiA9IGYpIHsKLSAgICBhc3NlcnQoIGYt
PnByZXYgPT0gZlByZXYgKTsKLSAgICBlID0gZi0+YW5FZGdlOwotICAgIGRvIHsKLSAgICAgIGFz
c2VydCggZS0+U3ltICE9IGUgKTsKLSAgICAgIGFzc2VydCggZS0+U3ltLT5TeW0gPT0gZSApOwot
ICAgICAgYXNzZXJ0KCBlLT5MbmV4dC0+T25leHQtPlN5bSA9PSBlICk7Ci0gICAgICBhc3NlcnQo
IGUtPk9uZXh0LT5TeW0tPkxuZXh0ID09IGUgKTsKLSAgICAgIGFzc2VydCggZS0+TGZhY2UgPT0g
ZiApOwotICAgICAgZSA9IGUtPkxuZXh0OwotICAgIH0gd2hpbGUoIGUgIT0gZi0+YW5FZGdlICk7
Ci0gIH0KLSAgYXNzZXJ0KCBmLT5wcmV2ID09IGZQcmV2ICYmIGYtPmFuRWRnZSA9PSBOVUxMICYm
IGYtPmRhdGEgPT0gTlVMTCApOwotCi0gIHZQcmV2ID0gdkhlYWQ7Ci0gIGZvciggdlByZXYgPSB2
SGVhZCA7ICh2ID0gdlByZXYtPm5leHQpICE9IHZIZWFkOyB2UHJldiA9IHYpIHsKLSAgICBhc3Nl
cnQoIHYtPnByZXYgPT0gdlByZXYgKTsKLSAgICBlID0gdi0+YW5FZGdlOwotICAgIGRvIHsKLSAg
ICAgIGFzc2VydCggZS0+U3ltICE9IGUgKTsKLSAgICAgIGFzc2VydCggZS0+U3ltLT5TeW0gPT0g
ZSApOwotICAgICAgYXNzZXJ0KCBlLT5MbmV4dC0+T25leHQtPlN5bSA9PSBlICk7Ci0gICAgICBh
c3NlcnQoIGUtPk9uZXh0LT5TeW0tPkxuZXh0ID09IGUgKTsKLSAgICAgIGFzc2VydCggZS0+T3Jn
ID09IHYgKTsKLSAgICAgIGUgPSBlLT5PbmV4dDsKLSAgICB9IHdoaWxlKCBlICE9IHYtPmFuRWRn
ZSApOwotICB9Ci0gIGFzc2VydCggdi0+cHJldiA9PSB2UHJldiAmJiB2LT5hbkVkZ2UgPT0gTlVM
TCAmJiB2LT5kYXRhID09IE5VTEwgKTsKLQotICBlUHJldiA9IGVIZWFkOwotICBmb3IoIGVQcmV2
ID0gZUhlYWQgOyAoZSA9IGVQcmV2LT5uZXh0KSAhPSBlSGVhZDsgZVByZXYgPSBlKSB7Ci0gICAg
YXNzZXJ0KCBlLT5TeW0tPm5leHQgPT0gZVByZXYtPlN5bSApOwotICAgIGFzc2VydCggZS0+U3lt
ICE9IGUgKTsKLSAgICBhc3NlcnQoIGUtPlN5bS0+U3ltID09IGUgKTsKLSAgICBhc3NlcnQoIGUt
Pk9yZyAhPSBOVUxMICk7Ci0gICAgYXNzZXJ0KCBlLT5Ec3QgIT0gTlVMTCApOwotICAgIGFzc2Vy
dCggZS0+TG5leHQtPk9uZXh0LT5TeW0gPT0gZSApOwotICAgIGFzc2VydCggZS0+T25leHQtPlN5
bS0+TG5leHQgPT0gZSApOwotICB9Ci0gIGFzc2VydCggZS0+U3ltLT5uZXh0ID09IGVQcmV2LT5T
eW0KLSAgICAgICAmJiBlLT5TeW0gPT0gJm1lc2gtPmVIZWFkU3ltCi0gICAgICAgJiYgZS0+U3lt
LT5TeW0gPT0gZQotICAgICAgICYmIGUtPk9yZyA9PSBOVUxMICYmIGUtPkRzdCA9PSBOVUxMCi0g
ICAgICAgJiYgZS0+TGZhY2UgPT0gTlVMTCAmJiBlLT5SZmFjZSA9PSBOVUxMICk7Ci19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oIGIv
U291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBhOTJkZTBlOTYzYWFmYjgyMGQxM2NiMjc3MWIxODY2YTNhYTkwMmRmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2dsdS9saWJ0ZXNzL21lc2guaAorKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0v
KgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9u
cyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGlj
ZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIs
IFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZp
bGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91
IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxp
Y29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0
aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiog
Ci0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0
LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVk
IG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdB
UlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9V
VCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBP
RiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0q
KiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmln
aW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRh
dGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVs
b3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBD
b3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmln
aHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0
ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFk
ZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBp
bnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUg
T3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNw
ZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsg
VGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0q
KiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNz
IHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQg
T2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhl
IE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlz
aGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJl
aW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lm
aWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0Lgot
KioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xp
Yi9nbHUvbGlidGVzcy9tZXNoLmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fbWVzaF9oXwotI2RlZmlu
ZSBfX21lc2hfaF8KLQotI2luY2x1ZGUgPGludGVybmFsX2dsdS5oPgotCi10eXBlZGVmIHN0cnVj
dCBHTFVtZXNoIEdMVW1lc2g7IAotCi10eXBlZGVmIHN0cnVjdCBHTFV2ZXJ0ZXggR0xVdmVydGV4
OwotdHlwZWRlZiBzdHJ1Y3QgR0xVZmFjZSBHTFVmYWNlOwotdHlwZWRlZiBzdHJ1Y3QgR0xVaGFs
ZkVkZ2UgR0xVaGFsZkVkZ2U7Ci0KLXR5cGVkZWYgc3RydWN0IEFjdGl2ZVJlZ2lvbiBBY3RpdmVS
ZWdpb247CS8qIEludGVybmFsIGRhdGEgKi8KLQotLyogVGhlIG1lc2ggc3RydWN0dXJlIGlzIHNp
bWlsYXIgaW4gc3Bpcml0LCBub3RhdGlvbiwgYW5kIG9wZXJhdGlvbnMKLSAqIHRvIHRoZSAicXVh
ZC1lZGdlIiBzdHJ1Y3R1cmUgKHNlZSBMLiBHdWliYXMgYW5kIEouIFN0b2xmaSwgUHJpbWl0aXZl
cwotICogZm9yIHRoZSBtYW5pcHVsYXRpb24gb2YgZ2VuZXJhbCBzdWJkaXZpc2lvbnMgYW5kIHRo
ZSBjb21wdXRhdGlvbiBvZgotICogVm9yb25vaSBkaWFncmFtcywgQUNNIFRyYW5zYWN0aW9ucyBv
biBHcmFwaGljcywgNCgyKTo3NC0xMjMsIEFwcmlsIDE5ODUpLgotICogRm9yIGEgc2ltcGxpZmll
ZCBkZXNjcmlwdGlvbiwgc2VlIHRoZSBjb3Vyc2Ugbm90ZXMgZm9yIENTMzQ4YSwKLSAqICJNYXRo
ZW1hdGljYWwgRm91bmRhdGlvbnMgb2YgQ29tcHV0ZXIgR3JhcGhpY3MiLCBhdmFpbGFibGUgYXQg
dGhlCi0gKiBTdGFuZm9yZCBib29rc3RvcmUgKGFuZCB0YXVnaHQgZHVyaW5nIHRoZSBmYWxsIHF1
YXJ0ZXIpLgotICogVGhlIGltcGxlbWVudGF0aW9uIGFsc28gYm9ycm93cyBhIHRpbnkgc3Vic2V0
IG9mIHRoZSBncmFwaC1iYXNlZCBhcHByb2FjaAotICogdXNlIGluIE1hbnR5bGEncyBHZW9tZXRy
aWMgV29yayBCZW5jaCAoc2VlIE0uIE1hbnR5bGEsIEFuIEludHJvZHVjdGlvbgotICogdG8gU29s
ZCBNb2RlbGluZywgQ29tcHV0ZXIgU2NpZW5jZSBQcmVzcywgUm9ja3ZpbGxlLCBNYXJ5bGFuZCwg
MTk4OCkuCi0gKgotICogVGhlIGZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlIGlzIHRoZSAiaGFs
Zi1lZGdlIi4gIFR3byBoYWxmLWVkZ2VzCi0gKiBnbyB0b2dldGhlciB0byBtYWtlIGFuIGVkZ2Us
IGJ1dCB0aGV5IHBvaW50IGluIG9wcG9zaXRlIGRpcmVjdGlvbnMuCi0gKiBFYWNoIGhhbGYtZWRn
ZSBoYXMgYSBwb2ludGVyIHRvIGl0cyBtYXRlICh0aGUgInN5bW1ldHJpYyIgaGFsZi1lZGdlIFN5
bSksCi0gKiBpdHMgb3JpZ2luIHZlcnRleCAoT3JnKSwgdGhlIGZhY2Ugb24gaXRzIGxlZnQgc2lk
ZSAoTGZhY2UpLCBhbmQgdGhlCi0gKiBhZGphY2VudCBoYWxmLWVkZ2VzIGluIHRoZSBDQ1cgZGly
ZWN0aW9uIGFyb3VuZCB0aGUgb3JpZ2luIHZlcnRleAotICogKE9uZXh0KSBhbmQgYXJvdW5kIHRo
ZSBsZWZ0IGZhY2UgKExuZXh0KS4gIFRoZXJlIGlzIGFsc28gYSAibmV4dCIKLSAqIHBvaW50ZXIg
Zm9yIHRoZSBnbG9iYWwgZWRnZSBsaXN0IChzZWUgYmVsb3cpLgotICoKLSAqIFRoZSBub3RhdGlv
biB1c2VkIGZvciBtZXNoIG5hdmlnYXRpb246Ci0gKglTeW0gICA9IHRoZSBtYXRlIG9mIGEgaGFs
Zi1lZGdlIChzYW1lIGVkZ2UsIGJ1dCBvcHBvc2l0ZSBkaXJlY3Rpb24pCi0gKglPbmV4dCA9IGVk
Z2UgQ0NXIGFyb3VuZCBvcmlnaW4gdmVydGV4IChrZWVwIHNhbWUgb3JpZ2luKQotICoJRG5leHQg
PSBlZGdlIENDVyBhcm91bmQgZGVzdGluYXRpb24gdmVydGV4IChrZWVwIHNhbWUgZGVzdCkKLSAq
CUxuZXh0ID0gZWRnZSBDQ1cgYXJvdW5kIGxlZnQgZmFjZSAoZGVzdCBiZWNvbWVzIG5ldyBvcmln
aW4pCi0gKglSbmV4dCA9IGVkZ2UgQ0NXIGFyb3VuZCByaWdodCBmYWNlIChvcmlnaW4gYmVjb21l
cyBuZXcgZGVzdCkKLSAqCi0gKiAicHJldiIgbWVhbnMgdG8gc3Vic3RpdHV0ZSBDVyBmb3IgQ0NX
IGluIHRoZSBkZWZpbml0aW9ucyBhYm92ZS4KLSAqCi0gKiBUaGUgbWVzaCBrZWVwcyBnbG9iYWwg
bGlzdHMgb2YgYWxsIHZlcnRpY2VzLCBmYWNlcywgYW5kIGVkZ2VzLAotICogc3RvcmVkIGFzIGRv
dWJseS1saW5rZWQgY2lyY3VsYXIgbGlzdHMgd2l0aCBhIGR1bW15IGhlYWRlciBub2RlLgotICog
VGhlIG1lc2ggc3RvcmVzIHBvaW50ZXJzIHRvIHRoZXNlIGR1bW15IGhlYWRlcnMgKHZIZWFkLCBm
SGVhZCwgZUhlYWQpLgotICoKLSAqIFRoZSBjaXJjdWxhciBlZGdlIGxpc3QgaXMgc3BlY2lhbDsg
c2luY2UgaGFsZi1lZGdlcyBhbHdheXMgb2NjdXIKLSAqIGluIHBhaXJzIChlIGFuZCBlLT5TeW0p
LCBlYWNoIGhhbGYtZWRnZSBzdG9yZXMgYSBwb2ludGVyIGluIG9ubHkKLSAqIG9uZSBkaXJlY3Rp
b24uICBTdGFydGluZyBhdCBlSGVhZCBhbmQgZm9sbG93aW5nIHRoZSBlLT5uZXh0IHBvaW50ZXJz
Ci0gKiB3aWxsIHZpc2l0IGVhY2ggKmVkZ2UqIG9uY2UgKGllLiBlIG9yIGUtPlN5bSwgYnV0IG5v
dCBib3RoKS4KLSAqIGUtPlN5bSBzdG9yZXMgYSBwb2ludGVyIGluIHRoZSBvcHBvc2l0ZSBkaXJl
Y3Rpb24sIHRodXMgaXQgaXMKLSAqIGFsd2F5cyB0cnVlIHRoYXQgZS0+U3ltLT5uZXh0LT5TeW0t
Pm5leHQgPT0gZS4KLSAqCi0gKiBFYWNoIHZlcnRleCBoYXMgYSBwb2ludGVyIHRvIG5leHQgYW5k
IHByZXZpb3VzIHZlcnRpY2VzIGluIHRoZQotICogY2lyY3VsYXIgbGlzdCwgYW5kIGEgcG9pbnRl
ciB0byBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgdmVydGV4IGFzCi0gKiB0aGUgb3JpZ2luIChOVUxM
IGlmIHRoaXMgaXMgdGhlIGR1bW15IGhlYWRlcikuICBUaGVyZSBpcyBhbHNvIGEKLSAqIGZpZWxk
ICJkYXRhIiBmb3IgY2xpZW50IGRhdGEuCi0gKgotICogRWFjaCBmYWNlIGhhcyBhIHBvaW50ZXIg
dG8gdGhlIG5leHQgYW5kIHByZXZpb3VzIGZhY2VzIGluIHRoZQotICogY2lyY3VsYXIgbGlzdCwg
YW5kIGEgcG9pbnRlciB0byBhIGhhbGYtZWRnZSB3aXRoIHRoaXMgZmFjZSBhcwotICogdGhlIGxl
ZnQgZmFjZSAoTlVMTCBpZiB0aGlzIGlzIHRoZSBkdW1teSBoZWFkZXIpLiAgVGhlcmUgaXMgYWxz
bwotICogYSBmaWVsZCAiZGF0YSIgZm9yIGNsaWVudCBkYXRhLgotICoKLSAqIE5vdGUgdGhhdCB3
aGF0IHdlIGNhbGwgYSAiZmFjZSIgaXMgcmVhbGx5IGEgbG9vcDsgZmFjZXMgbWF5IGNvbnNpc3QK
LSAqIG9mIG1vcmUgdGhhbiBvbmUgbG9vcCAoaWUuIG5vdCBzaW1wbHkgY29ubmVjdGVkKSwgYnV0
IHRoZXJlIGlzIG5vCi0gKiByZWNvcmQgb2YgdGhpcyBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuICBU
aGUgbWVzaCBtYXkgY29uc2lzdCBvZgotICogc2V2ZXJhbCBkaXNjb25uZWN0ZWQgcmVnaW9ucywg
c28gaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byB2aXNpdAotICogdGhlIGVudGlyZSBtZXNoIGJ5
IHN0YXJ0aW5nIGF0IGEgaGFsZi1lZGdlIGFuZCB0cmF2ZXJzaW5nIHRoZSBlZGdlCi0gKiBzdHJ1
Y3R1cmUuCi0gKgotICogVGhlIG1lc2ggZG9lcyBOT1Qgc3VwcG9ydCBpc29sYXRlZCB2ZXJ0aWNl
czsgYSB2ZXJ0ZXggaXMgZGVsZXRlZCBhbG9uZwotICogd2l0aCBpdHMgbGFzdCBlZGdlLiAgU2lt
aWxhcmx5IHdoZW4gdHdvIGZhY2VzIGFyZSBtZXJnZWQsIG9uZSBvZiB0aGUKLSAqIGZhY2VzIGlz
IGRlbGV0ZWQgKHNlZSBfX2dsX21lc2hEZWxldGUgYmVsb3cpLiAgRm9yIG1lc2ggb3BlcmF0aW9u
cywKLSAqIGFsbCBmYWNlIChsb29wKSBhbmQgdmVydGV4IHBvaW50ZXJzIG11c3Qgbm90IGJlIE5V
TEwuICBIb3dldmVyLCBvbmNlCi0gKiBtZXNoIG1hbmlwdWxhdGlvbiBpcyBmaW5pc2hlZCwgX19n
bF9NZXNoWmFwRmFjZSBjYW4gYmUgdXNlZCB0byBkZWxldGUKLSAqIGZhY2VzIG9mIHRoZSBtZXNo
LCBvbmUgYXQgYSB0aW1lLiAgQWxsIGV4dGVybmFsIGZhY2VzIGNhbiBiZSAiemFwcGVkIgotICog
YmVmb3JlIHRoZSBtZXNoIGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQ7IHRoZW4gYSBOVUxMIGZh
Y2UgaW5kaWNhdGVzCi0gKiBhIHJlZ2lvbiB3aGljaCBpcyBub3QgcGFydCBvZiB0aGUgb3V0cHV0
IHBvbHlnb24uCi0gKi8KLQotc3RydWN0IEdMVXZlcnRleCB7Ci0gIEdMVXZlcnRleAkqbmV4dDsJ
CS8qIG5leHQgdmVydGV4IChuZXZlciBOVUxMKSAqLwotICBHTFV2ZXJ0ZXgJKnByZXY7CQkvKiBw
cmV2aW91cyB2ZXJ0ZXggKG5ldmVyIE5VTEwpICovCi0gIEdMVWhhbGZFZGdlCSphbkVkZ2U7CS8q
IGEgaGFsZi1lZGdlIHdpdGggdGhpcyBvcmlnaW4gKi8KLSAgdm9pZAkJKmRhdGE7CQkvKiBjbGll
bnQncyBkYXRhICovCi0KLSAgLyogSW50ZXJuYWwgZGF0YSAoa2VlcCBoaWRkZW4pICovCi0gIEdM
ZG91YmxlCWNvb3Jkc1szXTsJLyogdmVydGV4IGxvY2F0aW9uIGluIDNEICovCi0gIEdMZG91Ymxl
CXMsIHQ7CQkvKiBwcm9qZWN0aW9uIG9udG8gdGhlIHN3ZWVwIHBsYW5lICovCi0gIGxvbmcJCXBx
SGFuZGxlOwkvKiB0byBhbGxvdyBkZWxldGlvbiBmcm9tIHByaW9yaXR5IHF1ZXVlICovCi19Owot
Ci1zdHJ1Y3QgR0xVZmFjZSB7Ci0gIEdMVWZhY2UJKm5leHQ7CQkvKiBuZXh0IGZhY2UgKG5ldmVy
IE5VTEwpICovCi0gIEdMVWZhY2UJKnByZXY7CQkvKiBwcmV2aW91cyBmYWNlIChuZXZlciBOVUxM
KSAqLwotICBHTFVoYWxmRWRnZQkqYW5FZGdlOwkvKiBhIGhhbGYgZWRnZSB3aXRoIHRoaXMgbGVm
dCBmYWNlICovCi0gIHZvaWQJCSpkYXRhOwkJLyogcm9vbSBmb3IgY2xpZW50J3MgZGF0YSAqLwot
Ci0gIC8qIEludGVybmFsIGRhdGEgKGtlZXAgaGlkZGVuKSAqLwotICBHTFVmYWNlCSp0cmFpbDsJ
CS8qICJzdGFjayIgZm9yIGNvbnZlcnNpb24gdG8gc3RyaXBzICovCi0gIEdMYm9vbGVhbgltYXJr
ZWQ7CQkvKiBmbGFnIGZvciBjb252ZXJzaW9uIHRvIHN0cmlwcyAqLwotICBHTGJvb2xlYW4JaW5z
aWRlOwkJLyogdGhpcyBmYWNlIGlzIGluIHRoZSBwb2x5Z29uIGludGVyaW9yICovCi19OwotCi1z
dHJ1Y3QgR0xVaGFsZkVkZ2UgewotICBHTFVoYWxmRWRnZQkqbmV4dDsJCS8qIGRvdWJseS1saW5r
ZWQgbGlzdCAocHJldj09U3ltLT5uZXh0KSAqLwotICBHTFVoYWxmRWRnZQkqU3ltOwkJLyogc2Ft
ZSBlZGdlLCBvcHBvc2l0ZSBkaXJlY3Rpb24gKi8KLSAgR0xVaGFsZkVkZ2UJKk9uZXh0OwkJLyog
bmV4dCBlZGdlIENDVyBhcm91bmQgb3JpZ2luICovCi0gIEdMVWhhbGZFZGdlCSpMbmV4dDsJCS8q
IG5leHQgZWRnZSBDQ1cgYXJvdW5kIGxlZnQgZmFjZSAqLwotICBHTFV2ZXJ0ZXgJKk9yZzsJCS8q
IG9yaWdpbiB2ZXJ0ZXggKE92ZXJ0ZXggdG9vIGxvbmcpICovCi0gIEdMVWZhY2UJKkxmYWNlOwkJ
LyogbGVmdCBmYWNlICovCi0KLSAgLyogSW50ZXJuYWwgZGF0YSAoa2VlcCBoaWRkZW4pICovCi0g
IEFjdGl2ZVJlZ2lvbgkqYWN0aXZlUmVnaW9uOwkvKiBhIHJlZ2lvbiB3aXRoIHRoaXMgdXBwZXIg
ZWRnZSAoc3dlZXAuYykgKi8KLSAgaW50CQl3aW5kaW5nOwkvKiBjaGFuZ2UgaW4gd2luZGluZyBu
dW1iZXIgd2hlbiBjcm9zc2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cm9tIHRoZSByaWdodCBmYWNlIHRvIHRoZSBsZWZ0IGZhY2UgKi8KLX07Ci0KLSNkZWZpbmUJUmZh
Y2UJU3ltLT5MZmFjZQotI2RlZmluZSBEc3QJU3ltLT5PcmcKLQotI2RlZmluZSBPcHJldglTeW0t
PkxuZXh0Ci0jZGVmaW5lIExwcmV2ICAgT25leHQtPlN5bQotI2RlZmluZSBEcHJldglMbmV4dC0+
U3ltCi0jZGVmaW5lIFJwcmV2CVN5bS0+T25leHQKLSNkZWZpbmUgRG5leHQJUnByZXYtPlN5bQkv
KiAzIHBvaW50ZXJzICovCi0jZGVmaW5lIFJuZXh0CU9wcmV2LT5TeW0JLyogMyBwb2ludGVycyAq
LwotCi0KLXN0cnVjdCBHTFVtZXNoIHsKLSAgR0xVdmVydGV4CXZIZWFkOwkJLyogZHVtbXkgaGVh
ZGVyIGZvciB2ZXJ0ZXggbGlzdCAqLwotICBHTFVmYWNlCWZIZWFkOwkJLyogZHVtbXkgaGVhZGVy
IGZvciBmYWNlIGxpc3QgKi8KLSAgR0xVaGFsZkVkZ2UJZUhlYWQ7CQkvKiBkdW1teSBoZWFkZXIg
Zm9yIGVkZ2UgbGlzdCAqLwotICBHTFVoYWxmRWRnZQllSGVhZFN5bTsJLyogYW5kIGl0cyBzeW1t
ZXRyaWMgY291bnRlcnBhcnQgKi8KLX07Ci0KLS8qIFRoZSBtZXNoIG9wZXJhdGlvbnMgYmVsb3cg
aGF2ZSB0aHJlZSBtb3RpdmF0aW9uczogY29tcGxldGVuZXNzLAotICogY29udmVuaWVuY2UsIGFu
ZCBlZmZpY2llbmN5LiAgVGhlIGJhc2ljIG1lc2ggb3BlcmF0aW9ucyBhcmUgTWFrZUVkZ2UsCi0g
KiBTcGxpY2UsIGFuZCBEZWxldGUuICBBbGwgdGhlIG90aGVyIGVkZ2Ugb3BlcmF0aW9ucyBjYW4g
YmUgaW1wbGVtZW50ZWQKLSAqIGluIHRlcm1zIG9mIHRoZXNlLiAgVGhlIG90aGVyIG9wZXJhdGlv
bnMgYXJlIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZQotICogYW5kL29yIGVmZmljaWVuY3kuCi0g
KgotICogV2hlbiBhIGZhY2UgaXMgc3BsaXQgb3IgYSB2ZXJ0ZXggaXMgYWRkZWQsIHRoZXkgYXJl
IGluc2VydGVkIGludG8gdGhlCi0gKiBnbG9iYWwgbGlzdCAqYmVmb3JlKiB0aGUgZXhpc3Rpbmcg
dmVydGV4IG9yIGZhY2UgKGllLiBlLT5Pcmcgb3IgZS0+TGZhY2UpLgotICogVGhpcyBtYWtlcyBp
dCBlYXNpZXIgdG8gcHJvY2VzcyBhbGwgdmVydGljZXMgb3IgZmFjZXMgaW4gdGhlIGdsb2JhbCBs
aXN0cwotICogd2l0aG91dCB3b3JyeWluZyBhYm91dCBwcm9jZXNzaW5nIHRoZSBzYW1lIGRhdGEg
dHdpY2UuICBBcyBhIGNvbnZlbmllbmNlLAotICogd2hlbiBhIGZhY2UgaXMgc3BsaXQsIHRoZSAi
aW5zaWRlIiBmbGFnIGlzIGNvcGllZCBmcm9tIHRoZSBvbGQgZmFjZS4KLSAqIE90aGVyIGludGVy
bmFsIGRhdGEgKHYtPmRhdGEsIHYtPmFjdGl2ZVJlZ2lvbiwgZi0+ZGF0YSwgZi0+bWFya2VkLAot
ICogZi0+dHJhaWwsIGUtPndpbmRpbmcpIGlzIHNldCB0byB6ZXJvLgotICoKLSAqICoqKioqKioq
KioqKioqKioqKioqKiogQmFzaWMgRWRnZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioq
KioqKioqCi0gKgotICogX19nbF9tZXNoTWFrZUVkZ2UoIG1lc2ggKSBjcmVhdGVzIG9uZSBlZGdl
LCB0d28gdmVydGljZXMsIGFuZCBhIGxvb3AuCi0gKiBUaGUgbG9vcCAoZmFjZSkgY29uc2lzdHMg
b2YgdGhlIHR3byBuZXcgaGFsZi1lZGdlcy4KLSAqCi0gKiBfX2dsX21lc2hTcGxpY2UoIGVPcmcs
IGVEc3QgKSBpcyB0aGUgYmFzaWMgb3BlcmF0aW9uIGZvciBjaGFuZ2luZyB0aGUKLSAqIG1lc2gg
Y29ubmVjdGl2aXR5IGFuZCB0b3BvbG9neS4gIEl0IGNoYW5nZXMgdGhlIG1lc2ggc28gdGhhdAot
ICoJZU9yZy0+T25leHQgPC0gT0xEKCBlRHN0LT5PbmV4dCApCi0gKgllRHN0LT5PbmV4dCA8LSBP
TEQoIGVPcmctPk9uZXh0ICkKLSAqIHdoZXJlIE9MRCguLi4pIG1lYW5zIHRoZSB2YWx1ZSBiZWZv
cmUgdGhlIG1lc2hTcGxpY2Ugb3BlcmF0aW9uLgotICoKLSAqIFRoaXMgY2FuIGhhdmUgdHdvIGVm
ZmVjdHMgb24gdGhlIHZlcnRleCBzdHJ1Y3R1cmU6Ci0gKiAgLSBpZiBlT3JnLT5PcmcgIT0gZURz
dC0+T3JnLCB0aGUgdHdvIHZlcnRpY2VzIGFyZSBtZXJnZWQgdG9nZXRoZXIKLSAqICAtIGlmIGVP
cmctPk9yZyA9PSBlRHN0LT5PcmcsIHRoZSBvcmlnaW4gaXMgc3BsaXQgaW50byB0d28gdmVydGlj
ZXMKLSAqIEluIGJvdGggY2FzZXMsIGVEc3QtPk9yZyBpcyBjaGFuZ2VkIGFuZCBlT3JnLT5Pcmcg
aXMgdW50b3VjaGVkLgotICoKLSAqIFNpbWlsYXJseSAoYW5kIGluZGVwZW5kZW50bHkpIGZvciB0
aGUgZmFjZSBzdHJ1Y3R1cmUsCi0gKiAgLSBpZiBlT3JnLT5MZmFjZSA9PSBlRHN0LT5MZmFjZSwg
b25lIGxvb3AgaXMgc3BsaXQgaW50byB0d28KLSAqICAtIGlmIGVPcmctPkxmYWNlICE9IGVEc3Qt
PkxmYWNlLCB0d28gZGlzdGluY3QgbG9vcHMgYXJlIGpvaW5lZCBpbnRvIG9uZQotICogSW4gYm90
aCBjYXNlcywgZURzdC0+TGZhY2UgaXMgY2hhbmdlZCBhbmQgZU9yZy0+TGZhY2UgaXMgdW5hZmZl
Y3RlZC4KLSAqCi0gKiBfX2dsX21lc2hEZWxldGUoIGVEZWwgKSByZW1vdmVzIHRoZSBlZGdlIGVE
ZWwuICBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlczoKLSAqIGlmIChlRGVsLT5MZmFjZSAhPSBlRGVs
LT5SZmFjZSksIHdlIGpvaW4gdHdvIGxvb3BzIGludG8gb25lOyB0aGUgbG9vcAotICogZURlbC0+
TGZhY2UgaXMgZGVsZXRlZC4gIE90aGVyd2lzZSwgd2UgYXJlIHNwbGl0dGluZyBvbmUgbG9vcCBp
bnRvIHR3bzsKLSAqIHRoZSBuZXdseSBjcmVhdGVkIGxvb3Agd2lsbCBjb250YWluIGVEZWwtPkRz
dC4gIElmIHRoZSBkZWxldGlvbiBvZiBlRGVsCi0gKiB3b3VsZCBjcmVhdGUgaXNvbGF0ZWQgdmVy
dGljZXMsIHRob3NlIGFyZSBkZWxldGVkIGFzIHdlbGwuCi0gKgotICogKioqKioqKioqKioqKioq
KioqKioqKiBPdGhlciBFZGdlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioK
LSAqCi0gKiBfX2dsX21lc2hBZGRFZGdlVmVydGV4KCBlT3JnICkgY3JlYXRlcyBhIG5ldyBlZGdl
IGVOZXcgc3VjaCB0aGF0Ci0gKiBlTmV3ID09IGVPcmctPkxuZXh0LCBhbmQgZU5ldy0+RHN0IGlz
IGEgbmV3bHkgY3JlYXRlZCB2ZXJ0ZXguCi0gKiBlT3JnIGFuZCBlTmV3IHdpbGwgaGF2ZSB0aGUg
c2FtZSBsZWZ0IGZhY2UuCi0gKgotICogX19nbF9tZXNoU3BsaXRFZGdlKCBlT3JnICkgc3BsaXRz
IGVPcmcgaW50byB0d28gZWRnZXMgZU9yZyBhbmQgZU5ldywKLSAqIHN1Y2ggdGhhdCBlTmV3ID09
IGVPcmctPkxuZXh0LiAgVGhlIG5ldyB2ZXJ0ZXggaXMgZU9yZy0+RHN0ID09IGVOZXctPk9yZy4K
LSAqIGVPcmcgYW5kIGVOZXcgd2lsbCBoYXZlIHRoZSBzYW1lIGxlZnQgZmFjZS4KLSAqCi0gKiBf
X2dsX21lc2hDb25uZWN0KCBlT3JnLCBlRHN0ICkgY3JlYXRlcyBhIG5ldyBlZGdlIGZyb20gZU9y
Zy0+RHN0Ci0gKiB0byBlRHN0LT5PcmcsIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGhh
bGYtZWRnZSBlTmV3LgotICogSWYgZU9yZy0+TGZhY2UgPT0gZURzdC0+TGZhY2UsIHRoaXMgc3Bs
aXRzIG9uZSBsb29wIGludG8gdHdvLAotICogYW5kIHRoZSBuZXdseSBjcmVhdGVkIGxvb3AgaXMg
ZU5ldy0+TGZhY2UuICBPdGhlcndpc2UsIHR3byBkaXNqb2ludAotICogbG9vcHMgYXJlIG1lcmdl
ZCBpbnRvIG9uZSwgYW5kIHRoZSBsb29wIGVEc3QtPkxmYWNlIGlzIGRlc3Ryb3llZC4KLSAqCi0g
KiAqKioqKioqKioqKioqKioqKioqKioqKiogT3RoZXIgT3BlcmF0aW9ucyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgotICoKLSAqIF9fZ2xfbWVzaE5ld01lc2goKSBjcmVhdGVzIGEgbmV3
IG1lc2ggd2l0aCBubyBlZGdlcywgbm8gdmVydGljZXMsCi0gKiBhbmQgbm8gbG9vcHMgKHdoYXQg
d2UgdXN1YWxseSBjYWxsIGEgImZhY2UiKS4KLSAqCi0gKiBfX2dsX21lc2hVbmlvbiggbWVzaDEs
IG1lc2gyICkgZm9ybXMgdGhlIHVuaW9uIG9mIGFsbCBzdHJ1Y3R1cmVzIGluCi0gKiBib3RoIG1l
c2hlcywgYW5kIHJldHVybnMgdGhlIG5ldyBtZXNoICh0aGUgb2xkIG1lc2hlcyBhcmUgZGVzdHJv
eWVkKS4KLSAqCi0gKiBfX2dsX21lc2hEZWxldGVNZXNoKCBtZXNoICkgd2lsbCBmcmVlIGFsbCBz
dG9yYWdlIGZvciBhbnkgdmFsaWQgbWVzaC4KLSAqCi0gKiBfX2dsX21lc2haYXBGYWNlKCBmWmFw
ICkgZGVzdHJveXMgYSBmYWNlIGFuZCByZW1vdmVzIGl0IGZyb20gdGhlCi0gKiBnbG9iYWwgZmFj
ZSBsaXN0LiAgQWxsIGVkZ2VzIG9mIGZaYXAgd2lsbCBoYXZlIGEgTlVMTCBwb2ludGVyIGFzIHRo
ZWlyCi0gKiBsZWZ0IGZhY2UuICBBbnkgZWRnZXMgd2hpY2ggYWxzbyBoYXZlIGEgTlVMTCBwb2lu
dGVyIGFzIHRoZWlyIHJpZ2h0IGZhY2UKLSAqIGFyZSBkZWxldGVkIGVudGlyZWx5IChhbG9uZyB3
aXRoIGFueSBpc29sYXRlZCB2ZXJ0aWNlcyB0aGlzIHByb2R1Y2VzKS4KLSAqIEFuIGVudGlyZSBt
ZXNoIGNhbiBiZSBkZWxldGVkIGJ5IHphcHBpbmcgaXRzIGZhY2VzLCBvbmUgYXQgYSB0aW1lLAot
ICogaW4gYW55IG9yZGVyLiAgWmFwcGVkIGZhY2VzIGNhbm5vdCBiZSB1c2VkIGluIGZ1cnRoZXIg
bWVzaCBvcGVyYXRpb25zIQotICoKLSAqIF9fZ2xfbWVzaENoZWNrTWVzaCggbWVzaCApIGNoZWNr
cyBhIG1lc2ggZm9yIHNlbGYtY29uc2lzdGVuY3kuCi0gKi8KLQotR0xVaGFsZkVkZ2UJKl9fZ2xf
bWVzaE1ha2VFZGdlKCBHTFVtZXNoICptZXNoICk7Ci1pbnQJCV9fZ2xfbWVzaFNwbGljZSggR0xV
aGFsZkVkZ2UgKmVPcmcsIEdMVWhhbGZFZGdlICplRHN0ICk7Ci1pbnQJCV9fZ2xfbWVzaERlbGV0
ZSggR0xVaGFsZkVkZ2UgKmVEZWwgKTsKLQotR0xVaGFsZkVkZ2UJKl9fZ2xfbWVzaEFkZEVkZ2VW
ZXJ0ZXgoIEdMVWhhbGZFZGdlICplT3JnICk7Ci1HTFVoYWxmRWRnZQkqX19nbF9tZXNoU3BsaXRF
ZGdlKCBHTFVoYWxmRWRnZSAqZU9yZyApOwotR0xVaGFsZkVkZ2UJKl9fZ2xfbWVzaENvbm5lY3Qo
IEdMVWhhbGZFZGdlICplT3JnLCBHTFVoYWxmRWRnZSAqZURzdCApOwotCi1HTFVtZXNoCQkqX19n
bF9tZXNoTmV3TWVzaCggdm9pZCApOwotR0xVbWVzaAkJKl9fZ2xfbWVzaFVuaW9uKCBHTFVtZXNo
ICptZXNoMSwgR0xVbWVzaCAqbWVzaDIgKTsKLXZvaWQJCV9fZ2xfbWVzaERlbGV0ZU1lc2goIEdM
VW1lc2ggKm1lc2ggKTsKLXZvaWQJCV9fZ2xfbWVzaFphcEZhY2UoIEdMVWZhY2UgKmZaYXAgKTsK
LQotI2lmZGVmIE5ERUJVRwotI2RlZmluZQkJX19nbF9tZXNoQ2hlY2tNZXNoKCBtZXNoICkKLSNl
bHNlCi12b2lkCQlfX2dsX21lc2hDaGVja01lc2goIEdMVW1lc2ggKm1lc2ggKTsKLSNlbmRpZgot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL25vcm1h
bC5jIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDhmYjIyZjFkZTdlMjc1ZjYxNDA4NDA3YTYyZWMyMGRkYmQ0ZjE4
ZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkg
KzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRl
bnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVy
bmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUg
TGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0
aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExp
Y2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vu
c2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAK
LSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBv
ciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoq
IE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBk
aXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQg
SU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJ
TkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENP
TkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVT
UyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoq
IAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUg
SW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAy
MDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFs
IENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgot
KiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMg
YXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
KiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJv
Z3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9u
IHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5
c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmls
IDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAo
VmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChS
KSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyks
IHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVk
IHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24K
LSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJp
ZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEu
Mi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1
bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9t
YWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mvbm9ybWFsLmMjNSAkCi0qLwotCi0jaW5jbHVkZSAiZ2x1
b3MuaCIKLSNpbmNsdWRlICJtZXNoLmgiCi0jaW5jbHVkZSAidGVzcy5oIgotI2luY2x1ZGUgIm5v
cm1hbC5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2RlZmlu
ZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0jZGVmaW5lIERvdCh1LHYpCSh1WzBdKnZbMF0g
KyB1WzFdKnZbMV0gKyB1WzJdKnZbMl0pCi0KLSNpZiBkZWZpbmVkKEZPUl9UUklURV9URVNUX1BS
T0dSQU0pIHx8IGRlZmluZWQoVFJVRV9QUk9KRUNUKQotc3RhdGljIHZvaWQgTm9ybWFsaXplKCBH
TGRvdWJsZSB2WzNdICkKLXsKLSAgR0xkb3VibGUgbGVuID0gdlswXSp2WzBdICsgdlsxXSp2WzFd
ICsgdlsyXSp2WzJdOwotCi0gIGFzc2VydCggbGVuID4gMCApOwotICBsZW4gPSBzcXJ0KCBsZW4g
KTsKLSAgdlswXSAvPSBsZW47Ci0gIHZbMV0gLz0gbGVuOwotICB2WzJdIC89IGxlbjsKLX0KLSNl
bmRpZgotCi0jZGVmaW5lIEFCUyh4KQkoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCi0KLXN0YXRpYyBp
bnQgTG9uZ0F4aXMoIEdMZG91YmxlIHZbM10gKQotewotICBpbnQgaSA9IDA7Ci0KLSAgaWYoIEFC
Uyh2WzFdKSA+IEFCUyh2WzBdKSApIHsgaSA9IDE7IH0KLSAgaWYoIEFCUyh2WzJdKSA+IEFCUyh2
W2ldKSApIHsgaSA9IDI7IH0KLSAgcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyB2b2lkIENvbXB1dGVO
b3JtYWwoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZG91YmxlIG5vcm1bM10gKQotewotICBHTFV2
ZXJ0ZXggKnYsICp2MSwgKnYyOwotICBHTGRvdWJsZSBjLCB0TGVuMiwgbWF4TGVuMjsKLSAgR0xk
b3VibGUgbWF4VmFsWzNdLCBtaW5WYWxbM10sIGQxWzNdLCBkMlszXSwgdE5vcm1bM107Ci0gIEdM
VXZlcnRleCAqbWF4VmVydFszXSwgKm1pblZlcnRbM107Ci0gIEdMVXZlcnRleCAqdkhlYWQgPSAm
dGVzcy0+bWVzaC0+dkhlYWQ7Ci0gIGludCBpOwotCi0gIG1heFZhbFswXSA9IG1heFZhbFsxXSA9
IG1heFZhbFsyXSA9IC0yICogR0xVX1RFU1NfTUFYX0NPT1JEOwotICBtaW5WYWxbMF0gPSBtaW5W
YWxbMV0gPSBtaW5WYWxbMl0gPSAyICogR0xVX1RFU1NfTUFYX0NPT1JEOwotCi0gIGZvciggdiA9
IHZIZWFkLT5uZXh0OyB2ICE9IHZIZWFkOyB2ID0gdi0+bmV4dCApIHsKLSAgICBmb3IoIGkgPSAw
OyBpIDwgMzsgKytpICkgewotICAgICAgYyA9IHYtPmNvb3Jkc1tpXTsKLSAgICAgIGlmKCBjIDwg
bWluVmFsW2ldICkgeyBtaW5WYWxbaV0gPSBjOyBtaW5WZXJ0W2ldID0gdjsgfQotICAgICAgaWYo
IGMgPiBtYXhWYWxbaV0gKSB7IG1heFZhbFtpXSA9IGM7IG1heFZlcnRbaV0gPSB2OyB9Ci0gICAg
fQotICB9Ci0KLSAgLyogRmluZCB0d28gdmVydGljZXMgc2VwYXJhdGVkIGJ5IGF0IGxlYXN0IDEv
c3FydCgzKSBvZiB0aGUgbWF4aW11bQotICAgKiBkaXN0YW5jZSBiZXR3ZWVuIGFueSB0d28gdmVy
dGljZXMKLSAgICovCi0gIGkgPSAwOwotICBpZiggbWF4VmFsWzFdIC0gbWluVmFsWzFdID4gbWF4
VmFsWzBdIC0gbWluVmFsWzBdICkgeyBpID0gMTsgfQotICBpZiggbWF4VmFsWzJdIC0gbWluVmFs
WzJdID4gbWF4VmFsW2ldIC0gbWluVmFsW2ldICkgeyBpID0gMjsgfQotICBpZiggbWluVmFsW2ld
ID49IG1heFZhbFtpXSApIHsKLSAgICAvKiBBbGwgdmVydGljZXMgYXJlIHRoZSBzYW1lIC0tIG5v
cm1hbCBkb2Vzbid0IG1hdHRlciAqLwotICAgIG5vcm1bMF0gPSAwOyBub3JtWzFdID0gMDsgbm9y
bVsyXSA9IDE7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAgLyogTG9vayBmb3IgYSB0aGlyZCB2ZXJ0
ZXggd2hpY2ggZm9ybXMgdGhlIHRyaWFuZ2xlIHdpdGggbWF4aW11bSBhcmVhCi0gICAqIChMZW5n
dGggb2Ygbm9ybWFsID09IHR3aWNlIHRoZSB0cmlhbmdsZSBhcmVhKQotICAgKi8KLSAgbWF4TGVu
MiA9IDA7Ci0gIHYxID0gbWluVmVydFtpXTsKLSAgdjIgPSBtYXhWZXJ0W2ldOwotICBkMVswXSA9
IHYxLT5jb29yZHNbMF0gLSB2Mi0+Y29vcmRzWzBdOwotICBkMVsxXSA9IHYxLT5jb29yZHNbMV0g
LSB2Mi0+Y29vcmRzWzFdOwotICBkMVsyXSA9IHYxLT5jb29yZHNbMl0gLSB2Mi0+Y29vcmRzWzJd
OwotICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0g
ICAgZDJbMF0gPSB2LT5jb29yZHNbMF0gLSB2Mi0+Y29vcmRzWzBdOwotICAgIGQyWzFdID0gdi0+
Y29vcmRzWzFdIC0gdjItPmNvb3Jkc1sxXTsKLSAgICBkMlsyXSA9IHYtPmNvb3Jkc1syXSAtIHYy
LT5jb29yZHNbMl07Ci0gICAgdE5vcm1bMF0gPSBkMVsxXSpkMlsyXSAtIGQxWzJdKmQyWzFdOwot
ICAgIHROb3JtWzFdID0gZDFbMl0qZDJbMF0gLSBkMVswXSpkMlsyXTsKLSAgICB0Tm9ybVsyXSA9
IGQxWzBdKmQyWzFdIC0gZDFbMV0qZDJbMF07Ci0gICAgdExlbjIgPSB0Tm9ybVswXSp0Tm9ybVsw
XSArIHROb3JtWzFdKnROb3JtWzFdICsgdE5vcm1bMl0qdE5vcm1bMl07Ci0gICAgaWYoIHRMZW4y
ID4gbWF4TGVuMiApIHsKLSAgICAgIG1heExlbjIgPSB0TGVuMjsKLSAgICAgIG5vcm1bMF0gPSB0
Tm9ybVswXTsKLSAgICAgIG5vcm1bMV0gPSB0Tm9ybVsxXTsKLSAgICAgIG5vcm1bMl0gPSB0Tm9y
bVsyXTsKLSAgICB9Ci0gIH0KLQotICBpZiggbWF4TGVuMiA8PSAwICkgewotICAgIC8qIEFsbCBw
b2ludHMgbGllIG9uIGEgc2luZ2xlIGxpbmUgLS0gYW55IGRlY2VudCBub3JtYWwgd2lsbCBkbyAq
LwotICAgIG5vcm1bMF0gPSBub3JtWzFdID0gbm9ybVsyXSA9IDA7Ci0gICAgbm9ybVtMb25nQXhp
cyhkMSldID0gMTsKLSAgfQotfQotICAKLQotc3RhdGljIHZvaWQgQ2hlY2tPcmllbnRhdGlvbigg
R0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIEdMZG91YmxlIGFyZWE7Ci0gIEdMVWZhY2UgKmYs
ICpmSGVhZCA9ICZ0ZXNzLT5tZXNoLT5mSGVhZDsKLSAgR0xVdmVydGV4ICp2LCAqdkhlYWQgPSAm
dGVzcy0+bWVzaC0+dkhlYWQ7Ci0gIEdMVWhhbGZFZGdlICplOwotCi0gIC8qIFdoZW4gd2UgY29t
cHV0ZSB0aGUgbm9ybWFsIGF1dG9tYXRpY2FsbHksIHdlIGNob29zZSB0aGUgb3JpZW50YXRpb24K
LSAgICogc28gdGhhdCB0aGUgdGhlIHN1bSBvZiB0aGUgc2lnbmVkIGFyZWFzIG9mIGFsbCBjb250
b3VycyBpcyBub24tbmVnYXRpdmUuCi0gICAqLwotICBhcmVhID0gMDsKLSAgZm9yKCBmID0gZkhl
YWQtPm5leHQ7IGYgIT0gZkhlYWQ7IGYgPSBmLT5uZXh0ICkgewotICAgIGUgPSBmLT5hbkVkZ2U7
Ci0gICAgaWYoIGUtPndpbmRpbmcgPD0gMCApIGNvbnRpbnVlOwotICAgIGRvIHsKLSAgICAgIGFy
ZWEgKz0gKGUtPk9yZy0+cyAtIGUtPkRzdC0+cykgKiAoZS0+T3JnLT50ICsgZS0+RHN0LT50KTsK
LSAgICAgIGUgPSBlLT5MbmV4dDsKLSAgICB9IHdoaWxlKCBlICE9IGYtPmFuRWRnZSApOwotICB9
Ci0gIGlmKCBhcmVhIDwgMCApIHsKLSAgICAvKiBSZXZlcnNlIHRoZSBvcmllbnRhdGlvbiBieSBm
bGlwcGluZyBhbGwgdGhlIHQtY29vcmRpbmF0ZXMgKi8KLSAgICBmb3IoIHYgPSB2SGVhZC0+bmV4
dDsgdiAhPSB2SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgICB2LT50ID0gLSB2LT50OwotICAg
IH0KLSAgICB0ZXNzLT50VW5pdFswXSA9IC0gdGVzcy0+dFVuaXRbMF07Ci0gICAgdGVzcy0+dFVu
aXRbMV0gPSAtIHRlc3MtPnRVbml0WzFdOwotICAgIHRlc3MtPnRVbml0WzJdID0gLSB0ZXNzLT50
VW5pdFsyXTsKLSAgfQotfQotCi0jaWZkZWYgRk9SX1RSSVRFX1RFU1RfUFJPR1JBTQotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotZXh0ZXJuIGludCBSYW5kb21Td2VlcDsKLSNkZWZpbmUgU19VTklUX1gJ
KFJhbmRvbVN3ZWVwID8gKDIqZHJhbmQ0OCgpLTEpIDogMS4wKQotI2RlZmluZSBTX1VOSVRfWQko
UmFuZG9tU3dlZXAgPyAoMipkcmFuZDQ4KCktMSkgOiAwLjApCi0jZWxzZQotI2lmIGRlZmluZWQo
U0xBTlRFRF9TV0VFUCkgCi0vKiBUaGUgImZlYXR1cmUgbWVyZ2luZyIgaXMgbm90IGludGVuZGVk
IHRvIGJlIGNvbXBsZXRlLiAgVGhlcmUgYXJlCi0gKiBzcGVjaWFsIGNhc2VzIHdoZXJlIGVkZ2Vz
IGFyZSBuZWFybHkgcGFyYWxsZWwgdG8gdGhlIHN3ZWVwIGxpbmUKLSAqIHdoaWNoIGFyZSBub3Qg
aW1wbGVtZW50ZWQuICBUaGUgYWxnb3JpdGhtIHNob3VsZCBzdGlsbCBiZWhhdmUKLSAqIHJvYnVz
dGx5IChpZS4gcHJvZHVjZSBhIHJlYXNvbmFibGUgdGVzc2VsYXRpb24pIGluIHRoZSBwcmVzZW5j
ZQotICogb2Ygc3VjaCBlZGdlcywgaG93ZXZlciBpdCBtYXkgbWlzcyBmZWF0dXJlcyB3aGljaCBj
b3VsZCBoYXZlIGJlZW4KLSAqIG1lcmdlZC4gIFdlIGNvdWxkIG1pbmltaXplIHRoaXMgZWZmZWN0
IGJ5IGNob29zaW5nIHRoZSBzd2VlcCBsaW5lCi0gKiBkaXJlY3Rpb24gdG8gYmUgc29tZXRoaW5n
IHVudXN1YWwgKGllLiBub3QgcGFyYWxsZWwgdG8gb25lIG9mIHRoZQotICogY29vcmRpbmF0ZSBh
eGVzKS4KLSAqLwotI2RlZmluZSBTX1VOSVRfWAkwLjUwOTQxNTM5NTY0OTU1Mzg1CS8qIFByZS1u
b3JtYWxpemVkICovCi0jZGVmaW5lIFNfVU5JVF9ZCTAuODYwNTIwNzQ2MjIwMTA2MzMKLSNlbHNl
Ci0jZGVmaW5lIFNfVU5JVF9YCTEuMAotI2RlZmluZSBTX1VOSVRfWQkwLjAKLSNlbmRpZgotI2Vu
ZGlmCi0KLS8qIERldGVybWluZSB0aGUgcG9seWdvbiBub3JtYWwgYW5kIHByb2plY3QgdmVydGlj
ZXMgb250byB0aGUgcGxhbmUKLSAqIG9mIHRoZSBwb2x5Z29uLgotICovCi12b2lkIF9fZ2xfcHJv
amVjdFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotewotICBHTFV2ZXJ0ZXggKnYsICp2
SGVhZCA9ICZ0ZXNzLT5tZXNoLT52SGVhZDsKLSAgR0xkb3VibGUgbm9ybVszXTsKLSAgR0xkb3Vi
bGUgKnNVbml0LCAqdFVuaXQ7Ci0gIGludCBpLCBjb21wdXRlZE5vcm1hbCA9IEZBTFNFOwotCi0g
IG5vcm1bMF0gPSB0ZXNzLT5ub3JtYWxbMF07Ci0gIG5vcm1bMV0gPSB0ZXNzLT5ub3JtYWxbMV07
Ci0gIG5vcm1bMl0gPSB0ZXNzLT5ub3JtYWxbMl07Ci0gIGlmKCBub3JtWzBdID09IDAgJiYgbm9y
bVsxXSA9PSAwICYmIG5vcm1bMl0gPT0gMCApIHsKLSAgICBDb21wdXRlTm9ybWFsKCB0ZXNzLCBu
b3JtICk7Ci0gICAgY29tcHV0ZWROb3JtYWwgPSBUUlVFOwotICB9Ci0gIHNVbml0ID0gdGVzcy0+
c1VuaXQ7Ci0gIHRVbml0ID0gdGVzcy0+dFVuaXQ7Ci0gIGkgPSBMb25nQXhpcyggbm9ybSApOwot
Ci0jaWYgZGVmaW5lZChGT1JfVFJJVEVfVEVTVF9QUk9HUkFNKSB8fCBkZWZpbmVkKFRSVUVfUFJP
SkVDVCkKLSAgLyogQ2hvb3NlIHRoZSBpbml0aWFsIHNVbml0IHZlY3RvciB0byBiZSBhcHByb3hp
bWF0ZWx5IHBlcnBlbmRpY3VsYXIKLSAgICogdG8gdGhlIG5vcm1hbC4KLSAgICovCi0gIE5vcm1h
bGl6ZSggbm9ybSApOwotCi0gIHNVbml0W2ldID0gMDsKLSAgc1VuaXRbKGkrMSklM10gPSBTX1VO
SVRfWDsKLSAgc1VuaXRbKGkrMiklM10gPSBTX1VOSVRfWTsKLQotICAvKiBOb3cgbWFrZSBpdCBl
eGFjdGx5IHBlcnBlbmRpY3VsYXIgKi8KLSAgdyA9IERvdCggc1VuaXQsIG5vcm0gKTsKLSAgc1Vu
aXRbMF0gLT0gdyAqIG5vcm1bMF07Ci0gIHNVbml0WzFdIC09IHcgKiBub3JtWzFdOwotICBzVW5p
dFsyXSAtPSB3ICogbm9ybVsyXTsKLSAgTm9ybWFsaXplKCBzVW5pdCApOwotCi0gIC8qIENob29z
ZSB0VW5pdCBzbyB0aGF0IChzVW5pdCx0VW5pdCxub3JtKSBmb3JtIGEgcmlnaHQtaGFuZGVkIGZy
YW1lICovCi0gIHRVbml0WzBdID0gbm9ybVsxXSpzVW5pdFsyXSAtIG5vcm1bMl0qc1VuaXRbMV07
Ci0gIHRVbml0WzFdID0gbm9ybVsyXSpzVW5pdFswXSAtIG5vcm1bMF0qc1VuaXRbMl07Ci0gIHRV
bml0WzJdID0gbm9ybVswXSpzVW5pdFsxXSAtIG5vcm1bMV0qc1VuaXRbMF07Ci0gIE5vcm1hbGl6
ZSggdFVuaXQgKTsKLSNlbHNlCi0gIC8qIFByb2plY3QgcGVycGVuZGljdWxhciB0byBhIGNvb3Jk
aW5hdGUgYXhpcyAtLSBiZXR0ZXIgbnVtZXJpY2FsbHkgKi8KLSAgc1VuaXRbaV0gPSAwOwotICBz
VW5pdFsoaSsxKSUzXSA9IFNfVU5JVF9YOwotICBzVW5pdFsoaSsyKSUzXSA9IFNfVU5JVF9ZOwot
ICAKLSAgdFVuaXRbaV0gPSAwOwotICB0VW5pdFsoaSsxKSUzXSA9IChub3JtW2ldID4gMCkgPyAt
U19VTklUX1kgOiBTX1VOSVRfWTsKLSAgdFVuaXRbKGkrMiklM10gPSAobm9ybVtpXSA+IDApID8g
U19VTklUX1ggOiAtU19VTklUX1g7Ci0jZW5kaWYKLQotICAvKiBQcm9qZWN0IHRoZSB2ZXJ0aWNl
cyBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqLwotICBmb3IoIHYgPSB2SGVhZC0+bmV4dDsgdiAhPSB2
SGVhZDsgdiA9IHYtPm5leHQgKSB7Ci0gICAgdi0+cyA9IERvdCggdi0+Y29vcmRzLCBzVW5pdCAp
OwotICAgIHYtPnQgPSBEb3QoIHYtPmNvb3JkcywgdFVuaXQgKTsKLSAgfQotICBpZiggY29tcHV0
ZWROb3JtYWwgKSB7Ci0gICAgQ2hlY2tPcmllbnRhdGlvbiggdGVzcyApOwotICB9Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9ub3JtYWwuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA1YTY4NzQ3M2I1OTQ0N2RhZWJiOGRhNmZiNGE1OWU1NDFiNDA1MzU1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2ds
dS9saWJ0ZXNzL25vcm1hbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSoq
IExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2Yg
dGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2Ug
YXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJz
aW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFy
ZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkg
bm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBH
cmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRy
ZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiog
aHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMg
cHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBh
bgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5U
SUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElN
SVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVS
Q0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFS
VElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwg
Q29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24s
Ci0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQg
YnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJp
Z2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGlu
IGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0q
KiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlv
bmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJm
YWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdp
bmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZp
Y2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4z
KSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRo
IHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9i
ZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVu
R0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBi
eSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwot
KiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRp
b24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0q
KiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1
L2xpYnRlc3Mvbm9ybWFsLmgjNSAkCi0qLwotCi0jaWZuZGVmIF9fbm9ybWFsX2hfCi0jZGVmaW5l
IF9fbm9ybWFsX2hfCi0KLSNpbmNsdWRlICJ0ZXNzLmgiCi0KLS8qIF9fZ2xfcHJvamVjdFBvbHln
b24oIHRlc3MgKSBkZXRlcm1pbmVzIHRoZSBwb2x5Z29uIG5vcm1hbAotICogYW5kIHByb2plY3Qg
dmVydGljZXMgb250byB0aGUgcGxhbmUgb2YgdGhlIHBvbHlnb24uCi0gKi8KLXZvaWQgX19nbF9w
cm9qZWN0UG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxNjNiZGU2YThkODRjNGMxMTE1OGJiYjYxYTdiYzc1MDI5NGFhZDVk
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwyNjAgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRo
ZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFu
IGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29m
dHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50
cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w
bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhl
IExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMs
IDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0x
MzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0q
KiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2Fy
ZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVT
UyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJ
TkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQK
LSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwg
RklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVO
VC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBT
YW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5
IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9y
aWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywg
SW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRp
ZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRp
b24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1
bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBo
aWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoq
IEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGli
cmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9w
ZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9u
IDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBj
cmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50
YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRs
eSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJz
aW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVh
Y2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9k
ZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuYyM1ICQKLSovCi0K
LSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNpbmNsdWRlICJwcmlvcml0eXEtaGVhcC5oIgotI2luY2x1ZGUgIm1lbWFsbG9jLmgi
Ci0KLSNkZWZpbmUgSU5JVF9TSVpFCTMyCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVmaW5lIEZBTFNF
IDAKLQotI2lmZGVmIEZPUl9UUklURV9URVNUX1BST0dSQU0KLSNkZWZpbmUgTEVRKHgseSkJKCpw
cS0+bGVxKSh4LHkpCi0jZWxzZQotLyogVmlvbGF0ZXMgbW9kdWxhcml0eSwgYnV0IGEgbGl0dGxl
IGZhc3RlciAqLwotI2luY2x1ZGUgImdlb20uaCIKLSNkZWZpbmUgTEVRKHgseSkJVmVydExlcSgo
R0xVdmVydGV4ICopeCwgKEdMVXZlcnRleCAqKXkpCi0jZW5kaWYKLQotLyogcmVhbGx5IF9fZ2xf
cHFIZWFwTmV3UHJpb3JpdHlRICovCi1Qcmlvcml0eVEgKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCps
ZXEpKFBRa2V5IGtleTEsIFBRa2V5IGtleTIpICkKLXsKLSAgUHJpb3JpdHlRICpwcSA9IChQcmlv
cml0eVEgKiltZW1BbGxvYyggc2l6ZW9mKCBQcmlvcml0eVEgKSk7Ci0gIGlmIChwcSA9PSBOVUxM
KSByZXR1cm4gTlVMTDsKLQotICBwcS0+c2l6ZSA9IDA7Ci0gIHBxLT5tYXggPSBJTklUX1NJWkU7
Ci0gIHBxLT5ub2RlcyA9IChQUW5vZGUgKiltZW1BbGxvYyggKElOSVRfU0laRSArIDEpICogc2l6
ZW9mKHBxLT5ub2Rlc1swXSkgKTsKLSAgaWYgKHBxLT5ub2RlcyA9PSBOVUxMKSB7Ci0gICAgIG1l
bUZyZWUocHEpOwotICAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIHBxLT5oYW5kbGVzID0gKFBR
aGFuZGxlRWxlbSAqKW1lbUFsbG9jKCAoSU5JVF9TSVpFICsgMSkgKiBzaXplb2YocHEtPmhhbmRs
ZXNbMF0pICk7Ci0gIGlmIChwcS0+aGFuZGxlcyA9PSBOVUxMKSB7Ci0gICAgIG1lbUZyZWUocHEt
Pm5vZGVzKTsKLSAgICAgbWVtRnJlZShwcSk7Ci0gICAgIHJldHVybiBOVUxMOwotICB9Ci0KLSAg
cHEtPmluaXRpYWxpemVkID0gRkFMU0U7Ci0gIHBxLT5mcmVlTGlzdCA9IDA7Ci0gIHBxLT5sZXEg
PSBsZXE7Ci0KLSAgcHEtPm5vZGVzWzFdLmhhbmRsZSA9IDE7CS8qIHNvIHRoYXQgTWluaW11bSgp
IHJldHVybnMgTlVMTCAqLwotICBwcS0+aGFuZGxlc1sxXS5rZXkgPSBOVUxMOwotICByZXR1cm4g
cHE7Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxSGVhcERlbGV0ZVByaW9yaXR5USAqLwotdm9pZCBw
cURlbGV0ZVByaW9yaXR5USggUHJpb3JpdHlRICpwcSApCi17Ci0gIG1lbUZyZWUoIHBxLT5oYW5k
bGVzICk7Ci0gIG1lbUZyZWUoIHBxLT5ub2RlcyApOwotICBtZW1GcmVlKCBwcSApOwotfQotCi0K
LXN0YXRpYyB2b2lkIEZsb2F0RG93biggUHJpb3JpdHlRICpwcSwgbG9uZyBjdXJyICkKLXsKLSAg
UFFub2RlICpuID0gcHEtPm5vZGVzOwotICBQUWhhbmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsK
LSAgUFFoYW5kbGUgaEN1cnIsIGhDaGlsZDsKLSAgbG9uZyBjaGlsZDsKLQotICBoQ3VyciA9IG5b
Y3Vycl0uaGFuZGxlOwotICBmb3IoIDs7ICkgewotICAgIGNoaWxkID0gY3VyciA8PCAxOwotICAg
IGlmKCBjaGlsZCA8IHBxLT5zaXplICYmIExFUSggaFtuW2NoaWxkKzFdLmhhbmRsZV0ua2V5LAot
CQkJCSBoW25bY2hpbGRdLmhhbmRsZV0ua2V5ICkpIHsKLSAgICAgICsrY2hpbGQ7Ci0gICAgfQot
Ci0gICAgYXNzZXJ0KGNoaWxkIDw9IHBxLT5tYXgpOwotCi0gICAgaENoaWxkID0gbltjaGlsZF0u
aGFuZGxlOwotICAgIGlmKCBjaGlsZCA+IHBxLT5zaXplIHx8IExFUSggaFtoQ3Vycl0ua2V5LCBo
W2hDaGlsZF0ua2V5ICkpIHsKLSAgICAgIG5bY3Vycl0uaGFuZGxlID0gaEN1cnI7Ci0gICAgICBo
W2hDdXJyXS5ub2RlID0gY3VycjsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBuW2N1cnJdLmhh
bmRsZSA9IGhDaGlsZDsKLSAgICBoW2hDaGlsZF0ubm9kZSA9IGN1cnI7Ci0gICAgY3VyciA9IGNo
aWxkOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgRmxvYXRVcCggUHJpb3JpdHlRICpwcSwgbG9u
ZyBjdXJyICkKLXsKLSAgUFFub2RlICpuID0gcHEtPm5vZGVzOwotICBQUWhhbmRsZUVsZW0gKmgg
PSBwcS0+aGFuZGxlczsKLSAgUFFoYW5kbGUgaEN1cnIsIGhQYXJlbnQ7Ci0gIGxvbmcgcGFyZW50
OwotCi0gIGhDdXJyID0gbltjdXJyXS5oYW5kbGU7Ci0gIGZvciggOzsgKSB7Ci0gICAgcGFyZW50
ID0gY3VyciA+PiAxOwotICAgIGhQYXJlbnQgPSBuW3BhcmVudF0uaGFuZGxlOwotICAgIGlmKCBw
YXJlbnQgPT0gMCB8fCBMRVEoIGhbaFBhcmVudF0ua2V5LCBoW2hDdXJyXS5rZXkgKSkgewotICAg
ICAgbltjdXJyXS5oYW5kbGUgPSBoQ3VycjsKLSAgICAgIGhbaEN1cnJdLm5vZGUgPSBjdXJyOwot
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIG5bY3Vycl0uaGFuZGxlID0gaFBhcmVudDsKLSAgICBo
W2hQYXJlbnRdLm5vZGUgPSBjdXJyOwotICAgIGN1cnIgPSBwYXJlbnQ7Ci0gIH0KLX0KLQotLyog
cmVhbGx5IF9fZ2xfcHFIZWFwSW5pdCAqLwotdm9pZCBwcUluaXQoIFByaW9yaXR5USAqcHEgKQot
ewotICBsb25nIGk7Ci0KLSAgLyogVGhpcyBtZXRob2Qgb2YgYnVpbGRpbmcgYSBoZWFwIGlzIE8o
biksIHJhdGhlciB0aGFuIE8obiBsZyBuKS4gKi8KLQotICBmb3IoIGkgPSBwcS0+c2l6ZTsgaSA+
PSAxOyAtLWkgKSB7Ci0gICAgRmxvYXREb3duKCBwcSwgaSApOwotICB9Ci0gIHBxLT5pbml0aWFs
aXplZCA9IFRSVUU7Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxSGVhcEluc2VydCAqLwotLyogcmV0
dXJucyBMT05HX01BWCBpZmYgb3V0IG9mIG1lbW9yeSAqLwotUFFoYW5kbGUgcHFJbnNlcnQoIFBy
aW9yaXR5USAqcHEsIFBRa2V5IGtleU5ldyApCi17Ci0gIGxvbmcgY3VycjsKLSAgUFFoYW5kbGUg
ZnJlZTsKLQotICBjdXJyID0gKysgcHEtPnNpemU7Ci0gIGlmKCAoY3VycioyKSA+IHBxLT5tYXgg
KSB7Ci0gICAgUFFub2RlICpzYXZlTm9kZXM9IHBxLT5ub2RlczsKLSAgICBQUWhhbmRsZUVsZW0g
KnNhdmVIYW5kbGVzPSBwcS0+aGFuZGxlczsKLQotICAgIC8qIElmIHRoZSBoZWFwIG92ZXJmbG93
cywgZG91YmxlIGl0cyBzaXplLiAqLwotICAgIHBxLT5tYXggPDw9IDE7Ci0gICAgcHEtPm5vZGVz
ID0gKFBRbm9kZSAqKW1lbVJlYWxsb2MoIHBxLT5ub2RlcywgCi0JCQkJICAgICAoc2l6ZV90KSAK
LQkJCQkgICAgICgocHEtPm1heCArIDEpICogc2l6ZW9mKCBwcS0+bm9kZXNbMF0gKSkpOwotICAg
IGlmIChwcS0+bm9kZXMgPT0gTlVMTCkgewotICAgICAgIHBxLT5ub2RlcyA9IHNhdmVOb2RlczsJ
LyogcmVzdG9yZSBwdHIgdG8gZnJlZSB1cG9uIHJldHVybiAqLwotICAgICAgIHJldHVybiBMT05H
X01BWDsKLSAgICB9Ci0gICAgcHEtPmhhbmRsZXMgPSAoUFFoYW5kbGVFbGVtICopbWVtUmVhbGxv
YyggcHEtPmhhbmRsZXMsCi0JCQkgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KQotCQkJICAg
ICAgICAgICAgICAgICAgICAgICgocHEtPm1heCArIDEpICogCi0JCQkJCSAgICAgICBzaXplb2Yo
IHBxLT5oYW5kbGVzWzBdICkpKTsKLSAgICBpZiAocHEtPmhhbmRsZXMgPT0gTlVMTCkgewotICAg
ICAgIHBxLT5oYW5kbGVzID0gc2F2ZUhhbmRsZXM7IC8qIHJlc3RvcmUgcHRyIHRvIGZyZWUgdXBv
biByZXR1cm4gKi8KLSAgICAgICByZXR1cm4gTE9OR19NQVg7Ci0gICAgfQotICB9Ci0KLSAgaWYo
IHBxLT5mcmVlTGlzdCA9PSAwICkgewotICAgIGZyZWUgPSBjdXJyOwotICB9IGVsc2UgewotICAg
IGZyZWUgPSBwcS0+ZnJlZUxpc3Q7Ci0gICAgcHEtPmZyZWVMaXN0ID0gcHEtPmhhbmRsZXNbZnJl
ZV0ubm9kZTsKLSAgfQotCi0gIHBxLT5ub2Rlc1tjdXJyXS5oYW5kbGUgPSBmcmVlOwotICBwcS0+
aGFuZGxlc1tmcmVlXS5ub2RlID0gY3VycjsKLSAgcHEtPmhhbmRsZXNbZnJlZV0ua2V5ID0ga2V5
TmV3OwotCi0gIGlmKCBwcS0+aW5pdGlhbGl6ZWQgKSB7Ci0gICAgRmxvYXRVcCggcHEsIGN1cnIg
KTsKLSAgfQotICBhc3NlcnQoZnJlZSAhPSBMT05HX01BWCk7Ci0gIHJldHVybiBmcmVlOwotfQot
Ci0vKiByZWFsbHkgX19nbF9wcUhlYXBFeHRyYWN0TWluICovCi1QUWtleSBwcUV4dHJhY3RNaW4o
IFByaW9yaXR5USAqcHEgKQotewotICBQUW5vZGUgKm4gPSBwcS0+bm9kZXM7Ci0gIFBRaGFuZGxl
RWxlbSAqaCA9IHBxLT5oYW5kbGVzOwotICBQUWhhbmRsZSBoTWluID0gblsxXS5oYW5kbGU7Ci0g
IFBRa2V5IG1pbiA9IGhbaE1pbl0ua2V5OwotCi0gIGlmKCBwcS0+c2l6ZSA+IDAgKSB7Ci0gICAg
blsxXS5oYW5kbGUgPSBuW3BxLT5zaXplXS5oYW5kbGU7Ci0gICAgaFtuWzFdLmhhbmRsZV0ubm9k
ZSA9IDE7Ci0KLSAgICBoW2hNaW5dLmtleSA9IE5VTEw7Ci0gICAgaFtoTWluXS5ub2RlID0gcHEt
PmZyZWVMaXN0OwotICAgIHBxLT5mcmVlTGlzdCA9IGhNaW47Ci0KLSAgICBpZiggLS0gcHEtPnNp
emUgPiAwICkgewotICAgICAgRmxvYXREb3duKCBwcSwgMSApOwotICAgIH0KLSAgfQotICByZXR1
cm4gbWluOwotfQotCi0vKiByZWFsbHkgX19nbF9wcUhlYXBEZWxldGUgKi8KLXZvaWQgcHFEZWxl
dGUoIFByaW9yaXR5USAqcHEsIFBRaGFuZGxlIGhDdXJyICkKLXsKLSAgUFFub2RlICpuID0gcHEt
Pm5vZGVzOwotICBQUWhhbmRsZUVsZW0gKmggPSBwcS0+aGFuZGxlczsKLSAgbG9uZyBjdXJyOwot
Ci0gIGFzc2VydCggaEN1cnIgPj0gMSAmJiBoQ3VyciA8PSBwcS0+bWF4ICYmIGhbaEN1cnJdLmtl
eSAhPSBOVUxMICk7Ci0KLSAgY3VyciA9IGhbaEN1cnJdLm5vZGU7Ci0gIG5bY3Vycl0uaGFuZGxl
ID0gbltwcS0+c2l6ZV0uaGFuZGxlOwotICBoW25bY3Vycl0uaGFuZGxlXS5ub2RlID0gY3VycjsK
LQotICBpZiggY3VyciA8PSAtLSBwcS0+c2l6ZSApIHsKLSAgICBpZiggY3VyciA8PSAxIHx8IExF
USggaFtuW2N1cnI+PjFdLmhhbmRsZV0ua2V5LCBoW25bY3Vycl0uaGFuZGxlXS5rZXkgKSkgewot
ICAgICAgRmxvYXREb3duKCBwcSwgY3VyciApOwotICAgIH0gZWxzZSB7Ci0gICAgICBGbG9hdFVw
KCBwcSwgY3VyciApOwotICAgIH0KLSAgfQotICBoW2hDdXJyXS5rZXkgPSBOVUxMOwotICBoW2hD
dXJyXS5ub2RlID0gcHEtPmZyZWVMaXN0OwotICBwcS0+ZnJlZUxpc3QgPSBoQ3VycjsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmU0NDM0MzYzMzJiNjJmOGI3YWRjN2I4MjRhZTMzMjgy
ZGUyZTg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1oZWFwLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0
IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0
IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQot
KiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBj
b250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiog
b2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2Vy
dmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5
NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0Zy
ZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBT
b2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwg
RVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJ
TUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElF
UyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVB
TElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJ
TkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9w
ZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBK
YW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4g
VGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFw
aGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJk
IHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBw
bGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGlu
IGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIp
IEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFz
ZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxp
dHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsg
YW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChW
ZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoq
IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1w
bGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBl
bmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChS
KSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVy
aWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRl
cjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCM1ICQK
LSovCi0KLSNpZm5kZWYgX19wcmlvcml0eXFfaGVhcF9oXwotI2RlZmluZSBfX3ByaW9yaXR5cV9o
ZWFwX2hfCi0KLS8qIFVzZSAjZGVmaW5lJ3Mgc28gdGhhdCBhbm90aGVyIGhlYXAgaW1wbGVtZW50
YXRpb24gY2FuIHVzZSB0aGlzIG9uZSAqLwotCi0jZGVmaW5lIFBRa2V5CQkJUFFIZWFwS2V5Ci0j
ZGVmaW5lIFBRaGFuZGxlCQlQUUhlYXBIYW5kbGUKLSNkZWZpbmUgUHJpb3JpdHlRCQlQcmlvcml0
eVFIZWFwCi0KLSNkZWZpbmUgcHFOZXdQcmlvcml0eVEobGVxKQlfX2dsX3BxSGVhcE5ld1ByaW9y
aXR5UShsZXEpCi0jZGVmaW5lIHBxRGVsZXRlUHJpb3JpdHlRKHBxKQlfX2dsX3BxSGVhcERlbGV0
ZVByaW9yaXR5UShwcSkKLQotLyogVGhlIGJhc2ljIG9wZXJhdGlvbnMgYXJlIGluc2VydGlvbiBv
ZiBhIG5ldyBrZXkgKHBxSW5zZXJ0KSwKLSAqIGFuZCBleGFtaW5hdGlvbi9leHRyYWN0aW9uIG9m
IGEga2V5IHdob3NlIHZhbHVlIGlzIG1pbmltdW0KLSAqIChwcU1pbmltdW0vcHFFeHRyYWN0TWlu
KS4gIERlbGV0aW9uIGlzIGFsc28gYWxsb3dlZCAocHFEZWxldGUpOwotICogZm9yIHRoaXMgcHVy
cG9zZSBwcUluc2VydCByZXR1cm5zIGEgImhhbmRsZSIgd2hpY2ggaXMgc3VwcGxpZWQKLSAqIGFz
IHRoZSBhcmd1bWVudC4KLSAqCi0gKiBBbiBpbml0aWFsIGhlYXAgbWF5IGJlIGNyZWF0ZWQgZWZm
aWNpZW50bHkgYnkgY2FsbGluZyBwcUluc2VydAotICogcmVwZWF0ZWRseSwgdGhlbiBjYWxsaW5n
IHBxSW5pdC4gIEluIGFueSBjYXNlIHBxSW5pdCBtdXN0IGJlIGNhbGxlZAotICogYmVmb3JlIGFu
eSBvcGVyYXRpb25zIG90aGVyIHRoYW4gcHFJbnNlcnQgYXJlIHVzZWQuCi0gKgotICogSWYgdGhl
IGhlYXAgaXMgZW1wdHksIHBxTWluaW11bS9wcUV4dHJhY3RNaW4gd2lsbCByZXR1cm4gYSBOVUxM
IGtleS4KLSAqIFRoaXMgbWF5IGFsc28gYmUgdGVzdGVkIHdpdGggcHFJc0VtcHR5LgotICovCi0j
ZGVmaW5lIHBxSW5pdChwcSkJCV9fZ2xfcHFIZWFwSW5pdChwcSkKLSNkZWZpbmUgcHFJbnNlcnQo
cHEsa2V5KQlfX2dsX3BxSGVhcEluc2VydChwcSxrZXkpCi0jZGVmaW5lIHBxTWluaW11bShwcSkJ
CV9fZ2xfcHFIZWFwTWluaW11bShwcSkKLSNkZWZpbmUgcHFFeHRyYWN0TWluKHBxKQlfX2dsX3Bx
SGVhcEV4dHJhY3RNaW4ocHEpCi0jZGVmaW5lIHBxRGVsZXRlKHBxLGhhbmRsZSkJX19nbF9wcUhl
YXBEZWxldGUocHEsaGFuZGxlKQotI2RlZmluZSBwcUlzRW1wdHkocHEpCQlfX2dsX3BxSGVhcElz
RW1wdHkocHEpCi0KLQotLyogU2luY2Ugd2Ugc3VwcG9ydCBkZWxldGlvbiB0aGUgZGF0YSBzdHJ1
Y3R1cmUgaXMgYSBsaXR0bGUgbW9yZQotICogY29tcGxpY2F0ZWQgdGhhbiBhbiBvcmRpbmFyeSBo
ZWFwLiAgIm5vZGVzIiBpcyB0aGUgaGVhcCBpdHNlbGY7Ci0gKiBhY3RpdmUgbm9kZXMgYXJlIHN0
b3JlZCBpbiB0aGUgcmFuZ2UgMS4ucHEtPnNpemUuICBXaGVuIHRoZQotICogaGVhcCBleGNlZWRz
IGl0cyBhbGxvY2F0ZWQgc2l6ZSAocHEtPm1heCksIGl0cyBzaXplIGRvdWJsZXMuCi0gKiBUaGUg
Y2hpbGRyZW4gb2Ygbm9kZSBpIGFyZSBub2RlcyAyaSBhbmQgMmkrMS4KLSAqCi0gKiBFYWNoIG5v
ZGUgc3RvcmVzIGFuIGluZGV4IGludG8gYW4gYXJyYXkgImhhbmRsZXMiLiAgRWFjaCBoYW5kbGUK
LSAqIHN0b3JlcyBhIGtleSwgcGx1cyBhIHBvaW50ZXIgYmFjayB0byB0aGUgbm9kZSB3aGljaCBj
dXJyZW50bHkKLSAqIHJlcHJlc2VudHMgdGhhdCBrZXkgKGllLiBub2Rlc1toYW5kbGVzW2ldLm5v
ZGVdLmhhbmRsZSA9PSBpKS4KLSAqLwotCi10eXBlZGVmIHZvaWQgKlBRa2V5OwotdHlwZWRlZiBs
b25nIFBRaGFuZGxlOwotdHlwZWRlZiBzdHJ1Y3QgUHJpb3JpdHlRIFByaW9yaXR5UTsKLQotdHlw
ZWRlZiBzdHJ1Y3QgeyBQUWhhbmRsZSBoYW5kbGU7IH0gUFFub2RlOwotdHlwZWRlZiBzdHJ1Y3Qg
eyBQUWtleSBrZXk7IFBRaGFuZGxlIG5vZGU7IH0gUFFoYW5kbGVFbGVtOwotCi1zdHJ1Y3QgUHJp
b3JpdHlRIHsKLSAgUFFub2RlCSpub2RlczsKLSAgUFFoYW5kbGVFbGVtCSpoYW5kbGVzOwotICBs
b25nCQlzaXplLCBtYXg7Ci0gIFBRaGFuZGxlCWZyZWVMaXN0OwotICBpbnQJCWluaXRpYWxpemVk
OwotICBpbnQJCSgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKTsKLX07Ci0gIAotUHJpb3Jp
dHlRCSpwcU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKSAp
Owotdm9pZAkJcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKTsKLQotdm9pZAkJcHFJ
bml0KCBQcmlvcml0eVEgKnBxICk7Ci1QUWhhbmRsZQlwcUluc2VydCggUHJpb3JpdHlRICpwcSwg
UFFrZXkga2V5ICk7Ci1QUWtleQkJcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICk7Ci12b2lk
CQlwcURlbGV0ZSggUHJpb3JpdHlRICpwcSwgUFFoYW5kbGUgaGFuZGxlICk7Ci0KLQotI2RlZmlu
ZSBfX2dsX3BxSGVhcE1pbmltdW0ocHEpCSgocHEpLT5oYW5kbGVzWyhwcSktPm5vZGVzWzFdLmhh
bmRsZV0ua2V5KQotI2RlZmluZSBfX2dsX3BxSGVhcElzRW1wdHkocHEpCSgocHEpLT5zaXplID09
IDApCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mv
cHJpb3JpdHlxLXNvcnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS1zb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzJmMGQ0YjJjYjRmNTNm
M2M5Nzc5NTk0ZmUxNTQzNGMzOTRlOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLXNv
cnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBs
aWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJl
Ci0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQg
aW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUg
IkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25s
eSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0
aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
LCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1v
dW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNn
aS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0
aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMi
IGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJ
VElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkg
SU1QTElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFks
IFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBP
U0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3Jp
Z2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24g
MS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdy
YXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEt
MjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25z
IGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBo
ZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFBy
b3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3Rh
Ymxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUg
VGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNp
b24gMS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFw
aGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBO
b3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdp
bmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4g
VGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9u
IDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhh
cyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQg
d2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwot
LyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2
aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9wcmlv
cml0eXEtc29ydC5oIzUgJAotKi8KLQotI2lmbmRlZiBfX3ByaW9yaXR5cV9zb3J0X2hfCi0jZGVm
aW5lIF9fcHJpb3JpdHlxX3NvcnRfaF8KLQotI2luY2x1ZGUgInByaW9yaXR5cS1oZWFwLmgiCi0K
LSN1bmRlZiBQUWtleQotI3VuZGVmIFBRaGFuZGxlCi0jdW5kZWYgUHJpb3JpdHlRCi0jdW5kZWYg
cHFOZXdQcmlvcml0eVEKLSN1bmRlZiBwcURlbGV0ZVByaW9yaXR5UQotI3VuZGVmIHBxSW5pdAot
I3VuZGVmIHBxSW5zZXJ0Ci0jdW5kZWYgcHFNaW5pbXVtCi0jdW5kZWYgcHFFeHRyYWN0TWluCi0j
dW5kZWYgcHFEZWxldGUKLSN1bmRlZiBwcUlzRW1wdHkKLQotLyogVXNlICNkZWZpbmUncyBzbyB0
aGF0IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlvbiBjYW4gdXNlIHRoaXMgb25lICovCi0KLSNk
ZWZpbmUgUFFrZXkJCQlQUVNvcnRLZXkKLSNkZWZpbmUgUFFoYW5kbGUJCVBRU29ydEhhbmRsZQot
I2RlZmluZSBQcmlvcml0eVEJCVByaW9yaXR5UVNvcnQKLQotI2RlZmluZSBwcU5ld1ByaW9yaXR5
UShsZXEpCV9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRKGxlcSkKLSNkZWZpbmUgcHFEZWxldGVQcmlv
cml0eVEocHEpCV9fZ2xfcHFTb3J0RGVsZXRlUHJpb3JpdHlRKHBxKQotCi0vKiBUaGUgYmFzaWMg
b3BlcmF0aW9ucyBhcmUgaW5zZXJ0aW9uIG9mIGEgbmV3IGtleSAocHFJbnNlcnQpLAotICogYW5k
IGV4YW1pbmF0aW9uL2V4dHJhY3Rpb24gb2YgYSBrZXkgd2hvc2UgdmFsdWUgaXMgbWluaW11bQot
ICogKHBxTWluaW11bS9wcUV4dHJhY3RNaW4pLiAgRGVsZXRpb24gaXMgYWxzbyBhbGxvd2VkIChw
cURlbGV0ZSk7Ci0gKiBmb3IgdGhpcyBwdXJwb3NlIHBxSW5zZXJ0IHJldHVybnMgYSAiaGFuZGxl
IiB3aGljaCBpcyBzdXBwbGllZAotICogYXMgdGhlIGFyZ3VtZW50LgotICoKLSAqIEFuIGluaXRp
YWwgaGVhcCBtYXkgYmUgY3JlYXRlZCBlZmZpY2llbnRseSBieSBjYWxsaW5nIHBxSW5zZXJ0Ci0g
KiByZXBlYXRlZGx5LCB0aGVuIGNhbGxpbmcgcHFJbml0LiAgSW4gYW55IGNhc2UgcHFJbml0IG11
c3QgYmUgY2FsbGVkCi0gKiBiZWZvcmUgYW55IG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBwcUluc2Vy
dCBhcmUgdXNlZC4KLSAqCi0gKiBJZiB0aGUgaGVhcCBpcyBlbXB0eSwgcHFNaW5pbXVtL3BxRXh0
cmFjdE1pbiB3aWxsIHJldHVybiBhIE5VTEwga2V5LgotICogVGhpcyBtYXkgYWxzbyBiZSB0ZXN0
ZWQgd2l0aCBwcUlzRW1wdHkuCi0gKi8KLSNkZWZpbmUgcHFJbml0KHBxKQkJX19nbF9wcVNvcnRJ
bml0KHBxKQotI2RlZmluZSBwcUluc2VydChwcSxrZXkpCV9fZ2xfcHFTb3J0SW5zZXJ0KHBxLGtl
eSkKLSNkZWZpbmUgcHFNaW5pbXVtKHBxKQkJX19nbF9wcVNvcnRNaW5pbXVtKHBxKQotI2RlZmlu
ZSBwcUV4dHJhY3RNaW4ocHEpCV9fZ2xfcHFTb3J0RXh0cmFjdE1pbihwcSkKLSNkZWZpbmUgcHFE
ZWxldGUocHEsaGFuZGxlKQlfX2dsX3BxU29ydERlbGV0ZShwcSxoYW5kbGUpCi0jZGVmaW5lIHBx
SXNFbXB0eShwcSkJCV9fZ2xfcHFTb3J0SXNFbXB0eShwcSkKLQotCi0vKiBTaW5jZSB3ZSBzdXBw
b3J0IGRlbGV0aW9uIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyBhIGxpdHRsZSBtb3JlCi0gKiBjb21w
bGljYXRlZCB0aGFuIGFuIG9yZGluYXJ5IGhlYXAuICAibm9kZXMiIGlzIHRoZSBoZWFwIGl0c2Vs
ZjsKLSAqIGFjdGl2ZSBub2RlcyBhcmUgc3RvcmVkIGluIHRoZSByYW5nZSAxLi5wcS0+c2l6ZS4g
IFdoZW4gdGhlCi0gKiBoZWFwIGV4Y2VlZHMgaXRzIGFsbG9jYXRlZCBzaXplIChwcS0+bWF4KSwg
aXRzIHNpemUgZG91Ymxlcy4KLSAqIFRoZSBjaGlsZHJlbiBvZiBub2RlIGkgYXJlIG5vZGVzIDJp
IGFuZCAyaSsxLgotICoKLSAqIEVhY2ggbm9kZSBzdG9yZXMgYW4gaW5kZXggaW50byBhbiBhcnJh
eSAiaGFuZGxlcyIuICBFYWNoIGhhbmRsZQotICogc3RvcmVzIGEga2V5LCBwbHVzIGEgcG9pbnRl
ciBiYWNrIHRvIHRoZSBub2RlIHdoaWNoIGN1cnJlbnRseQotICogcmVwcmVzZW50cyB0aGF0IGtl
eSAoaWUuIG5vZGVzW2hhbmRsZXNbaV0ubm9kZV0uaGFuZGxlID09IGkpLgotICovCi0KLXR5cGVk
ZWYgUFFIZWFwS2V5IFBRa2V5OwotdHlwZWRlZiBQUUhlYXBIYW5kbGUgUFFoYW5kbGU7Ci10eXBl
ZGVmIHN0cnVjdCBQcmlvcml0eVEgUHJpb3JpdHlROwotCi1zdHJ1Y3QgUHJpb3JpdHlRIHsKLSAg
UHJpb3JpdHlRSGVhcAkqaGVhcDsKLSAgUFFrZXkJCSprZXlzOwotICBQUWtleQkJKipvcmRlcjsK
LSAgUFFoYW5kbGUJc2l6ZSwgbWF4OwotICBpbnQJCWluaXRpYWxpemVkOwotICBpbnQJCSgqbGVx
KShQUWtleSBrZXkxLCBQUWtleSBrZXkyKTsKLX07Ci0gIAotUHJpb3JpdHlRCSpwcU5ld1ByaW9y
aXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKSApOwotdm9pZAkJcHFEZWxl
dGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKTsKLQotaW50CQlwcUluaXQoIFByaW9yaXR5USAq
cHEgKTsKLVBRaGFuZGxlCXBxSW5zZXJ0KCBQcmlvcml0eVEgKnBxLCBQUWtleSBrZXkgKTsKLVBR
a2V5CQlwcUV4dHJhY3RNaW4oIFByaW9yaXR5USAqcHEgKTsKLXZvaWQJCXBxRGVsZXRlKCBQcmlv
cml0eVEgKnBxLCBQUWhhbmRsZSBoYW5kbGUgKTsKLQotUFFrZXkJCXBxTWluaW11bSggUHJpb3Jp
dHlRICpwcSApOwotaW50CQlwcUlzRW1wdHkoIFByaW9yaXR5USAqcHEgKTsKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA0YjllMWFlYWUwMzRmZDEyOGU3MGZhYWNkNzc0NzliYmZmMmQxNzAzLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICsw
LDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUgZXh0ZW50
IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBhbHRlcm5h
dGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3YXJlIExp
Y2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMgb2YgdGhp
cwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoZSBMaWNl
bnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBMaWNlbnNl
IGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAxNjAwCi0q
KiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1MSwgb3Ig
YXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiogCi0qKiBO
b3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUgaXMgZGlz
dHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1MgQU5EIElN
UExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5DTFVESU5H
LCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0qKiBDT05E
SVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1Mg
Rk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCi0qKiAK
LSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2FtcGxlIElt
cGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAyNiwgMjAw
MCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KLSoq
IENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGlzIGFz
IGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSoq
IAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9uIHByb2dy
YW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5jdGlvbiB3
aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0
ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBBcHJpbCAx
LCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJhcnkgKFZl
cnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVuR0woUikg
R3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAxLjMpLCBy
ZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3JlYXRlZCB1
c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0aW9uCi0q
KiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkgdmVyaWZp
ZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIu
MSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNoLCBKdWx5
IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVwb3QvbWFp
bi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jIzUgJAotKi8KLQotI2luY2x1ZGUgImds
dW9zLmgiCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVk
ZSA8bGltaXRzLmg+CQkvKiBMT05HX01BWCAqLwotI2luY2x1ZGUgIm1lbWFsbG9jLmgiCi0KLS8q
IEluY2x1ZGUgYWxsIHRoZSBjb2RlIGZvciB0aGUgcmVndWxhciBoZWFwLWJhc2VkIHF1ZXVlIGhl
cmUuICovCi0KLSNpbmNsdWRlICJwcmlvcml0eXEtaGVhcC5jIgotCi0vKiBOb3cgcmVkZWZpbmUg
YWxsIHRoZSBmdW5jdGlvbiBuYW1lcyB0byBtYXAgdG8gdGhlaXIgIlNvcnQiIHZlcnNpb25zLiAq
LwotCi0jaW5jbHVkZSAicHJpb3JpdHlxLXNvcnQuaCIKLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0
TmV3UHJpb3JpdHlRICovCi1Qcmlvcml0eVEgKnBxTmV3UHJpb3JpdHlRKCBpbnQgKCpsZXEpKFBR
a2V5IGtleTEsIFBRa2V5IGtleTIpICkKLXsKLSAgUHJpb3JpdHlRICpwcSA9IChQcmlvcml0eVEg
KiltZW1BbGxvYyggc2l6ZW9mKCBQcmlvcml0eVEgKSk7Ci0gIGlmIChwcSA9PSBOVUxMKSByZXR1
cm4gTlVMTDsKLQotICBwcS0+aGVhcCA9IF9fZ2xfcHFIZWFwTmV3UHJpb3JpdHlRKCBsZXEgKTsK
LSAgaWYgKHBxLT5oZWFwID09IE5VTEwpIHsKLSAgICAgbWVtRnJlZShwcSk7Ci0gICAgIHJldHVy
biBOVUxMOwotICB9Ci0KLSAgcHEtPmtleXMgPSAoUFFIZWFwS2V5ICopbWVtQWxsb2MoIElOSVRf
U0laRSAqIHNpemVvZihwcS0+a2V5c1swXSkgKTsKLSAgaWYgKHBxLT5rZXlzID09IE5VTEwpIHsK
LSAgICAgX19nbF9wcUhlYXBEZWxldGVQcmlvcml0eVEocHEtPmhlYXApOwotICAgICBtZW1GcmVl
KHBxKTsKLSAgICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBwcS0+c2l6ZSA9IDA7Ci0gIHBxLT5t
YXggPSBJTklUX1NJWkU7Ci0gIHBxLT5pbml0aWFsaXplZCA9IEZBTFNFOwotICBwcS0+bGVxID0g
bGVxOwotICByZXR1cm4gcHE7Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxU29ydERlbGV0ZVByaW9y
aXR5USAqLwotdm9pZCBwcURlbGV0ZVByaW9yaXR5USggUHJpb3JpdHlRICpwcSApCi17Ci0gIGFz
c2VydChwcSAhPSBOVUxMKTsgCi0gIGlmIChwcS0+aGVhcCAhPSBOVUxMKSBfX2dsX3BxSGVhcERl
bGV0ZVByaW9yaXR5USggcHEtPmhlYXAgKTsKLSAgaWYgKHBxLT5vcmRlciAhPSBOVUxMKSBtZW1G
cmVlKCBwcS0+b3JkZXIgKTsKLSAgaWYgKHBxLT5rZXlzICE9IE5VTEwpIG1lbUZyZWUoIHBxLT5r
ZXlzICk7Ci0gIG1lbUZyZWUoIHBxICk7Ci19Ci0KLQotI2RlZmluZSBMVCh4LHkpCQkoISBMRVEo
eSx4KSkKLSNkZWZpbmUgR1QoeCx5KQkJKCEgTEVRKHgseSkpCi0jZGVmaW5lIFN3YXAoYSxiKQlk
b3tQUWtleSAqdG1wID0gKmE7ICphID0gKmI7ICpiID0gdG1wO313aGlsZSgwKQotCi0vKiByZWFs
bHkgX19nbF9wcVNvcnRJbml0ICovCi1pbnQgcHFJbml0KCBQcmlvcml0eVEgKnBxICkKLXsKLSAg
UFFrZXkgKipwLCAqKnIsICoqaSwgKipqLCAqcGl2OwotICBzdHJ1Y3QgeyBQUWtleSAqKnAsICoq
cjsgfSBTdGFja1s1MF0sICp0b3AgPSBTdGFjazsKLSAgdW5zaWduZWQgbG9uZyBzZWVkID0gMjAx
NjQ3MzI4MzsKLQotICAvKiBDcmVhdGUgYW4gYXJyYXkgb2YgaW5kaXJlY3QgcG9pbnRlcnMgdG8g
dGhlIGtleXMsIHNvIHRoYXQgd2UKLSAgICogdGhlIGhhbmRsZXMgd2UgaGF2ZSByZXR1cm5lZCBh
cmUgc3RpbGwgdmFsaWQuCi0gICAqLwotLyoKLSAgcHEtPm9yZGVyID0gKFBRSGVhcEtleSAqKilt
ZW1BbGxvYyggKHNpemVfdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHEt
PnNpemUgKiBzaXplb2YocHEtPm9yZGVyWzBdKSkgKTsKLSovCi0gIHBxLT5vcmRlciA9IChQUUhl
YXBLZXkgKiopbWVtQWxsb2MoIChzaXplX3QpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKChwcS0+c2l6ZSsxKSAqIHNpemVvZihwcS0+b3JkZXJbMF0pKSApOwotLyogdGhlIHBy
ZXZpb3VzIGxpbmUgaXMgYSBwYXRjaCB0byBjb21wZW5zYXRlIGZvciB0aGUgZmFjdCB0aGF0IElC
TSAqLwotLyogbWFjaGluZXMgcmV0dXJuIGEgbnVsbCBvbiBhIG1hbGxvYyBvZiB6ZXJvIGJ5dGVz
ICh1bmxpa2UgU0dJKSwgICAqLwotLyogc28gd2UgaGF2ZSB0byBwdXQgaW4gdGhpcyBkZWZlbnNl
IHRvIGd1YXJkIGFnYWluc3QgYSBtZW1vcnkgICAgICAqLwotLyogZmF1bHQgZm91ciBsaW5lcyBk
b3duLiBmcm9tIGZvc3N1bUBhdXN0aW4uaWJtLmNvbS4gICAgICAgICAgICAgICAqLwotICBpZiAo
cHEtPm9yZGVyID09IE5VTEwpIHJldHVybiAwOwotCi0gIHAgPSBwcS0+b3JkZXI7Ci0gIHIgPSBw
ICsgcHEtPnNpemUgLSAxOwotICBmb3IoIHBpdiA9IHBxLT5rZXlzLCBpID0gcDsgaSA8PSByOyAr
K3BpdiwgKytpICkgewotICAgICppID0gcGl2OwotICB9Ci0KLSAgLyogU29ydCB0aGUgaW5kaXJl
Y3QgcG9pbnRlcnMgaW4gZGVzY2VuZGluZyBvcmRlciwKLSAgICogdXNpbmcgcmFuZG9taXplZCBR
dWlja3NvcnQKLSAgICovCi0gIHRvcC0+cCA9IHA7IHRvcC0+ciA9IHI7ICsrdG9wOwotICB3aGls
ZSggLS10b3AgPj0gU3RhY2sgKSB7Ci0gICAgcCA9IHRvcC0+cDsKLSAgICByID0gdG9wLT5yOwot
ICAgIHdoaWxlKCByID4gcCArIDEwICkgewotICAgICAgc2VlZCA9IHNlZWQgKiAxNTM5NDE1ODIx
ICsgMTsKLSAgICAgIGkgPSBwICsgc2VlZCAlIChyIC0gcCArIDEpOwotICAgICAgcGl2ID0gKmk7
Ci0gICAgICAqaSA9ICpwOwotICAgICAgKnAgPSBwaXY7Ci0gICAgICBpID0gcCAtIDE7Ci0gICAg
ICBqID0gciArIDE7Ci0gICAgICBkbyB7Ci0JZG8geyArK2k7IH0gd2hpbGUoIEdUKCAqKmksICpw
aXYgKSk7Ci0JZG8geyAtLWo7IH0gd2hpbGUoIExUKCAqKmosICpwaXYgKSk7Ci0JU3dhcCggaSwg
aiApOwotICAgICAgfSB3aGlsZSggaSA8IGogKTsKLSAgICAgIFN3YXAoIGksIGogKTsJLyogVW5k
byBsYXN0IHN3YXAgKi8KLSAgICAgIGlmKCBpIC0gcCA8IHIgLSBqICkgewotCXRvcC0+cCA9IGor
MTsgdG9wLT5yID0gcjsgKyt0b3A7Ci0JciA9IGktMTsKLSAgICAgIH0gZWxzZSB7Ci0JdG9wLT5w
ID0gcDsgdG9wLT5yID0gaS0xOyArK3RvcDsKLQlwID0gaisxOwotICAgICAgfQotICAgIH0KLSAg
ICAvKiBJbnNlcnRpb24gc29ydCBzbWFsbCBsaXN0cyAqLwotICAgIGZvciggaSA9IHArMTsgaSA8
PSByOyArK2kgKSB7Ci0gICAgICBwaXYgPSAqaTsKLSAgICAgIGZvciggaiA9IGk7IGogPiBwICYm
IExUKCAqKihqLTEpLCAqcGl2ICk7IC0taiApIHsKLQkqaiA9ICooai0xKTsKLSAgICAgIH0KLSAg
ICAgICpqID0gcGl2OwotICAgIH0KLSAgfQotICBwcS0+bWF4ID0gcHEtPnNpemU7Ci0gIHBxLT5p
bml0aWFsaXplZCA9IFRSVUU7Ci0gIF9fZ2xfcHFIZWFwSW5pdCggcHEtPmhlYXAgKTsJLyogYWx3
YXlzIHN1Y2NlZWRzICovCi0KLSNpZm5kZWYgTkRFQlVHCi0gIHAgPSBwcS0+b3JkZXI7Ci0gIHIg
PSBwICsgcHEtPnNpemUgLSAxOwotICBmb3IoIGkgPSBwOyBpIDwgcjsgKytpICkgewotICAgIGFz
c2VydCggTEVRKCAqKihpKzEpLCAqKmkgKSk7Ci0gIH0KLSNlbmRpZgotCi0gIHJldHVybiAxOwot
fQotCi0vKiByZWFsbHkgX19nbF9wcVNvcnRJbnNlcnQgKi8KLS8qIHJldHVybnMgTE9OR19NQVgg
aWZmIG91dCBvZiBtZW1vcnkgKi8gCi1QUWhhbmRsZSBwcUluc2VydCggUHJpb3JpdHlRICpwcSwg
UFFrZXkga2V5TmV3ICkKLXsKLSAgbG9uZyBjdXJyOwotCi0gIGlmKCBwcS0+aW5pdGlhbGl6ZWQg
KSB7Ci0gICAgcmV0dXJuIF9fZ2xfcHFIZWFwSW5zZXJ0KCBwcS0+aGVhcCwga2V5TmV3ICk7Ci0g
IH0KLSAgY3VyciA9IHBxLT5zaXplOwotICBpZiggKysgcHEtPnNpemUgPj0gcHEtPm1heCApIHsK
LSAgICBQUWtleSAqc2F2ZUtleT0gcHEtPmtleXM7Ci0KLSAgICAvKiBJZiB0aGUgaGVhcCBvdmVy
Zmxvd3MsIGRvdWJsZSBpdHMgc2l6ZS4gKi8KLSAgICBwcS0+bWF4IDw8PSAxOwotICAgIHBxLT5r
ZXlzID0gKFBRSGVhcEtleSAqKW1lbVJlYWxsb2MoIHBxLT5rZXlzLCAKLQkgCSAgICAgICAgICAg
ICAgICAgICAgICAgIChzaXplX3QpCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHBxLT5tYXggKiBzaXplb2YoIHBxLT5rZXlzWzBdICkpKTsKLSAgICBpZiAocHEtPmtleXMgPT0g
TlVMTCkgewkKLSAgICAgICBwcS0+a2V5cyA9IHNhdmVLZXk7CS8qIHJlc3RvcmUgcHRyIHRvIGZy
ZWUgdXBvbiByZXR1cm4gKi8KLSAgICAgICByZXR1cm4gTE9OR19NQVg7Ci0gICAgfQotICB9Ci0g
IGFzc2VydChjdXJyICE9IExPTkdfTUFYKTsJCi0gIHBxLT5rZXlzW2N1cnJdID0ga2V5TmV3Owot
Ci0gIC8qIE5lZ2F0aXZlIGhhbmRsZXMgaW5kZXggdGhlIHNvcnRlZCBhcnJheS4gKi8KLSAgcmV0
dXJuIC0oY3VycisxKTsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0RXh0cmFjdE1pbiAqLwot
UFFrZXkgcHFFeHRyYWN0TWluKCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgc29ydE1pbiwg
aGVhcE1pbjsKLQotICBpZiggcHEtPnNpemUgPT0gMCApIHsKLSAgICByZXR1cm4gX19nbF9wcUhl
YXBFeHRyYWN0TWluKCBwcS0+aGVhcCApOwotICB9Ci0gIHNvcnRNaW4gPSAqKHBxLT5vcmRlcltw
cS0+c2l6ZS0xXSk7Ci0gIGlmKCAhIF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKSkgewot
ICAgIGhlYXBNaW4gPSBfX2dsX3BxSGVhcE1pbmltdW0oIHBxLT5oZWFwICk7Ci0gICAgaWYoIExF
USggaGVhcE1pbiwgc29ydE1pbiApKSB7Ci0gICAgICByZXR1cm4gX19nbF9wcUhlYXBFeHRyYWN0
TWluKCBwcS0+aGVhcCApOwotICAgIH0KLSAgfQotICBkbyB7Ci0gICAgLS0gcHEtPnNpemU7Ci0g
IH0gd2hpbGUoIHBxLT5zaXplID4gMCAmJiAqKHBxLT5vcmRlcltwcS0+c2l6ZS0xXSkgPT0gTlVM
TCApOwotICByZXR1cm4gc29ydE1pbjsKLX0KLQotLyogcmVhbGx5IF9fZ2xfcHFTb3J0TWluaW11
bSAqLwotUFFrZXkgcHFNaW5pbXVtKCBQcmlvcml0eVEgKnBxICkKLXsKLSAgUFFrZXkgc29ydE1p
biwgaGVhcE1pbjsKLQotICBpZiggcHEtPnNpemUgPT0gMCApIHsKLSAgICByZXR1cm4gX19nbF9w
cUhlYXBNaW5pbXVtKCBwcS0+aGVhcCApOwotICB9Ci0gIHNvcnRNaW4gPSAqKHBxLT5vcmRlcltw
cS0+c2l6ZS0xXSk7Ci0gIGlmKCAhIF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKSkgewot
ICAgIGhlYXBNaW4gPSBfX2dsX3BxSGVhcE1pbmltdW0oIHBxLT5oZWFwICk7Ci0gICAgaWYoIExF
USggaGVhcE1pbiwgc29ydE1pbiApKSB7Ci0gICAgICByZXR1cm4gaGVhcE1pbjsKLSAgICB9Ci0g
IH0KLSAgcmV0dXJuIHNvcnRNaW47Ci19Ci0KLS8qIHJlYWxseSBfX2dsX3BxU29ydElzRW1wdHkg
Ki8KLWludCBwcUlzRW1wdHkoIFByaW9yaXR5USAqcHEgKQotewotICByZXR1cm4gKHBxLT5zaXpl
ID09IDApICYmIF9fZ2xfcHFIZWFwSXNFbXB0eSggcHEtPmhlYXAgKTsKLX0KLQotLyogcmVhbGx5
IF9fZ2xfcHFTb3J0RGVsZXRlICovCi12b2lkIHBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhh
bmRsZSBjdXJyICkKLXsKLSAgaWYoIGN1cnIgPj0gMCApIHsKLSAgICBfX2dsX3BxSGVhcERlbGV0
ZSggcHEtPmhlYXAsIGN1cnIgKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgY3VyciA9IC0oY3Vycisx
KTsKLSAgYXNzZXJ0KCBjdXJyIDwgcHEtPm1heCAmJiBwcS0+a2V5c1tjdXJyXSAhPSBOVUxMICk7
Ci0KLSAgcHEtPmtleXNbY3Vycl0gPSBOVUxMOwotICB3aGlsZSggcHEtPnNpemUgPiAwICYmICoo
cHEtPm9yZGVyW3BxLT5zaXplLTFdKSA9PSBOVUxMICkgewotICAgIC0tIHBxLT5zaXplOwotICB9
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzYWU2YjBjMjYyOWMyYTk2MDQ0YmZmZmY0YWMyNWFkMzIyYWFi
NDFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTI0ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4Y2VwdCB0byB0aGUg
ZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3ViamVjdCB0byBhbiBh
bHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZyZWUKLSoqIFNvZnR3
YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0aGUgY29udGVudHMg
b2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92aXNpb25zIG9mIHRo
ZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxp
YW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkKLSoqIG9mIHRoZSBM
aWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2FsIFNlcnZpY2VzLCAx
NjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMtMTM1
MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9GcmVlQgotKiog
Ci0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0aGUgU29mdHdhcmUg
aXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGggQUxMIEVYUFJFU1Mg
QU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElTQ0xBSU1FRCwgSU5D
TFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5ECi0q
KiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJ
VE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQu
Ci0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlzOiBPcGVuR0wgU2Ft
cGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFzZWQgSmFudWFyeSAy
NiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJbmMuIFRoZSBPcmln
aW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24gR3JhcGhpY3MsIElu
Yy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0aGlyZCBwYXJ0aWVz
IGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhlIGFwcGxpY2F0aW9u
IHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNHSSBpbiBjb25qdW5j
dGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5HTChSKSBHcmFwaGlj
cyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJlbGVhc2VkCi0qKiBB
cHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBVdGlsaXR5IExpYnJh
cnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5OTg7IGFuZCBPcGVu
R0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShSKSAoVmVyc2lvbiAx
LjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJlCi0qKiB3YXMgY3Jl
YXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxlIEltcGxlbWVudGF0
aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGluZGVwZW5kZW50bHkg
dmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVuR0woUikgdmVyc2lv
biAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9yOiBFcmljIFZlYWNo
LCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRIZWFkZXI6IC8vZGVw
b3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5oIzUgJAotKi8KLQotI2lmbmRl
ZiBfX3ByaW9yaXR5cV9zb3J0X2hfCi0jZGVmaW5lIF9fcHJpb3JpdHlxX3NvcnRfaF8KLQotI2lu
Y2x1ZGUgInByaW9yaXR5cS1oZWFwLmgiCi0KLSN1bmRlZiBQUWtleQotI3VuZGVmIFBRaGFuZGxl
Ci0jdW5kZWYgUHJpb3JpdHlRCi0jdW5kZWYgcHFOZXdQcmlvcml0eVEKLSN1bmRlZiBwcURlbGV0
ZVByaW9yaXR5UQotI3VuZGVmIHBxSW5pdAotI3VuZGVmIHBxSW5zZXJ0Ci0jdW5kZWYgcHFNaW5p
bXVtCi0jdW5kZWYgcHFFeHRyYWN0TWluCi0jdW5kZWYgcHFEZWxldGUKLSN1bmRlZiBwcUlzRW1w
dHkKLQotLyogVXNlICNkZWZpbmUncyBzbyB0aGF0IGFub3RoZXIgaGVhcCBpbXBsZW1lbnRhdGlv
biBjYW4gdXNlIHRoaXMgb25lICovCi0KLSNkZWZpbmUgUFFrZXkJCQlQUVNvcnRLZXkKLSNkZWZp
bmUgUFFoYW5kbGUJCVBRU29ydEhhbmRsZQotI2RlZmluZSBQcmlvcml0eVEJCVByaW9yaXR5UVNv
cnQKLQotI2RlZmluZSBwcU5ld1ByaW9yaXR5UShsZXEpCV9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlR
KGxlcSkKLSNkZWZpbmUgcHFEZWxldGVQcmlvcml0eVEocHEpCV9fZ2xfcHFTb3J0RGVsZXRlUHJp
b3JpdHlRKHBxKQotCi0vKiBUaGUgYmFzaWMgb3BlcmF0aW9ucyBhcmUgaW5zZXJ0aW9uIG9mIGEg
bmV3IGtleSAocHFJbnNlcnQpLAotICogYW5kIGV4YW1pbmF0aW9uL2V4dHJhY3Rpb24gb2YgYSBr
ZXkgd2hvc2UgdmFsdWUgaXMgbWluaW11bQotICogKHBxTWluaW11bS9wcUV4dHJhY3RNaW4pLiAg
RGVsZXRpb24gaXMgYWxzbyBhbGxvd2VkIChwcURlbGV0ZSk7Ci0gKiBmb3IgdGhpcyBwdXJwb3Nl
IHBxSW5zZXJ0IHJldHVybnMgYSAiaGFuZGxlIiB3aGljaCBpcyBzdXBwbGllZAotICogYXMgdGhl
IGFyZ3VtZW50LgotICoKLSAqIEFuIGluaXRpYWwgaGVhcCBtYXkgYmUgY3JlYXRlZCBlZmZpY2ll
bnRseSBieSBjYWxsaW5nIHBxSW5zZXJ0Ci0gKiByZXBlYXRlZGx5LCB0aGVuIGNhbGxpbmcgcHFJ
bml0LiAgSW4gYW55IGNhc2UgcHFJbml0IG11c3QgYmUgY2FsbGVkCi0gKiBiZWZvcmUgYW55IG9w
ZXJhdGlvbnMgb3RoZXIgdGhhbiBwcUluc2VydCBhcmUgdXNlZC4KLSAqCi0gKiBJZiB0aGUgaGVh
cCBpcyBlbXB0eSwgcHFNaW5pbXVtL3BxRXh0cmFjdE1pbiB3aWxsIHJldHVybiBhIE5VTEwga2V5
LgotICogVGhpcyBtYXkgYWxzbyBiZSB0ZXN0ZWQgd2l0aCBwcUlzRW1wdHkuCi0gKi8KLSNkZWZp
bmUgcHFJbml0KHBxKQkJX19nbF9wcVNvcnRJbml0KHBxKQotI2RlZmluZSBwcUluc2VydChwcSxr
ZXkpCV9fZ2xfcHFTb3J0SW5zZXJ0KHBxLGtleSkKLSNkZWZpbmUgcHFNaW5pbXVtKHBxKQkJX19n
bF9wcVNvcnRNaW5pbXVtKHBxKQotI2RlZmluZSBwcUV4dHJhY3RNaW4ocHEpCV9fZ2xfcHFTb3J0
RXh0cmFjdE1pbihwcSkKLSNkZWZpbmUgcHFEZWxldGUocHEsaGFuZGxlKQlfX2dsX3BxU29ydERl
bGV0ZShwcSxoYW5kbGUpCi0jZGVmaW5lIHBxSXNFbXB0eShwcSkJCV9fZ2xfcHFTb3J0SXNFbXB0
eShwcSkKLQotCi0vKiBTaW5jZSB3ZSBzdXBwb3J0IGRlbGV0aW9uIHRoZSBkYXRhIHN0cnVjdHVy
ZSBpcyBhIGxpdHRsZSBtb3JlCi0gKiBjb21wbGljYXRlZCB0aGFuIGFuIG9yZGluYXJ5IGhlYXAu
ICAibm9kZXMiIGlzIHRoZSBoZWFwIGl0c2VsZjsKLSAqIGFjdGl2ZSBub2RlcyBhcmUgc3RvcmVk
IGluIHRoZSByYW5nZSAxLi5wcS0+c2l6ZS4gIFdoZW4gdGhlCi0gKiBoZWFwIGV4Y2VlZHMgaXRz
IGFsbG9jYXRlZCBzaXplIChwcS0+bWF4KSwgaXRzIHNpemUgZG91Ymxlcy4KLSAqIFRoZSBjaGls
ZHJlbiBvZiBub2RlIGkgYXJlIG5vZGVzIDJpIGFuZCAyaSsxLgotICoKLSAqIEVhY2ggbm9kZSBz
dG9yZXMgYW4gaW5kZXggaW50byBhbiBhcnJheSAiaGFuZGxlcyIuICBFYWNoIGhhbmRsZQotICog
c3RvcmVzIGEga2V5LCBwbHVzIGEgcG9pbnRlciBiYWNrIHRvIHRoZSBub2RlIHdoaWNoIGN1cnJl
bnRseQotICogcmVwcmVzZW50cyB0aGF0IGtleSAoaWUuIG5vZGVzW2hhbmRsZXNbaV0ubm9kZV0u
aGFuZGxlID09IGkpLgotICovCi0KLXR5cGVkZWYgUFFIZWFwS2V5IFBRa2V5OwotdHlwZWRlZiBQ
UUhlYXBIYW5kbGUgUFFoYW5kbGU7Ci10eXBlZGVmIHN0cnVjdCBQcmlvcml0eVEgUHJpb3JpdHlR
OwotCi1zdHJ1Y3QgUHJpb3JpdHlRIHsKLSAgUHJpb3JpdHlRSGVhcAkqaGVhcDsKLSAgUFFrZXkJ
CSprZXlzOwotICBQUWtleQkJKipvcmRlcjsKLSAgUFFoYW5kbGUJc2l6ZSwgbWF4OwotICBpbnQJ
CWluaXRpYWxpemVkOwotICBpbnQJCSgqbGVxKShQUWtleSBrZXkxLCBQUWtleSBrZXkyKTsKLX07
Ci0gIAotUHJpb3JpdHlRCSpwcU5ld1ByaW9yaXR5USggaW50ICgqbGVxKShQUWtleSBrZXkxLCBQ
UWtleSBrZXkyKSApOwotdm9pZAkJcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKTsK
LQotaW50CQlwcUluaXQoIFByaW9yaXR5USAqcHEgKTsKLVBRaGFuZGxlCXBxSW5zZXJ0KCBQcmlv
cml0eVEgKnBxLCBQUWtleSBrZXkgKTsKLVBRa2V5CQlwcUV4dHJhY3RNaW4oIFByaW9yaXR5USAq
cHEgKTsKLXZvaWQJCXBxRGVsZXRlKCBQcmlvcml0eVEgKnBxLCBQUWhhbmRsZSBoYW5kbGUgKTsK
LQotUFFrZXkJCXBxTWluaW11bSggUHJpb3JpdHlRICpwcSApOwotaW50CQlwcUlzRW1wdHkoIFBy
aW9yaXR5USAqcHEgKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9n
bHUvbGlidGVzcy9yZW5kZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRl
ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmYxMjk4NDI2OTliYTIwYzcwZjFl
NmM4MmNjYWY2OWE5MTA1N2E3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jCisrKyAvZGV2
L251bGwKQEAgLTEsNTA1ICswLDAgQEAKLS8qCi0qKiBMaWNlbnNlIEFwcGxpY2FiaWxpdHkuIEV4
Y2VwdCB0byB0aGUgZXh0ZW50IHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUKLSoqIG1hZGUgc3Vi
amVjdCB0byBhbiBhbHRlcm5hdGl2ZSBsaWNlbnNlIGFzIHBlcm1pdHRlZCBpbiB0aGUgU0dJIEZy
ZWUKLSoqIFNvZnR3YXJlIExpY2Vuc2UgQiwgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpLCB0
aGUgY29udGVudHMgb2YgdGhpcwotKiogZmlsZSBhcmUgc3ViamVjdCBvbmx5IHRvIHRoZSBwcm92
aXNpb25zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCB1c2UKLSoqIHRoaXMgZmlsZSBleGNl
cHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkK
LSoqIG9mIHRoZSBMaWNlbnNlIGF0IFNpbGljb24gR3JhcGhpY3MsIEluYy4sIGF0dG46IExlZ2Fs
IFNlcnZpY2VzLCAxNjAwCi0qKiBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywg
Q0EgOTQwNDMtMTM1MSwgb3IgYXQ6Ci0qKiAKLSoqIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0
cy9GcmVlQgotKiogCi0qKiBOb3RlIHRoYXQsIGFzIHByb3ZpZGVkIGluIHRoZSBMaWNlbnNlLCB0
aGUgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSoqICJBUyBJUyIgYmFzaXMsIHdpdGgg
QUxMIEVYUFJFU1MgQU5EIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUwotKiogRElT
Q0xBSU1FRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJB
TlRJRVMgQU5ECi0qKiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZ
IFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKLSoqIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1J
TkZSSU5HRU1FTlQuCi0qKiAKLSoqIE9yaWdpbmFsIENvZGUuIFRoZSBPcmlnaW5hbCBDb2RlIGlz
OiBPcGVuR0wgU2FtcGxlIEltcGxlbWVudGF0aW9uLAotKiogVmVyc2lvbiAxLjIuMSwgcmVsZWFz
ZWQgSmFudWFyeSAyNiwgMjAwMCwgZGV2ZWxvcGVkIGJ5IFNpbGljb24gR3JhcGhpY3MsCi0qKiBJ
bmMuIFRoZSBPcmlnaW5hbCBDb2RlIGlzIENvcHlyaWdodCAoYykgMTk5MS0yMDAwIFNpbGljb24g
R3JhcGhpY3MsIEluYy4KLSoqIENvcHlyaWdodCBpbiBhbnkgcG9ydGlvbnMgY3JlYXRlZCBieSB0
aGlyZCBwYXJ0aWVzIGlzIGFzIGluZGljYXRlZAotKiogZWxzZXdoZXJlIGhlcmVpbi4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSoqIAotKiogQWRkaXRpb25hbCBOb3RpY2UgUHJvdmlzaW9uczogVGhl
IGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZXMKLSoqIGVzdGFibGlzaGVkIGJ5IFNH
SSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBPcmlnaW5hbCBDb2RlIGFyZSBUaGUKLSoqIE9wZW5H
TChSKSBHcmFwaGljcyBTeXN0ZW06IEEgU3BlY2lmaWNhdGlvbiAoVmVyc2lvbiAxLjIuMSksIHJl
bGVhc2VkCi0qKiBBcHJpbCAxLCAxOTk5OyBUaGUgT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbSBV
dGlsaXR5IExpYnJhcnkgKFZlcnNpb24KLSoqIDEuMyksIHJlbGVhc2VkIE5vdmVtYmVyIDQsIDE5
OTg7IGFuZCBPcGVuR0woUikgR3JhcGhpY3Mgd2l0aCB0aGUgWAotKiogV2luZG93IFN5c3RlbShS
KSAoVmVyc2lvbiAxLjMpLCByZWxlYXNlZCBPY3RvYmVyIDE5LCAxOTk4LiBUaGlzIHNvZnR3YXJl
Ci0qKiB3YXMgY3JlYXRlZCB1c2luZyB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU2FtcGxl
IEltcGxlbWVudGF0aW9uCi0qKiBwdWJsaXNoZWQgYnkgU0dJLCBidXQgaGFzIG5vdCBiZWVuIGlu
ZGVwZW5kZW50bHkgdmVyaWZpZWQgYXMgYmVpbmcKLSoqIGNvbXBsaWFudCB3aXRoIHRoZSBPcGVu
R0woUikgdmVyc2lvbiAxLjIuMSBTcGVjaWZpY2F0aW9uLgotKioKLSovCi0vKgotKiogQXV0aG9y
OiBFcmljIFZlYWNoLCBKdWx5IDE5OTQuCi0qKgotKiogJERhdGUkICRSZXZpc2lvbiQKLSoqICRI
ZWFkZXI6IC8vZGVwb3QvbWFpbi9nZngvbGliL2dsdS9saWJ0ZXNzL3JlbmRlci5jIzUgJAotKi8K
LQotI2luY2x1ZGUgImdsdW9zLmgiCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8c3Rk
ZGVmLmg+Ci0jaW5jbHVkZSAibWVzaC5oIgotI2luY2x1ZGUgInRlc3MuaCIKLSNpbmNsdWRlICJy
ZW5kZXIuaCIKLQotI2RlZmluZSBUUlVFIDEKLSNkZWZpbmUgRkFMU0UgMAotCi0vKiBUaGlzIHN0
cnVjdHVyZSByZW1lbWJlcnMgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQgYWJvdXQgYSBwcmltaXRp
dmUKLSAqIHRvIGJlIGFibGUgdG8gcmVuZGVyIGl0IGxhdGVyLCBvbmNlIHdlIGhhdmUgZGV0ZXJt
aW5lZCB3aGljaAotICogcHJpbWl0aXZlIGlzIGFibGUgdG8gdXNlIHRoZSBtb3N0IHRyaWFuZ2xl
cy4KLSAqLwotc3RydWN0IEZhY2VDb3VudCB7Ci0gIGxvbmcJCXNpemU7CQkvKiBudW1iZXIgb2Yg
dHJpYW5nbGVzIHVzZWQgKi8KLSAgR0xVaGFsZkVkZ2UJKmVTdGFydDsJLyogZWRnZSB3aGVyZSB0
aGlzIHByaW1pdGl2ZSBzdGFydHMgKi8KLSAgdm9pZAkJKCpyZW5kZXIpKEdMVXRlc3NlbGF0b3Ig
KiwgR0xVaGFsZkVkZ2UgKiwgbG9uZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8qIHJvdXRpbmUgdG8gcmVuZGVyIHRoaXMgcHJpbWl0aXZlICovCi19OwotCi1zdGF0aWMgc3Ry
dWN0IEZhY2VDb3VudCBNYXhpbXVtRmFuKCBHTFVoYWxmRWRnZSAqZU9yaWcgKTsKLXN0YXRpYyBz
dHJ1Y3QgRmFjZUNvdW50IE1heGltdW1TdHJpcCggR0xVaGFsZkVkZ2UgKmVPcmlnICk7Ci0KLXN0
YXRpYyB2b2lkIFJlbmRlckZhbiggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmVT
dGFydCwgbG9uZyBzaXplICk7Ci1zdGF0aWMgdm9pZCBSZW5kZXJTdHJpcCggR0xVdGVzc2VsYXRv
ciAqdGVzcywgR0xVaGFsZkVkZ2UgKmVTdGFydCwgbG9uZyBzaXplICk7Ci1zdGF0aWMgdm9pZCBS
ZW5kZXJUcmlhbmdsZSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmVTdGFydCwK
LQkJCSAgICBsb25nIHNpemUgKTsKLQotc3RhdGljIHZvaWQgUmVuZGVyTWF4aW11bUZhY2VHcm91
cCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFjZSAqZk9yaWcgKTsKLXN0YXRpYyB2b2lkIFJl
bmRlckxvbmVseVRyaWFuZ2xlcyggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVZmFjZSAqaGVhZCAp
OwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiBTdHJpcHMgYW5kIEZhbnMgZGVjb21w
b3NpdGlvbiAqKioqKioqKioqKioqKioqKiovCi0KLS8qIF9fZ2xfcmVuZGVyTWVzaCggdGVzcywg
bWVzaCApIHRha2VzIGEgbWVzaCBhbmQgYnJlYWtzIGl0IGludG8gdHJpYW5nbGUKLSAqIGZhbnMs
IHN0cmlwcywgYW5kIHNlcGFyYXRlIHRyaWFuZ2xlcy4gIEEgc3Vic3RhbnRpYWwgZWZmb3J0IGlz
IG1hZGUKLSAqIHRvIHVzZSBhcyBmZXcgcmVuZGVyaW5nIHByaW1pdGl2ZXMgYXMgcG9zc2libGUg
KGllLiB0byBtYWtlIHRoZSBmYW5zCi0gKiBhbmQgc3RyaXBzIGFzIGxhcmdlIGFzIHBvc3NpYmxl
KS4KLSAqCi0gKiBUaGUgcmVuZGVyaW5nIG91dHB1dCBpcyBwcm92aWRlZCBhcyBjYWxsYmFja3Mg
KHNlZSB0aGUgYXBpKS4KLSAqLwotdm9pZCBfX2dsX3JlbmRlck1lc2goIEdMVXRlc3NlbGF0b3Ig
KnRlc3MsIEdMVW1lc2ggKm1lc2ggKQotewotICBHTFVmYWNlICpmOwotCi0gIC8qIE1ha2UgYSBs
aXN0IG9mIHNlcGFyYXRlIHRyaWFuZ2xlcyBzbyB3ZSBjYW4gcmVuZGVyIHRoZW0gYWxsIGF0IG9u
Y2UgKi8KLSAgdGVzcy0+bG9uZWx5VHJpTGlzdCA9IE5VTEw7Ci0KLSAgZm9yKCBmID0gbWVzaC0+
ZkhlYWQubmV4dDsgZiAhPSAmbWVzaC0+ZkhlYWQ7IGYgPSBmLT5uZXh0ICkgewotICAgIGYtPm1h
cmtlZCA9IEZBTFNFOwotICB9Ci0gIGZvciggZiA9IG1lc2gtPmZIZWFkLm5leHQ7IGYgIT0gJm1l
c2gtPmZIZWFkOyBmID0gZi0+bmV4dCApIHsKLQotICAgIC8qIFdlIGV4YW1pbmUgYWxsIGZhY2Vz
IGluIGFuIGFyYml0cmFyeSBvcmRlci4gIFdoZW5ldmVyIHdlIGZpbmQKLSAgICAgKiBhbiB1bnBy
b2Nlc3NlZCBmYWNlIEYsIHdlIG91dHB1dCBhIGdyb3VwIG9mIGZhY2VzIGluY2x1ZGluZyBGCi0g
ICAgICogd2hvc2Ugc2l6ZSBpcyBtYXhpbXVtLgotICAgICAqLwotICAgIGlmKCBmLT5pbnNpZGUg
JiYgISBmLT5tYXJrZWQgKSB7Ci0gICAgICBSZW5kZXJNYXhpbXVtRmFjZUdyb3VwKCB0ZXNzLCBm
ICk7Ci0gICAgICBhc3NlcnQoIGYtPm1hcmtlZCApOwotICAgIH0KLSAgfQotICBpZiggdGVzcy0+
bG9uZWx5VHJpTGlzdCAhPSBOVUxMICkgewotICAgIFJlbmRlckxvbmVseVRyaWFuZ2xlcyggdGVz
cywgdGVzcy0+bG9uZWx5VHJpTGlzdCApOwotICAgIHRlc3MtPmxvbmVseVRyaUxpc3QgPSBOVUxM
OwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgUmVuZGVyTWF4aW11bUZhY2VHcm91cCggR0xVdGVz
c2VsYXRvciAqdGVzcywgR0xVZmFjZSAqZk9yaWcgKQotewotICAvKiBXZSB3YW50IHRvIGZpbmQg
dGhlIGxhcmdlc3QgdHJpYW5nbGUgZmFuIG9yIHN0cmlwIG9mIHVubWFya2VkIGZhY2VzCi0gICAq
IHdoaWNoIGluY2x1ZGVzIHRoZSBnaXZlbiBmYWNlIGZPcmlnLiAgVGhlcmUgYXJlIDMgcG9zc2li
bGUgZmFucwotICAgKiBwYXNzaW5nIHRocm91Z2ggZk9yaWcgKG9uZSBjZW50ZXJlZCBhdCBlYWNo
IHZlcnRleCksIGFuZCAzIHBvc3NpYmxlCi0gICAqIHN0cmlwcyAob25lIGZvciBlYWNoIENDVyBw
ZXJtdXRhdGlvbiBvZiB0aGUgdmVydGljZXMpLiAgT3VyIHN0cmF0ZWd5Ci0gICAqIGlzIHRvIHRy
eSBhbGwgb2YgdGhlc2UsIGFuZCB0YWtlIHRoZSBwcmltaXRpdmUgd2hpY2ggdXNlcyB0aGUgbW9z
dAotICAgKiB0cmlhbmdsZXMgKGEgZ3JlZWR5IGFwcHJvYWNoKS4KLSAgICovCi0gIEdMVWhhbGZF
ZGdlICplID0gZk9yaWctPmFuRWRnZTsKLSAgc3RydWN0IEZhY2VDb3VudCBtYXgsIG5ld0ZhY2U7
Ci0KLSAgbWF4LnNpemUgPSAxOwotICBtYXguZVN0YXJ0ID0gZTsKLSAgbWF4LnJlbmRlciA9ICZS
ZW5kZXJUcmlhbmdsZTsKLQotICBpZiggISB0ZXNzLT5mbGFnQm91bmRhcnkgKSB7Ci0gICAgbmV3
RmFjZSA9IE1heGltdW1GYW4oIGUgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBt
YXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3RmFjZSA9IE1heGltdW1GYW4oIGUtPkxuZXh0ICk7IGlm
KCBuZXdGYWNlLnNpemUgPiBtYXguc2l6ZSApIHsgbWF4ID0gbmV3RmFjZTsgfQotICAgIG5ld0Zh
Y2UgPSBNYXhpbXVtRmFuKCBlLT5McHJldiApOyBpZiggbmV3RmFjZS5zaXplID4gbWF4LnNpemUg
KSB7IG1heCA9IG5ld0ZhY2U7IH0KLQotICAgIG5ld0ZhY2UgPSBNYXhpbXVtU3RyaXAoIGUgKTsg
aWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3
RmFjZSA9IE1heGltdW1TdHJpcCggZS0+TG5leHQgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5z
aXplICkgeyBtYXggPSBuZXdGYWNlOyB9Ci0gICAgbmV3RmFjZSA9IE1heGltdW1TdHJpcCggZS0+
THByZXYgKTsgaWYoIG5ld0ZhY2Uuc2l6ZSA+IG1heC5zaXplICkgeyBtYXggPSBuZXdGYWNlOyB9
Ci0gIH0KLSAgKCoobWF4LnJlbmRlcikpKCB0ZXNzLCBtYXguZVN0YXJ0LCBtYXguc2l6ZSApOwot
fQotCi0KLS8qIE1hY3JvcyB3aGljaCBrZWVwIHRyYWNrIG9mIGZhY2VzIHdlIGhhdmUgbWFya2Vk
IHRlbXBvcmFyaWx5LCBhbmQgYWxsb3cKLSAqIHVzIHRvIGJhY2t0cmFjayB3aGVuIG5lY2Vzc2Fy
eS4gIFdpdGggdHJpYW5nbGUgZmFucywgdGhpcyBpcyBub3QKLSAqIHJlYWxseSBuZWNlc3Nhcnks
IHNpbmNlIHRoZSBvbmx5IGF3a3dhcmQgY2FzZSBpcyBhIGxvb3Agb2YgdHJpYW5nbGVzCi0gKiBh
cm91bmQgYSBzaW5nbGUgb3JpZ2luIHZlcnRleC4gIEhvd2V2ZXIgd2l0aCBzdHJpcHMgdGhlIHNp
dHVhdGlvbiBpcwotICogbW9yZSBjb21wbGljYXRlZCwgYW5kIHdlIG5lZWQgYSBnZW5lcmFsIHRy
YWNraW5nIG1ldGhvZCBsaWtlIHRoZQotICogb25lIGhlcmUuCi0gKi8KLSNkZWZpbmUgTWFya2Vk
KGYpCSghIChmKS0+aW5zaWRlIHx8IChmKS0+bWFya2VkKQotCi0jZGVmaW5lIEFkZFRvVHJhaWwo
Zix0KQkoKGYpLT50cmFpbCA9ICh0KSwgKHQpID0gKGYpLCAoZiktPm1hcmtlZCA9IFRSVUUpCi0K
LSNkZWZpbmUgRnJlZVRyYWlsKHQpCWRvIHsgXAotCQkJICB3aGlsZSggKHQpICE9IE5VTEwgKSB7
IFwKLQkJCSAgICAodCktPm1hcmtlZCA9IEZBTFNFOyB0ID0gKHQpLT50cmFpbDsgXAotCQkJICB9
IFwKLQkJCX0gd2hpbGUoMCkgLyogYWJzb3JiIHRyYWlsaW5nIHNlbWljb2xvbiAqLwotCi0KLQot
c3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bUZhbiggR0xVaGFsZkVkZ2UgKmVPcmlnICkK
LXsKLSAgLyogZU9yaWctPkxmYWNlIGlzIHRoZSBmYWNlIHdlIHdhbnQgdG8gcmVuZGVyLiAgV2Ug
d2FudCB0byBmaW5kIHRoZSBzaXplCi0gICAqIG9mIGEgbWF4aW1hbCBmYW4gYXJvdW5kIGVPcmln
LT5PcmcuICBUbyBkbyB0aGlzIHdlIGp1c3Qgd2FsayBhcm91bmQKLSAgICogdGhlIG9yaWdpbiB2
ZXJ0ZXggYXMgZmFyIGFzIHBvc3NpYmxlIGluIGJvdGggZGlyZWN0aW9ucy4KLSAgICovCi0gIHN0
cnVjdCBGYWNlQ291bnQgbmV3RmFjZSA9IHsgMCwgTlVMTCwgJlJlbmRlckZhbiB9OwotICBHTFVm
YWNlICp0cmFpbCA9IE5VTEw7Ci0gIEdMVWhhbGZFZGdlICplOwotCi0gIGZvciggZSA9IGVPcmln
OyAhIE1hcmtlZCggZS0+TGZhY2UgKTsgZSA9IGUtPk9uZXh0ICkgewotICAgIEFkZFRvVHJhaWwo
IGUtPkxmYWNlLCB0cmFpbCApOwotICAgICsrbmV3RmFjZS5zaXplOwotICB9Ci0gIGZvciggZSA9
IGVPcmlnOyAhIE1hcmtlZCggZS0+UmZhY2UgKTsgZSA9IGUtPk9wcmV2ICkgewotICAgIEFkZFRv
VHJhaWwoIGUtPlJmYWNlLCB0cmFpbCApOwotICAgICsrbmV3RmFjZS5zaXplOwotICB9Ci0gIG5l
d0ZhY2UuZVN0YXJ0ID0gZTsKLSAgLypMSU5URUQqLwotICBGcmVlVHJhaWwoIHRyYWlsICk7Ci0g
IHJldHVybiBuZXdGYWNlOwotfQotCi0KLSNkZWZpbmUgSXNFdmVuKG4pCSgoKG4pICYgMSkgPT0g
MCkKLQotc3RhdGljIHN0cnVjdCBGYWNlQ291bnQgTWF4aW11bVN0cmlwKCBHTFVoYWxmRWRnZSAq
ZU9yaWcgKQotewotICAvKiBIZXJlIHdlIGFyZSBsb29raW5nIGZvciBhIG1heGltYWwgc3RyaXAg
dGhhdCBjb250YWlucyB0aGUgdmVydGljZXMKLSAgICogZU9yaWctPk9yZywgZU9yaWctPkRzdCwg
ZU9yaWctPkxuZXh0LT5Ec3QgKGluIHRoYXQgb3JkZXIgb3IgdGhlCi0gICAqIHJldmVyc2UsIHN1
Y2ggdGhhdCBhbGwgdHJpYW5nbGVzIGFyZSBvcmllbnRlZCBDQ1cpLgotICAgKgotICAgKiBBZ2Fp
biB3ZSB3YWxrIGZvcndhcmQgYW5kIGJhY2t3YXJkIGFzIGZhciBhcyBwb3NzaWJsZS4gIEhvd2V2
ZXIgZm9yCi0gICAqIHN0cmlwcyB0aGVyZSBpcyBhIHR3aXN0OiB0byBnZXQgQ0NXIG9yaWVudGF0
aW9ucywgdGhlcmUgbXVzdCBiZQotICAgKiBhbiAqZXZlbiogbnVtYmVyIG9mIHRyaWFuZ2xlcyBp
biB0aGUgc3RyaXAgb24gb25lIHNpZGUgb2YgZU9yaWcuCi0gICAqIFdlIHdhbGsgdGhlIHN0cmlw
IHN0YXJ0aW5nIG9uIGEgc2lkZSB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIHRyaWFuZ2xlczsKLSAg
ICogaWYgYm90aCBzaWRlIGhhdmUgYW4gb2RkIG51bWJlciwgd2UgYXJlIGZvcmNlZCB0byBzaG9y
dGVuIG9uZSBzaWRlLgotICAgKi8KLSAgc3RydWN0IEZhY2VDb3VudCBuZXdGYWNlID0geyAwLCBO
VUxMLCAmUmVuZGVyU3RyaXAgfTsKLSAgbG9uZyBoZWFkU2l6ZSA9IDAsIHRhaWxTaXplID0gMDsK
LSAgR0xVZmFjZSAqdHJhaWwgPSBOVUxMOwotICBHTFVoYWxmRWRnZSAqZSwgKmVUYWlsLCAqZUhl
YWQ7Ci0KLSAgZm9yKCBlID0gZU9yaWc7ICEgTWFya2VkKCBlLT5MZmFjZSApOyArK3RhaWxTaXpl
LCBlID0gZS0+T25leHQgKSB7Ci0gICAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRyYWlsICk7Ci0g
ICAgKyt0YWlsU2l6ZTsKLSAgICBlID0gZS0+RHByZXY7Ci0gICAgaWYoIE1hcmtlZCggZS0+TGZh
Y2UgKSkgYnJlYWs7Ci0gICAgQWRkVG9UcmFpbCggZS0+TGZhY2UsIHRyYWlsICk7Ci0gIH0KLSAg
ZVRhaWwgPSBlOwotCi0gIGZvciggZSA9IGVPcmlnOyAhIE1hcmtlZCggZS0+UmZhY2UgKTsgKyto
ZWFkU2l6ZSwgZSA9IGUtPkRuZXh0ICkgewotICAgIEFkZFRvVHJhaWwoIGUtPlJmYWNlLCB0cmFp
bCApOwotICAgICsraGVhZFNpemU7Ci0gICAgZSA9IGUtPk9wcmV2OwotICAgIGlmKCBNYXJrZWQo
IGUtPlJmYWNlICkpIGJyZWFrOwotICAgIEFkZFRvVHJhaWwoIGUtPlJmYWNlLCB0cmFpbCApOwot
ICB9Ci0gIGVIZWFkID0gZTsKLQotICBuZXdGYWNlLnNpemUgPSB0YWlsU2l6ZSArIGhlYWRTaXpl
OwotICBpZiggSXNFdmVuKCB0YWlsU2l6ZSApKSB7Ci0gICAgbmV3RmFjZS5lU3RhcnQgPSBlVGFp
bC0+U3ltOwotICB9IGVsc2UgaWYoIElzRXZlbiggaGVhZFNpemUgKSkgewotICAgIG5ld0ZhY2Uu
ZVN0YXJ0ID0gZUhlYWQ7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQm90aCBzaWRlcyBoYXZlIG9kZCBs
ZW5ndGgsIHdlIG11c3Qgc2hvcnRlbiBvbmUgb2YgdGhlbS4gIEluIGZhY3QsCi0gICAgICogd2Ug
bXVzdCBzdGFydCBmcm9tIGVIZWFkIHRvIGd1YXJhbnRlZSBpbmNsdXNpb24gb2YgZU9yaWctPkxm
YWNlLgotICAgICAqLwotICAgIC0tbmV3RmFjZS5zaXplOwotICAgIG5ld0ZhY2UuZVN0YXJ0ID0g
ZUhlYWQtPk9uZXh0OwotICB9Ci0gIC8qTElOVEVEKi8KLSAgRnJlZVRyYWlsKCB0cmFpbCApOwot
ICByZXR1cm4gbmV3RmFjZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBSZW5kZXJUcmlhbmdsZSggR0xV
dGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmUsIGxvbmcgc2l6ZSApCi17Ci0gIC8qIEp1
c3QgYWRkIHRoZSB0cmlhbmdsZSB0byBhIHRyaWFuZ2xlIGxpc3QsIHNvIHdlIGNhbiByZW5kZXIg
YWxsCi0gICAqIHRoZSBzZXBhcmF0ZSB0cmlhbmdsZXMgYXQgb25jZS4KLSAgICovCi0gIGFzc2Vy
dCggc2l6ZSA9PSAxICk7Ci0gIEFkZFRvVHJhaWwoIGUtPkxmYWNlLCB0ZXNzLT5sb25lbHlUcmlM
aXN0ICk7Ci19Ci0KLQotc3RhdGljIHZvaWQgUmVuZGVyTG9uZWx5VHJpYW5nbGVzKCBHTFV0ZXNz
ZWxhdG9yICp0ZXNzLCBHTFVmYWNlICpmICkKLXsKLSAgLyogTm93IHdlIHJlbmRlciBhbGwgdGhl
IHNlcGFyYXRlIHRyaWFuZ2xlcyB3aGljaCBjb3VsZCBub3QgYmUKLSAgICogZ3JvdXBlZCBpbnRv
IGEgdHJpYW5nbGUgZmFuIG9yIHN0cmlwLgotICAgKi8KLSAgR0xVaGFsZkVkZ2UgKmU7Ci0gIGlu
dCBuZXdTdGF0ZTsKLSAgaW50IGVkZ2VTdGF0ZSA9IC0xOwkvKiBmb3JjZSBlZGdlIHN0YXRlIG91
dHB1dCBmb3IgZmlyc3QgdmVydGV4ICovCi0KLSAgQ0FMTF9CRUdJTl9PUl9CRUdJTl9EQVRBKCBH
TF9UUklBTkdMRVMgKTsKLQotICBmb3IoIDsgZiAhPSBOVUxMOyBmID0gZi0+dHJhaWwgKSB7Ci0g
ICAgLyogTG9vcCBvbmNlIGZvciBlYWNoIGVkZ2UgKHRoZXJlIHdpbGwgYWx3YXlzIGJlIDMgZWRn
ZXMpICovCi0KLSAgICBlID0gZi0+YW5FZGdlOwotICAgIGRvIHsKLSAgICAgIGlmKCB0ZXNzLT5m
bGFnQm91bmRhcnkgKSB7Ci0JLyogU2V0IHRoZSAiZWRnZSBzdGF0ZSIgdG8gVFJVRSBqdXN0IGJl
Zm9yZSB3ZSBvdXRwdXQgdGhlCi0JICogZmlyc3QgdmVydGV4IG9mIGVhY2ggZWRnZSBvbiB0aGUg
cG9seWdvbiBib3VuZGFyeS4KLQkgKi8KLQluZXdTdGF0ZSA9ICEgZS0+UmZhY2UtPmluc2lkZTsK
LQlpZiggZWRnZVN0YXRlICE9IG5ld1N0YXRlICkgewotCSAgZWRnZVN0YXRlID0gbmV3U3RhdGU7
Ci0gICAgICAgICAgQ0FMTF9FREdFX0ZMQUdfT1JfRURHRV9GTEFHX0RBVEEoIGVkZ2VTdGF0ZSAp
OwotCX0KLSAgICAgIH0KLSAgICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5Pcmct
PmRhdGEgKTsKLQotICAgICAgZSA9IGUtPkxuZXh0OwotICAgIH0gd2hpbGUoIGUgIT0gZi0+YW5F
ZGdlICk7Ci0gIH0KLSAgQ0FMTF9FTkRfT1JfRU5EX0RBVEEoKTsKLX0KLQotCi1zdGF0aWMgdm9p
ZCBSZW5kZXJGYW4oIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVWhhbGZFZGdlICplLCBsb25nIHNp
emUgKQotewotICAvKiBSZW5kZXIgYXMgbWFueSBDQ1cgdHJpYW5nbGVzIGFzIHBvc3NpYmxlIGlu
IGEgZmFuIHN0YXJ0aW5nIGZyb20KLSAgICogZWRnZSAiZSIuICBUaGUgZmFuICpzaG91bGQqIGNv
bnRhaW4gZXhhY3RseSAic2l6ZSIgdHJpYW5nbGVzCi0gICAqIChvdGhlcndpc2Ugd2UndmUgZ29v
ZmVkIHVwIHNvbWV3aGVyZSkuCi0gICAqLwotICBDQUxMX0JFR0lOX09SX0JFR0lOX0RBVEEoIEdM
X1RSSUFOR0xFX0ZBTiApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPk9yZy0+
ZGF0YSApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRzdC0+ZGF0YSApOyAK
LQotICB3aGlsZSggISBNYXJrZWQoIGUtPkxmYWNlICkpIHsKLSAgICBlLT5MZmFjZS0+bWFya2Vk
ID0gVFJVRTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPk9uZXh0OwotICAgIENBTExfVkVSVEVY
X09SX1ZFUlRFWF9EQVRBKCBlLT5Ec3QtPmRhdGEgKTsgCi0gIH0KLQotICBhc3NlcnQoIHNpemUg
PT0gMCApOwotICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOwotfQotCi0KLXN0YXRpYyB2b2lkIFJl
bmRlclN0cmlwKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVoYWxmRWRnZSAqZSwgbG9uZyBzaXpl
ICkKLXsKLSAgLyogUmVuZGVyIGFzIG1hbnkgQ0NXIHRyaWFuZ2xlcyBhcyBwb3NzaWJsZSBpbiBh
IHN0cmlwIHN0YXJ0aW5nIGZyb20KLSAgICogZWRnZSAiZSIuICBUaGUgc3RyaXAgKnNob3VsZCog
Y29udGFpbiBleGFjdGx5ICJzaXplIiB0cmlhbmdsZXMKLSAgICogKG90aGVyd2lzZSB3ZSd2ZSBn
b29mZWQgdXAgc29tZXdoZXJlKS4KLSAgICovCi0gIENBTExfQkVHSU5fT1JfQkVHSU5fREFUQSgg
R0xfVFJJQU5HTEVfU1RSSVAgKTsKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPk9y
Zy0+ZGF0YSApOyAKLSAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIGUtPkRzdC0+ZGF0YSAp
OyAKLQotICB3aGlsZSggISBNYXJrZWQoIGUtPkxmYWNlICkpIHsKLSAgICBlLT5MZmFjZS0+bWFy
a2VkID0gVFJVRTsKLSAgICAtLXNpemU7Ci0gICAgZSA9IGUtPkRwcmV2OwotICAgIENBTExfVkVS
VEVYX09SX1ZFUlRFWF9EQVRBKCBlLT5PcmctPmRhdGEgKTsgCi0gICAgaWYoIE1hcmtlZCggZS0+
TGZhY2UgKSkgYnJlYWs7Ci0KLSAgICBlLT5MZmFjZS0+bWFya2VkID0gVFJVRTsKLSAgICAtLXNp
emU7Ci0gICAgZSA9IGUtPk9uZXh0OwotICAgIENBTExfVkVSVEVYX09SX1ZFUlRFWF9EQVRBKCBl
LT5Ec3QtPmRhdGEgKTsgCi0gIH0KLQotICBhc3NlcnQoIHNpemUgPT0gMCApOwotICBDQUxMX0VO
RF9PUl9FTkRfREFUQSgpOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKiogQm91bmRh
cnkgY29udG91ciBkZWNvbXBvc2l0aW9uICoqKioqKioqKioqKioqKioqKi8KLQotLyogX19nbF9y
ZW5kZXJCb3VuZGFyeSggdGVzcywgbWVzaCApIHRha2VzIGEgbWVzaCwgYW5kIG91dHB1dHMgb25l
Ci0gKiBjb250b3VyIGZvciBlYWNoIGZhY2UgbWFya2VkICJpbnNpZGUiLiAgVGhlIHJlbmRlcmlu
ZyBvdXRwdXQgaXMKLSAqIHByb3ZpZGVkIGFzIGNhbGxiYWNrcyAoc2VlIHRoZSBhcGkpLgotICov
Ci12b2lkIF9fZ2xfcmVuZGVyQm91bmRhcnkoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVW1lc2gg
Km1lc2ggKQotewotICBHTFVmYWNlICpmOwotICBHTFVoYWxmRWRnZSAqZTsKLQotICBmb3IoIGYg
PSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGYtPm5leHQgKSB7Ci0g
ICAgaWYoIGYtPmluc2lkZSApIHsKLSAgICAgIENBTExfQkVHSU5fT1JfQkVHSU5fREFUQSggR0xf
TElORV9MT09QICk7Ci0gICAgICBlID0gZi0+YW5FZGdlOwotICAgICAgZG8gewotICAgICAgICBD
QUxMX1ZFUlRFWF9PUl9WRVJURVhfREFUQSggZS0+T3JnLT5kYXRhICk7IAotCWUgPSBlLT5MbmV4
dDsKLSAgICAgIH0gd2hpbGUoIGUgIT0gZi0+YW5FZGdlICk7Ci0gICAgICBDQUxMX0VORF9PUl9F
TkRfREFUQSgpOwotICAgIH0KLSAgfQotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKiog
UXVpY2stYW5kLWRpcnR5IGRlY29tcG9zaXRpb24gKioqKioqKioqKioqKioqKioqLwotCi0jZGVm
aW5lIFNJR05fSU5DT05TSVNURU5UIDIKLQotc3RhdGljIGludCBDb21wdXRlTm9ybWFsKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBub3JtWzNdLCBpbnQgY2hlY2sgKQotLyoKLSAqIElm
IGNoZWNrPT1GQUxTRSwgd2UgY29tcHV0ZSB0aGUgcG9seWdvbiBub3JtYWwgYW5kIHBsYWNlIGl0
IGluIG5vcm1bXS4KLSAqIElmIGNoZWNrPT1UUlVFLCB3ZSBjaGVjayB0aGF0IGVhY2ggdHJpYW5n
bGUgaW4gdGhlIGZhbiBmcm9tIHYwIGhhcyBhCi0gKiBjb25zaXN0ZW50IG9yaWVudGF0aW9uIHdp
dGggcmVzcGVjdCB0byBub3JtW10uICBJZiB0cmlhbmdsZXMgYXJlCi0gKiBjb25zaXN0ZW50bHkg
b3JpZW50ZWQgQ0NXLCByZXR1cm4gMTsgaWYgQ1csIHJldHVybiAtMTsgaWYgYWxsIHRyaWFuZ2xl
cwotICogYXJlIGRlZ2VuZXJhdGUgcmV0dXJuIDA7IG90aGVyd2lzZSAobm8gY29uc2lzdGVudCBv
cmllbnRhdGlvbikgcmV0dXJuCi0gKiBTSUdOX0lOQ09OU0lTVEVOVC4KLSAqLwotewotICBDYWNo
ZWRWZXJ0ZXggKnYwID0gdGVzcy0+Y2FjaGU7Ci0gIENhY2hlZFZlcnRleCAqdm4gPSB2MCArIHRl
c3MtPmNhY2hlQ291bnQ7Ci0gIENhY2hlZFZlcnRleCAqdmM7Ci0gIEdMZG91YmxlIGRvdCwgeGMs
IHljLCB6YywgeHAsIHlwLCB6cCwgblszXTsKLSAgaW50IHNpZ24gPSAwOwotCi0gIC8qIEZpbmQg
dGhlIHBvbHlnb24gbm9ybWFsLiAgSXQgaXMgaW1wb3J0YW50IHRvIGdldCBhIHJlYXNvbmFibGUK
LSAgICogbm9ybWFsIGV2ZW4gd2hlbiB0aGUgcG9seWdvbiBpcyBzZWxmLWludGVyc2VjdGluZyAo
ZWcuIGEgYm93dGllKS4KLSAgICogT3RoZXJ3aXNlLCB0aGUgY29tcHV0ZWQgbm9ybWFsIGNvdWxk
IGJlIHZlcnkgdGlueSwgYnV0IHBlcnBlbmRpY3VsYXIKLSAgICogdG8gdGhlIHRydWUgcGxhbmUg
b2YgdGhlIHBvbHlnb24gZHVlIHRvIG51bWVyaWNhbCBub2lzZS4gIFRoZW4gYWxsCi0gICAqIHRo
ZSB0cmlhbmdsZXMgd291bGQgYXBwZWFyIHRvIGJlIGRlZ2VuZXJhdGUgYW5kIHdlIHdvdWxkIGlu
Y29ycmVjdGx5Ci0gICAqIGRlY29tcG9zZSB0aGUgcG9seWdvbiBhcyBhIGZhbiAob3Igc2ltcGx5
IG5vdCByZW5kZXIgaXQgYXQgYWxsKS4KLSAgICoKLSAgICogV2UgdXNlIGEgc3VtLW9mLXRyaWFu
Z2xlcyBub3JtYWwgYWxnb3JpdGhtIHJhdGhlciB0aGFuIHRoZSBtb3JlCi0gICAqIGVmZmljaWVu
dCBzdW0tb2YtdHJhcGV6b2lkcyBtZXRob2QgKHVzZWQgaW4gQ2hlY2tPcmllbnRhdGlvbigpCi0g
ICAqIGluIG5vcm1hbC5jKS4gIFRoaXMgbGV0cyB1cyBleHBsaWNpdGx5IHJldmVyc2UgdGhlIHNp
Z25lZCBhcmVhCi0gICAqIG9mIHNvbWUgdHJpYW5nbGVzIHRvIGdldCBhIHJlYXNvbmFibGUgbm9y
bWFsIGluIHRoZSBzZWxmLWludGVyc2VjdGluZwotICAgKiBjYXNlLgotICAgKi8KLSAgaWYoICEg
Y2hlY2sgKSB7Ci0gICAgbm9ybVswXSA9IG5vcm1bMV0gPSBub3JtWzJdID0gMC4wOwotICB9Ci0K
LSAgdmMgPSB2MCArIDE7Ci0gIHhjID0gdmMtPmNvb3Jkc1swXSAtIHYwLT5jb29yZHNbMF07Ci0g
IHljID0gdmMtPmNvb3Jkc1sxXSAtIHYwLT5jb29yZHNbMV07Ci0gIHpjID0gdmMtPmNvb3Jkc1sy
XSAtIHYwLT5jb29yZHNbMl07Ci0gIHdoaWxlKCArK3ZjIDwgdm4gKSB7Ci0gICAgeHAgPSB4Yzsg
eXAgPSB5YzsgenAgPSB6YzsKLSAgICB4YyA9IHZjLT5jb29yZHNbMF0gLSB2MC0+Y29vcmRzWzBd
OwotICAgIHljID0gdmMtPmNvb3Jkc1sxXSAtIHYwLT5jb29yZHNbMV07Ci0gICAgemMgPSB2Yy0+
Y29vcmRzWzJdIC0gdjAtPmNvb3Jkc1syXTsKLQotICAgIC8qIENvbXB1dGUgKHZwIC0gdjApIGNy
b3NzICh2YyAtIHYwKSAqLwotICAgIG5bMF0gPSB5cCp6YyAtIHpwKnljOwotICAgIG5bMV0gPSB6
cCp4YyAtIHhwKnpjOwotICAgIG5bMl0gPSB4cCp5YyAtIHlwKnhjOwotCi0gICAgZG90ID0gblsw
XSpub3JtWzBdICsgblsxXSpub3JtWzFdICsgblsyXSpub3JtWzJdOwotICAgIGlmKCAhIGNoZWNr
ICkgewotICAgICAgLyogUmV2ZXJzZSB0aGUgY29udHJpYnV0aW9uIG9mIGJhY2stZmFjaW5nIHRy
aWFuZ2xlcyB0byBnZXQKLSAgICAgICAqIGEgcmVhc29uYWJsZSBub3JtYWwgZm9yIHNlbGYtaW50
ZXJzZWN0aW5nIHBvbHlnb25zIChzZWUgYWJvdmUpCi0gICAgICAgKi8KLSAgICAgIGlmKCBkb3Qg
Pj0gMCApIHsKLQlub3JtWzBdICs9IG5bMF07IG5vcm1bMV0gKz0gblsxXTsgbm9ybVsyXSArPSBu
WzJdOwotICAgICAgfSBlbHNlIHsKLQlub3JtWzBdIC09IG5bMF07IG5vcm1bMV0gLT0gblsxXTsg
bm9ybVsyXSAtPSBuWzJdOwotICAgICAgfQotICAgIH0gZWxzZSBpZiggZG90ICE9IDAgKSB7Ci0g
ICAgICAvKiBDaGVjayB0aGUgbmV3IG9yaWVudGF0aW9uIGZvciBjb25zaXN0ZW5jeSB3aXRoIHBy
ZXZpb3VzIHRyaWFuZ2xlcyAqLwotICAgICAgaWYoIGRvdCA+IDAgKSB7Ci0JaWYoIHNpZ24gPCAw
ICkgcmV0dXJuIFNJR05fSU5DT05TSVNURU5UOwotCXNpZ24gPSAxOwotICAgICAgfSBlbHNlIHsK
LQlpZiggc2lnbiA+IDAgKSByZXR1cm4gU0lHTl9JTkNPTlNJU1RFTlQ7Ci0Jc2lnbiA9IC0xOwot
ICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gc2lnbjsKLX0KLQotLyogX19nbF9yZW5kZXJD
YWNoZSggdGVzcyApIHRha2VzIGEgc2luZ2xlIGNvbnRvdXIgYW5kIHRyaWVzIHRvIHJlbmRlciBp
dAotICogYXMgYSB0cmlhbmdsZSBmYW4uICBUaGlzIGhhbmRsZXMgY29udmV4IHBvbHlnb25zLCBh
cyB3ZWxsIGFzIHNvbWUKLSAqIG5vbi1jb252ZXggcG9seWdvbnMgaWYgd2UgZ2V0IGx1Y2t5Lgot
ICoKLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgcG9seWdvbiB3YXMgc3VjY2Vzc2Z1bGx5IHJlbmRl
cmVkLiAgVGhlIHJlbmRlcmluZwotICogb3V0cHV0IGlzIHByb3ZpZGVkIGFzIGNhbGxiYWNrcyAo
c2VlIHRoZSBhcGkpLgotICovCi1HTGJvb2xlYW4gX19nbF9yZW5kZXJDYWNoZSggR0xVdGVzc2Vs
YXRvciAqdGVzcyApCi17Ci0gIENhY2hlZFZlcnRleCAqdjAgPSB0ZXNzLT5jYWNoZTsKLSAgQ2Fj
aGVkVmVydGV4ICp2biA9IHYwICsgdGVzcy0+Y2FjaGVDb3VudDsKLSAgQ2FjaGVkVmVydGV4ICp2
YzsKLSAgR0xkb3VibGUgbm9ybVszXTsKLSAgaW50IHNpZ247Ci0KLSAgaWYoIHRlc3MtPmNhY2hl
Q291bnQgPCAzICkgewotICAgIC8qIERlZ2VuZXJhdGUgY29udG91ciAtLSBubyBvdXRwdXQgKi8K
LSAgICByZXR1cm4gVFJVRTsKLSAgfQotCi0gIG5vcm1bMF0gPSB0ZXNzLT5ub3JtYWxbMF07Ci0g
IG5vcm1bMV0gPSB0ZXNzLT5ub3JtYWxbMV07Ci0gIG5vcm1bMl0gPSB0ZXNzLT5ub3JtYWxbMl07
Ci0gIGlmKCBub3JtWzBdID09IDAgJiYgbm9ybVsxXSA9PSAwICYmIG5vcm1bMl0gPT0gMCApIHsK
LSAgICBDb21wdXRlTm9ybWFsKCB0ZXNzLCBub3JtLCBGQUxTRSApOwotICB9Ci0KLSAgc2lnbiA9
IENvbXB1dGVOb3JtYWwoIHRlc3MsIG5vcm0sIFRSVUUgKTsKLSAgaWYoIHNpZ24gPT0gU0lHTl9J
TkNPTlNJU1RFTlQgKSB7Ci0gICAgLyogRmFuIHRyaWFuZ2xlcyBkaWQgbm90IGhhdmUgYSBjb25z
aXN0ZW50IG9yaWVudGF0aW9uICovCi0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGlmKCBzaWdu
ID09IDAgKSB7Ci0gICAgLyogQWxsIHRyaWFuZ2xlcyB3ZXJlIGRlZ2VuZXJhdGUgKi8KLSAgICBy
ZXR1cm4gVFJVRTsKLSAgfQotCi0gIC8qIE1ha2Ugc3VyZSB3ZSBkbyB0aGUgcmlnaHQgdGhpbmcg
Zm9yIGVhY2ggd2luZGluZyBydWxlICovCi0gIHN3aXRjaCggdGVzcy0+d2luZGluZ1J1bGUgKSB7
Ci0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19PREQ6Ci0gIGNhc2UgR0xVX1RFU1NfV0lORElOR19O
T05aRVJPOgotICAgIGJyZWFrOwotICBjYXNlIEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkU6Ci0g
ICAgaWYoIHNpZ24gPCAwICkgcmV0dXJuIFRSVUU7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgR0xVX1RF
U1NfV0lORElOR19ORUdBVElWRToKLSAgICBpZiggc2lnbiA+IDAgKSByZXR1cm4gVFJVRTsKLSAg
ICBicmVhazsKLSAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX0FCU19HRVFfVFdPOgotICAgIHJldHVy
biBUUlVFOwotICB9Ci0KLSAgQ0FMTF9CRUdJTl9PUl9CRUdJTl9EQVRBKCB0ZXNzLT5ib3VuZGFy
eU9ubHkgPyBHTF9MSU5FX0xPT1AKLQkJCSAgOiAodGVzcy0+Y2FjaGVDb3VudCA+IDMpID8gR0xf
VFJJQU5HTEVfRkFOCi0JCQkgIDogR0xfVFJJQU5HTEVTICk7Ci0KLSAgQ0FMTF9WRVJURVhfT1Jf
VkVSVEVYX0RBVEEoIHYwLT5kYXRhICk7IAotICBpZiggc2lnbiA+IDAgKSB7Ci0gICAgZm9yKCB2
YyA9IHYwKzE7IHZjIDwgdm47ICsrdmMgKSB7Ci0gICAgICBDQUxMX1ZFUlRFWF9PUl9WRVJURVhf
REFUQSggdmMtPmRhdGEgKTsgCi0gICAgfQotICB9IGVsc2UgewotICAgIGZvciggdmMgPSB2bi0x
OyB2YyA+IHYwOyAtLXZjICkgewotICAgICAgQ0FMTF9WRVJURVhfT1JfVkVSVEVYX0RBVEEoIHZj
LT5kYXRhICk7IAotICAgIH0KLSAgfQotICBDQUxMX0VORF9PUl9FTkRfREFUQSgpOwotICByZXR1
cm4gVFJVRTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Jl
bmRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ODQyM2VhMDExZTM5MDhmOGNlZmZlMzdlMGQ3Y2I5Y2E5
ZWU0ZWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1
OSArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4
dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0
ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2Fy
ZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9m
IHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUg
TGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu
Y2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGlj
ZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYw
MAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLTEzNTEs
IG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMvRnJlZUIKLSoqIAot
KiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhlIFNvZnR3YXJlIGlz
IGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFO
RCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NMQUlNRUQsIElOQ0xV
RElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFORAotKiog
Q09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBGSVRO
RVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULgot
KiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczogT3BlbkdMIFNhbXBs
ZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2VkIEphbnVhcnkgMjYs
IDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5jLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
Ci0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBp
cyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBw
cm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kgaW4gY29uanVuY3Rp
b24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0woUikgR3JhcGhpY3Mg
U3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxlYXNlZAotKiogQXBy
aWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5
IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4OyBhbmQgT3BlbkdM
KFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikgKFZlcnNpb24gMS4z
KSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0
ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlv
bgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRlcGVuZGVudGx5IHZl
cmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24g
MS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjogRXJpYyBWZWFjaCwg
SnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVhZGVyOiAvL2RlcG90
L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy9yZW5kZXIuaCM1ICQKLSovCi0KLSNpZm5kZWYgX19y
ZW5kZXJfaF8KLSNkZWZpbmUgX19yZW5kZXJfaF8KLQotI2luY2x1ZGUgIm1lc2guaCIKLQotLyog
X19nbF9yZW5kZXJNZXNoKCB0ZXNzLCBtZXNoICkgdGFrZXMgYSBtZXNoIGFuZCBicmVha3MgaXQg
aW50byB0cmlhbmdsZQotICogZmFucywgc3RyaXBzLCBhbmQgc2VwYXJhdGUgdHJpYW5nbGVzLiAg
QSBzdWJzdGFudGlhbCBlZmZvcnQgaXMgbWFkZQotICogdG8gdXNlIGFzIGZldyByZW5kZXJpbmcg
cHJpbWl0aXZlcyBhcyBwb3NzaWJsZSAoaWUuIHRvIG1ha2UgdGhlIGZhbnMKLSAqIGFuZCBzdHJp
cHMgYXMgbGFyZ2UgYXMgcG9zc2libGUpLgotICoKLSAqIFRoZSByZW5kZXJpbmcgb3V0cHV0IGlz
IHByb3ZpZGVkIGFzIGNhbGxiYWNrcyAoc2VlIHRoZSBhcGkpLgotICovCi12b2lkIF9fZ2xfcmVu
ZGVyTWVzaCggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVbWVzaCAqbWVzaCApOwotdm9pZCBfX2ds
X3JlbmRlckJvdW5kYXJ5KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFVtZXNoICptZXNoICk7Ci0K
LUdMYm9vbGVhbiBfX2dsX3JlbmRlckNhY2hlKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICk7Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDZmZThhNDc4ZjU0MjQ0YTNhNmRiZDhiNjEzNjUzZDJjN2EwYmVjMjguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNjIgKzAsMCBA
QAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9y
dGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZl
IGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5z
ZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0q
KiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2Uu
IFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg
dGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQg
U2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFt
cGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoK
LSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUg
dGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmli
dXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElF
RCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJ
VEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElP
TlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1Ig
QQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiog
T3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVt
ZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBk
ZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUg
aXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29w
eXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5k
aWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0q
KiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1p
bmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGgg
dGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTog
QSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5
OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lv
bgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFw
aGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVh
c2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5n
IHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1
Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBh
cyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNw
ZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5
NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dm
eC9saWIvZ2x1L2xpYnRlc3Mvc3dlZXAuYyM1ICQKLSovCi0KLSNpbmNsdWRlICJnbHVvcy5oIgot
I2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHNldGpt
cC5oPgkJLyogbG9uZ2ptcCAqLwotI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogTE9OR19NQVggKi8K
LQotI2luY2x1ZGUgIm1lc2guaCIKLSNpbmNsdWRlICJnZW9tLmgiCi0jaW5jbHVkZSAidGVzcy5o
IgotI2luY2x1ZGUgImRpY3QuaCIKLSNpbmNsdWRlICJwcmlvcml0eXEuaCIKLSNpbmNsdWRlICJt
ZW1hbGxvYy5oIgotI2luY2x1ZGUgInN3ZWVwLmgiCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVmaW5l
IEZBTFNFIDAKLQotI2lmZGVmIEZPUl9UUklURV9URVNUX1BST0dSQU0KLWV4dGVybiB2b2lkIERl
YnVnRXZlbnQoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKTsKLSNlbHNlCi0jZGVmaW5lIERlYnVnRXZl
bnQoIHRlc3MgKQotI2VuZGlmCi0KLS8qCi0gKiBJbnZhcmlhbnRzIGZvciB0aGUgRWRnZSBEaWN0
aW9uYXJ5LgotICogLSBlYWNoIHBhaXIgb2YgYWRqYWNlbnQgZWRnZXMgZTI9U3VjYyhlMSkgc2F0
aXNmaWVzIEVkZ2VMZXEoZTEsZTIpCi0gKiAgIGF0IGFueSB2YWxpZCBsb2NhdGlvbiBvZiB0aGUg
c3dlZXAgZXZlbnQKLSAqIC0gaWYgRWRnZUxlcShlMixlMSkgYXMgd2VsbCAoYXQgYW55IHZhbGlk
IHN3ZWVwIGV2ZW50KSwgdGhlbiBlMSBhbmQgZTIKLSAqICAgc2hhcmUgYSBjb21tb24gZW5kcG9p
bnQKLSAqIC0gZm9yIGVhY2ggZSwgZS0+RHN0IGhhcyBiZWVuIHByb2Nlc3NlZCwgYnV0IG5vdCBl
LT5PcmcKLSAqIC0gZWFjaCBlZGdlIGUgc2F0aXNmaWVzIFZlcnRMZXEoZS0+RHN0LGV2ZW50KSAm
JiBWZXJ0TGVxKGV2ZW50LGUtPk9yZykKLSAqICAgd2hlcmUgImV2ZW50IiBpcyB0aGUgY3VycmVu
dCBzd2VlcCBsaW5lIGV2ZW50LgotICogLSBubyBlZGdlIGUgaGFzIHplcm8gbGVuZ3RoCi0gKgot
ICogSW52YXJpYW50cyBmb3IgdGhlIE1lc2ggKHRoZSBwcm9jZXNzZWQgcG9ydGlvbikuCi0gKiAt
IHRoZSBwb3J0aW9uIG9mIHRoZSBtZXNoIGxlZnQgb2YgdGhlIHN3ZWVwIGxpbmUgaXMgYSBwbGFu
YXIgZ3JhcGgsCi0gKiAgIGllLiB0aGVyZSBpcyAqc29tZSogd2F5IHRvIGVtYmVkIGl0IGluIHRo
ZSBwbGFuZQotICogLSBubyBwcm9jZXNzZWQgZWRnZSBoYXMgemVybyBsZW5ndGgKLSAqIC0gbm8g
dHdvIHByb2Nlc3NlZCB2ZXJ0aWNlcyBoYXZlIGlkZW50aWNhbCBjb29yZGluYXRlcwotICogLSBl
YWNoICJpbnNpZGUiIHJlZ2lvbiBpcyBtb25vdG9uZSwgaWUuIGNhbiBiZSBicm9rZW4gaW50byB0
d28gY2hhaW5zCi0gKiAgIG9mIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyB2ZXJ0aWNlcyBhY2Nv
cmRpbmcgdG8gVmVydExlcSh2MSx2MikKLSAqICAgLSBhIG5vbi1pbnZhcmlhbnQ6IHRoZXNlIGNo
YWlucyBtYXkgaW50ZXJzZWN0ICh2ZXJ5IHNsaWdodGx5KQotICoKLSAqIEludmFyaWFudHMgZm9y
IHRoZSBTd2VlcC4KLSAqIC0gaWYgbm9uZSBvZiB0aGUgZWRnZXMgaW5jaWRlbnQgdG8gdGhlIGV2
ZW50IHZlcnRleCBoYXZlIGFuIGFjdGl2ZVJlZ2lvbgotICogICAoaWUuIG5vbmUgb2YgdGhlc2Ug
ZWRnZXMgYXJlIGluIHRoZSBlZGdlIGRpY3Rpb25hcnkpLCB0aGVuIHRoZSB2ZXJ0ZXgKLSAqICAg
aGFzIG9ubHkgcmlnaHQtZ29pbmcgZWRnZXMuCi0gKiAtIGlmIGFuIGVkZ2UgaXMgbWFya2VkICJm
aXhVcHBlckVkZ2UiIChpdCBpcyBhIHRlbXBvcmFyeSBlZGdlIGludHJvZHVjZWQKLSAqICAgYnkg
Q29ubmVjdFJpZ2h0VmVydGV4KSwgdGhlbiBpdCBpcyB0aGUgb25seSByaWdodC1nb2luZyBlZGdl
IGZyb20KLSAqICAgaXRzIGFzc29jaWF0ZWQgdmVydGV4LiAgKFRoaXMgc2F5cyB0aGF0IHRoZXNl
IGVkZ2VzIGV4aXN0IG9ubHkKLSAqICAgd2hlbiBpdCBpcyBuZWNlc3NhcnkuKQotICovCi0KLSNk
ZWZpbmUgTUFYKHgseSkJKCh4KSA+PSAoeSkgPyAoeCkgOiAoeSkpCi0jZGVmaW5lIE1JTih4LHkp
CSgoeCkgPD0gKHkpID8gKHgpIDogKHkpKQotCi0vKiBXaGVuIHdlIG1lcmdlIHR3byBlZGdlcyBp
bnRvIG9uZSwgd2UgbmVlZCB0byBjb21wdXRlIHRoZSBjb21iaW5lZAotICogd2luZGluZyBvZiB0
aGUgbmV3IGVkZ2UuCi0gKi8KLSNkZWZpbmUgQWRkV2luZGluZyhlRHN0LGVTcmMpCShlRHN0LT53
aW5kaW5nICs9IGVTcmMtPndpbmRpbmcsIFwKLQkJCQkgZURzdC0+U3ltLT53aW5kaW5nICs9IGVT
cmMtPlN5bS0+d2luZGluZykKLQotc3RhdGljIHZvaWQgU3dlZXBFdmVudCggR0xVdGVzc2VsYXRv
ciAqdGVzcywgR0xVdmVydGV4ICp2RXZlbnQgKTsKLXN0YXRpYyB2b2lkIFdhbGtEaXJ0eVJlZ2lv
bnMoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnVXAgKTsKLXN0YXRpYyBp
bnQgQ2hlY2tGb3JSaWdodFNwbGljZSggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9u
ICpyZWdVcCApOwotCi1zdGF0aWMgaW50IEVkZ2VMZXEoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFj
dGl2ZVJlZ2lvbiAqcmVnMSwKLQkJICAgIEFjdGl2ZVJlZ2lvbiAqcmVnMiApCi0vKgotICogQm90
aCBlZGdlcyBtdXN0IGJlIGRpcmVjdGVkIGZyb20gcmlnaHQgdG8gbGVmdCAodGhpcyBpcyB0aGUg
Y2Fub25pY2FsCi0gKiBkaXJlY3Rpb24gZm9yIHRoZSB1cHBlciBlZGdlIG9mIGVhY2ggcmVnaW9u
KS4KLSAqCi0gKiBUaGUgc3RyYXRlZ3kgaXMgdG8gZXZhbHVhdGUgYSAidCIgdmFsdWUgZm9yIGVh
Y2ggZWRnZSBhdCB0aGUKLSAqIGN1cnJlbnQgc3dlZXAgbGluZSBwb3NpdGlvbiwgZ2l2ZW4gYnkg
dGVzcy0+ZXZlbnQuICBUaGUgY2FsY3VsYXRpb25zCi0gKiBhcmUgZGVzaWduZWQgdG8gYmUgdmVy
eSBzdGFibGUsIGJ1dCBvZiBjb3Vyc2UgdGhleSBhcmUgbm90IHBlcmZlY3QuCi0gKgotICogU3Bl
Y2lhbCBjYXNlOiBpZiBib3RoIGVkZ2UgZGVzdGluYXRpb25zIGFyZSBhdCB0aGUgc3dlZXAgZXZl
bnQsCi0gKiB3ZSBzb3J0IHRoZSBlZGdlcyBieSBzbG9wZSAodGhleSB3b3VsZCBvdGhlcndpc2Ug
Y29tcGFyZSBlcXVhbGx5KS4KLSAqLwotewotICBHTFV2ZXJ0ZXggKmV2ZW50ID0gdGVzcy0+ZXZl
bnQ7Ci0gIEdMVWhhbGZFZGdlICplMSwgKmUyOwotICBHTGRvdWJsZSB0MSwgdDI7Ci0KLSAgZTEg
PSByZWcxLT5lVXA7Ci0gIGUyID0gcmVnMi0+ZVVwOwotCi0gIGlmKCBlMS0+RHN0ID09IGV2ZW50
ICkgewotICAgIGlmKCBlMi0+RHN0ID09IGV2ZW50ICkgewotICAgICAgLyogVHdvIGVkZ2VzIHJp
Z2h0IG9mIHRoZSBzd2VlcCBsaW5lIHdoaWNoIG1lZXQgYXQgdGhlIHN3ZWVwIGV2ZW50LgotICAg
ICAgICogU29ydCB0aGVtIGJ5IHNsb3BlLgotICAgICAgICovCi0gICAgICBpZiggVmVydExlcSgg
ZTEtPk9yZywgZTItPk9yZyApKSB7Ci0JcmV0dXJuIEVkZ2VTaWduKCBlMi0+RHN0LCBlMS0+T3Jn
LCBlMi0+T3JnICkgPD0gMDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBFZGdlU2lnbiggZTEtPkRz
dCwgZTItPk9yZywgZTEtPk9yZyApID49IDA7Ci0gICAgfQotICAgIHJldHVybiBFZGdlU2lnbigg
ZTItPkRzdCwgZXZlbnQsIGUyLT5PcmcgKSA8PSAwOwotICB9Ci0gIGlmKCBlMi0+RHN0ID09IGV2
ZW50ICkgewotICAgIHJldHVybiBFZGdlU2lnbiggZTEtPkRzdCwgZXZlbnQsIGUxLT5PcmcgKSA+
PSAwOwotICB9Ci0KLSAgLyogR2VuZXJhbCBjYXNlIC0gY29tcHV0ZSBzaWduZWQgZGlzdGFuY2Ug
KmZyb20qIGUxLCBlMiB0byBldmVudCAqLwotICB0MSA9IEVkZ2VFdmFsKCBlMS0+RHN0LCBldmVu
dCwgZTEtPk9yZyApOwotICB0MiA9IEVkZ2VFdmFsKCBlMi0+RHN0LCBldmVudCwgZTItPk9yZyAp
OwotICByZXR1cm4gKHQxID49IHQyKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBEZWxldGVSZWdpb24o
IEdMVXRlc3NlbGF0b3IgKnRlc3MsIEFjdGl2ZVJlZ2lvbiAqcmVnICkKLXsKLSAgaWYoIHJlZy0+
Zml4VXBwZXJFZGdlICkgewotICAgIC8qIEl0IHdhcyBjcmVhdGVkIHdpdGggemVybyB3aW5kaW5n
IG51bWJlciwgc28gaXQgYmV0dGVyIGJlCi0gICAgICogZGVsZXRlZCB3aXRoIHplcm8gd2luZGlu
ZyBudW1iZXIgKGllLiBpdCBiZXR0ZXIgbm90IGdldCBtZXJnZWQKLSAgICAgKiB3aXRoIGEgcmVh
bCBlZGdlKS4KLSAgICAgKi8KLSAgICBhc3NlcnQoIHJlZy0+ZVVwLT53aW5kaW5nID09IDAgKTsK
LSAgfQotICByZWctPmVVcC0+YWN0aXZlUmVnaW9uID0gTlVMTDsKLSAgZGljdERlbGV0ZSggdGVz
cy0+ZGljdCwgcmVnLT5ub2RlVXAgKTsgLyogX19nbF9kaWN0TGlzdERlbGV0ZSAqLwotICBtZW1G
cmVlKCByZWcgKTsKLX0KLQotCi1zdGF0aWMgaW50IEZpeFVwcGVyRWRnZSggQWN0aXZlUmVnaW9u
ICpyZWcsIEdMVWhhbGZFZGdlICpuZXdFZGdlICkKLS8qCi0gKiBSZXBsYWNlIGFuIHVwcGVyIGVk
Z2Ugd2hpY2ggbmVlZHMgZml4aW5nIChzZWUgQ29ubmVjdFJpZ2h0VmVydGV4KS4KLSAqLwotewot
ICBhc3NlcnQoIHJlZy0+Zml4VXBwZXJFZGdlICk7Ci0gIGlmICggIV9fZ2xfbWVzaERlbGV0ZSgg
cmVnLT5lVXAgKSApIHJldHVybiAwOwotICByZWctPmZpeFVwcGVyRWRnZSA9IEZBTFNFOwotICBy
ZWctPmVVcCA9IG5ld0VkZ2U7Ci0gIG5ld0VkZ2UtPmFjdGl2ZVJlZ2lvbiA9IHJlZzsKLQotICBy
ZXR1cm4gMTsgCi19Ci0KLXN0YXRpYyBBY3RpdmVSZWdpb24gKlRvcExlZnRSZWdpb24oIEFjdGl2
ZVJlZ2lvbiAqcmVnICkKLXsKLSAgR0xVdmVydGV4ICpvcmcgPSByZWctPmVVcC0+T3JnOwotICBH
TFVoYWxmRWRnZSAqZTsKLQotICAvKiBGaW5kIHRoZSByZWdpb24gYWJvdmUgdGhlIHVwcGVybW9z
dCBlZGdlIHdpdGggdGhlIHNhbWUgb3JpZ2luICovCi0gIGRvIHsKLSAgICByZWcgPSBSZWdpb25B
Ym92ZSggcmVnICk7Ci0gIH0gd2hpbGUoIHJlZy0+ZVVwLT5PcmcgPT0gb3JnICk7Ci0KLSAgLyog
SWYgdGhlIGVkZ2UgYWJvdmUgd2FzIGEgdGVtcG9yYXJ5IGVkZ2UgaW50cm9kdWNlZCBieSBDb25u
ZWN0UmlnaHRWZXJ0ZXgsCi0gICAqIG5vdyBpcyB0aGUgdGltZSB0byBmaXggaXQuCi0gICAqLwot
ICBpZiggcmVnLT5maXhVcHBlckVkZ2UgKSB7Ci0gICAgZSA9IF9fZ2xfbWVzaENvbm5lY3QoIFJl
Z2lvbkJlbG93KHJlZyktPmVVcC0+U3ltLCByZWctPmVVcC0+TG5leHQgKTsKLSAgICBpZiAoZSA9
PSBOVUxMKSByZXR1cm4gTlVMTDsKLSAgICBpZiAoICFGaXhVcHBlckVkZ2UoIHJlZywgZSApICkg
cmV0dXJuIE5VTEw7Ci0gICAgcmVnID0gUmVnaW9uQWJvdmUoIHJlZyApOwotICB9Ci0gIHJldHVy
biByZWc7Ci19Ci0KLXN0YXRpYyBBY3RpdmVSZWdpb24gKlRvcFJpZ2h0UmVnaW9uKCBBY3RpdmVS
ZWdpb24gKnJlZyApCi17Ci0gIEdMVXZlcnRleCAqZHN0ID0gcmVnLT5lVXAtPkRzdDsKLQotICAv
KiBGaW5kIHRoZSByZWdpb24gYWJvdmUgdGhlIHVwcGVybW9zdCBlZGdlIHdpdGggdGhlIHNhbWUg
ZGVzdGluYXRpb24gKi8KLSAgZG8gewotICAgIHJlZyA9IFJlZ2lvbkFib3ZlKCByZWcgKTsKLSAg
fSB3aGlsZSggcmVnLT5lVXAtPkRzdCA9PSBkc3QgKTsKLSAgcmV0dXJuIHJlZzsKLX0KLQotc3Rh
dGljIEFjdGl2ZVJlZ2lvbiAqQWRkUmVnaW9uQmVsb3coIEdMVXRlc3NlbGF0b3IgKnRlc3MsCi0J
CQkJICAgICBBY3RpdmVSZWdpb24gKnJlZ0Fib3ZlLAotCQkJCSAgICAgR0xVaGFsZkVkZ2UgKmVO
ZXdVcCApCi0vKgotICogQWRkIGEgbmV3IGFjdGl2ZSByZWdpb24gdG8gdGhlIHN3ZWVwIGxpbmUs
ICpzb21ld2hlcmUqIGJlbG93ICJyZWdBYm92ZSIKLSAqIChhY2NvcmRpbmcgdG8gd2hlcmUgdGhl
IG5ldyBlZGdlIGJlbG9uZ3MgaW4gdGhlIHN3ZWVwLWxpbmUgZGljdGlvbmFyeSkuCi0gKiBUaGUg
dXBwZXIgZWRnZSBvZiB0aGUgbmV3IHJlZ2lvbiB3aWxsIGJlICJlTmV3VXAiLgotICogV2luZGlu
ZyBudW1iZXIgYW5kICJpbnNpZGUiIGZsYWcgYXJlIG5vdCB1cGRhdGVkLgotICovCi17Ci0gIEFj
dGl2ZVJlZ2lvbiAqcmVnTmV3ID0gKEFjdGl2ZVJlZ2lvbiAqKW1lbUFsbG9jKCBzaXplb2YoIEFj
dGl2ZVJlZ2lvbiApKTsKLSAgaWYgKHJlZ05ldyA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwx
KTsKLQotICByZWdOZXctPmVVcCA9IGVOZXdVcDsKLSAgLyogX19nbF9kaWN0TGlzdEluc2VydEJl
Zm9yZSAqLyAKLSAgcmVnTmV3LT5ub2RlVXAgPSBkaWN0SW5zZXJ0QmVmb3JlKCB0ZXNzLT5kaWN0
LCByZWdBYm92ZS0+bm9kZVVwLCByZWdOZXcgKTsKLSAgaWYgKHJlZ05ldy0+bm9kZVVwID09IE5V
TEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICByZWdOZXctPmZpeFVwcGVyRWRnZSA9IEZBTFNF
OwotICByZWdOZXctPnNlbnRpbmVsID0gRkFMU0U7Ci0gIHJlZ05ldy0+ZGlydHkgPSBGQUxTRTsK
LQotICBlTmV3VXAtPmFjdGl2ZVJlZ2lvbiA9IHJlZ05ldzsKLSAgcmV0dXJuIHJlZ05ldzsKLX0K
LQotc3RhdGljIEdMYm9vbGVhbiBJc1dpbmRpbmdJbnNpZGUoIEdMVXRlc3NlbGF0b3IgKnRlc3Ms
IGludCBuICkKLXsKLSAgc3dpdGNoKCB0ZXNzLT53aW5kaW5nUnVsZSApIHsKLSAgY2FzZSBHTFVf
VEVTU19XSU5ESU5HX09ERDoKLSAgICByZXR1cm4gKG4gJiAxKTsKLSAgY2FzZSBHTFVfVEVTU19X
SU5ESU5HX05PTlpFUk86Ci0gICAgcmV0dXJuIChuICE9IDApOwotICBjYXNlIEdMVV9URVNTX1dJ
TkRJTkdfUE9TSVRJVkU6Ci0gICAgcmV0dXJuIChuID4gMCk7Ci0gIGNhc2UgR0xVX1RFU1NfV0lO
RElOR19ORUdBVElWRToKLSAgICByZXR1cm4gKG4gPCAwKTsKLSAgY2FzZSBHTFVfVEVTU19XSU5E
SU5HX0FCU19HRVFfVFdPOgotICAgIHJldHVybiAobiA+PSAyKSB8fCAobiA8PSAtMik7Ci0gIH0K
LSAgLypMSU5URUQqLwotICBhc3NlcnQoIEZBTFNFICk7Ci0gIC8qTk9UUkVBQ0hFRCovCi0gIHJl
dHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIENvbXB1dGVXaW5kaW5nKCBHTFV0ZXNzZWxhdG9y
ICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZyApCi17Ci0gIHJlZy0+d2luZGluZ051bWJlciA9IFJl
Z2lvbkFib3ZlKHJlZyktPndpbmRpbmdOdW1iZXIgKyByZWctPmVVcC0+d2luZGluZzsKLSAgcmVn
LT5pbnNpZGUgPSBJc1dpbmRpbmdJbnNpZGUoIHRlc3MsIHJlZy0+d2luZGluZ051bWJlciApOwot
fQotCi0KLXN0YXRpYyB2b2lkIEZpbmlzaFJlZ2lvbiggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0
aXZlUmVnaW9uICpyZWcgKQotLyoKLSAqIERlbGV0ZSBhIHJlZ2lvbiBmcm9tIHRoZSBzd2VlcCBs
aW5lLiAgVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHVwcGVyCi0gKiBhbmQgbG93ZXIgY2hhaW5zIG9m
IGEgcmVnaW9uIG1lZXQgKGF0IGEgdmVydGV4IG9uIHRoZSBzd2VlcCBsaW5lKS4KLSAqIFRoZSAi
aW5zaWRlIiBmbGFnIGlzIGNvcGllZCB0byB0aGUgYXBwcm9wcmlhdGUgbWVzaCBmYWNlICh3ZSBj
b3VsZAotICogbm90IGRvIHRoaXMgYmVmb3JlIC0tIHNpbmNlIHRoZSBzdHJ1Y3R1cmUgb2YgdGhl
IG1lc2ggaXMgYWx3YXlzCi0gKiBjaGFuZ2luZywgdGhpcyBmYWNlIG1heSBub3QgaGF2ZSBldmVu
IGV4aXN0ZWQgdW50aWwgbm93KS4KLSAqLwotewotICBHTFVoYWxmRWRnZSAqZSA9IHJlZy0+ZVVw
OwotICBHTFVmYWNlICpmID0gZS0+TGZhY2U7Ci0KLSAgZi0+aW5zaWRlID0gcmVnLT5pbnNpZGU7
Ci0gIGYtPmFuRWRnZSA9IGU7ICAgLyogb3B0aW1pemF0aW9uIGZvciBfX2dsX21lc2hUZXNzZWxs
YXRlTW9ub1JlZ2lvbigpICovCi0gIERlbGV0ZVJlZ2lvbiggdGVzcywgcmVnICk7Ci19Ci0KLQot
c3RhdGljIEdMVWhhbGZFZGdlICpGaW5pc2hMZWZ0UmVnaW9ucyggR0xVdGVzc2VsYXRvciAqdGVz
cywKLQkgICAgICAgQWN0aXZlUmVnaW9uICpyZWdGaXJzdCwgQWN0aXZlUmVnaW9uICpyZWdMYXN0
ICkKLS8qCi0gKiBXZSBhcmUgZ2l2ZW4gYSB2ZXJ0ZXggd2l0aCBvbmUgb3IgbW9yZSBsZWZ0LWdv
aW5nIGVkZ2VzLiAgQWxsIGFmZmVjdGVkCi0gKiBlZGdlcyBzaG91bGQgYmUgaW4gdGhlIGVkZ2Ug
ZGljdGlvbmFyeS4gIFN0YXJ0aW5nIGF0IHJlZ0ZpcnN0LT5lVXAsCi0gKiB3ZSB3YWxrIGRvd24g
ZGVsZXRpbmcgYWxsIHJlZ2lvbnMgd2hlcmUgYm90aCBlZGdlcyBoYXZlIHRoZSBzYW1lCi0gKiBv
cmlnaW4gdk9yZy4gIEF0IHRoZSBzYW1lIHRpbWUgd2UgY29weSB0aGUgImluc2lkZSIgZmxhZyBm
cm9tIHRoZQotICogYWN0aXZlIHJlZ2lvbiB0byB0aGUgZmFjZSwgc2luY2UgYXQgdGhpcyBwb2lu
dCBlYWNoIGZhY2Ugd2lsbCBiZWxvbmcKLSAqIHRvIGF0IG1vc3Qgb25lIHJlZ2lvbiAodGhpcyB3
YXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgdW50aWwgdGhpcyBwb2ludAotICogaW4gdGhlIHN3ZWVw
KS4gIFRoZSB3YWxrIHN0b3BzIGF0IHRoZSByZWdpb24gYWJvdmUgcmVnTGFzdDsgaWYgcmVnTGFz
dAotICogaXMgTlVMTCB3ZSB3YWxrIGFzIGZhciBhcyBwb3NzaWJsZS4gIEF0IHRoZSBzYW1lIHRp
bWUgd2UgcmVsaW5rIHRoZQotICogbWVzaCBpZiBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIG9yZGVy
aW5nIG9mIGVkZ2VzIGFyb3VuZCB2T3JnIGlzIHRoZQotICogc2FtZSBhcyBpbiB0aGUgZGljdGlv
bmFyeS4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJlZywgKnJlZ1ByZXY7Ci0gIEdMVWhhbGZF
ZGdlICplLCAqZVByZXY7Ci0KLSAgcmVnUHJldiA9IHJlZ0ZpcnN0OwotICBlUHJldiA9IHJlZ0Zp
cnN0LT5lVXA7Ci0gIHdoaWxlKCByZWdQcmV2ICE9IHJlZ0xhc3QgKSB7Ci0gICAgcmVnUHJldi0+
Zml4VXBwZXJFZGdlID0gRkFMU0U7CS8qIHBsYWNlbWVudCB3YXMgT0sgKi8KLSAgICByZWcgPSBS
ZWdpb25CZWxvdyggcmVnUHJldiApOwotICAgIGUgPSByZWctPmVVcDsKLSAgICBpZiggZS0+T3Jn
ICE9IGVQcmV2LT5PcmcgKSB7Ci0gICAgICBpZiggISByZWctPmZpeFVwcGVyRWRnZSApIHsKLQkv
KiBSZW1vdmUgdGhlIGxhc3QgbGVmdC1nb2luZyBlZGdlLiAgRXZlbiB0aG91Z2ggdGhlcmUgYXJl
IG5vIGZ1cnRoZXIKLQkgKiBlZGdlcyBpbiB0aGUgZGljdGlvbmFyeSB3aXRoIHRoaXMgb3JpZ2lu
LCB0aGVyZSBtYXkgYmUgZnVydGhlcgotCSAqIHN1Y2ggZWRnZXMgaW4gdGhlIG1lc2ggKGlmIHdl
IGFyZSBhZGRpbmcgbGVmdCBlZGdlcyB0byBhIHZlcnRleAotCSAqIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiBwcm9jZXNzZWQpLiAgVGh1cyBpdCBpcyBpbXBvcnRhbnQgdG8gY2FsbAotCSAqIEZpbmlz
aFJlZ2lvbiByYXRoZXIgdGhhbiBqdXN0IERlbGV0ZVJlZ2lvbi4KLQkgKi8KLQlGaW5pc2hSZWdp
b24oIHRlc3MsIHJlZ1ByZXYgKTsKLQlicmVhazsKLSAgICAgIH0KLSAgICAgIC8qIElmIHRoZSBl
ZGdlIGJlbG93IHdhcyBhIHRlbXBvcmFyeSBlZGdlIGludHJvZHVjZWQgYnkKLSAgICAgICAqIENv
bm5lY3RSaWdodFZlcnRleCwgbm93IGlzIHRoZSB0aW1lIHRvIGZpeCBpdC4KLSAgICAgICAqLwot
ICAgICAgZSA9IF9fZ2xfbWVzaENvbm5lY3QoIGVQcmV2LT5McHJldiwgZS0+U3ltICk7Ci0gICAg
ICBpZiAoZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAgIGlmICggIUZpeFVw
cGVyRWRnZSggcmVnLCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICB9Ci0KLSAgICAv
KiBSZWxpbmsgZWRnZXMgc28gdGhhdCBlUHJldi0+T25leHQgPT0gZSAqLwotICAgIGlmKCBlUHJl
di0+T25leHQgIT0gZSApIHsKLSAgICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZS0+T3ByZXYs
IGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgaWYgKCAhX19nbF9tZXNoU3BsaWNl
KCBlUHJldiwgZSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgfQotICAgIEZpbmlzaFJl
Z2lvbiggdGVzcywgcmVnUHJldiApOwkvKiBtYXkgY2hhbmdlIHJlZy0+ZVVwICovCi0gICAgZVBy
ZXYgPSByZWctPmVVcDsKLSAgICByZWdQcmV2ID0gcmVnOwotICB9Ci0gIHJldHVybiBlUHJldjsK
LX0KLQotCi1zdGF0aWMgdm9pZCBBZGRSaWdodEVkZ2VzKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBB
Y3RpdmVSZWdpb24gKnJlZ1VwLAotICAgICAgIEdMVWhhbGZFZGdlICplRmlyc3QsIEdMVWhhbGZF
ZGdlICplTGFzdCwgR0xVaGFsZkVkZ2UgKmVUb3BMZWZ0LAotICAgICAgIEdMYm9vbGVhbiBjbGVh
blVwICkKLS8qCi0gKiBQdXJwb3NlOiBpbnNlcnQgcmlnaHQtZ29pbmcgZWRnZXMgaW50byB0aGUg
ZWRnZSBkaWN0aW9uYXJ5LCBhbmQgdXBkYXRlCi0gKiB3aW5kaW5nIG51bWJlcnMgYW5kIG1lc2gg
Y29ubmVjdGl2aXR5IGFwcHJvcHJpYXRlbHkuICBBbGwgcmlnaHQtZ29pbmcKLSAqIGVkZ2VzIHNo
YXJlIGEgY29tbW9uIG9yaWdpbiB2T3JnLiAgRWRnZXMgYXJlIGluc2VydGVkIENDVyBzdGFydGlu
ZyBhdAotICogZUZpcnN0OyB0aGUgbGFzdCBlZGdlIGluc2VydGVkIGlzIGVMYXN0LT5PcHJldi4g
IElmIHZPcmcgaGFzIGFueQotICogbGVmdC1nb2luZyBlZGdlcyBhbHJlYWR5IHByb2Nlc3NlZCwg
dGhlbiBlVG9wTGVmdCBtdXN0IGJlIHRoZSBlZGdlCi0gKiBzdWNoIHRoYXQgYW4gaW1hZ2luYXJ5
IHVwd2FyZCB2ZXJ0aWNhbCBzZWdtZW50IGZyb20gdk9yZyB3b3VsZCBiZQotICogY29udGFpbmVk
IGJldHdlZW4gZVRvcExlZnQtPk9wcmV2IGFuZCBlVG9wTGVmdDsgb3RoZXJ3aXNlIGVUb3BMZWZ0
Ci0gKiBzaG91bGQgYmUgTlVMTC4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJlZywgKnJlZ1By
ZXY7Ci0gIEdMVWhhbGZFZGdlICplLCAqZVByZXY7Ci0gIGludCBmaXJzdFRpbWUgPSBUUlVFOwot
Ci0gIC8qIEluc2VydCB0aGUgbmV3IHJpZ2h0LWdvaW5nIGVkZ2VzIGluIHRoZSBkaWN0aW9uYXJ5
ICovCi0gIGUgPSBlRmlyc3Q7Ci0gIGRvIHsKLSAgICBhc3NlcnQoIFZlcnRMZXEoIGUtPk9yZywg
ZS0+RHN0ICkpOwotICAgIEFkZFJlZ2lvbkJlbG93KCB0ZXNzLCByZWdVcCwgZS0+U3ltICk7Ci0g
ICAgZSA9IGUtPk9uZXh0OwotICB9IHdoaWxlICggZSAhPSBlTGFzdCApOwotCi0gIC8qIFdhbGsg
KmFsbCogcmlnaHQtZ29pbmcgZWRnZXMgZnJvbSBlLT5PcmcsIGluIHRoZSBkaWN0aW9uYXJ5IG9y
ZGVyLAotICAgKiB1cGRhdGluZyB0aGUgd2luZGluZyBudW1iZXJzIG9mIGVhY2ggcmVnaW9uLCBh
bmQgcmUtbGlua2luZyB0aGUgbWVzaAotICAgKiBlZGdlcyB0byBtYXRjaCB0aGUgZGljdGlvbmFy
eSBvcmRlcmluZyAoaWYgbmVjZXNzYXJ5KS4KLSAgICovCi0gIGlmKCBlVG9wTGVmdCA9PSBOVUxM
ICkgewotICAgIGVUb3BMZWZ0ID0gUmVnaW9uQmVsb3coIHJlZ1VwICktPmVVcC0+UnByZXY7Ci0g
IH0KLSAgcmVnUHJldiA9IHJlZ1VwOwotICBlUHJldiA9IGVUb3BMZWZ0OwotICBmb3IoIDs7ICkg
ewotICAgIHJlZyA9IFJlZ2lvbkJlbG93KCByZWdQcmV2ICk7Ci0gICAgZSA9IHJlZy0+ZVVwLT5T
eW07Ci0gICAgaWYoIGUtPk9yZyAhPSBlUHJldi0+T3JnICkgYnJlYWs7Ci0KLSAgICBpZiggZS0+
T25leHQgIT0gZVByZXYgKSB7Ci0gICAgICAvKiBVbmxpbmsgZSBmcm9tIGl0cyBjdXJyZW50IHBv
c2l0aW9uLCBhbmQgcmVsaW5rIGJlbG93IGVQcmV2ICovCi0gICAgICBpZiAoICFfX2dsX21lc2hT
cGxpY2UoIGUtPk9wcmV2LCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAgIGlmICgg
IV9fZ2xfbWVzaFNwbGljZSggZVByZXYtPk9wcmV2LCBlICkgKSBsb25nam1wKHRlc3MtPmVudiwx
KTsKLSAgICB9Ci0gICAgLyogQ29tcHV0ZSB0aGUgd2luZGluZyBudW1iZXIgYW5kICJpbnNpZGUi
IGZsYWcgZm9yIHRoZSBuZXcgcmVnaW9ucyAqLwotICAgIHJlZy0+d2luZGluZ051bWJlciA9IHJl
Z1ByZXYtPndpbmRpbmdOdW1iZXIgLSBlLT53aW5kaW5nOwotICAgIHJlZy0+aW5zaWRlID0gSXNX
aW5kaW5nSW5zaWRlKCB0ZXNzLCByZWctPndpbmRpbmdOdW1iZXIgKTsKLQotICAgIC8qIENoZWNr
IGZvciB0d28gb3V0Z29pbmcgZWRnZXMgd2l0aCBzYW1lIHNsb3BlIC0tIHByb2Nlc3MgdGhlc2UK
LSAgICAgKiBiZWZvcmUgYW55IGludGVyc2VjdGlvbiB0ZXN0cyAoc2VlIGV4YW1wbGUgaW4gX19n
bF9jb21wdXRlSW50ZXJpb3IpLgotICAgICAqLwotICAgIHJlZ1ByZXYtPmRpcnR5ID0gVFJVRTsK
LSAgICBpZiggISBmaXJzdFRpbWUgJiYgQ2hlY2tGb3JSaWdodFNwbGljZSggdGVzcywgcmVnUHJl
diApKSB7Ci0gICAgICBBZGRXaW5kaW5nKCBlLCBlUHJldiApOwotICAgICAgRGVsZXRlUmVnaW9u
KCB0ZXNzLCByZWdQcmV2ICk7Ci0gICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVQcmV2ICkg
KSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICB9Ci0gICAgZmlyc3RUaW1lID0gRkFMU0U7Ci0g
ICAgcmVnUHJldiA9IHJlZzsKLSAgICBlUHJldiA9IGU7Ci0gIH0KLSAgcmVnUHJldi0+ZGlydHkg
PSBUUlVFOwotICBhc3NlcnQoIHJlZ1ByZXYtPndpbmRpbmdOdW1iZXIgLSBlLT53aW5kaW5nID09
IHJlZy0+d2luZGluZ051bWJlciApOwotCi0gIGlmKCBjbGVhblVwICkgewotICAgIC8qIENoZWNr
IGZvciBpbnRlcnNlY3Rpb25zIGJldHdlZW4gbmV3bHkgYWRqYWNlbnQgZWRnZXMuICovCi0gICAg
V2Fsa0RpcnR5UmVnaW9ucyggdGVzcywgcmVnUHJldiApOwotICB9Ci19Ci0KLQotc3RhdGljIHZv
aWQgQ2FsbENvbWJpbmUoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMVXZlcnRleCAqaXNlY3QsCi0J
CQkgdm9pZCAqZGF0YVs0XSwgR0xmbG9hdCB3ZWlnaHRzWzRdLCBpbnQgbmVlZGVkICkKLXsKLSAg
R0xkb3VibGUgY29vcmRzWzNdOwotCi0gIC8qIENvcHkgY29vcmQgZGF0YSBpbiBjYXNlIHRoZSBj
YWxsYmFjayBjaGFuZ2VzIGl0LiAqLwotICBjb29yZHNbMF0gPSBpc2VjdC0+Y29vcmRzWzBdOwot
ICBjb29yZHNbMV0gPSBpc2VjdC0+Y29vcmRzWzFdOwotICBjb29yZHNbMl0gPSBpc2VjdC0+Y29v
cmRzWzJdOwotCi0gIGlzZWN0LT5kYXRhID0gTlVMTDsKLSAgQ0FMTF9DT01CSU5FX09SX0NPTUJJ
TkVfREFUQSggY29vcmRzLCBkYXRhLCB3ZWlnaHRzLCAmaXNlY3QtPmRhdGEgKTsKLSAgaWYoIGlz
ZWN0LT5kYXRhID09IE5VTEwgKSB7Ci0gICAgaWYoICEgbmVlZGVkICkgewotICAgICAgaXNlY3Qt
PmRhdGEgPSBkYXRhWzBdOwotICAgIH0gZWxzZSBpZiggISB0ZXNzLT5mYXRhbEVycm9yICkgewot
ICAgICAgLyogVGhlIG9ubHkgd2F5IGZhdGFsIGVycm9yIGlzIHdoZW4gdHdvIGVkZ2VzIGFyZSBm
b3VuZCB0byBpbnRlcnNlY3QsCi0gICAgICAgKiBidXQgdGhlIHVzZXIgaGFzIG5vdCBwcm92aWRl
ZCB0aGUgY2FsbGJhY2sgbmVjZXNzYXJ5IHRvIGhhbmRsZQotICAgICAgICogZ2VuZXJhdGVkIGlu
dGVyc2VjdGlvbiBwb2ludHMuCi0gICAgICAgKi8KLSAgICAgIENBTExfRVJST1JfT1JfRVJST1Jf
REFUQSggR0xVX1RFU1NfTkVFRF9DT01CSU5FX0NBTExCQUNLICk7Ci0gICAgICB0ZXNzLT5mYXRh
bEVycm9yID0gVFJVRTsKLSAgICB9Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgU3BsaWNlTWVyZ2VW
ZXJ0aWNlcyggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xVaGFsZkVkZ2UgKmUxLAotCQkJCSBHTFVo
YWxmRWRnZSAqZTIgKQotLyoKLSAqIFR3byB2ZXJ0aWNlcyB3aXRoIGlkZW50aWFsIGNvb3JkaW5h
dGVzIGFyZSBjb21iaW5lZCBpbnRvIG9uZS4KLSAqIGUxLT5PcmcgaXMga2VwdCwgd2hpbGUgZTIt
Pk9yZyBpcyBkaXNjYXJkZWQuCi0gKi8KLXsKLSAgdm9pZCAqZGF0YVs0XSA9IHsgTlVMTCwgTlVM
TCwgTlVMTCwgTlVMTCB9OwotICBHTGZsb2F0IHdlaWdodHNbNF0gPSB7IDAuNSwgMC41LCAwLjAs
IDAuMCB9OwotCi0gIGRhdGFbMF0gPSBlMS0+T3JnLT5kYXRhOwotICBkYXRhWzFdID0gZTItPk9y
Zy0+ZGF0YTsKLSAgQ2FsbENvbWJpbmUoIHRlc3MsIGUxLT5PcmcsIGRhdGEsIHdlaWdodHMsIEZB
TFNFICk7Ci0gIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZTEsIGUyICkgKSBsb25nam1wKHRlc3Mt
PmVudiwxKTsgCi19Ci0KLXN0YXRpYyB2b2lkIFZlcnRleFdlaWdodHMoIEdMVXZlcnRleCAqaXNl
Y3QsIEdMVXZlcnRleCAqb3JnLCBHTFV2ZXJ0ZXggKmRzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZmxvYXQgKndlaWdodHMgKQotLyoKLSAqIEZpbmQgc29tZSB3ZWlnaHRzIHdoaWNo
IGRlc2NyaWJlIGhvdyB0aGUgaW50ZXJzZWN0aW9uIHZlcnRleCBpcwotICogYSBsaW5lYXIgY29t
YmluYXRpb24gb2YgIm9yZyIgYW5kICJkZXN0Ii4gIEVhY2ggb2YgdGhlIHR3byBlZGdlcwotICog
d2hpY2ggZ2VuZXJhdGVkICJpc2VjdCIgaXMgYWxsb2NhdGVkIDUwJSBvZiB0aGUgd2VpZ2h0OyBl
YWNoIGVkZ2UKLSAqIHNwbGl0cyB0aGUgd2VpZ2h0IGJldHdlZW4gaXRzIG9yZyBhbmQgZHN0IGFj
Y29yZGluZyB0byB0aGUKLSAqIHJlbGF0aXZlIGRpc3RhbmNlIHRvICJpc2VjdCIuCi0gKi8KLXsK
LSAgR0xkb3VibGUgdDEgPSBWZXJ0TDFkaXN0KCBvcmcsIGlzZWN0ICk7Ci0gIEdMZG91YmxlIHQy
ID0gVmVydEwxZGlzdCggZHN0LCBpc2VjdCApOwotCi0gIHdlaWdodHNbMF0gPSAwLjUgKiB0MiAv
ICh0MSArIHQyKTsKLSAgd2VpZ2h0c1sxXSA9IDAuNSAqIHQxIC8gKHQxICsgdDIpOwotICBpc2Vj
dC0+Y29vcmRzWzBdICs9IHdlaWdodHNbMF0qb3JnLT5jb29yZHNbMF0gKyB3ZWlnaHRzWzFdKmRz
dC0+Y29vcmRzWzBdOwotICBpc2VjdC0+Y29vcmRzWzFdICs9IHdlaWdodHNbMF0qb3JnLT5jb29y
ZHNbMV0gKyB3ZWlnaHRzWzFdKmRzdC0+Y29vcmRzWzFdOwotICBpc2VjdC0+Y29vcmRzWzJdICs9
IHdlaWdodHNbMF0qb3JnLT5jb29yZHNbMl0gKyB3ZWlnaHRzWzFdKmRzdC0+Y29vcmRzWzJdOwot
fQotCi0KLXN0YXRpYyB2b2lkIEdldEludGVyc2VjdERhdGEoIEdMVXRlc3NlbGF0b3IgKnRlc3Ms
IEdMVXZlcnRleCAqaXNlY3QsCi0gICAgICAgR0xVdmVydGV4ICpvcmdVcCwgR0xVdmVydGV4ICpk
c3RVcCwKLSAgICAgICBHTFV2ZXJ0ZXggKm9yZ0xvLCBHTFV2ZXJ0ZXggKmRzdExvICkKLS8qCi0g
KiBXZSd2ZSBjb21wdXRlZCBhIG5ldyBpbnRlcnNlY3Rpb24gcG9pbnQsIG5vdyB3ZSBuZWVkIGEg
ImRhdGEiIHBvaW50ZXIKLSAqIGZyb20gdGhlIHVzZXIgc28gdGhhdCB3ZSBjYW4gcmVmZXIgdG8g
dGhpcyBuZXcgdmVydGV4IGluIHRoZQotICogcmVuZGVyaW5nIGNhbGxiYWNrcy4KLSAqLwotewot
ICB2b2lkICpkYXRhWzRdOwotICBHTGZsb2F0IHdlaWdodHNbNF07Ci0KLSAgZGF0YVswXSA9IG9y
Z1VwLT5kYXRhOwotICBkYXRhWzFdID0gZHN0VXAtPmRhdGE7Ci0gIGRhdGFbMl0gPSBvcmdMby0+
ZGF0YTsKLSAgZGF0YVszXSA9IGRzdExvLT5kYXRhOwotCi0gIGlzZWN0LT5jb29yZHNbMF0gPSBp
c2VjdC0+Y29vcmRzWzFdID0gaXNlY3QtPmNvb3Jkc1syXSA9IDA7Ci0gIFZlcnRleFdlaWdodHMo
IGlzZWN0LCBvcmdVcCwgZHN0VXAsICZ3ZWlnaHRzWzBdICk7Ci0gIFZlcnRleFdlaWdodHMoIGlz
ZWN0LCBvcmdMbywgZHN0TG8sICZ3ZWlnaHRzWzJdICk7Ci0KLSAgQ2FsbENvbWJpbmUoIHRlc3Ms
IGlzZWN0LCBkYXRhLCB3ZWlnaHRzLCBUUlVFICk7Ci19Ci0KLXN0YXRpYyBpbnQgQ2hlY2tGb3JS
aWdodFNwbGljZSggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWdVcCApCi0v
KgotICogQ2hlY2sgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlIG9mICJyZWdVcCIsIHRvIG1ha2Ug
c3VyZSB0aGF0IHRoZQotICogZVVwLT5PcmcgaXMgYWJvdmUgZUxvLCBvciBlTG8tPk9yZyBpcyBi
ZWxvdyBlVXAgKGRlcGVuZGluZyBvbiB3aGljaAotICogb3JpZ2luIGlzIGxlZnRtb3N0KS4KLSAq
Ci0gKiBUaGUgbWFpbiBwdXJwb3NlIGlzIHRvIHNwbGljZSByaWdodC1nb2luZyBlZGdlcyB3aXRo
IHRoZSBzYW1lCi0gKiBkZXN0IHZlcnRleCBhbmQgbmVhcmx5IGlkZW50aWNhbCBzbG9wZXMgKGll
LiB3ZSBjYW4ndCBkaXN0aW5ndWlzaAotICogdGhlIHNsb3BlcyBudW1lcmljYWxseSkuICBIb3dl
dmVyIHRoZSBzcGxpY2luZyBjYW4gYWxzbyBoZWxwIHVzCi0gKiB0byByZWNvdmVyIGZyb20gbnVt
ZXJpY2FsIGVycm9ycy4gIEZvciBleGFtcGxlLCBzdXBwb3NlIGF0IG9uZQotICogcG9pbnQgd2Ug
Y2hlY2tlZCBlVXAgYW5kIGVMbywgYW5kIGRlY2lkZWQgdGhhdCBlVXAtPk9yZyBpcyBiYXJlbHkK
LSAqIGFib3ZlIGVMby4gIFRoZW4gbGF0ZXIsIHdlIHNwbGl0IGVMbyBpbnRvIHR3byBlZGdlcyAo
ZWcuIGZyb20KLSAqIGEgc3BsaWNlIG9wZXJhdGlvbiBsaWtlIHRoaXMgb25lKS4gIFRoaXMgY2Fu
IGNoYW5nZSB0aGUgcmVzdWx0IG9mCi0gKiBvdXIgdGVzdCBzbyB0aGF0IG5vdyBlVXAtPk9yZyBp
cyBpbmNpZGVudCB0byBlTG8sIG9yIGJhcmVseSBiZWxvdyBpdC4KLSAqIFdlIG11c3QgY29ycmVj
dCB0aGlzIGNvbmRpdGlvbiB0byBtYWludGFpbiB0aGUgZGljdGlvbmFyeSBpbnZhcmlhbnRzLgot
ICoKLSAqIE9uZSBwb3NzaWJpbGl0eSBpcyB0byBjaGVjayB0aGVzZSBlZGdlcyBmb3IgaW50ZXJz
ZWN0aW9uIGFnYWluCi0gKiAoaWUuIENoZWNrRm9ySW50ZXJzZWN0KS4gIFRoaXMgaXMgd2hhdCB3
ZSBkbyBpZiBwb3NzaWJsZS4gIEhvd2V2ZXIKLSAqIENoZWNrRm9ySW50ZXJzZWN0IHJlcXVpcmVz
IHRoYXQgdGVzcy0+ZXZlbnQgbGllcyBiZXR3ZWVuIGVVcCBhbmQgZUxvLAotICogc28gdGhhdCBp
dCBoYXMgc29tZXRoaW5nIHRvIGZhbGwgYmFjayBvbiB3aGVuIHRoZSBpbnRlcnNlY3Rpb24KLSAq
IGNhbGN1bGF0aW9uIGdpdmVzIHVzIGFuIHVudXNhYmxlIGFuc3dlci4gIFNvLCBmb3IgdGhvc2Ug
Y2FzZXMgd2hlcmUKLSAqIHdlIGNhbid0IGNoZWNrIGZvciBpbnRlcnNlY3Rpb24sIHRoaXMgcm91
dGluZSBmaXhlcyB0aGUgcHJvYmxlbQotICogYnkganVzdCBzcGxpY2luZyB0aGUgb2ZmZW5kaW5n
IHZlcnRleCBpbnRvIHRoZSBvdGhlciBlZGdlLgotICogVGhpcyBpcyBhIGd1YXJhbnRlZWQgc29s
dXRpb24sIG5vIG1hdHRlciBob3cgZGVnZW5lcmF0ZSB0aGluZ3MgZ2V0LgotICogQmFzaWNhbGx5
IHRoaXMgaXMgYSBjb21iaW5hdG9yaWFsIHNvbHV0aW9uIHRvIGEgbnVtZXJpY2FsIHByb2JsZW0u
Ci0gKi8KLXsKLSAgQWN0aXZlUmVnaW9uICpyZWdMbyA9IFJlZ2lvbkJlbG93KHJlZ1VwKTsKLSAg
R0xVaGFsZkVkZ2UgKmVVcCA9IHJlZ1VwLT5lVXA7Ci0gIEdMVWhhbGZFZGdlICplTG8gPSByZWdM
by0+ZVVwOwotCi0gIGlmKCBWZXJ0TGVxKCBlVXAtPk9yZywgZUxvLT5PcmcgKSkgewotICAgIGlm
KCBFZGdlU2lnbiggZUxvLT5Ec3QsIGVVcC0+T3JnLCBlTG8tPk9yZyApID4gMCApIHJldHVybiBG
QUxTRTsKLQotICAgIC8qIGVVcC0+T3JnIGFwcGVhcnMgdG8gYmUgYmVsb3cgZUxvICovCi0gICAg
aWYoICEgVmVydEVxKCBlVXAtPk9yZywgZUxvLT5PcmcgKSkgewotICAgICAgLyogU3BsaWNlIGVV
cC0+T3JnIGludG8gZUxvICovCi0gICAgICBpZiAoIF9fZ2xfbWVzaFNwbGl0RWRnZSggZUxvLT5T
eW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAgIGlmICggIV9fZ2xfbWVz
aFNwbGljZSggZVVwLCBlTG8tPk9wcmV2ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAg
IHJlZ1VwLT5kaXJ0eSA9IHJlZ0xvLT5kaXJ0eSA9IFRSVUU7Ci0KLSAgICB9IGVsc2UgaWYoIGVV
cC0+T3JnICE9IGVMby0+T3JnICkgewotICAgICAgLyogbWVyZ2UgdGhlIHR3byB2ZXJ0aWNlcywg
ZGlzY2FyZGluZyBlVXAtPk9yZyAqLwotICAgICAgcHFEZWxldGUoIHRlc3MtPnBxLCBlVXAtPk9y
Zy0+cHFIYW5kbGUgKTsgLyogX19nbF9wcVNvcnREZWxldGUgKi8KLSAgICAgIFNwbGljZU1lcmdl
VmVydGljZXMoIHRlc3MsIGVMby0+T3ByZXYsIGVVcCApOwotICAgIH0KLSAgfSBlbHNlIHsKLSAg
ICBpZiggRWRnZVNpZ24oIGVVcC0+RHN0LCBlTG8tPk9yZywgZVVwLT5PcmcgKSA8IDAgKSByZXR1
cm4gRkFMU0U7Ci0KLSAgICAvKiBlTG8tPk9yZyBhcHBlYXJzIHRvIGJlIGFib3ZlIGVVcCwgc28g
c3BsaWNlIGVMby0+T3JnIGludG8gZVVwICovCi0gICAgUmVnaW9uQWJvdmUocmVnVXApLT5kaXJ0
eSA9IHJlZ1VwLT5kaXJ0eSA9IFRSVUU7Ci0gICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVw
LT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICBpZiAoICFfX2dsX21l
c2hTcGxpY2UoIGVMby0+T3ByZXYsIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIH0K
LSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBpbnQgQ2hlY2tGb3JMZWZ0U3BsaWNlKCBHTFV0
ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICkKLS8qCi0gKiBDaGVjayB0aGUg
dXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgInJlZ1VwIiwgdG8gbWFrZSBzdXJlIHRoYXQgdGhlCi0g
KiBlVXAtPkRzdCBpcyBhYm92ZSBlTG8sIG9yIGVMby0+RHN0IGlzIGJlbG93IGVVcCAoZGVwZW5k
aW5nIG9uIHdoaWNoCi0gKiBkZXN0aW5hdGlvbiBpcyByaWdodG1vc3QpLgotICoKLSAqIFRoZW9y
ZXRpY2FsbHksIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0cnVlLiAgSG93ZXZlciwgc3BsaXR0aW5n
IGFuIGVkZ2UKLSAqIGludG8gdHdvIHBpZWNlcyBjYW4gY2hhbmdlIHRoZSByZXN1bHRzIG9mIHBy
ZXZpb3VzIHRlc3RzLiAgRm9yIGV4YW1wbGUsCi0gKiBzdXBwb3NlIGF0IG9uZSBwb2ludCB3ZSBj
aGVja2VkIGVVcCBhbmQgZUxvLCBhbmQgZGVjaWRlZCB0aGF0IGVVcC0+RHN0Ci0gKiBpcyBiYXJl
bHkgYWJvdmUgZUxvLiAgVGhlbiBsYXRlciwgd2Ugc3BsaXQgZUxvIGludG8gdHdvIGVkZ2VzIChl
Zy4gZnJvbQotICogYSBzcGxpY2Ugb3BlcmF0aW9uIGxpa2UgdGhpcyBvbmUpLiAgVGhpcyBjYW4g
Y2hhbmdlIHRoZSByZXN1bHQgb2YKLSAqIHRoZSB0ZXN0IHNvIHRoYXQgbm93IGVVcC0+RHN0IGlz
IGluY2lkZW50IHRvIGVMbywgb3IgYmFyZWx5IGJlbG93IGl0LgotICogV2UgbXVzdCBjb3JyZWN0
IHRoaXMgY29uZGl0aW9uIHRvIG1haW50YWluIHRoZSBkaWN0aW9uYXJ5IGludmFyaWFudHMKLSAq
IChvdGhlcndpc2UgbmV3IGVkZ2VzIG1pZ2h0IGdldCBpbnNlcnRlZCBpbiB0aGUgd3JvbmcgcGxh
Y2UgaW4gdGhlCi0gKiBkaWN0aW9uYXJ5LCBhbmQgYmFkIHN0dWZmIHdpbGwgaGFwcGVuKS4KLSAq
Ci0gKiBXZSBmaXggdGhlIHByb2JsZW0gYnkganVzdCBzcGxpY2luZyB0aGUgb2ZmZW5kaW5nIHZl
cnRleCBpbnRvIHRoZQotICogb3RoZXIgZWRnZS4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJl
Z0xvID0gUmVnaW9uQmVsb3cocmVnVXApOwotICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVV
cDsKLSAgR0xVaGFsZkVkZ2UgKmVMbyA9IHJlZ0xvLT5lVXA7Ci0gIEdMVWhhbGZFZGdlICplOwot
Ci0gIGFzc2VydCggISBWZXJ0RXEoIGVVcC0+RHN0LCBlTG8tPkRzdCApKTsKLQotICBpZiggVmVy
dExlcSggZVVwLT5Ec3QsIGVMby0+RHN0ICkpIHsKLSAgICBpZiggRWRnZVNpZ24oIGVVcC0+RHN0
LCBlTG8tPkRzdCwgZVVwLT5PcmcgKSA8IDAgKSByZXR1cm4gRkFMU0U7Ci0KLSAgICAvKiBlTG8t
PkRzdCBpcyBhYm92ZSBlVXAsIHNvIHNwbGljZSBlTG8tPkRzdCBpbnRvIGVVcCAqLwotICAgIFJl
Z2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdVcC0+ZGlydHkgPSBUUlVFOwotICAgIGUgPSBf
X2dsX21lc2hTcGxpdEVkZ2UoIGVVcCApOwotICAgIGlmIChlID09IE5VTEwpIGxvbmdqbXAodGVz
cy0+ZW52LDEpOwotICAgIGlmICggIV9fZ2xfbWVzaFNwbGljZSggZUxvLT5TeW0sIGUgKSApIGxv
bmdqbXAodGVzcy0+ZW52LDEpOwotICAgIGUtPkxmYWNlLT5pbnNpZGUgPSByZWdVcC0+aW5zaWRl
OwotICB9IGVsc2UgewotICAgIGlmKCBFZGdlU2lnbiggZUxvLT5Ec3QsIGVVcC0+RHN0LCBlTG8t
Pk9yZyApID4gMCApIHJldHVybiBGQUxTRTsKLQotICAgIC8qIGVVcC0+RHN0IGlzIGJlbG93IGVM
bywgc28gc3BsaWNlIGVVcC0+RHN0IGludG8gZUxvICovCi0gICAgcmVnVXAtPmRpcnR5ID0gcmVn
TG8tPmRpcnR5ID0gVFJVRTsKLSAgICBlID0gX19nbF9tZXNoU3BsaXRFZGdlKCBlTG8gKTsKLSAg
ICBpZiAoZSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsgICAgCi0gICAgaWYgKCAhX19n
bF9tZXNoU3BsaWNlKCBlVXAtPkxuZXh0LCBlTG8tPlN5bSApICkgbG9uZ2ptcCh0ZXNzLT5lbnYs
MSk7Ci0gICAgZS0+UmZhY2UtPmluc2lkZSA9IHJlZ1VwLT5pbnNpZGU7Ci0gIH0KLSAgcmV0dXJu
IFRSVUU7Ci19Ci0KLQotc3RhdGljIGludCBDaGVja0ZvckludGVyc2VjdCggR0xVdGVzc2VsYXRv
ciAqdGVzcywgQWN0aXZlUmVnaW9uICpyZWdVcCApCi0vKgotICogQ2hlY2sgdGhlIHVwcGVyIGFu
ZCBsb3dlciBlZGdlcyBvZiB0aGUgZ2l2ZW4gcmVnaW9uIHRvIHNlZSBpZgotICogdGhleSBpbnRl
cnNlY3QuICBJZiBzbywgY3JlYXRlIHRoZSBpbnRlcnNlY3Rpb24gYW5kIGFkZCBpdAotICogdG8g
dGhlIGRhdGEgc3RydWN0dXJlcy4KLSAqCi0gKiBSZXR1cm5zIFRSVUUgaWYgYWRkaW5nIHRoZSBu
ZXcgaW50ZXJzZWN0aW9uIHJlc3VsdGVkIGluIGEgcmVjdXJzaXZlCi0gKiBjYWxsIHRvIEFkZFJp
Z2h0RWRnZXMoKTsgaW4gdGhpcyBjYXNlIGFsbCAiZGlydHkiIHJlZ2lvbnMgaGF2ZSBiZWVuCi0g
KiBjaGVja2VkIGZvciBpbnRlcnNlY3Rpb25zLCBhbmQgcG9zc2libHkgcmVnVXAgaGFzIGJlZW4g
ZGVsZXRlZC4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJlZ0xvID0gUmVnaW9uQmVsb3cocmVn
VXApOwotICBHTFVoYWxmRWRnZSAqZVVwID0gcmVnVXAtPmVVcDsKLSAgR0xVaGFsZkVkZ2UgKmVM
byA9IHJlZ0xvLT5lVXA7Ci0gIEdMVXZlcnRleCAqb3JnVXAgPSBlVXAtPk9yZzsKLSAgR0xVdmVy
dGV4ICpvcmdMbyA9IGVMby0+T3JnOwotICBHTFV2ZXJ0ZXggKmRzdFVwID0gZVVwLT5Ec3Q7Ci0g
IEdMVXZlcnRleCAqZHN0TG8gPSBlTG8tPkRzdDsKLSAgR0xkb3VibGUgdE1pblVwLCB0TWF4TG87
Ci0gIEdMVXZlcnRleCBpc2VjdCwgKm9yZ01pbjsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0KLSAgYXNz
ZXJ0KCAhIFZlcnRFcSggZHN0TG8sIGRzdFVwICkpOwotICBhc3NlcnQoIEVkZ2VTaWduKCBkc3RV
cCwgdGVzcy0+ZXZlbnQsIG9yZ1VwICkgPD0gMCApOwotICBhc3NlcnQoIEVkZ2VTaWduKCBkc3RM
bywgdGVzcy0+ZXZlbnQsIG9yZ0xvICkgPj0gMCApOwotICBhc3NlcnQoIG9yZ1VwICE9IHRlc3Mt
PmV2ZW50ICYmIG9yZ0xvICE9IHRlc3MtPmV2ZW50ICk7Ci0gIGFzc2VydCggISByZWdVcC0+Zml4
VXBwZXJFZGdlICYmICEgcmVnTG8tPmZpeFVwcGVyRWRnZSApOwotCi0gIGlmKCBvcmdVcCA9PSBv
cmdMbyApIHJldHVybiBGQUxTRTsJLyogcmlnaHQgZW5kcG9pbnRzIGFyZSB0aGUgc2FtZSAqLwot
Ci0gIHRNaW5VcCA9IE1JTiggb3JnVXAtPnQsIGRzdFVwLT50ICk7Ci0gIHRNYXhMbyA9IE1BWCgg
b3JnTG8tPnQsIGRzdExvLT50ICk7Ci0gIGlmKCB0TWluVXAgPiB0TWF4TG8gKSByZXR1cm4gRkFM
U0U7CS8qIHQgcmFuZ2VzIGRvIG5vdCBvdmVybGFwICovCi0KLSAgaWYoIFZlcnRMZXEoIG9yZ1Vw
LCBvcmdMbyApKSB7Ci0gICAgaWYoIEVkZ2VTaWduKCBkc3RMbywgb3JnVXAsIG9yZ0xvICkgPiAw
ICkgcmV0dXJuIEZBTFNFOwotICB9IGVsc2UgewotICAgIGlmKCBFZGdlU2lnbiggZHN0VXAsIG9y
Z0xvLCBvcmdVcCApIDwgMCApIHJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIEF0IHRoaXMgcG9p
bnQgdGhlIGVkZ2VzIGludGVyc2VjdCwgYXQgbGVhc3QgbWFyZ2luYWxseSAqLwotICBEZWJ1Z0V2
ZW50KCB0ZXNzICk7Ci0KLSAgX19nbF9lZGdlSW50ZXJzZWN0KCBkc3RVcCwgb3JnVXAsIGRzdExv
LCBvcmdMbywgJmlzZWN0ICk7Ci0gIC8qIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhcmUgZ3Vh
cmFudGVlZDogKi8KLSAgYXNzZXJ0KCBNSU4oIG9yZ1VwLT50LCBkc3RVcC0+dCApIDw9IGlzZWN0
LnQgKTsKLSAgYXNzZXJ0KCBpc2VjdC50IDw9IE1BWCggb3JnTG8tPnQsIGRzdExvLT50ICkpOwot
ICBhc3NlcnQoIE1JTiggZHN0TG8tPnMsIGRzdFVwLT5zICkgPD0gaXNlY3QucyApOwotICBhc3Nl
cnQoIGlzZWN0LnMgPD0gTUFYKCBvcmdMby0+cywgb3JnVXAtPnMgKSk7Ci0KLSAgaWYoIFZlcnRM
ZXEoICZpc2VjdCwgdGVzcy0+ZXZlbnQgKSkgewotICAgIC8qIFRoZSBpbnRlcnNlY3Rpb24gcG9p
bnQgbGllcyBzbGlnaHRseSB0byB0aGUgbGVmdCBvZiB0aGUgc3dlZXAgbGluZSwKLSAgICAgKiBz
byBtb3ZlIGl0IHVudGlsIGl0JydzIHNsaWdodGx5IHRvIHRoZSByaWdodCBvZiB0aGUgc3dlZXAg
bGluZS4KLSAgICAgKiAoSWYgd2UgaGFkIHBlcmZlY3QgbnVtZXJpY2FsIHByZWNpc2lvbiwgdGhp
cyB3b3VsZCBuZXZlciBoYXBwZW4KLSAgICAgKiBpbiB0aGUgZmlyc3QgcGxhY2UpLiAgVGhlIGVh
c2llc3QgYW5kIHNhZmVzdCB0aGluZyB0byBkbyBpcwotICAgICAqIHJlcGxhY2UgdGhlIGludGVy
c2VjdGlvbiBieSB0ZXNzLT5ldmVudC4KLSAgICAgKi8KLSAgICBpc2VjdC5zID0gdGVzcy0+ZXZl
bnQtPnM7Ci0gICAgaXNlY3QudCA9IHRlc3MtPmV2ZW50LT50OwotICB9Ci0gIC8qIFNpbWlsYXJs
eSwgaWYgdGhlIGNvbXB1dGVkIGludGVyc2VjdGlvbiBsaWVzIHRvIHRoZSByaWdodCBvZiB0aGUK
LSAgICogcmlnaHRtb3N0IG9yaWdpbiAod2hpY2ggc2hvdWxkIHJhcmVseSBoYXBwZW4pLCBpdCBj
YW4gY2F1c2UKLSAgICogdW5iZWxpZXZhYmxlIGluZWZmaWNpZW5jeSBvbiBzdWZmaWNpZW50bHkg
ZGVnZW5lcmF0ZSBpbnB1dHMuCi0gICAqIChJZiB5b3UgaGF2ZSB0aGUgdGVzdCBwcm9ncmFtLCB0
cnkgcnVubmluZyB0ZXN0NTQuZCB3aXRoIHRoZQotICAgKiAiWCB6b29tIiBvcHRpb24gdHVybmVk
IG9uKS4KLSAgICovCi0gIG9yZ01pbiA9IFZlcnRMZXEoIG9yZ1VwLCBvcmdMbyApID8gb3JnVXAg
OiBvcmdMbzsKLSAgaWYoIFZlcnRMZXEoIG9yZ01pbiwgJmlzZWN0ICkpIHsKLSAgICBpc2VjdC5z
ID0gb3JnTWluLT5zOwotICAgIGlzZWN0LnQgPSBvcmdNaW4tPnQ7Ci0gIH0KLQotICBpZiggVmVy
dEVxKCAmaXNlY3QsIG9yZ1VwICkgfHwgVmVydEVxKCAmaXNlY3QsIG9yZ0xvICkpIHsKLSAgICAv
KiBFYXN5IGNhc2UgLS0gaW50ZXJzZWN0aW9uIGF0IG9uZSBvZiB0aGUgcmlnaHQgZW5kcG9pbnRz
ICovCi0gICAgKHZvaWQpIENoZWNrRm9yUmlnaHRTcGxpY2UoIHRlc3MsIHJlZ1VwICk7Ci0gICAg
cmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgaWYoICAgICghIFZlcnRFcSggZHN0VXAsIHRlc3MtPmV2
ZW50ICkKLQkgICYmIEVkZ2VTaWduKCBkc3RVcCwgdGVzcy0+ZXZlbnQsICZpc2VjdCApID49IDAp
Ci0gICAgICB8fCAoISBWZXJ0RXEoIGRzdExvLCB0ZXNzLT5ldmVudCApCi0JICAmJiBFZGdlU2ln
biggZHN0TG8sIHRlc3MtPmV2ZW50LCAmaXNlY3QgKSA8PSAwICkpCi0gIHsKLSAgICAvKiBWZXJ5
IHVudXN1YWwgLS0gdGhlIG5ldyB1cHBlciBvciBsb3dlciBlZGdlIHdvdWxkIHBhc3Mgb24gdGhl
Ci0gICAgICogd3Jvbmcgc2lkZSBvZiB0aGUgc3dlZXAgZXZlbnQsIG9yIHRocm91Z2ggaXQuICBU
aGlzIGNhbiBoYXBwZW4KLSAgICAgKiBkdWUgdG8gdmVyeSBzbWFsbCBudW1lcmljYWwgZXJyb3Jz
IGluIHRoZSBpbnRlcnNlY3Rpb24gY2FsY3VsYXRpb24uCi0gICAgICovCi0gICAgaWYoIGRzdExv
ID09IHRlc3MtPmV2ZW50ICkgewotICAgICAgLyogU3BsaWNlIGRzdExvIGludG8gZVVwLCBhbmQg
cHJvY2VzcyB0aGUgbmV3IHJlZ2lvbihzKSAqLwotICAgICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRn
ZSggZVVwLT5TeW0gKSA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICAgIGlmICgg
IV9fZ2xfbWVzaFNwbGljZSggZUxvLT5TeW0sIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7
Ci0gICAgICByZWdVcCA9IFRvcExlZnRSZWdpb24oIHJlZ1VwICk7Ci0gICAgICBpZiAocmVnVXAg
PT0gTlVMTCkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgICBlVXAgPSBSZWdpb25CZWxvdyhy
ZWdVcCktPmVVcDsKLSAgICAgIEZpbmlzaExlZnRSZWdpb25zKCB0ZXNzLCBSZWdpb25CZWxvdyhy
ZWdVcCksIHJlZ0xvICk7Ci0gICAgICBBZGRSaWdodEVkZ2VzKCB0ZXNzLCByZWdVcCwgZVVwLT5P
cHJldiwgZVVwLCBlVXAsIFRSVUUgKTsKLSAgICAgIHJldHVybiBUUlVFOwotICAgIH0KLSAgICBp
ZiggZHN0VXAgPT0gdGVzcy0+ZXZlbnQgKSB7Ci0gICAgICAvKiBTcGxpY2UgZHN0VXAgaW50byBl
TG8sIGFuZCBwcm9jZXNzIHRoZSBuZXcgcmVnaW9uKHMpICovCi0gICAgICBpZiAoX19nbF9tZXNo
U3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAg
ICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlVXAtPkxuZXh0LCBlTG8tPk9wcmV2ICkgKSBsb25n
am1wKHRlc3MtPmVudiwxKTsgCi0gICAgICByZWdMbyA9IHJlZ1VwOwotICAgICAgcmVnVXAgPSBU
b3BSaWdodFJlZ2lvbiggcmVnVXAgKTsKLSAgICAgIGUgPSBSZWdpb25CZWxvdyhyZWdVcCktPmVV
cC0+UnByZXY7Ci0gICAgICByZWdMby0+ZVVwID0gZUxvLT5PcHJldjsKLSAgICAgIGVMbyA9IEZp
bmlzaExlZnRSZWdpb25zKCB0ZXNzLCByZWdMbywgTlVMTCApOwotICAgICAgQWRkUmlnaHRFZGdl
cyggdGVzcywgcmVnVXAsIGVMby0+T25leHQsIGVVcC0+UnByZXYsIGUsIFRSVUUgKTsKLSAgICAg
IHJldHVybiBUUlVFOwotICAgIH0KLSAgICAvKiBTcGVjaWFsIGNhc2U6IGNhbGxlZCBmcm9tIENv
bm5lY3RSaWdodFZlcnRleC4gIElmIGVpdGhlcgotICAgICAqIGVkZ2UgcGFzc2VzIG9uIHRoZSB3
cm9uZyBzaWRlIG9mIHRlc3MtPmV2ZW50LCBzcGxpdCBpdAotICAgICAqIChhbmQgd2FpdCBmb3Ig
Q29ubmVjdFJpZ2h0VmVydGV4IHRvIHNwbGljZSBpdCBhcHByb3ByaWF0ZWx5KS4KLSAgICAgKi8K
LSAgICBpZiggRWRnZVNpZ24oIGRzdFVwLCB0ZXNzLT5ldmVudCwgJmlzZWN0ICkgPj0gMCApIHsK
LSAgICAgIFJlZ2lvbkFib3ZlKHJlZ1VwKS0+ZGlydHkgPSByZWdVcC0+ZGlydHkgPSBUUlVFOwot
ICAgICAgaWYgKF9fZ2xfbWVzaFNwbGl0RWRnZSggZVVwLT5TeW0gKSA9PSBOVUxMKSBsb25nam1w
KHRlc3MtPmVudiwxKTsKLSAgICAgIGVVcC0+T3JnLT5zID0gdGVzcy0+ZXZlbnQtPnM7Ci0gICAg
ICBlVXAtPk9yZy0+dCA9IHRlc3MtPmV2ZW50LT50OwotICAgIH0KLSAgICBpZiggRWRnZVNpZ24o
IGRzdExvLCB0ZXNzLT5ldmVudCwgJmlzZWN0ICkgPD0gMCApIHsKLSAgICAgIHJlZ1VwLT5kaXJ0
eSA9IHJlZ0xvLT5kaXJ0eSA9IFRSVUU7Ci0gICAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBl
TG8tPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgZUxvLT5Pcmct
PnMgPSB0ZXNzLT5ldmVudC0+czsKLSAgICAgIGVMby0+T3JnLT50ID0gdGVzcy0+ZXZlbnQtPnQ7
Ci0gICAgfQotICAgIC8qIGxlYXZlIHRoZSByZXN0IGZvciBDb25uZWN0UmlnaHRWZXJ0ZXggKi8K
LSAgICByZXR1cm4gRkFMU0U7Ci0gIH0KLQotICAvKiBHZW5lcmFsIGNhc2UgLS0gc3BsaXQgYm90
aCBlZGdlcywgc3BsaWNlIGludG8gbmV3IHZlcnRleC4KLSAgICogV2hlbiB3ZSBkbyB0aGUgc3Bs
aWNlIG9wZXJhdGlvbiwgdGhlIG9yZGVyIG9mIHRoZSBhcmd1bWVudHMgaXMKLSAgICogYXJiaXRy
YXJ5IGFzIGZhciBhcyBjb3JyZWN0bmVzcyBnb2VzLiAgSG93ZXZlciwgd2hlbiB0aGUgb3BlcmF0
aW9uCi0gICAqIGNyZWF0ZXMgYSBuZXcgZmFjZSwgdGhlIHdvcmsgZG9uZSBpcyBwcm9wb3J0aW9u
YWwgdG8gdGhlIHNpemUgb2YKLSAgICogdGhlIG5ldyBmYWNlLiAgV2UgZXhwZWN0IHRoZSBmYWNl
cyBpbiB0aGUgcHJvY2Vzc2VkIHBhcnQgb2YKLSAgICogdGhlIG1lc2ggKGllLiBlVXAtPkxmYWNl
KSB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGZhY2VzIGluIHRoZQotICAgKiB1bnByb2Nlc3NlZCBv
cmlnaW5hbCBjb250b3VycyAod2hpY2ggd2lsbCBiZSBlTG8tPk9wcmV2LT5MZmFjZSkuCi0gICAq
LwotICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlVXAtPlN5bSApID09IE5VTEwpIGxvbmdqbXAo
dGVzcy0+ZW52LDEpOwotICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBlTG8tPlN5bSApID09IE5V
TEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGVMby0+
T3ByZXYsIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gIGVVcC0+T3JnLT5zID0gaXNl
Y3QuczsKLSAgZVVwLT5PcmctPnQgPSBpc2VjdC50OwotICBlVXAtPk9yZy0+cHFIYW5kbGUgPSBw
cUluc2VydCggdGVzcy0+cHEsIGVVcC0+T3JnICk7IC8qIF9fZ2xfcHFTb3J0SW5zZXJ0ICovCi0g
IGlmIChlVXAtPk9yZy0+cHFIYW5kbGUgPT0gTE9OR19NQVgpIHsKLSAgICAgcHFEZWxldGVQcmlv
cml0eVEodGVzcy0+cHEpOwkvKiBfX2dsX3BxU29ydERlbGV0ZVByaW9yaXR5USAqLwotICAgICB0
ZXNzLT5wcSA9IE5VTEw7Ci0gICAgIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICB9Ci0gIEdldElu
dGVyc2VjdERhdGEoIHRlc3MsIGVVcC0+T3JnLCBvcmdVcCwgZHN0VXAsIG9yZ0xvLCBkc3RMbyAp
OwotICBSZWdpb25BYm92ZShyZWdVcCktPmRpcnR5ID0gcmVnVXAtPmRpcnR5ID0gcmVnTG8tPmRp
cnR5ID0gVFJVRTsKLSAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCBXYWxrRGlydHlS
ZWdpb25zKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBBY3RpdmVSZWdpb24gKnJlZ1VwICkKLS8qCi0g
KiBXaGVuIHRoZSB1cHBlciBvciBsb3dlciBlZGdlIG9mIGFueSByZWdpb24gY2hhbmdlcywgdGhl
IHJlZ2lvbiBpcwotICogbWFya2VkICJkaXJ0eSIuICBUaGlzIHJvdXRpbmUgd2Fsa3MgdGhyb3Vn
aCBhbGwgdGhlIGRpcnR5IHJlZ2lvbnMKLSAqIGFuZCBtYWtlcyBzdXJlIHRoYXQgdGhlIGRpY3Rp
b25hcnkgaW52YXJpYW50cyBhcmUgc2F0aXNmaWVkCi0gKiAoc2VlIHRoZSBjb21tZW50cyBhdCB0
aGUgYmVnaW5uaW5nIG9mIHRoaXMgZmlsZSkuICBPZiBjb3Vyc2UKLSAqIG5ldyBkaXJ0eSByZWdp
b25zIGNhbiBiZSBjcmVhdGVkIGFzIHdlIG1ha2UgY2hhbmdlcyB0byByZXN0b3JlCi0gKiB0aGUg
aW52YXJpYW50cy4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJlZ0xvID0gUmVnaW9uQmVsb3co
cmVnVXApOwotICBHTFVoYWxmRWRnZSAqZVVwLCAqZUxvOwotCi0gIGZvciggOzsgKSB7Ci0gICAg
LyogRmluZCB0aGUgbG93ZXN0IGRpcnR5IHJlZ2lvbiAod2Ugd2FsayBmcm9tIHRoZSBib3R0b20g
dXApLiAqLwotICAgIHdoaWxlKCByZWdMby0+ZGlydHkgKSB7Ci0gICAgICByZWdVcCA9IHJlZ0xv
OwotICAgICAgcmVnTG8gPSBSZWdpb25CZWxvdyhyZWdMbyk7Ci0gICAgfQotICAgIGlmKCAhIHJl
Z1VwLT5kaXJ0eSApIHsKLSAgICAgIHJlZ0xvID0gcmVnVXA7Ci0gICAgICByZWdVcCA9IFJlZ2lv
bkFib3ZlKCByZWdVcCApOwotICAgICAgaWYoIHJlZ1VwID09IE5VTEwgfHwgISByZWdVcC0+ZGly
dHkgKSB7Ci0JLyogV2UndmUgd2Fsa2VkIGFsbCB0aGUgZGlydHkgcmVnaW9ucyAqLwotCXJldHVy
bjsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmVnVXAtPmRpcnR5ID0gRkFMU0U7Ci0gICAgZVVwID0g
cmVnVXAtPmVVcDsKLSAgICBlTG8gPSByZWdMby0+ZVVwOwotCi0gICAgaWYoIGVVcC0+RHN0ICE9
IGVMby0+RHN0ICkgewotICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgZWRnZSBvcmRlcmluZyBpcyBv
YmV5ZWQgYXQgdGhlIERzdCB2ZXJ0aWNlcy4gKi8KLSAgICAgIGlmKCBDaGVja0ZvckxlZnRTcGxp
Y2UoIHRlc3MsIHJlZ1VwICkpIHsKLQotCS8qIElmIHRoZSB1cHBlciBvciBsb3dlciBlZGdlIHdh
cyBtYXJrZWQgZml4VXBwZXJFZGdlLCB0aGVuCi0JICogd2Ugbm8gbG9uZ2VyIG5lZWQgaXQgKHNp
bmNlIHRoZXNlIGVkZ2VzIGFyZSBuZWVkZWQgb25seSBmb3IKLQkgKiB2ZXJ0aWNlcyB3aGljaCBv
dGhlcndpc2UgaGF2ZSBubyByaWdodC1nb2luZyBlZGdlcykuCi0JICovCi0JaWYoIHJlZ0xvLT5m
aXhVcHBlckVkZ2UgKSB7Ci0JICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ0xvICk7Ci0JICBpZiAo
ICFfX2dsX21lc2hEZWxldGUoIGVMbyApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0JICByZWdM
byA9IFJlZ2lvbkJlbG93KCByZWdVcCApOwotCSAgZUxvID0gcmVnTG8tPmVVcDsKLQl9IGVsc2Ug
aWYoIHJlZ1VwLT5maXhVcHBlckVkZ2UgKSB7Ci0JICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ1Vw
ICk7Ci0JICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYs
MSk7Ci0JICByZWdVcCA9IFJlZ2lvbkFib3ZlKCByZWdMbyApOwotCSAgZVVwID0gcmVnVXAtPmVV
cDsKLQl9Ci0gICAgICB9Ci0gICAgfQotICAgIGlmKCBlVXAtPk9yZyAhPSBlTG8tPk9yZyApIHsK
LSAgICAgIGlmKCAgICBlVXAtPkRzdCAhPSBlTG8tPkRzdAotCSAgJiYgISByZWdVcC0+Zml4VXBw
ZXJFZGdlICYmICEgcmVnTG8tPmZpeFVwcGVyRWRnZQotICAgICAgICAgICYmIChlVXAtPkRzdCA9
PSB0ZXNzLT5ldmVudCB8fCBlTG8tPkRzdCA9PSB0ZXNzLT5ldmVudCkgKQotICAgICAgewotCS8q
IFdoZW4gYWxsIGVsc2UgZmFpbHMgaW4gQ2hlY2tGb3JJbnRlcnNlY3QoKSwgaXQgdXNlcyB0ZXNz
LT5ldmVudAotCSAqIGFzIHRoZSBpbnRlcnNlY3Rpb24gbG9jYXRpb24uICBUbyBtYWtlIHRoaXMg
cG9zc2libGUsIGl0IHJlcXVpcmVzCi0JICogdGhhdCB0ZXNzLT5ldmVudCBsaWUgYmV0d2VlbiB0
aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzLCBhbmQgYWxzbwotCSAqIHRoYXQgbmVpdGhlciBvZiB0
aGVzZSBpcyBtYXJrZWQgZml4VXBwZXJFZGdlIChzaW5jZSBpbiB0aGUgd29yc3QKLQkgKiBjYXNl
IGl0IG1pZ2h0IHNwbGljZSBvbmUgb2YgdGhlc2UgZWRnZXMgaW50byB0ZXNzLT5ldmVudCwgYW5k
Ci0JICogdmlvbGF0ZSB0aGUgaW52YXJpYW50IHRoYXQgZml4YWJsZSBlZGdlcyBhcmUgdGhlIG9u
bHkgcmlnaHQtZ29pbmcKLQkgKiBlZGdlIGZyb20gdGhlaXIgYXNzb2NpYXRlZCB2ZXJ0ZXgpLgot
ICAgICAgICAgKi8KLQlpZiggQ2hlY2tGb3JJbnRlcnNlY3QoIHRlc3MsIHJlZ1VwICkpIHsKLQkg
IC8qIFdhbGtEaXJ0eVJlZ2lvbnMoKSB3YXMgY2FsbGVkIHJlY3Vyc2l2ZWx5OyB3ZSdyZSBkb25l
ICovCi0JICByZXR1cm47Ci0JfQotICAgICAgfSBlbHNlIHsKLQkvKiBFdmVuIHRob3VnaCB3ZSBj
YW4ndCB1c2UgQ2hlY2tGb3JJbnRlcnNlY3QoKSwgdGhlIE9yZyB2ZXJ0aWNlcwotCSAqIG1heSB2
aW9sYXRlIHRoZSBkaWN0aW9uYXJ5IGVkZ2Ugb3JkZXJpbmcuICBDaGVjayBhbmQgY29ycmVjdCB0
aGlzLgotCSAqLwotCSh2b2lkKSBDaGVja0ZvclJpZ2h0U3BsaWNlKCB0ZXNzLCByZWdVcCApOwot
ICAgICAgfQotICAgIH0KLSAgICBpZiggZVVwLT5PcmcgPT0gZUxvLT5PcmcgJiYgZVVwLT5Ec3Qg
PT0gZUxvLT5Ec3QgKSB7Ci0gICAgICAvKiBBIGRlZ2VuZXJhdGUgbG9vcCBjb25zaXN0aW5nIG9m
IG9ubHkgdHdvIGVkZ2VzIC0tIGRlbGV0ZSBpdC4gKi8KLSAgICAgIEFkZFdpbmRpbmcoIGVMbywg
ZVVwICk7Ci0gICAgICBEZWxldGVSZWdpb24oIHRlc3MsIHJlZ1VwICk7Ci0gICAgICBpZiAoICFf
X2dsX21lc2hEZWxldGUoIGVVcCApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgICByZWdV
cCA9IFJlZ2lvbkFib3ZlKCByZWdMbyApOwotICAgIH0KLSAgfQotfQotCi0KLXN0YXRpYyB2b2lk
IENvbm5lY3RSaWdodFZlcnRleCggR0xVdGVzc2VsYXRvciAqdGVzcywgQWN0aXZlUmVnaW9uICpy
ZWdVcCwKLQkJCSAgICAgICAgR0xVaGFsZkVkZ2UgKmVCb3R0b21MZWZ0ICkKLS8qCi0gKiBQdXJw
b3NlOiBjb25uZWN0IGEgInJpZ2h0IiB2ZXJ0ZXggdkV2ZW50IChvbmUgd2hlcmUgYWxsIGVkZ2Vz
IGdvIGxlZnQpCi0gKiB0byB0aGUgdW5wcm9jZXNzZWQgcG9ydGlvbiBvZiB0aGUgbWVzaC4gIFNp
bmNlIHRoZXJlIGFyZSBubyByaWdodC1nb2luZwotICogZWRnZXMsIHR3byByZWdpb25zIChvbmUg
YWJvdmUgdkV2ZW50IGFuZCBvbmUgYmVsb3cpIGFyZSBiZWluZyBtZXJnZWQKLSAqIGludG8gb25l
LiAgInJlZ1VwIiBpcyB0aGUgdXBwZXIgb2YgdGhlc2UgdHdvIHJlZ2lvbnMuCi0gKgotICogVGhl
cmUgYXJlIHR3byByZWFzb25zIGZvciBkb2luZyB0aGlzIChhZGRpbmcgYSByaWdodC1nb2luZyBl
ZGdlKToKLSAqICAtIGlmIHRoZSB0d28gcmVnaW9ucyBiZWluZyBtZXJnZWQgYXJlICJpbnNpZGUi
LCB3ZSBtdXN0IGFkZCBhbiBlZGdlCi0gKiAgICB0byBrZWVwIHRoZW0gc2VwYXJhdGVkICh0aGUg
Y29tYmluZWQgcmVnaW9uIHdvdWxkIG5vdCBiZSBtb25vdG9uZSkuCi0gKiAgLSBpbiBhbnkgY2Fz
ZSwgd2UgbXVzdCBsZWF2ZSBzb21lIHJlY29yZCBvZiB2RXZlbnQgaW4gdGhlIGRpY3Rpb25hcnks
Ci0gKiAgICBzbyB0aGF0IHdlIGNhbiBtZXJnZSB2RXZlbnQgd2l0aCBmZWF0dXJlcyB0aGF0IHdl
IGhhdmUgbm90IHNlZW4geWV0LgotICogICAgRm9yIGV4YW1wbGUsIG1heWJlIHRoZXJlIGlzIGEg
dmVydGljYWwgZWRnZSB3aGljaCBwYXNzZXMganVzdCB0bwotICogICAgdGhlIHJpZ2h0IG9mIHZF
dmVudDsgd2Ugd291bGQgbGlrZSB0byBzcGxpY2UgdkV2ZW50IGludG8gdGhpcyBlZGdlLgotICoK
LSAqIEhvd2V2ZXIsIHdlIGRvbid0IHdhbnQgdG8gY29ubmVjdCB2RXZlbnQgdG8ganVzdCBhbnkg
dmVydGV4LiAgV2UgZG9uJyd0Ci0gKiB3YW50IHRoZSBuZXcgZWRnZSB0byBjcm9zcyBhbnkgb3Ro
ZXIgZWRnZXM7IG90aGVyd2lzZSB3ZSB3aWxsIGNyZWF0ZQotICogaW50ZXJzZWN0aW9uIHZlcnRp
Y2VzIGV2ZW4gd2hlbiB0aGUgaW5wdXQgZGF0YSBoYWQgbm8gc2VsZi1pbnRlcnNlY3Rpb25zLgot
ICogKFRoaXMgaXMgYSBiYWQgdGhpbmc7IGlmIHRoZSB1c2VyJ3MgaW5wdXQgZGF0YSBoYXMgbm8g
aW50ZXJzZWN0aW9ucywKLSAqIHdlIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgYW55IGZhbHNlIGlu
dGVyc2VjdGlvbnMgb3Vyc2VsdmVzLikKLSAqCi0gKiBPdXIgZXZlbnR1YWwgZ29hbCBpcyB0byBj
b25uZWN0IHZFdmVudCB0byB0aGUgbGVmdG1vc3QgdW5wcm9jZXNzZWQKLSAqIHZlcnRleCBvZiB0
aGUgY29tYmluZWQgcmVnaW9uICh0aGUgdW5pb24gb2YgcmVnVXAgYW5kIHJlZ0xvKS4KLSAqIEJ1
dCBiZWNhdXNlIG9mIHVuc2VlbiB2ZXJ0aWNlcyB3aXRoIGFsbCByaWdodC1nb2luZyBlZGdlcywg
YW5kIGFsc28KLSAqIG5ldyB2ZXJ0aWNlcyB3aGljaCBtYXkgYmUgY3JlYXRlZCBieSBlZGdlIGlu
dGVyc2VjdGlvbnMsIHdlIGRvbicndAotICoga25vdyB3aGVyZSB0aGF0IGxlZnRtb3N0IHVucHJv
Y2Vzc2VkIHZlcnRleCBpcy4gIEluIHRoZSBtZWFudGltZSwgd2UKLSAqIGNvbm5lY3QgdkV2ZW50
IHRvIHRoZSBjbG9zZXN0IHZlcnRleCBvZiBlaXRoZXIgY2hhaW4sIGFuZCBtYXJrIHRoZSByZWdp
b24KLSAqIGFzICJmaXhVcHBlckVkZ2UiLiAgVGhpcyBmbGFnIHNheXMgdG8gZGVsZXRlIGFuZCBy
ZWNvbm5lY3QgdGhpcyBlZGdlCi0gKiB0byB0aGUgbmV4dCBwcm9jZXNzZWQgdmVydGV4IG9uIHRo
ZSBib3VuZGFyeSBvZiB0aGUgY29tYmluZWQgcmVnaW9uLgotICogUXVpdGUgcG9zc2libHkgdGhl
IHZlcnRleCB3ZSBjb25uZWN0ZWQgdG8gd2lsbCB0dXJuIG91dCB0byBiZSB0aGUKLSAqIGNsb3Nl
c3Qgb25lLCBpbiB3aGljaCBjYXNlIHdlIHdvbicndCBuZWVkIHRvIG1ha2UgYW55IGNoYW5nZXMu
Ci0gKi8KLXsKLSAgR0xVaGFsZkVkZ2UgKmVOZXc7Ci0gIEdMVWhhbGZFZGdlICplVG9wTGVmdCA9
IGVCb3R0b21MZWZ0LT5PbmV4dDsKLSAgQWN0aXZlUmVnaW9uICpyZWdMbyA9IFJlZ2lvbkJlbG93
KHJlZ1VwKTsKLSAgR0xVaGFsZkVkZ2UgKmVVcCA9IHJlZ1VwLT5lVXA7Ci0gIEdMVWhhbGZFZGdl
ICplTG8gPSByZWdMby0+ZVVwOwotICBpbnQgZGVnZW5lcmF0ZSA9IEZBTFNFOwotCi0gIGlmKCBl
VXAtPkRzdCAhPSBlTG8tPkRzdCApIHsKLSAgICAodm9pZCkgQ2hlY2tGb3JJbnRlcnNlY3QoIHRl
c3MsIHJlZ1VwICk7Ci0gIH0KLQotICAvKiBQb3NzaWJsZSBuZXcgZGVnZW5lcmFjaWVzOiB1cHBl
ciBvciBsb3dlciBlZGdlIG9mIHJlZ1VwIG1heSBwYXNzCi0gICAqIHRocm91Z2ggdkV2ZW50LCBv
ciBtYXkgY29pbmNpZGUgd2l0aCBuZXcgaW50ZXJzZWN0aW9uIHZlcnRleAotICAgKi8KLSAgaWYo
IFZlcnRFcSggZVVwLT5PcmcsIHRlc3MtPmV2ZW50ICkpIHsKLSAgICBpZiAoICFfX2dsX21lc2hT
cGxpY2UoIGVUb3BMZWZ0LT5PcHJldiwgZVVwICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAg
ICByZWdVcCA9IFRvcExlZnRSZWdpb24oIHJlZ1VwICk7Ci0gICAgaWYgKHJlZ1VwID09IE5VTEwp
IGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgIGVUb3BMZWZ0ID0gUmVnaW9uQmVsb3coIHJlZ1Vw
ICktPmVVcDsKLSAgICBGaW5pc2hMZWZ0UmVnaW9ucyggdGVzcywgUmVnaW9uQmVsb3cocmVnVXAp
LCByZWdMbyApOwotICAgIGRlZ2VuZXJhdGUgPSBUUlVFOwotICB9Ci0gIGlmKCBWZXJ0RXEoIGVM
by0+T3JnLCB0ZXNzLT5ldmVudCApKSB7Ci0gICAgaWYgKCAhX19nbF9tZXNoU3BsaWNlKCBlQm90
dG9tTGVmdCwgZUxvLT5PcHJldiApICkgbG9uZ2ptcCh0ZXNzLT5lbnYsMSk7Ci0gICAgZUJvdHRv
bUxlZnQgPSBGaW5pc2hMZWZ0UmVnaW9ucyggdGVzcywgcmVnTG8sIE5VTEwgKTsKLSAgICBkZWdl
bmVyYXRlID0gVFJVRTsKLSAgfQotICBpZiggZGVnZW5lcmF0ZSApIHsKLSAgICBBZGRSaWdodEVk
Z2VzKCB0ZXNzLCByZWdVcCwgZUJvdHRvbUxlZnQtPk9uZXh0LCBlVG9wTGVmdCwgZVRvcExlZnQs
IFRSVUUgKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvKiBOb24tZGVnZW5lcmF0ZSBzaXR1YXRp
b24gLS0gbmVlZCB0byBhZGQgYSB0ZW1wb3JhcnksIGZpeGFibGUgZWRnZS4KLSAgICogQ29ubmVj
dCB0byB0aGUgY2xvc2VyIG9mIGVMby0+T3JnLCBlVXAtPk9yZy4KLSAgICovCi0gIGlmKCBWZXJ0
TGVxKCBlTG8tPk9yZywgZVVwLT5PcmcgKSkgewotICAgIGVOZXcgPSBlTG8tPk9wcmV2OwotICB9
IGVsc2UgewotICAgIGVOZXcgPSBlVXA7Ci0gIH0KLSAgZU5ldyA9IF9fZ2xfbWVzaENvbm5lY3Qo
IGVCb3R0b21MZWZ0LT5McHJldiwgZU5ldyApOwotICBpZiAoZU5ldyA9PSBOVUxMKSBsb25nam1w
KHRlc3MtPmVudiwxKTsKLQotICAvKiBQcmV2ZW50IGNsZWFudXAsIG90aGVyd2lzZSBlTmV3IG1p
Z2h0IGRpc2FwcGVhciBiZWZvcmUgd2UndmUgZXZlbgotICAgKiBoYWQgYSBjaGFuY2UgdG8gbWFy
ayBpdCBhcyBhIHRlbXBvcmFyeSBlZGdlLgotICAgKi8KLSAgQWRkUmlnaHRFZGdlcyggdGVzcywg
cmVnVXAsIGVOZXcsIGVOZXctPk9uZXh0LCBlTmV3LT5PbmV4dCwgRkFMU0UgKTsKLSAgZU5ldy0+
U3ltLT5hY3RpdmVSZWdpb24tPmZpeFVwcGVyRWRnZSA9IFRSVUU7Ci0gIFdhbGtEaXJ0eVJlZ2lv
bnMoIHRlc3MsIHJlZ1VwICk7Ci19Ci0KLS8qIEJlY2F1c2UgdmVydGljZXMgYXQgZXhhY3RseSB0
aGUgc2FtZSBsb2NhdGlvbiBhcmUgbWVyZ2VkIHRvZ2V0aGVyCi0gKiBiZWZvcmUgd2UgcHJvY2Vz
cyB0aGUgc3dlZXAgZXZlbnQsIHNvbWUgZGVnZW5lcmF0ZSBjYXNlcyBjYW4ndCBvY2N1ci4KLSAq
IEhvd2V2ZXIgaWYgc29tZW9uZSBldmVudHVhbGx5IG1ha2VzIHRoZSBtb2RpZmljYXRpb25zIHJl
cXVpcmVkIHRvCi0gKiBtZXJnZSBmZWF0dXJlcyB3aGljaCBhcmUgY2xvc2UgdG9nZXRoZXIsIHRo
ZSBjYXNlcyBiZWxvdyBtYXJrZWQKLSAqIFRPTEVSQU5DRV9OT05aRVJPIHdpbGwgYmUgdXNlZnVs
LiAgVGhleSB3ZXJlIGRlYnVnZ2VkIGJlZm9yZSB0aGUKLSAqIGNvZGUgdG8gbWVyZ2UgaWRlbnRp
Y2FsIHZlcnRpY2VzIGluIHRoZSBtYWluIGxvb3Agd2FzIGFkZGVkLgotICovCi0jZGVmaW5lIFRP
TEVSQU5DRV9OT05aRVJPCUZBTFNFCi0KLXN0YXRpYyB2b2lkIENvbm5lY3RMZWZ0RGVnZW5lcmF0
ZSggR0xVdGVzc2VsYXRvciAqdGVzcywKLQkJCQkgICBBY3RpdmVSZWdpb24gKnJlZ1VwLCBHTFV2
ZXJ0ZXggKnZFdmVudCApCi0vKgotICogVGhlIGV2ZW50IHZlcnRleCBsaWVzIGV4YWN0eSBvbiBh
biBhbHJlYWR5LXByb2Nlc3NlZCBlZGdlIG9yIHZlcnRleC4KLSAqIEFkZGluZyB0aGUgbmV3IHZl
cnRleCBpbnZvbHZlcyBzcGxpY2luZyBpdCBpbnRvIHRoZSBhbHJlYWR5LXByb2Nlc3NlZAotICog
cGFydCBvZiB0aGUgbWVzaC4KLSAqLwotewotICBHTFVoYWxmRWRnZSAqZSwgKmVUb3BMZWZ0LCAq
ZVRvcFJpZ2h0LCAqZUxhc3Q7Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnOwotCi0gIGUgPSByZWdVcC0+
ZVVwOwotICBpZiggVmVydEVxKCBlLT5PcmcsIHZFdmVudCApKSB7Ci0gICAgLyogZS0+T3JnIGlz
IGFuIHVucHJvY2Vzc2VkIHZlcnRleCAtIGp1c3QgY29tYmluZSB0aGVtLCBhbmQgd2FpdAotICAg
ICAqIGZvciBlLT5PcmcgdG8gYmUgcHVsbGVkIGZyb20gdGhlIHF1ZXVlCi0gICAgICovCi0gICAg
YXNzZXJ0KCBUT0xFUkFOQ0VfTk9OWkVSTyApOwotICAgIFNwbGljZU1lcmdlVmVydGljZXMoIHRl
c3MsIGUsIHZFdmVudC0+YW5FZGdlICk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIAotICBpZiggISBW
ZXJ0RXEoIGUtPkRzdCwgdkV2ZW50ICkpIHsKLSAgICAvKiBHZW5lcmFsIGNhc2UgLS0gc3BsaWNl
IHZFdmVudCBpbnRvIGVkZ2UgZSB3aGljaCBwYXNzZXMgdGhyb3VnaCBpdCAqLwotICAgIGlmIChf
X2dsX21lc2hTcGxpdEVkZ2UoIGUtPlN5bSApID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEp
OwotICAgIGlmKCByZWdVcC0+Zml4VXBwZXJFZGdlICkgewotICAgICAgLyogVGhpcyBlZGdlIHdh
cyBmaXhhYmxlIC0tIGRlbGV0ZSB1bnVzZWQgcG9ydGlvbiBvZiBvcmlnaW5hbCBlZGdlICovCi0g
ICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUtPk9uZXh0ICkgKSBsb25nam1wKHRlc3MtPmVu
diwxKTsKLSAgICAgIHJlZ1VwLT5maXhVcHBlckVkZ2UgPSBGQUxTRTsKLSAgICB9Ci0gICAgaWYg
KCAhX19nbF9tZXNoU3BsaWNlKCB2RXZlbnQtPmFuRWRnZSwgZSApICkgbG9uZ2ptcCh0ZXNzLT5l
bnYsMSk7Ci0gICAgU3dlZXBFdmVudCggdGVzcywgdkV2ZW50ICk7CS8qIHJlY3Vyc2UgKi8KLSAg
ICByZXR1cm47Ci0gIH0KLQotICAvKiB2RXZlbnQgY29pbmNpZGVzIHdpdGggZS0+RHN0LCB3aGlj
aCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4KLSAgICogU3BsaWNlIGluIHRoZSBhZGRpdGlv
bmFsIHJpZ2h0LWdvaW5nIGVkZ2VzLgotICAgKi8KLSAgYXNzZXJ0KCBUT0xFUkFOQ0VfTk9OWkVS
TyApOwotICByZWdVcCA9IFRvcFJpZ2h0UmVnaW9uKCByZWdVcCApOwotICByZWcgPSBSZWdpb25C
ZWxvdyggcmVnVXAgKTsKLSAgZVRvcFJpZ2h0ID0gcmVnLT5lVXAtPlN5bTsKLSAgZVRvcExlZnQg
PSBlTGFzdCA9IGVUb3BSaWdodC0+T25leHQ7Ci0gIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsK
LSAgICAvKiBIZXJlIGUtPkRzdCBoYXMgb25seSBhIHNpbmdsZSBmaXhhYmxlIGVkZ2UgZ29pbmcg
cmlnaHQuCi0gICAgICogV2UgY2FuIGRlbGV0ZSBpdCBzaW5jZSBub3cgd2UgaGF2ZSBzb21lIHJl
YWwgcmlnaHQtZ29pbmcgZWRnZXMuCi0gICAgICovCi0gICAgYXNzZXJ0KCBlVG9wTGVmdCAhPSBl
VG9wUmlnaHQgKTsgICAvKiB0aGVyZSBhcmUgc29tZSBsZWZ0IGVkZ2VzIHRvbyAqLwotICAgIERl
bGV0ZVJlZ2lvbiggdGVzcywgcmVnICk7Ci0gICAgaWYgKCAhX19nbF9tZXNoRGVsZXRlKCBlVG9w
UmlnaHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgIGVUb3BSaWdodCA9IGVUb3BMZWZ0
LT5PcHJldjsKLSAgfQotICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIHZFdmVudC0+YW5FZGdlLCBl
VG9wUmlnaHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICBpZiggISBFZGdlR29lc0xlZnQo
IGVUb3BMZWZ0ICkpIHsKLSAgICAvKiBlLT5Ec3QgaGFkIG5vIGxlZnQtZ29pbmcgZWRnZXMgLS0g
aW5kaWNhdGUgdGhpcyB0byBBZGRSaWdodEVkZ2VzKCkgKi8KLSAgICBlVG9wTGVmdCA9IE5VTEw7
Ci0gIH0KLSAgQWRkUmlnaHRFZGdlcyggdGVzcywgcmVnVXAsIGVUb3BSaWdodC0+T25leHQsIGVM
YXN0LCBlVG9wTGVmdCwgVFJVRSApOwotfQotCi0KLXN0YXRpYyB2b2lkIENvbm5lY3RMZWZ0VmVy
dGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTFV2ZXJ0ZXggKnZFdmVudCApCi0vKgotICogUHVy
cG9zZTogY29ubmVjdCBhICJsZWZ0IiB2ZXJ0ZXggKG9uZSB3aGVyZSBib3RoIGVkZ2VzIGdvIHJp
Z2h0KQotICogdG8gdGhlIHByb2Nlc3NlZCBwb3J0aW9uIG9mIHRoZSBtZXNoLiAgTGV0IFIgYmUg
dGhlIGFjdGl2ZSByZWdpb24KLSAqIGNvbnRhaW5pbmcgdkV2ZW50LCBhbmQgbGV0IFUgYW5kIEwg
YmUgdGhlIHVwcGVyIGFuZCBsb3dlciBlZGdlCi0gKiBjaGFpbnMgb2YgUi4gIFRoZXJlIGFyZSB0
d28gcG9zc2liaWxpdGllczoKLSAqCi0gKiAtIHRoZSBub3JtYWwgY2FzZTogc3BsaXQgUiBpbnRv
IHR3byByZWdpb25zLCBieSBjb25uZWN0aW5nIHZFdmVudCB0bwotICogICB0aGUgcmlnaHRtb3N0
IHZlcnRleCBvZiBVIG9yIEwgbHlpbmcgdG8gdGhlIGxlZnQgb2YgdGhlIHN3ZWVwIGxpbmUKLSAq
Ci0gKiAtIHRoZSBkZWdlbmVyYXRlIGNhc2U6IGlmIHZFdmVudCBpcyBjbG9zZSBlbm91Z2ggdG8g
VSBvciBMLCB3ZQotICogICBtZXJnZSB2RXZlbnQgaW50byB0aGF0IGVkZ2UgY2hhaW4uICBUaGUg
c3ViY2FzZXMgYXJlOgotICoJLSBtZXJnaW5nIHdpdGggdGhlIHJpZ2h0bW9zdCB2ZXJ0ZXggb2Yg
VSBvciBMCi0gKgktIG1lcmdpbmcgd2l0aCB0aGUgYWN0aXZlIGVkZ2Ugb2YgVSBvciBMCi0gKgkt
IG1lcmdpbmcgd2l0aCBhbiBhbHJlYWR5LXByb2Nlc3NlZCBwb3J0aW9uIG9mIFUgb3IgTAotICov
Ci17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnVXAsICpyZWdMbywgKnJlZzsKLSAgR0xVaGFsZkVkZ2Ug
KmVVcCwgKmVMbywgKmVOZXc7Ci0gIEFjdGl2ZVJlZ2lvbiB0bXA7Ci0KLSAgLyogYXNzZXJ0KCB2
RXZlbnQtPmFuRWRnZS0+T25leHQtPk9uZXh0ID09IHZFdmVudC0+YW5FZGdlICk7ICovCi0KLSAg
LyogR2V0IGEgcG9pbnRlciB0byB0aGUgYWN0aXZlIHJlZ2lvbiBjb250YWluaW5nIHZFdmVudCAq
LwotICB0bXAuZVVwID0gdkV2ZW50LT5hbkVkZ2UtPlN5bTsKLSAgLyogX19HTF9ESUNUTElTVEtF
WSAqLyAvKiBfX2dsX2RpY3RMaXN0U2VhcmNoICovCi0gIHJlZ1VwID0gKEFjdGl2ZVJlZ2lvbiAq
KWRpY3RLZXkoIGRpY3RTZWFyY2goIHRlc3MtPmRpY3QsICZ0bXAgKSk7Ci0gIHJlZ0xvID0gUmVn
aW9uQmVsb3coIHJlZ1VwICk7Ci0gIGVVcCA9IHJlZ1VwLT5lVXA7Ci0gIGVMbyA9IHJlZ0xvLT5l
VXA7Ci0KLSAgLyogVHJ5IG1lcmdpbmcgd2l0aCBVIG9yIEwgZmlyc3QgKi8KLSAgaWYoIEVkZ2VT
aWduKCBlVXAtPkRzdCwgdkV2ZW50LCBlVXAtPk9yZyApID09IDAgKSB7Ci0gICAgQ29ubmVjdExl
ZnREZWdlbmVyYXRlKCB0ZXNzLCByZWdVcCwgdkV2ZW50ICk7Ci0gICAgcmV0dXJuOwotICB9Ci0K
LSAgLyogQ29ubmVjdCB2RXZlbnQgdG8gcmlnaHRtb3N0IHByb2Nlc3NlZCB2ZXJ0ZXggb2YgZWl0
aGVyIGNoYWluLgotICAgKiBlLT5Ec3QgaXMgdGhlIHZlcnRleCB0aGF0IHdlIHdpbGwgY29ubmVj
dCB0byB2RXZlbnQuCi0gICAqLwotICByZWcgPSBWZXJ0TGVxKCBlTG8tPkRzdCwgZVVwLT5Ec3Qg
KSA/IHJlZ1VwIDogcmVnTG87Ci0KLSAgaWYoIHJlZ1VwLT5pbnNpZGUgfHwgcmVnLT5maXhVcHBl
ckVkZ2UpIHsKLSAgICBpZiggcmVnID09IHJlZ1VwICkgewotICAgICAgZU5ldyA9IF9fZ2xfbWVz
aENvbm5lY3QoIHZFdmVudC0+YW5FZGdlLT5TeW0sIGVVcC0+TG5leHQgKTsKLSAgICAgIGlmIChl
TmV3ID09IE5VTEwpIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICBH
TFVoYWxmRWRnZSAqdGVtcEhhbGZFZGdlPSBfX2dsX21lc2hDb25uZWN0KCBlTG8tPkRuZXh0LCB2
RXZlbnQtPmFuRWRnZSk7Ci0gICAgICBpZiAodGVtcEhhbGZFZGdlID09IE5VTEwpIGxvbmdqbXAo
dGVzcy0+ZW52LDEpOwotCi0gICAgICBlTmV3ID0gdGVtcEhhbGZFZGdlLT5TeW07Ci0gICAgfQot
ICAgIGlmKCByZWctPmZpeFVwcGVyRWRnZSApIHsKLSAgICAgIGlmICggIUZpeFVwcGVyRWRnZSgg
cmVnLCBlTmV3ICkgKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLSAgICB9IGVsc2UgewotICAgICAg
Q29tcHV0ZVdpbmRpbmcoIHRlc3MsIEFkZFJlZ2lvbkJlbG93KCB0ZXNzLCByZWdVcCwgZU5ldyAp
KTsKLSAgICB9Ci0gICAgU3dlZXBFdmVudCggdGVzcywgdkV2ZW50ICk7Ci0gIH0gZWxzZSB7Ci0g
ICAgLyogVGhlIG5ldyB2ZXJ0ZXggaXMgaW4gYSByZWdpb24gd2hpY2ggZG9lcyBub3QgYmVsb25n
IHRvIHRoZSBwb2x5Z29uLgotICAgICAqIFdlIGRvbicndCBuZWVkIHRvIGNvbm5lY3QgdGhpcyB2
ZXJ0ZXggdG8gdGhlIHJlc3Qgb2YgdGhlIG1lc2guCi0gICAgICovCi0gICAgQWRkUmlnaHRFZGdl
cyggdGVzcywgcmVnVXAsIHZFdmVudC0+YW5FZGdlLCB2RXZlbnQtPmFuRWRnZSwgTlVMTCwgVFJV
RSApOwotICB9Ci19Ci0KLQotc3RhdGljIHZvaWQgU3dlZXBFdmVudCggR0xVdGVzc2VsYXRvciAq
dGVzcywgR0xVdmVydGV4ICp2RXZlbnQgKQotLyoKLSAqIERvZXMgZXZlcnl0aGluZyBuZWNlc3Nh
cnkgd2hlbiB0aGUgc3dlZXAgbGluZSBjcm9zc2VzIGEgdmVydGV4LgotICogVXBkYXRlcyB0aGUg
bWVzaCBhbmQgdGhlIGVkZ2UgZGljdGlvbmFyeS4KLSAqLwotewotICBBY3RpdmVSZWdpb24gKnJl
Z1VwLCAqcmVnOwotICBHTFVoYWxmRWRnZSAqZSwgKmVUb3BMZWZ0LCAqZUJvdHRvbUxlZnQ7Ci0K
LSAgdGVzcy0+ZXZlbnQgPSB2RXZlbnQ7CQkvKiBmb3IgYWNjZXNzIGluIEVkZ2VMZXEoKSAqLwot
ICBEZWJ1Z0V2ZW50KCB0ZXNzICk7Ci0gIAotICAvKiBDaGVjayBpZiB0aGlzIHZlcnRleCBpcyB0
aGUgcmlnaHQgZW5kcG9pbnQgb2YgYW4gZWRnZSB0aGF0IGlzCi0gICAqIGFscmVhZHkgaW4gdGhl
IGRpY3Rpb25hcnkuICBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB3YXN0ZQotICAgKiB0
aW1lIHNlYXJjaGluZyBmb3IgdGhlIGxvY2F0aW9uIHRvIGluc2VydCBuZXcgZWRnZXMuCi0gICAq
LwotICBlID0gdkV2ZW50LT5hbkVkZ2U7Ci0gIHdoaWxlKCBlLT5hY3RpdmVSZWdpb24gPT0gTlVM
TCApIHsKLSAgICBlID0gZS0+T25leHQ7Ci0gICAgaWYoIGUgPT0gdkV2ZW50LT5hbkVkZ2UgKSB7
Ci0gICAgICAvKiBBbGwgZWRnZXMgZ28gcmlnaHQgLS0gbm90IGluY2lkZW50IHRvIGFueSBwcm9j
ZXNzZWQgZWRnZXMgKi8KLSAgICAgIENvbm5lY3RMZWZ0VmVydGV4KCB0ZXNzLCB2RXZlbnQgKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLQotICAvKiBQcm9jZXNzaW5nIGNvbnNpc3RzIG9m
IHR3byBwaGFzZXM6IGZpcnN0IHdlICJmaW5pc2giIGFsbCB0aGUKLSAgICogYWN0aXZlIHJlZ2lv
bnMgd2hlcmUgYm90aCB0aGUgdXBwZXIgYW5kIGxvd2VyIGVkZ2VzIHRlcm1pbmF0ZQotICAgKiBh
dCB2RXZlbnQgKGllLiB2RXZlbnQgaXMgY2xvc2luZyBvZmYgdGhlc2UgcmVnaW9ucykuCi0gICAq
IFdlIG1hcmsgdGhlc2UgZmFjZXMgImluc2lkZSIgb3IgIm91dHNpZGUiIHRoZSBwb2x5Z29uIGFj
Y29yZGluZwotICAgKiB0byB0aGVpciB3aW5kaW5nIG51bWJlciwgYW5kIGRlbGV0ZSB0aGUgZWRn
ZXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KLSAgICogVGhpcyB0YWtlcyBjYXJlIG9mIGFsbCB0aGUg
bGVmdC1nb2luZyBlZGdlcyBmcm9tIHZFdmVudC4KLSAgICovCi0gIHJlZ1VwID0gVG9wTGVmdFJl
Z2lvbiggZS0+YWN0aXZlUmVnaW9uICk7Ci0gIGlmIChyZWdVcCA9PSBOVUxMKSBsb25nam1wKHRl
c3MtPmVudiwxKTsKLSAgcmVnID0gUmVnaW9uQmVsb3coIHJlZ1VwICk7Ci0gIGVUb3BMZWZ0ID0g
cmVnLT5lVXA7Ci0gIGVCb3R0b21MZWZ0ID0gRmluaXNoTGVmdFJlZ2lvbnMoIHRlc3MsIHJlZywg
TlVMTCApOwotCi0gIC8qIE5leHQgd2UgcHJvY2VzcyBhbGwgdGhlIHJpZ2h0LWdvaW5nIGVkZ2Vz
IGZyb20gdkV2ZW50LiAgVGhpcwotICAgKiBpbnZvbHZlcyBhZGRpbmcgdGhlIGVkZ2VzIHRvIHRo
ZSBkaWN0aW9uYXJ5LCBhbmQgY3JlYXRpbmcgdGhlCi0gICAqIGFzc29jaWF0ZWQgImFjdGl2ZSBy
ZWdpb25zIiB3aGljaCByZWNvcmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCi0gICAqIHJlZ2lvbnMg
YmV0d2VlbiBhZGphY2VudCBkaWN0aW9uYXJ5IGVkZ2VzLgotICAgKi8KLSAgaWYoIGVCb3R0b21M
ZWZ0LT5PbmV4dCA9PSBlVG9wTGVmdCApIHsKLSAgICAvKiBObyByaWdodC1nb2luZyBlZGdlcyAt
LSBhZGQgYSB0ZW1wb3JhcnkgImZpeGFibGUiIGVkZ2UgKi8KLSAgICBDb25uZWN0UmlnaHRWZXJ0
ZXgoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdCApOwotICB9IGVsc2UgewotICAgIEFkZFJpZ2h0
RWRnZXMoIHRlc3MsIHJlZ1VwLCBlQm90dG9tTGVmdC0+T25leHQsIGVUb3BMZWZ0LCBlVG9wTGVm
dCwgVFJVRSApOwotICB9Ci19Ci0KLQotLyogTWFrZSB0aGUgc2VudGluZWwgY29vcmRpbmF0ZXMg
YmlnIGVub3VnaCB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZQotICogbWVyZ2VkIHdpdGggcmVhbCBp
bnB1dCBmZWF0dXJlcy4gIChFdmVuIHdpdGggdGhlIGxhcmdlc3QgcG9zc2libGUKLSAqIGlucHV0
IGNvbnRvdXIgYW5kIHRoZSBtYXhpbXVtIHRvbGVyYW5jZSBvZiAxLjAsIG5vIG1lcmdpbmcgd2ls
bCBiZQotICogZG9uZSB3aXRoIGNvb3JkaW5hdGVzIGxhcmdlciB0aGFuIDMgKiBHTFVfVEVTU19N
QVhfQ09PUkQpLgotICovCi0jZGVmaW5lIFNFTlRJTkVMX0NPT1JECSg0ICogR0xVX1RFU1NfTUFY
X0NPT1JEKQotCi1zdGF0aWMgdm9pZCBBZGRTZW50aW5lbCggR0xVdGVzc2VsYXRvciAqdGVzcywg
R0xkb3VibGUgdCApCi0vKgotICogV2UgYWRkIHR3byBzZW50aW5lbCBlZGdlcyBhYm92ZSBhbmQg
YmVsb3cgYWxsIG90aGVyIGVkZ2VzLAotICogdG8gYXZvaWQgc3BlY2lhbCBjYXNlcyBhdCB0aGUg
dG9wIGFuZCBib3R0b20uCi0gKi8KLXsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0gIEFjdGl2ZVJlZ2lv
biAqcmVnID0gKEFjdGl2ZVJlZ2lvbiAqKW1lbUFsbG9jKCBzaXplb2YoIEFjdGl2ZVJlZ2lvbiAp
KTsKLSAgaWYgKHJlZyA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLQotICBlID0gX19n
bF9tZXNoTWFrZUVkZ2UoIHRlc3MtPm1lc2ggKTsKLSAgaWYgKGUgPT0gTlVMTCkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7Ci0KLSAgZS0+T3JnLT5zID0gU0VOVElORUxfQ09PUkQ7Ci0gIGUtPk9yZy0+
dCA9IHQ7Ci0gIGUtPkRzdC0+cyA9IC1TRU5USU5FTF9DT09SRDsKLSAgZS0+RHN0LT50ID0gdDsK
LSAgdGVzcy0+ZXZlbnQgPSBlLT5Ec3Q7CQkvKiBpbml0aWFsaXplIGl0ICovCi0KLSAgcmVnLT5l
VXAgPSBlOwotICByZWctPndpbmRpbmdOdW1iZXIgPSAwOwotICByZWctPmluc2lkZSA9IEZBTFNF
OwotICByZWctPmZpeFVwcGVyRWRnZSA9IEZBTFNFOwotICByZWctPnNlbnRpbmVsID0gVFJVRTsK
LSAgcmVnLT5kaXJ0eSA9IEZBTFNFOwotICByZWctPm5vZGVVcCA9IGRpY3RJbnNlcnQoIHRlc3Mt
PmRpY3QsIHJlZyApOyAvKiBfX2dsX2RpY3RMaXN0SW5zZXJ0QmVmb3JlICovCi0gIGlmIChyZWct
Pm5vZGVVcCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLX0KLQotCi1zdGF0aWMgdm9p
ZCBJbml0RWRnZURpY3QoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotLyoKLSAqIFdlIG1haW50YWlu
IGFuIG9yZGVyaW5nIG9mIGVkZ2UgaW50ZXJzZWN0aW9ucyB3aXRoIHRoZSBzd2VlcCBsaW5lLgot
ICogVGhpcyBvcmRlciBpcyBtYWludGFpbmVkIGluIGEgZHluYW1pYyBkaWN0aW9uYXJ5LgotICov
Ci17Ci0gIC8qIF9fZ2xfZGljdExpc3ROZXdEaWN0ICovCi0gIHRlc3MtPmRpY3QgPSBkaWN0TmV3
RGljdCggdGVzcywgKGludCAoKikodm9pZCAqLCBEaWN0S2V5LCBEaWN0S2V5KSkgRWRnZUxlcSAp
OwotICBpZiAodGVzcy0+ZGljdCA9PSBOVUxMKSBsb25nam1wKHRlc3MtPmVudiwxKTsKLQotICBB
ZGRTZW50aW5lbCggdGVzcywgLVNFTlRJTkVMX0NPT1JEICk7Ci0gIEFkZFNlbnRpbmVsKCB0ZXNz
LCBTRU5USU5FTF9DT09SRCApOwotfQotCi0KLXN0YXRpYyB2b2lkIERvbmVFZGdlRGljdCggR0xV
dGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIEFjdGl2ZVJlZ2lvbiAqcmVnOwotI2lmbmRlZiBOREVC
VUcKLSAgaW50IGZpeGVkRWRnZXMgPSAwOwotI2VuZGlmCi0KLSAgLyogX19HTF9ESUNUTElTVEtF
WSAqLyAvKiBfX0dMX0RJQ1RMSVNUTUlOICovCi0gIHdoaWxlKCAocmVnID0gKEFjdGl2ZVJlZ2lv
biAqKWRpY3RLZXkoIGRpY3RNaW4oIHRlc3MtPmRpY3QgKSkpICE9IE5VTEwgKSB7Ci0gICAgLyoK
LSAgICAgKiBBdCB0aGUgZW5kIG9mIGFsbCBwcm9jZXNzaW5nLCB0aGUgZGljdGlvbmFyeSBzaG91
bGQgY29udGFpbgotICAgICAqIG9ubHkgdGhlIHR3byBzZW50aW5lbCBlZGdlcywgcGx1cyBhdCBt
b3N0IG9uZSAiZml4YWJsZSIgZWRnZQotICAgICAqIGNyZWF0ZWQgYnkgQ29ubmVjdFJpZ2h0VmVy
dGV4KCkuCi0gICAgICovCi0gICAgaWYoICEgcmVnLT5zZW50aW5lbCApIHsKLSAgICAgIGFzc2Vy
dCggcmVnLT5maXhVcHBlckVkZ2UgKTsKLSAgICAgIGFzc2VydCggKytmaXhlZEVkZ2VzID09IDEg
KTsKLSAgICB9Ci0gICAgYXNzZXJ0KCByZWctPndpbmRpbmdOdW1iZXIgPT0gMCApOwotICAgIERl
bGV0ZVJlZ2lvbiggdGVzcywgcmVnICk7Ci0vKiAgICBfX2dsX21lc2hEZWxldGUoIHJlZy0+ZVVw
ICk7Ki8KLSAgfQotICBkaWN0RGVsZXRlRGljdCggdGVzcy0+ZGljdCApOwkvKiBfX2dsX2RpY3RM
aXN0RGVsZXRlRGljdCAqLwotfQotCi0KLXN0YXRpYyB2b2lkIFJlbW92ZURlZ2VuZXJhdGVFZGdl
cyggR0xVdGVzc2VsYXRvciAqdGVzcyApCi0vKgotICogUmVtb3ZlIHplcm8tbGVuZ3RoIGVkZ2Vz
LCBhbmQgY29udG91cnMgd2l0aCBmZXdlciB0aGFuIDMgdmVydGljZXMuCi0gKi8KLXsKLSAgR0xV
aGFsZkVkZ2UgKmUsICplTmV4dCwgKmVMbmV4dDsKLSAgR0xVaGFsZkVkZ2UgKmVIZWFkID0gJnRl
c3MtPm1lc2gtPmVIZWFkOwotCi0gIC8qTElOVEVEKi8KLSAgZm9yKCBlID0gZUhlYWQtPm5leHQ7
IGUgIT0gZUhlYWQ7IGUgPSBlTmV4dCApIHsKLSAgICBlTmV4dCA9IGUtPm5leHQ7Ci0gICAgZUxu
ZXh0ID0gZS0+TG5leHQ7Ci0gICAgCi0gICAgaWYoIFZlcnRFcSggZS0+T3JnLCBlLT5Ec3QgKSAm
JiBlLT5MbmV4dC0+TG5leHQgIT0gZSApIHsKLSAgICAgIC8qIFplcm8tbGVuZ3RoIGVkZ2UsIGNv
bnRvdXIgaGFzIGF0IGxlYXN0IDMgZWRnZXMgKi8KLSAgICAgIAotICAgICAgU3BsaWNlTWVyZ2VW
ZXJ0aWNlcyggdGVzcywgZUxuZXh0LCBlICk7CS8qIGRlbGV0ZXMgZS0+T3JnICovCi0gICAgICBp
ZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOyAvKiBlIGlz
IGEgc2VsZi1sb29wICovCi0gICAgICBlID0gZUxuZXh0OwotICAgICAgZUxuZXh0ID0gZS0+TG5l
eHQ7Ci0gICAgfQotICAgIGlmKCBlTG5leHQtPkxuZXh0ID09IGUgKSB7Ci0gICAgICAvKiBEZWdl
bmVyYXRlIGNvbnRvdXIgKG9uZSBvciB0d28gZWRnZXMpICovCi0gICAgICAKLSAgICAgIGlmKCBl
TG5leHQgIT0gZSApIHsKLQlpZiggZUxuZXh0ID09IGVOZXh0IHx8IGVMbmV4dCA9PSBlTmV4dC0+
U3ltICkgeyBlTmV4dCA9IGVOZXh0LT5uZXh0OyB9Ci0JaWYgKCAhX19nbF9tZXNoRGVsZXRlKCBl
TG5leHQgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAgICAgfQotICAgICAgaWYoIGUgPT0g
ZU5leHQgfHwgZSA9PSBlTmV4dC0+U3ltICkgeyBlTmV4dCA9IGVOZXh0LT5uZXh0OyB9Ci0gICAg
ICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwotICAg
IH0KLSAgfQotfQotCi1zdGF0aWMgaW50IEluaXRQcmlvcml0eVEoIEdMVXRlc3NlbGF0b3IgKnRl
c3MgKQotLyoKLSAqIEluc2VydCBhbGwgdmVydGljZXMgaW50byB0aGUgcHJpb3JpdHkgcXVldWUg
d2hpY2ggZGV0ZXJtaW5lcyB0aGUKLSAqIG9yZGVyIGluIHdoaWNoIHZlcnRpY2VzIGNyb3NzIHRo
ZSBzd2VlcCBsaW5lLgotICovCi17Ci0gIFByaW9yaXR5USAqcHE7Ci0gIEdMVXZlcnRleCAqdiwg
KnZIZWFkOwotCi0gIC8qIF9fZ2xfcHFTb3J0TmV3UHJpb3JpdHlRICovCi0gIHBxID0gdGVzcy0+
cHEgPSBwcU5ld1ByaW9yaXR5USggKGludCAoKikoUFFrZXksIFBRa2V5KSkgX19nbF92ZXJ0TGVx
ICk7Ci0gIGlmIChwcSA9PSBOVUxMKSByZXR1cm4gMDsKLQotICB2SGVhZCA9ICZ0ZXNzLT5tZXNo
LT52SGVhZDsKLSAgZm9yKCB2ID0gdkhlYWQtPm5leHQ7IHYgIT0gdkhlYWQ7IHYgPSB2LT5uZXh0
ICkgewotICAgIHYtPnBxSGFuZGxlID0gcHFJbnNlcnQoIHBxLCB2ICk7IC8qIF9fZ2xfcHFTb3J0
SW5zZXJ0ICovCi0gICAgaWYgKHYtPnBxSGFuZGxlID09IExPTkdfTUFYKSBicmVhazsKLSAgfQot
ICBpZiAodiAhPSB2SGVhZCB8fCAhcHFJbml0KCBwcSApICkgeyAvKiBfX2dsX3BxU29ydEluaXQg
Ki8KLSAgICBwcURlbGV0ZVByaW9yaXR5USh0ZXNzLT5wcSk7CS8qIF9fZ2xfcHFTb3J0RGVsZXRl
UHJpb3JpdHlRICovCi0gICAgdGVzcy0+cHEgPSBOVUxMOwotICAgIHJldHVybiAwOwotICB9Ci0K
LSAgcmV0dXJuIDE7Ci19Ci0KLQotc3RhdGljIHZvaWQgRG9uZVByaW9yaXR5USggR0xVdGVzc2Vs
YXRvciAqdGVzcyApCi17Ci0gIHBxRGVsZXRlUHJpb3JpdHlRKCB0ZXNzLT5wcSApOyAvKiBfX2ds
X3BxU29ydERlbGV0ZVByaW9yaXR5USAqLwotfQotCi0KLXN0YXRpYyBpbnQgUmVtb3ZlRGVnZW5l
cmF0ZUZhY2VzKCBHTFVtZXNoICptZXNoICkKLS8qCi0gKiBEZWxldGUgYW55IGRlZ2VuZXJhdGUg
ZmFjZXMgd2l0aCBvbmx5IHR3byBlZGdlcy4gIFdhbGtEaXJ0eVJlZ2lvbnMoKQotICogd2lsbCBj
YXRjaCBhbG1vc3QgYWxsIG9mIHRoZXNlLCBidXQgaXQgd29uJ3QgY2F0Y2ggZGVnZW5lcmF0ZSBm
YWNlcwotICogcHJvZHVjZWQgYnkgc3BsaWNlIG9wZXJhdGlvbnMgb24gYWxyZWFkeS1wcm9jZXNz
ZWQgZWRnZXMuCi0gKiBUaGUgdHdvIHBsYWNlcyB0aGlzIGNhbiBoYXBwZW4gYXJlIGluIEZpbmlz
aExlZnRSZWdpb25zKCksIHdoZW4KLSAqIHdlIHNwbGljZSBpbiBhICJ0ZW1wb3JhcnkiIGVkZ2Ug
cHJvZHVjZWQgYnkgQ29ubmVjdFJpZ2h0VmVydGV4KCksCi0gKiBhbmQgaW4gQ2hlY2tGb3JMZWZ0
U3BsaWNlKCksIHdoZXJlIHdlIHNwbGljZSBhbHJlYWR5LXByb2Nlc3NlZAotICogZWRnZXMgdG8g
ZW5zdXJlIHRoYXQgb3VyIGRpY3Rpb25hcnkgaW52YXJpYW50cyBhcmUgbm90IHZpb2xhdGVkCi0g
KiBieSBudW1lcmljYWwgZXJyb3JzLgotICoKLSAqIEluIGJvdGggdGhlc2UgY2FzZXMgaXQgaXMg
KnZlcnkqIGRhbmdlcm91cyB0byBkZWxldGUgdGhlIG9mZmVuZGluZwotICogZWRnZSBhdCB0aGUg
dGltZSwgc2luY2Ugb25lIG9mIHRoZSByb3V0aW5lcyBmdXJ0aGVyIHVwIHRoZSBzdGFjawotICog
d2lsbCBzb21ldGltZXMgYmUga2VlcGluZyBhIHBvaW50ZXIgdG8gdGhhdCBlZGdlLgotICovCi17
Ci0gIEdMVWZhY2UgKmYsICpmTmV4dDsKLSAgR0xVaGFsZkVkZ2UgKmU7Ci0KLSAgLypMSU5URUQq
LwotICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IGZO
ZXh0ICkgewotICAgIGZOZXh0ID0gZi0+bmV4dDsKLSAgICBlID0gZi0+YW5FZGdlOwotICAgIGFz
c2VydCggZS0+TG5leHQgIT0gZSApOwotCi0gICAgaWYoIGUtPkxuZXh0LT5MbmV4dCA9PSBlICkg
ewotICAgICAgLyogQSBmYWNlIHdpdGggb25seSB0d28gZWRnZXMgKi8KLSAgICAgIEFkZFdpbmRp
bmcoIGUtPk9uZXh0LCBlICk7Ci0gICAgICBpZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIHJl
dHVybiAwOwotICAgIH0KLSAgfQotICByZXR1cm4gMTsKLX0KLQotaW50IF9fZ2xfY29tcHV0ZUlu
dGVyaW9yKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLS8qCi0gKiBfX2dsX2NvbXB1dGVJbnRlcmlv
ciggdGVzcyApIGNvbXB1dGVzIHRoZSBwbGFuYXIgYXJyYW5nZW1lbnQgc3BlY2lmaWVkCi0gKiBi
eSB0aGUgZ2l2ZW4gY29udG91cnMsIGFuZCBmdXJ0aGVyIHN1YmRpdmlkZXMgdGhpcyBhcnJhbmdl
bWVudAotICogaW50byByZWdpb25zLiAgRWFjaCByZWdpb24gaXMgbWFya2VkICJpbnNpZGUiIGlm
IGl0IGJlbG9uZ3MKLSAqIHRvIHRoZSBwb2x5Z29uLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGUgZ2l2
ZW4gYnkgdGVzcy0+d2luZGluZ1J1bGUuCi0gKiBFYWNoIGludGVyaW9yIHJlZ2lvbiBpcyBndWFy
YW50ZWVkIGJlIG1vbm90b25lLgotICovCi17Ci0gIEdMVXZlcnRleCAqdiwgKnZOZXh0OwotCi0g
IHRlc3MtPmZhdGFsRXJyb3IgPSBGQUxTRTsKLQotICAvKiBFYWNoIHZlcnRleCBkZWZpbmVzIGFu
IGV2ZW50IGZvciBvdXIgc3dlZXAgbGluZS4gIFN0YXJ0IGJ5IGluc2VydGluZwotICAgKiBhbGwg
dGhlIHZlcnRpY2VzIGluIGEgcHJpb3JpdHkgcXVldWUuICBFdmVudHMgYXJlIHByb2Nlc3NlZCBp
bgotICAgKiBsZXhpY29ncmFwaGljIG9yZGVyLCBpZS4KLSAgICoKLSAgICoJZTEgPCBlMiAgaWZm
ICBlMS54IDwgZTIueCB8fCAoZTEueCA9PSBlMi54ICYmIGUxLnkgPCBlMi55KQotICAgKi8KLSAg
UmVtb3ZlRGVnZW5lcmF0ZUVkZ2VzKCB0ZXNzICk7Ci0gIGlmICggIUluaXRQcmlvcml0eVEoIHRl
c3MgKSApIHJldHVybiAwOyAvKiBpZiBlcnJvciAqLwotICBJbml0RWRnZURpY3QoIHRlc3MgKTsK
LQotICAvKiBfX2dsX3BxU29ydEV4dHJhY3RNaW4gKi8KLSAgd2hpbGUoICh2ID0gKEdMVXZlcnRl
eCAqKXBxRXh0cmFjdE1pbiggdGVzcy0+cHEgKSkgIT0gTlVMTCApIHsKLSAgICBmb3IoIDs7ICkg
ewotICAgICAgdk5leHQgPSAoR0xVdmVydGV4ICopcHFNaW5pbXVtKCB0ZXNzLT5wcSApOyAvKiBf
X2dsX3BxU29ydE1pbmltdW0gKi8KLSAgICAgIGlmKCB2TmV4dCA9PSBOVUxMIHx8ICEgVmVydEVx
KCB2TmV4dCwgdiApKSBicmVhazsKLSAgICAgIAotICAgICAgLyogTWVyZ2UgdG9nZXRoZXIgYWxs
IHZlcnRpY2VzIGF0IGV4YWN0bHkgdGhlIHNhbWUgbG9jYXRpb24uCi0gICAgICAgKiBUaGlzIGlz
IG1vcmUgZWZmaWNpZW50IHRoYW4gcHJvY2Vzc2luZyB0aGVtIG9uZSBhdCBhIHRpbWUsCi0gICAg
ICAgKiBzaW1wbGlmaWVzIHRoZSBjb2RlIChzZWUgQ29ubmVjdExlZnREZWdlbmVyYXRlKSwgYW5k
IGlzIGFsc28KLSAgICAgICAqIGltcG9ydGFudCBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiBjZXJ0
YWluIGRlZ2VuZXJhdGUgY2FzZXMuCi0gICAgICAgKiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB0aGVy
ZSBhcmUgdHdvIGlkZW50aWNhbCBlZGdlcyBBIGFuZCBCCi0gICAgICAgKiB0aGF0IGJlbG9uZyB0
byBkaWZmZXJlbnQgY29udG91cnMgKHNvIHdpdGhvdXQgdGhpcyBjb2RlIHRoZXkgd291bGQKLSAg
ICAgICAqIGJlIHByb2Nlc3NlZCBieSBzZXBhcmF0ZSBzd2VlcCBldmVudHMpLiAgU3VwcG9zZSBh
bm90aGVyIGVkZ2UgQwotICAgICAgICogY3Jvc3NlcyBBIGFuZCBCIGZyb20gYWJvdmUuICBXaGVu
IEEgaXMgcHJvY2Vzc2VkLCB3ZSBzcGxpdCBpdAotICAgICAgICogYXQgaXRzIGludGVyc2VjdGlv
biBwb2ludCB3aXRoIEMuICBIb3dldmVyIHRoaXMgYWxzbyBzcGxpdHMgQywKLSAgICAgICAqIHNv
IHdoZW4gd2UgaW5zZXJ0IEIgd2UgbWF5IGNvbXB1dGUgYSBzbGlnaHRseSBkaWZmZXJlbnQKLSAg
ICAgICAqIGludGVyc2VjdGlvbiBwb2ludC4gIFRoaXMgbWlnaHQgbGVhdmUgdHdvIGVkZ2VzIHdp
dGggYSBzbWFsbAotICAgICAgICogZ2FwIGJldHdlZW4gdGhlbS4gIFRoaXMga2luZCBvZiBlcnJv
ciBpcyBlc3BlY2lhbGx5IG9idmlvdXMKLSAgICAgICAqIHdoZW4gdXNpbmcgYm91bmRhcnkgZXh0
cmFjdGlvbiAoR0xVX1RFU1NfQk9VTkRBUllfT05MWSkuCi0gICAgICAgKi8KLSAgICAgIHZOZXh0
ID0gKEdMVXZlcnRleCAqKXBxRXh0cmFjdE1pbiggdGVzcy0+cHEgKTsgLyogX19nbF9wcVNvcnRF
eHRyYWN0TWluKi8KLSAgICAgIFNwbGljZU1lcmdlVmVydGljZXMoIHRlc3MsIHYtPmFuRWRnZSwg
dk5leHQtPmFuRWRnZSApOwotICAgIH0KLSAgICBTd2VlcEV2ZW50KCB0ZXNzLCB2ICk7Ci0gIH0K
LQotICAvKiBTZXQgdGVzcy0+ZXZlbnQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLwotICAvKiBf
X0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4gKi8gCi0gIHRlc3MtPmV2ZW50
ID0gKChBY3RpdmVSZWdpb24gKikgZGljdEtleSggZGljdE1pbiggdGVzcy0+ZGljdCApKSktPmVV
cC0+T3JnOwotICBEZWJ1Z0V2ZW50KCB0ZXNzICk7Ci0gIERvbmVFZGdlRGljdCggdGVzcyApOwot
ICBEb25lUHJpb3JpdHlRKCB0ZXNzICk7Ci0KLSAgaWYgKCAhUmVtb3ZlRGVnZW5lcmF0ZUZhY2Vz
KCB0ZXNzLT5tZXNoICkgKSByZXR1cm4gMDsKLSAgX19nbF9tZXNoQ2hlY2tNZXNoKCB0ZXNzLT5t
ZXNoICk7Ci0KLSAgcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9n
bHUvbGlidGVzcy9zd2VlcC5oIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVkM2U2NDA5NWYyNDQ5ODk5ODNmMDg5
YWFkMjAzYWVhYmIzOTY1MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5oCisrKyAvZGV2L251
bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0
IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0
IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQot
KiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBj
b250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lv
bnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBp
biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiog
b2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2Vy
dmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5
NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0Zy
ZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBT
b2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwg
RVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJ
TUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElF
UyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVB
TElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJ
TkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9w
ZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBK
YW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4g
VGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFw
aGljcywgSW5jLgotKiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJk
IHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBw
bGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGlu
IGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIp
IEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFz
ZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxp
dHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsg
YW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChW
ZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoq
IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1w
bGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBl
bmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChS
KSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVy
aWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRl
cjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1L2xpYnRlc3Mvc3dlZXAuaCM1ICQKLSovCi0KLSNp
Zm5kZWYgX19zd2VlcF9oXwotI2RlZmluZSBfX3N3ZWVwX2hfCi0KLSNpbmNsdWRlICJtZXNoLmgi
Ci0KLS8qIF9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhlIHBsYW5hciBh
cnJhbmdlbWVudCBzcGVjaWZpZWQKLSAqIGJ5IHRoZSBnaXZlbiBjb250b3VycywgYW5kIGZ1cnRo
ZXIgc3ViZGl2aWRlcyB0aGlzIGFycmFuZ2VtZW50Ci0gKiBpbnRvIHJlZ2lvbnMuICBFYWNoIHJl
Z2lvbiBpcyBtYXJrZWQgImluc2lkZSIgaWYgaXQgYmVsb25ncwotICogdG8gdGhlIHBvbHlnb24s
IGFjY29yZGluZyB0byB0aGUgcnVsZSBnaXZlbiBieSB0ZXNzLT53aW5kaW5nUnVsZS4KLSAqIEVh
Y2ggaW50ZXJpb3IgcmVnaW9uIGlzIGd1YXJhbnRlZWQgYmUgbW9ub3RvbmUuCi0gKi8KLWludCBf
X2dsX2NvbXB1dGVJbnRlcmlvciggR0xVdGVzc2VsYXRvciAqdGVzcyApOwotCi0KLS8qIFRoZSBm
b2xsb3dpbmcgaXMgaGVyZSAqb25seSogZm9yIGFjY2VzcyBieSBkZWJ1Z2dpbmcgcm91dGluZXMg
Ki8KLQotI2luY2x1ZGUgImRpY3QuaCIKLQotLyogRm9yIGVhY2ggcGFpciBvZiBhZGphY2VudCBl
ZGdlcyBjcm9zc2luZyB0aGUgc3dlZXAgbGluZSwgdGhlcmUgaXMKLSAqIGFuIEFjdGl2ZVJlZ2lv
biB0byByZXByZXNlbnQgdGhlIHJlZ2lvbiBiZXR3ZWVuIHRoZW0uICBUaGUgYWN0aXZlCi0gKiBy
ZWdpb25zIGFyZSBrZXB0IGluIHNvcnRlZCBvcmRlciBpbiBhIGR5bmFtaWMgZGljdGlvbmFyeS4g
IEFzIHRoZQotICogc3dlZXAgbGluZSBjcm9zc2VzIGVhY2ggdmVydGV4LCB3ZSB1cGRhdGUgdGhl
IGFmZmVjdGVkIHJlZ2lvbnMuCi0gKi8KLQotc3RydWN0IEFjdGl2ZVJlZ2lvbiB7Ci0gIEdMVWhh
bGZFZGdlCSplVXA7CQkvKiB1cHBlciBlZGdlLCBkaXJlY3RlZCByaWdodCB0byBsZWZ0ICovCi0g
IERpY3ROb2RlCSpub2RlVXA7CS8qIGRpY3Rpb25hcnkgbm9kZSBjb3JyZXNwb25kaW5nIHRvIGVV
cCAqLwotICBpbnQJCXdpbmRpbmdOdW1iZXI7CS8qIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIHJl
Z2lvbnMgYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGluc2lkZSB0aGUg
cG9seWdvbiAqLwotICBHTGJvb2xlYW4JaW5zaWRlOwkJLyogaXMgdGhpcyByZWdpb24gaW5zaWRl
IHRoZSBwb2x5Z29uPyAqLwotICBHTGJvb2xlYW4Jc2VudGluZWw7CS8qIG1hcmtzIGZha2UgZWRn
ZXMgYXQgdCA9ICsvLWluZmluaXR5ICovCi0gIEdMYm9vbGVhbglkaXJ0eTsJCS8qIG1hcmtzIHJl
Z2lvbnMgd2hlcmUgdGhlIHVwcGVyIG9yIGxvd2VyCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIGVkZ2UgaGFzIGNoYW5nZWQsIGJ1dCB3ZSBoYXZlbid0IGNoZWNrZWQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2hldGhlciB0aGV5IGludGVyc2VjdCB5ZXQg
Ki8KLSAgR0xib29sZWFuCWZpeFVwcGVyRWRnZTsJLyogbWFya3MgdGVtcG9yYXJ5IGVkZ2VzIGlu
dHJvZHVjZWQgd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBwcm9j
ZXNzIGEgInJpZ2h0IHZlcnRleCIgKG9uZSB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIGFueSBlZGdlcyBsZWF2aW5nIHRvIHRoZSByaWdodCkgKi8KLX07Ci0KLSNk
ZWZpbmUgUmVnaW9uQmVsb3cocikJKChBY3RpdmVSZWdpb24gKikgZGljdEtleShkaWN0UHJlZCgo
ciktPm5vZGVVcCkpKQotI2RlZmluZSBSZWdpb25BYm92ZShyKQkoKEFjdGl2ZVJlZ2lvbiAqKSBk
aWN0S2V5KGRpY3RTdWNjKChyKS0+bm9kZVVwKSkpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jIGIvU291cmNlL1RoaXJkUGFydHkvZ2x1
L2xpYnRlc3MvdGVzcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTlhMTc4OTY2
MzA1MmNjNzg4MjVhYjM5MGMwZTE4MmY2ODlhYzU2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Mu
YworKysgL2Rldi9udWxsCkBAIC0xLDYzOCArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNh
YmlsaXR5LiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0q
KiBtYWRlIHN1YmplY3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4g
dGhlIFNHSSBGcmVlCi0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxp
Y2Vuc2UiKSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0
byB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlz
IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRh
aW4gYSBjb3B5Ci0qKiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBh
dHRuOiBMZWdhbCBTZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50
YWluIFZpZXcsIENBIDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5j
b20vcHJvamVjdHMvRnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUg
TGljZW5zZSwgdGhlIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJh
c2lzLCB3aXRoIEFMTCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElP
TlMKLSoqIERJU0NMQUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1Q
TElFRCBXQVJSQU5USUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNB
VElTRkFDVE9SWSBRVUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0Us
IEFORCBOT04tSU5GUklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2lu
YWwgQ29kZSBpczogT3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4y
LjEsIHJlbGVhc2VkIEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBo
aWNzLAotKiogSW5jLiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAw
MCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNy
ZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJl
aW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zp
c2lvbnM6IFRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxp
c2hlZCBieSBTR0kgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhl
Ci0qKiBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24g
MS4yLjEpLCByZWxlYXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGlj
cyBTeXN0ZW0gVXRpbGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3Zl
bWJlciA0LCAxOTk4OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRv
dyBTeXN0ZW0oUikgKFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhp
cyBzb2Z0d2FyZQotKiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEu
Mi4xIFNhbXBsZSBJbXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBu
b3QgYmVlbiBpbmRlcGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0
aCB0aGUgT3BlbkdMKFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoK
LSoqIEF1dGhvcjogRXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNp
b24kCi0qKiAkSGVhZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy90ZXNzLmMj
NyAkCi0qLwotCi0jaW5jbHVkZSAiZ2x1b3MuaCIKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNs
dWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlICJtZW1hbGxvYy5o
IgotI2luY2x1ZGUgInRlc3MuaCIKLSNpbmNsdWRlICJtZXNoLmgiCi0jaW5jbHVkZSAibm9ybWFs
LmgiCi0jaW5jbHVkZSAic3dlZXAuaCIKLSNpbmNsdWRlICJ0ZXNzbW9uby5oIgotI2luY2x1ZGUg
InJlbmRlci5oIgotCi0jZGVmaW5lIEdMVV9URVNTX0RFRkFVTFRfVE9MRVJBTkNFIDAuMAotI2Rl
ZmluZSBHTFVfVEVTU19NRVNICQkxMDAxMTIJLyogdm9pZCAoKikoR0xVbWVzaCAqbWVzaCkJICAg
ICovCi0KLSNkZWZpbmUgVFJVRSAxCi0jZGVmaW5lIEZBTFNFIDAKLQotLypBUkdTVVNFRCovIHN0
YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9CZWdpbiggR0xlbnVtIHR5cGUgKSB7fQotLypBUkdTVVNF
RCovIHN0YXRpYyB2b2lkIEdMQVBJRU5UUlkgbm9FZGdlRmxhZyggR0xib29sZWFuIGJvdW5kYXJ5
RWRnZSApIHt9Ci0vKkFSR1NVU0VEKi8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub1ZlcnRleCgg
dm9pZCAqZGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub0Vu
ZCggdm9pZCApIHt9Ci0vKkFSR1NVU0VEKi8gc3RhdGljIHZvaWQgR0xBUElFTlRSWSBub0Vycm9y
KCBHTGVudW0gZXJybnVtICkge30KLS8qQVJHU1VTRUQqLyBzdGF0aWMgdm9pZCBHTEFQSUVOVFJZ
IG5vQ29tYmluZSggR0xkb3VibGUgY29vcmRzWzNdLCB2b2lkICpkYXRhWzRdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCB3ZWlnaHRbNF0sIHZvaWQgKipkYXRh
T3V0ICkge30KLS8qQVJHU1VTRUQqLyBzdGF0aWMgdm9pZCBHTEFQSUVOVFJZIG5vTWVzaCggR0xV
bWVzaCAqbWVzaCApIHt9Ci0KLQotLypBUkdTVVNFRCovIHZvaWQgR0xBUElFTlRSWSBfX2dsX25v
QmVnaW5EYXRhKCBHTGVudW0gdHlwZSwKLQkJCQkJICAgICB2b2lkICpwb2x5Z29uRGF0YSApIHt9
Ci0vKkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FZGdlRmxhZ0RhdGEoIEdMYm9v
bGVhbiBib3VuZGFyeUVkZ2UsIAotCQkJCSAgICAgICB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0v
KkFSR1NVU0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9WZXJ0ZXhEYXRhKCB2b2lkICpkYXRh
LAotCQkJCQkgICAgICB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NVU0VEKi8gdm9pZCBH
TEFQSUVOVFJZIF9fZ2xfbm9FbmREYXRhKCB2b2lkICpwb2x5Z29uRGF0YSApIHt9Ci0vKkFSR1NV
U0VEKi8gdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9FcnJvckRhdGEoIEdMZW51bSBlcnJudW0sCi0J
CQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQotLypBUkdTVVNFRCovIHZvaWQgR0xBUElF
TlRSWSBfX2dsX25vQ29tYmluZURhdGEoIEdMZG91YmxlIGNvb3Jkc1szXSwKLQkJCQkJICAgICAg
IHZvaWQgKmRhdGFbNF0sCi0JCQkJCSAgICAgICBHTGZsb2F0IHdlaWdodFs0XSwKLQkJCQkJICAg
ICAgIHZvaWQgKipvdXREYXRhLAotCQkJCQkgICAgICAgdm9pZCAqcG9seWdvbkRhdGEgKSB7fQot
Ci0vKiBIYWxmLWVkZ2VzIGFyZSBhbGxvY2F0ZWQgaW4gcGFpcnMgKHNlZSBtZXNoLmMpICovCi10
eXBlZGVmIHN0cnVjdCB7IEdMVWhhbGZFZGdlIGUsIGVTeW07IH0gRWRnZVBhaXI7Ci0KLSNkZWZp
bmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChhKSA6IChiKSkKLSNkZWZpbmUgTUFYX0ZBU1RfQUxM
T0MJKE1BWChzaXplb2YoRWRnZVBhaXIpLCBcCi0JCQkgTUFYKHNpemVvZihHTFV2ZXJ0ZXgpLHNp
emVvZihHTFVmYWNlKSkpKQotCi0KLUdMVXRlc3NlbGF0b3IgKiBHTEFQSUVOVFJZCi1nbHVOZXdU
ZXNzKCB2b2lkICkKLXsKLSAgR0xVdGVzc2VsYXRvciAqdGVzczsKLQotICAvKiBPbmx5IGluaXRp
YWxpemUgZmllbGRzIHdoaWNoIGNhbiBiZSBjaGFuZ2VkIGJ5IHRoZSBhcGkuICBPdGhlciBmaWVs
ZHMKLSAgICogYXJlIGluaXRpYWxpemVkIHdoZXJlIHRoZXkgYXJlIHVzZWQuCi0gICAqLwotCi0g
IGlmIChtZW1Jbml0KCBNQVhfRkFTVF9BTExPQyApID09IDApIHsKLSAgICAgcmV0dXJuIDA7CQkJ
Lyogb3V0IG9mIG1lbW9yeSAqLwotICB9Ci0gIHRlc3MgPSAoR0xVdGVzc2VsYXRvciAqKW1lbUFs
bG9jKCBzaXplb2YoIEdMVXRlc3NlbGF0b3IgKSk7Ci0gIGlmICh0ZXNzID09IE5VTEwpIHsKLSAg
ICAgcmV0dXJuIDA7CQkJLyogb3V0IG9mIG1lbW9yeSAqLwotICB9Ci0KLSAgdGVzcy0+c3RhdGUg
PSBUX0RPUk1BTlQ7Ci0KLSAgdGVzcy0+bm9ybWFsWzBdID0gMDsKLSAgdGVzcy0+bm9ybWFsWzFd
ID0gMDsKLSAgdGVzcy0+bm9ybWFsWzJdID0gMDsKLQotICB0ZXNzLT5yZWxUb2xlcmFuY2UgPSBH
TFVfVEVTU19ERUZBVUxUX1RPTEVSQU5DRTsKLSAgdGVzcy0+d2luZGluZ1J1bGUgPSBHTFVfVEVT
U19XSU5ESU5HX09ERDsKLSAgdGVzcy0+ZmxhZ0JvdW5kYXJ5ID0gRkFMU0U7Ci0gIHRlc3MtPmJv
dW5kYXJ5T25seSA9IEZBTFNFOwotCi0gIHRlc3MtPmNhbGxCZWdpbiA9ICZub0JlZ2luOwotICB0
ZXNzLT5jYWxsRWRnZUZsYWcgPSAmbm9FZGdlRmxhZzsKLSAgdGVzcy0+Y2FsbFZlcnRleCA9ICZu
b1ZlcnRleDsKLSAgdGVzcy0+Y2FsbEVuZCA9ICZub0VuZDsKLQotICB0ZXNzLT5jYWxsRXJyb3Ig
PSAmbm9FcnJvcjsKLSAgdGVzcy0+Y2FsbENvbWJpbmUgPSAmbm9Db21iaW5lOwotICB0ZXNzLT5j
YWxsTWVzaCA9ICZub01lc2g7Ci0KLSAgdGVzcy0+Y2FsbEJlZ2luRGF0YT0gJl9fZ2xfbm9CZWdp
bkRhdGE7Ci0gIHRlc3MtPmNhbGxFZGdlRmxhZ0RhdGE9ICZfX2dsX25vRWRnZUZsYWdEYXRhOwot
ICB0ZXNzLT5jYWxsVmVydGV4RGF0YT0gJl9fZ2xfbm9WZXJ0ZXhEYXRhOwotICB0ZXNzLT5jYWxs
RW5kRGF0YT0gJl9fZ2xfbm9FbmREYXRhOwotICB0ZXNzLT5jYWxsRXJyb3JEYXRhPSAmX19nbF9u
b0Vycm9yRGF0YTsKLSAgdGVzcy0+Y2FsbENvbWJpbmVEYXRhPSAmX19nbF9ub0NvbWJpbmVEYXRh
OwotCi0gIHRlc3MtPnBvbHlnb25EYXRhPSBOVUxMOwotCi0gIHJldHVybiB0ZXNzOwotfQotCi1z
dGF0aWMgdm9pZCBNYWtlRG9ybWFudCggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIC8qIFJl
dHVybiB0aGUgdGVzc2VsbGF0b3IgdG8gaXRzIG9yaWdpbmFsIGRvcm1hbnQgc3RhdGUuICovCi0K
LSAgaWYoIHRlc3MtPm1lc2ggIT0gTlVMTCApIHsKLSAgICBfX2dsX21lc2hEZWxldGVNZXNoKCB0
ZXNzLT5tZXNoICk7Ci0gIH0KLSAgdGVzcy0+c3RhdGUgPSBUX0RPUk1BTlQ7Ci0gIHRlc3MtPmxh
c3RFZGdlID0gTlVMTDsKLSAgdGVzcy0+bWVzaCA9IE5VTEw7Ci19Ci0KLSNkZWZpbmUgUmVxdWly
ZVN0YXRlKCB0ZXNzLCBzICkgICBpZiggdGVzcy0+c3RhdGUgIT0gcyApIEdvdG9TdGF0ZSh0ZXNz
LHMpCi0KLXN0YXRpYyB2b2lkIEdvdG9TdGF0ZSggR0xVdGVzc2VsYXRvciAqdGVzcywgZW51bSBU
ZXNzU3RhdGUgbmV3U3RhdGUgKQotewotICB3aGlsZSggdGVzcy0+c3RhdGUgIT0gbmV3U3RhdGUg
KSB7Ci0gICAgLyogV2UgY2hhbmdlIHRoZSBjdXJyZW50IHN0YXRlIG9uZSBsZXZlbCBhdCBhIHRp
bWUsIHRvIGdldCB0bwotICAgICAqIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgICAqLwotICAgIGlm
KCB0ZXNzLT5zdGF0ZSA8IG5ld1N0YXRlICkgewotICAgICAgc3dpdGNoKCB0ZXNzLT5zdGF0ZSAp
IHsKLSAgICAgIGNhc2UgVF9ET1JNQU5UOgotCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xV
X1RFU1NfTUlTU0lOR19CRUdJTl9QT0xZR09OICk7Ci0JZ2x1VGVzc0JlZ2luUG9seWdvbiggdGVz
cywgTlVMTCApOwotCWJyZWFrOwotICAgICAgY2FzZSBUX0lOX1BPTFlHT046Ci0JQ0FMTF9FUlJP
Ul9PUl9FUlJPUl9EQVRBKCBHTFVfVEVTU19NSVNTSU5HX0JFR0lOX0NPTlRPVVIgKTsKLQlnbHVU
ZXNzQmVnaW5Db250b3VyKCB0ZXNzICk7Ci0JYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBhc3NlcnQoMCk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICBzd2l0Y2goIHRlc3MtPnN0YXRlICkgewotICAgICAgY2FzZSBUX0lOX0NPTlRPVVI6Ci0JQ0FM
TF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfVEVTU19NSVNTSU5HX0VORF9DT05UT1VSICk7Ci0J
Z2x1VGVzc0VuZENvbnRvdXIoIHRlc3MgKTsKLQlicmVhazsKLSAgICAgIGNhc2UgVF9JTl9QT0xZ
R09OOgotCUNBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfTUlTU0lOR19FTkRfUE9M
WUdPTiApOwotCS8qIGdsdVRlc3NFbmRQb2x5Z29uKCB0ZXNzICkgaXMgdG9vIG11Y2ggd29yayEg
Ki8KLQlNYWtlRG9ybWFudCggdGVzcyApOwotCWJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgYXNzZXJ0KDApOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQot
Ci12b2lkIEdMQVBJRU5UUlkKLWdsdURlbGV0ZVRlc3MoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQot
ewotICBSZXF1aXJlU3RhdGUoIHRlc3MsIFRfRE9STUFOVCApOwotICBtZW1GcmVlKCB0ZXNzICk7
Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1nbHVUZXNzUHJvcGVydHkoIEdMVXRlc3NlbGF0b3Ig
KnRlc3MsIEdMZW51bSB3aGljaCwgR0xkb3VibGUgdmFsdWUgKQotewotICBHTGVudW0gd2luZGlu
Z1J1bGU7Ci0KLSAgc3dpdGNoKCB3aGljaCApIHsKLSAgY2FzZSBHTFVfVEVTU19UT0xFUkFOQ0U6
Ci0gICAgaWYoIHZhbHVlIDwgMC4wIHx8IHZhbHVlID4gMS4wICkgYnJlYWs7Ci0gICAgdGVzcy0+
cmVsVG9sZXJhbmNlID0gdmFsdWU7Ci0gICAgcmV0dXJuOwotCi0gIGNhc2UgR0xVX1RFU1NfV0lO
RElOR19SVUxFOgotICAgIHdpbmRpbmdSdWxlID0gKEdMZW51bSkgdmFsdWU7Ci0gICAgaWYoIHdp
bmRpbmdSdWxlICE9IHZhbHVlICkgYnJlYWs7CS8qIG5vdCBhbiBpbnRlZ2VyICovCi0KLSAgICBz
d2l0Y2goIHdpbmRpbmdSdWxlICkgewotICAgIGNhc2UgR0xVX1RFU1NfV0lORElOR19PREQ6Ci0g
ICAgY2FzZSBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk86Ci0gICAgY2FzZSBHTFVfVEVTU19XSU5E
SU5HX1BPU0lUSVZFOgotICAgIGNhc2UgR0xVX1RFU1NfV0lORElOR19ORUdBVElWRToKLSAgICBj
YXNlIEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV086Ci0gICAgICB0ZXNzLT53aW5kaW5nUnVs
ZSA9IHdpbmRpbmdSdWxlOwotICAgICAgcmV0dXJuOwotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVh
azsKLSAgICB9Ci0KLSAgY2FzZSBHTFVfVEVTU19CT1VOREFSWV9PTkxZOgotICAgIHRlc3MtPmJv
dW5kYXJ5T25seSA9ICh2YWx1ZSAhPSAwKTsKLSAgICByZXR1cm47Ci0KLSAgZGVmYXVsdDoKLSAg
ICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9JTlZBTElEX0VOVU0gKTsKLSAgICByZXR1
cm47Ci0gIH0KLSAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfSU5WQUxJRF9WQUxVRSAp
OwotfQotCi0vKiBSZXR1cm5zIHRlc3NlbGxhdG9yIHByb3BlcnR5ICovCi12b2lkIEdMQVBJRU5U
UlkKLWdsdUdldFRlc3NQcm9wZXJ0eSggR0xVdGVzc2VsYXRvciAqdGVzcywgR0xlbnVtIHdoaWNo
LCBHTGRvdWJsZSAqdmFsdWUgKQotewotICAgc3dpdGNoICh3aGljaCkgewotICAgY2FzZSBHTFVf
VEVTU19UT0xFUkFOQ0U6Ci0gICAgICAvKiB0b2xlcmFuY2Ugc2hvdWxkIGJlIGluIHJhbmdlIFsw
Li4xXSAqLwotICAgICAgYXNzZXJ0KDAuMCA8PSB0ZXNzLT5yZWxUb2xlcmFuY2UgJiYgdGVzcy0+
cmVsVG9sZXJhbmNlIDw9IDEuMCk7Ci0gICAgICAqdmFsdWU9IHRlc3MtPnJlbFRvbGVyYW5jZTsK
LSAgICAgIGJyZWFrOyAgICAKLSAgIGNhc2UgR0xVX1RFU1NfV0lORElOR19SVUxFOgotICAgICAg
YXNzZXJ0KHRlc3MtPndpbmRpbmdSdWxlID09IEdMVV9URVNTX1dJTkRJTkdfT0REIHx8Ci0JICAg
ICB0ZXNzLT53aW5kaW5nUnVsZSA9PSBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk8gfHwKLQkgICAg
IHRlc3MtPndpbmRpbmdSdWxlID09IEdMVV9URVNTX1dJTkRJTkdfUE9TSVRJVkUgfHwKLQkgICAg
IHRlc3MtPndpbmRpbmdSdWxlID09IEdMVV9URVNTX1dJTkRJTkdfTkVHQVRJVkUgfHwKLQkgICAg
IHRlc3MtPndpbmRpbmdSdWxlID09IEdMVV9URVNTX1dJTkRJTkdfQUJTX0dFUV9UV08pOwotICAg
ICAgKnZhbHVlPSB0ZXNzLT53aW5kaW5nUnVsZTsKLSAgICAgIGJyZWFrOwotICAgY2FzZSBHTFVf
VEVTU19CT1VOREFSWV9PTkxZOgotICAgICAgYXNzZXJ0KHRlc3MtPmJvdW5kYXJ5T25seSA9PSBU
UlVFIHx8IHRlc3MtPmJvdW5kYXJ5T25seSA9PSBGQUxTRSk7Ci0gICAgICAqdmFsdWU9IHRlc3Mt
PmJvdW5kYXJ5T25seTsKLSAgICAgIGJyZWFrOwotICAgZGVmYXVsdDoKLSAgICAgICp2YWx1ZT0g
MC4wOwotICAgICAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfSU5WQUxJRF9FTlVNICk7
Ci0gICAgICBicmVhazsKLSAgIH0KLX0gLyogZ2x1R2V0VGVzc1Byb3BlcnR5KCkgKi8KLQotdm9p
ZCBHTEFQSUVOVFJZCi1nbHVUZXNzTm9ybWFsKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJs
ZSB4LCBHTGRvdWJsZSB5LCBHTGRvdWJsZSB6ICkKLXsKLSAgdGVzcy0+bm9ybWFsWzBdID0geDsK
LSAgdGVzcy0+bm9ybWFsWzFdID0geTsKLSAgdGVzcy0+bm9ybWFsWzJdID0gejsKLX0KLQotdm9p
ZCBHTEFQSUVOVFJZCi1nbHVUZXNzQ2FsbGJhY2soIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51
bSB3aGljaCwgdm9pZCAoR0xBUElFTlRSWSAqZm4pKCkpCi17Ci0gIHN3aXRjaCggd2hpY2ggKSB7
Ci0gIGNhc2UgR0xVX1RFU1NfQkVHSU46Ci0gICAgdGVzcy0+Y2FsbEJlZ2luID0gKGZuID09IE5V
TEwpID8gJm5vQmVnaW4gOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTGVudW0pKSBmbjsKLSAgICBy
ZXR1cm47Ci0gIGNhc2UgR0xVX1RFU1NfQkVHSU5fREFUQToKLSAgICB0ZXNzLT5jYWxsQmVnaW5E
YXRhID0gKGZuID09IE5VTEwpID8KLQkmX19nbF9ub0JlZ2luRGF0YSA6ICh2b2lkIChHTEFQSUVO
VFJZICopKEdMZW51bSwgdm9pZCAqKSkgZm47Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNT
X0VER0VfRkxBRzoKLSAgICB0ZXNzLT5jYWxsRWRnZUZsYWcgPSAoZm4gPT0gTlVMTCkgPyAmbm9F
ZGdlRmxhZyA6Ci0JCQkJCSh2b2lkIChHTEFQSUVOVFJZICopKEdMYm9vbGVhbikpIGZuOwotICAg
IC8qIElmIHRoZSBjbGllbnQgd2FudHMgYm91bmRhcnkgZWRnZXMgdG8gYmUgZmxhZ2dlZCwKLSAg
ICAgKiB3ZSByZW5kZXIgZXZlcnl0aGluZyBhcyBzZXBhcmF0ZSB0cmlhbmdsZXMgKG5vIHN0cmlw
cyBvciBmYW5zKS4KLSAgICAgKi8KLSAgICB0ZXNzLT5mbGFnQm91bmRhcnkgPSAoZm4gIT0gTlVM
TCk7Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX0VER0VfRkxBR19EQVRBOgotICAgIHRl
c3MtPmNhbGxFZGdlRmxhZ0RhdGE9IChmbiA9PSBOVUxMKSA/Ci0JJl9fZ2xfbm9FZGdlRmxhZ0Rh
dGEgOiAodm9pZCAoR0xBUElFTlRSWSAqKShHTGJvb2xlYW4sIHZvaWQgKikpIGZuOyAKLSAgICAv
KiBJZiB0aGUgY2xpZW50IHdhbnRzIGJvdW5kYXJ5IGVkZ2VzIHRvIGJlIGZsYWdnZWQsCi0gICAg
ICogd2UgcmVuZGVyIGV2ZXJ5dGhpbmcgYXMgc2VwYXJhdGUgdHJpYW5nbGVzIChubyBzdHJpcHMg
b3IgZmFucykuCi0gICAgICovCi0gICAgdGVzcy0+ZmxhZ0JvdW5kYXJ5ID0gKGZuICE9IE5VTEwp
OwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19WRVJURVg6Ci0gICAgdGVzcy0+Y2FsbFZl
cnRleCA9IChmbiA9PSBOVUxMKSA/ICZub1ZlcnRleCA6Ci0JCQkJICAgICAgKHZvaWQgKEdMQVBJ
RU5UUlkgKikodm9pZCAqKSkgZm47Ci0gICAgcmV0dXJuOwotICBjYXNlIEdMVV9URVNTX1ZFUlRF
WF9EQVRBOgotICAgIHRlc3MtPmNhbGxWZXJ0ZXhEYXRhID0gKGZuID09IE5VTEwpID8KLQkmX19n
bF9ub1ZlcnRleERhdGEgOiAodm9pZCAoR0xBUElFTlRSWSAqKSh2b2lkICosIHZvaWQgKikpIGZu
OwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FTkQ6Ci0gICAgdGVzcy0+Y2FsbEVuZCA9
IChmbiA9PSBOVUxMKSA/ICZub0VuZCA6ICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQpKSBmbjsK
LSAgICByZXR1cm47Ci0gIGNhc2UgR0xVX1RFU1NfRU5EX0RBVEE6Ci0gICAgdGVzcy0+Y2FsbEVu
ZERhdGEgPSAoZm4gPT0gTlVMTCkgPyAmX19nbF9ub0VuZERhdGEgOiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkIChHTEFQSUVOVFJZICopKHZvaWQgKikpIGZu
OwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FUlJPUjoKLSAgICB0ZXNzLT5jYWxsRXJy
b3IgPSAoZm4gPT0gTlVMTCkgPyAmbm9FcnJvciA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMZW51
bSkpIGZuOwotICAgIHJldHVybjsKLSAgY2FzZSBHTFVfVEVTU19FUlJPUl9EQVRBOgotICAgIHRl
c3MtPmNhbGxFcnJvckRhdGEgPSAoZm4gPT0gTlVMTCkgPwotCSZfX2dsX25vRXJyb3JEYXRhIDog
KHZvaWQgKEdMQVBJRU5UUlkgKikoR0xlbnVtLCB2b2lkICopKSBmbjsKLSAgICByZXR1cm47Ci0g
IGNhc2UgR0xVX1RFU1NfQ09NQklORToKLSAgICB0ZXNzLT5jYWxsQ29tYmluZSA9IChmbiA9PSBO
VUxMKSA/ICZub0NvbWJpbmUgOgotCSh2b2lkIChHTEFQSUVOVFJZICopKEdMZG91YmxlIFszXSx2
b2lkICpbNF0sIEdMZmxvYXQgWzRdLCB2b2lkICoqICkpIGZuOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBHTFVfVEVTU19DT01CSU5FX0RBVEE6Ci0gICAgdGVzcy0+Y2FsbENvbWJpbmVEYXRhID0gKGZu
ID09IE5VTEwpID8gJl9fZ2xfbm9Db21iaW5lRGF0YSA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKEdMQVBJRU5UUlkgKikoR0xkb3VibGUgWzNdLAot
CQkJCQkJICAgICB2b2lkICpbNF0sIAotCQkJCQkJICAgICBHTGZsb2F0IFs0XSwgCi0JCQkJCQkg
ICAgIHZvaWQgKiosCi0JCQkJCQkgICAgIHZvaWQgKikpIGZuOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBHTFVfVEVTU19NRVNIOgotICAgIHRlc3MtPmNhbGxNZXNoID0gKGZuID09IE5VTEwpID8gJm5v
TWVzaCA6ICh2b2lkIChHTEFQSUVOVFJZICopKEdMVW1lc2ggKikpIGZuOwotICAgIHJldHVybjsK
LSAgZGVmYXVsdDoKLSAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9JTlZBTElEX0VO
VU0gKTsKLSAgICByZXR1cm47Ci0gIH0KLX0KLQotc3RhdGljIGludCBBZGRWZXJ0ZXgoIEdMVXRl
c3NlbGF0b3IgKnRlc3MsIEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSApCi17Ci0gIEdM
VWhhbGZFZGdlICplOwotCi0gIGUgPSB0ZXNzLT5sYXN0RWRnZTsKLSAgaWYoIGUgPT0gTlVMTCAp
IHsKLSAgICAvKiBNYWtlIGEgc2VsZi1sb29wIChvbmUgdmVydGV4LCBvbmUgZWRnZSkuICovCi0K
LSAgICBlID0gX19nbF9tZXNoTWFrZUVkZ2UoIHRlc3MtPm1lc2ggKTsKLSAgICBpZiAoZSA9PSBO
VUxMKSByZXR1cm4gMDsKLSAgICBpZiAoICFfX2dsX21lc2hTcGxpY2UoIGUsIGUtPlN5bSApICkg
cmV0dXJuIDA7Ci0gIH0gZWxzZSB7Ci0gICAgLyogQ3JlYXRlIGEgbmV3IHZlcnRleCBhbmQgZWRn
ZSB3aGljaCBpbW1lZGlhdGVseSBmb2xsb3cgZQotICAgICAqIGluIHRoZSBvcmRlcmluZyBhcm91
bmQgdGhlIGxlZnQgZmFjZS4KLSAgICAgKi8KLSAgICBpZiAoX19nbF9tZXNoU3BsaXRFZGdlKCBl
ICkgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgZSA9IGUtPkxuZXh0OwotICB9Ci0KLSAgLyogVGhl
IG5ldyB2ZXJ0ZXggaXMgbm93IGUtPk9yZy4gKi8KLSAgZS0+T3JnLT5kYXRhID0gZGF0YTsKLSAg
ZS0+T3JnLT5jb29yZHNbMF0gPSBjb29yZHNbMF07Ci0gIGUtPk9yZy0+Y29vcmRzWzFdID0gY29v
cmRzWzFdOwotICBlLT5PcmctPmNvb3Jkc1syXSA9IGNvb3Jkc1syXTsKLSAgCi0gIC8qIFRoZSB3
aW5kaW5nIG9mIGFuIGVkZ2Ugc2F5cyBob3cgdGhlIHdpbmRpbmcgbnVtYmVyIGNoYW5nZXMgYXMg
d2UKLSAgICogY3Jvc3MgZnJvbSB0aGUgZWRnZScncyByaWdodCBmYWNlIHRvIGl0cyBsZWZ0IGZh
Y2UuICBXZSBhZGQgdGhlCi0gICAqIHZlcnRpY2VzIGluIHN1Y2ggYW4gb3JkZXIgdGhhdCBhIEND
VyBjb250b3VyIHdpbGwgYWRkICsxIHRvCi0gICAqIHRoZSB3aW5kaW5nIG51bWJlciBvZiB0aGUg
cmVnaW9uIGluc2lkZSB0aGUgY29udG91ci4KLSAgICovCi0gIGUtPndpbmRpbmcgPSAxOwotICBl
LT5TeW0tPndpbmRpbmcgPSAtMTsKLQotICB0ZXNzLT5sYXN0RWRnZSA9IGU7Ci0KLSAgcmV0dXJu
IDE7Ci19Ci0KLQotc3RhdGljIHZvaWQgQ2FjaGVWZXJ0ZXgoIEdMVXRlc3NlbGF0b3IgKnRlc3Ms
IEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCAqZGF0YSApCi17Ci0gIENhY2hlZFZlcnRleCAqdiA9
ICZ0ZXNzLT5jYWNoZVt0ZXNzLT5jYWNoZUNvdW50XTsKLQotICB2LT5kYXRhID0gZGF0YTsKLSAg
di0+Y29vcmRzWzBdID0gY29vcmRzWzBdOwotICB2LT5jb29yZHNbMV0gPSBjb29yZHNbMV07Ci0g
IHYtPmNvb3Jkc1syXSA9IGNvb3Jkc1syXTsKLSAgKyt0ZXNzLT5jYWNoZUNvdW50OwotfQotCi0K
LXN0YXRpYyBpbnQgRW1wdHlDYWNoZSggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17Ci0gIENhY2hl
ZFZlcnRleCAqdiA9IHRlc3MtPmNhY2hlOwotICBDYWNoZWRWZXJ0ZXggKnZMYXN0OwotCi0gIHRl
c3MtPm1lc2ggPSBfX2dsX21lc2hOZXdNZXNoKCk7Ci0gIGlmICh0ZXNzLT5tZXNoID09IE5VTEwp
IHJldHVybiAwOwotCi0gIGZvciggdkxhc3QgPSB2ICsgdGVzcy0+Y2FjaGVDb3VudDsgdiA8IHZM
YXN0OyArK3YgKSB7Ci0gICAgaWYgKCAhQWRkVmVydGV4KCB0ZXNzLCB2LT5jb29yZHMsIHYtPmRh
dGEgKSApIHJldHVybiAwOwotICB9Ci0gIHRlc3MtPmNhY2hlQ291bnQgPSAwOwotICB0ZXNzLT5l
bXB0eUNhY2hlID0gRkFMU0U7Ci0KLSAgcmV0dXJuIDE7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZ
Ci1nbHVUZXNzVmVydGV4KCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCBHTGRvdWJsZSBjb29yZHNbM10s
IHZvaWQgKmRhdGEgKQotewotICBpbnQgaSwgdG9vTGFyZ2UgPSBGQUxTRTsKLSAgR0xkb3VibGUg
eCwgY2xhbXBlZFszXTsKLQotICBSZXF1aXJlU3RhdGUoIHRlc3MsIFRfSU5fQ09OVE9VUiApOwot
Ci0gIGlmKCB0ZXNzLT5lbXB0eUNhY2hlICkgewotICAgIGlmICggIUVtcHR5Q2FjaGUoIHRlc3Mg
KSApIHsKLSAgICAgICBDQUxMX0VSUk9SX09SX0VSUk9SX0RBVEEoIEdMVV9PVVRfT0ZfTUVNT1JZ
ICk7Ci0gICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0ZXNzLT5sYXN0RWRnZSA9IE5VTEw7Ci0g
IH0KLSAgZm9yKCBpID0gMDsgaSA8IDM7ICsraSApIHsKLSAgICB4ID0gY29vcmRzW2ldOwotICAg
IGlmKCB4IDwgLSBHTFVfVEVTU19NQVhfQ09PUkQgKSB7Ci0gICAgICB4ID0gLSBHTFVfVEVTU19N
QVhfQ09PUkQ7Ci0gICAgICB0b29MYXJnZSA9IFRSVUU7Ci0gICAgfQotICAgIGlmKCB4ID4gR0xV
X1RFU1NfTUFYX0NPT1JEICkgewotICAgICAgeCA9IEdMVV9URVNTX01BWF9DT09SRDsKLSAgICAg
IHRvb0xhcmdlID0gVFJVRTsKLSAgICB9Ci0gICAgY2xhbXBlZFtpXSA9IHg7Ci0gIH0KLSAgaWYo
IHRvb0xhcmdlICkgewotICAgIENBTExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX1RFU1NfQ09P
UkRfVE9PX0xBUkdFICk7Ci0gIH0KLQotICBpZiggdGVzcy0+bWVzaCA9PSBOVUxMICkgewotICAg
IGlmKCB0ZXNzLT5jYWNoZUNvdW50IDwgVEVTU19NQVhfQ0FDSEUgKSB7Ci0gICAgICBDYWNoZVZl
cnRleCggdGVzcywgY2xhbXBlZCwgZGF0YSApOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoICFFbXB0eUNhY2hlKCB0ZXNzICkgKSB7Ci0gICAgICAgQ0FMTF9FUlJPUl9PUl9FUlJPUl9E
QVRBKCBHTFVfT1VUX09GX01FTU9SWSApOwotICAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLSAg
aWYgKCAhQWRkVmVydGV4KCB0ZXNzLCBjbGFtcGVkLCBkYXRhICkgKSB7Ci0gICAgICAgQ0FMTF9F
UlJPUl9PUl9FUlJPUl9EQVRBKCBHTFVfT1VUX09GX01FTU9SWSApOwotICB9Ci19Ci0KLQotdm9p
ZCBHTEFQSUVOVFJZCi1nbHVUZXNzQmVnaW5Qb2x5Z29uKCBHTFV0ZXNzZWxhdG9yICp0ZXNzLCB2
b2lkICpkYXRhICkKLXsKLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0RPUk1BTlQgKTsKLQotICB0
ZXNzLT5zdGF0ZSA9IFRfSU5fUE9MWUdPTjsKLSAgdGVzcy0+Y2FjaGVDb3VudCA9IDA7Ci0gIHRl
c3MtPmVtcHR5Q2FjaGUgPSBGQUxTRTsKLSAgdGVzcy0+bWVzaCA9IE5VTEw7Ci0KLSAgdGVzcy0+
cG9seWdvbkRhdGE9IGRhdGE7Ci19Ci0KLQotdm9pZCBHTEFQSUVOVFJZCi1nbHVUZXNzQmVnaW5D
b250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBU
X0lOX1BPTFlHT04gKTsKLQotICB0ZXNzLT5zdGF0ZSA9IFRfSU5fQ09OVE9VUjsKLSAgdGVzcy0+
bGFzdEVkZ2UgPSBOVUxMOwotICBpZiggdGVzcy0+Y2FjaGVDb3VudCA+IDAgKSB7Ci0gICAgLyog
SnVzdCBzZXQgYSBmbGFnIHNvIHdlIGRvbid0IGdldCBjb25mdXNlZCBieSBlbXB0eSBjb250b3Vy
cwotICAgICAqIC0tIHRoZXNlIGNhbiBiZSBnZW5lcmF0ZWQgYWNjaWRlbnRhbGx5IHdpdGggdGhl
IG9ic29sZXRlCi0gICAgICogTmV4dENvbnRvdXIoKSBpbnRlcmZhY2UuCi0gICAgICovCi0gICAg
dGVzcy0+ZW1wdHlDYWNoZSA9IFRSVUU7Ci0gIH0KLX0KLQotCi12b2lkIEdMQVBJRU5UUlkKLWds
dVRlc3NFbmRDb250b3VyKCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKLXsKLSAgUmVxdWlyZVN0YXRl
KCB0ZXNzLCBUX0lOX0NPTlRPVVIgKTsKLSAgdGVzcy0+c3RhdGUgPSBUX0lOX1BPTFlHT047Ci19
Ci0KLXZvaWQgR0xBUElFTlRSWQotZ2x1VGVzc0VuZFBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRl
c3MgKQotewotICBHTFVtZXNoICptZXNoOwotCi0gIGlmIChzZXRqbXAodGVzcy0+ZW52KSAhPSAw
KSB7CQotICAgICAvKiBjb21lIGJhY2sgaGVyZSBpZiBvdXQgb2YgbWVtb3J5ICovCi0gICAgIENB
TExfRVJST1JfT1JfRVJST1JfREFUQSggR0xVX09VVF9PRl9NRU1PUlkgKTsKLSAgICAgcmV0dXJu
OwotICB9Ci0KLSAgUmVxdWlyZVN0YXRlKCB0ZXNzLCBUX0lOX1BPTFlHT04gKTsKLSAgdGVzcy0+
c3RhdGUgPSBUX0RPUk1BTlQ7Ci0KLSAgaWYoIHRlc3MtPm1lc2ggPT0gTlVMTCApIHsKLSAgICBp
ZiggISB0ZXNzLT5mbGFnQm91bmRhcnkgJiYgdGVzcy0+Y2FsbE1lc2ggPT0gJm5vTWVzaCApIHsK
LQotICAgICAgLyogVHJ5IHNvbWUgc3BlY2lhbCBjb2RlIHRvIG1ha2UgdGhlIGVhc3kgY2FzZXMg
Z28gcXVpY2tseQotICAgICAgICogKGVnLiBjb252ZXggcG9seWdvbnMpLiAgVGhpcyBjb2RlIGRv
ZXMgTk9UIGhhbmRsZSBtdWx0aXBsZSBjb250b3VycywKLSAgICAgICAqIGludGVyc2VjdGlvbnMs
IGVkZ2UgZmxhZ3MsIGFuZCBvZiBjb3Vyc2UgaXQgZG9lcyBub3QgZ2VuZXJhdGUKLSAgICAgICAq
IGFuIGV4cGxpY2l0IG1lc2ggZWl0aGVyLgotICAgICAgICovCi0gICAgICBpZiggX19nbF9yZW5k
ZXJDYWNoZSggdGVzcyApKSB7Ci0JdGVzcy0+cG9seWdvbkRhdGE9IE5VTEw7IAotCXJldHVybjsK
LSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCAhRW1wdHlDYWNoZSggdGVzcyApICkgbG9uZ2ptcCh0
ZXNzLT5lbnYsMSk7IC8qIGNvdWxkJ3ZlIHVzZWQgYSBsYWJlbCovCi0gIH0KLQotICAvKiBEZXRl
cm1pbmUgdGhlIHBvbHlnb24gbm9ybWFsIGFuZCBwcm9qZWN0IHZlcnRpY2VzIG9udG8gdGhlIHBs
YW5lCi0gICAqIG9mIHRoZSBwb2x5Z29uLgotICAgKi8KLSAgX19nbF9wcm9qZWN0UG9seWdvbigg
dGVzcyApOwotCi0gIC8qIF9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgY29tcHV0ZXMgdGhl
IHBsYW5hciBhcnJhbmdlbWVudCBzcGVjaWZpZWQKLSAgICogYnkgdGhlIGdpdmVuIGNvbnRvdXJz
LCBhbmQgZnVydGhlciBzdWJkaXZpZGVzIHRoaXMgYXJyYW5nZW1lbnQKLSAgICogaW50byByZWdp
b25zLiAgRWFjaCByZWdpb24gaXMgbWFya2VkICJpbnNpZGUiIGlmIGl0IGJlbG9uZ3MKLSAgICog
dG8gdGhlIHBvbHlnb24sIGFjY29yZGluZyB0byB0aGUgcnVsZSBnaXZlbiBieSB0ZXNzLT53aW5k
aW5nUnVsZS4KLSAgICogRWFjaCBpbnRlcmlvciByZWdpb24gaXMgZ3VhcmFudGVlZCBiZSBtb25v
dG9uZS4KLSAgICovCi0gIGlmICggIV9fZ2xfY29tcHV0ZUludGVyaW9yKCB0ZXNzICkgKSB7Ci0g
ICAgIGxvbmdqbXAodGVzcy0+ZW52LDEpOwkvKiBjb3VsZCd2ZSB1c2VkIGEgbGFiZWwgKi8KLSAg
fQotCi0gIG1lc2ggPSB0ZXNzLT5tZXNoOwotICBpZiggISB0ZXNzLT5mYXRhbEVycm9yICkgewot
ICAgIGludCByYyA9IDE7Ci0KLSAgICAvKiBJZiB0aGUgdXNlciB3YW50cyBvbmx5IHRoZSBib3Vu
ZGFyeSBjb250b3Vycywgd2UgdGhyb3cgYXdheSBhbGwgZWRnZXMKLSAgICAgKiBleGNlcHQgdGhv
c2Ugd2hpY2ggc2VwYXJhdGUgdGhlIGludGVyaW9yIGZyb20gdGhlIGV4dGVyaW9yLgotICAgICAq
IE90aGVyd2lzZSB3ZSB0ZXNzZWxsYXRlIGFsbCB0aGUgcmVnaW9ucyBtYXJrZWQgImluc2lkZSIu
Ci0gICAgICovCi0gICAgaWYoIHRlc3MtPmJvdW5kYXJ5T25seSApIHsKLSAgICAgIHJjID0gX19n
bF9tZXNoU2V0V2luZGluZ051bWJlciggbWVzaCwgMSwgVFJVRSApOwotICAgIH0gZWxzZSB7Ci0g
ICAgICByYyA9IF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvciggbWVzaCApOyAKLSAgICB9Ci0g
ICAgaWYgKHJjID09IDApIGxvbmdqbXAodGVzcy0+ZW52LDEpOwkvKiBjb3VsZCd2ZSB1c2VkIGEg
bGFiZWwgKi8KLQotICAgIF9fZ2xfbWVzaENoZWNrTWVzaCggbWVzaCApOwotCi0gICAgaWYoIHRl
c3MtPmNhbGxCZWdpbiAhPSAmbm9CZWdpbiB8fCB0ZXNzLT5jYWxsRW5kICE9ICZub0VuZAotICAg
ICAgIHx8IHRlc3MtPmNhbGxWZXJ0ZXggIT0gJm5vVmVydGV4IHx8IHRlc3MtPmNhbGxFZGdlRmxh
ZyAhPSAmbm9FZGdlRmxhZyAKLSAgICAgICB8fCB0ZXNzLT5jYWxsQmVnaW5EYXRhICE9ICZfX2ds
X25vQmVnaW5EYXRhIAotICAgICAgIHx8IHRlc3MtPmNhbGxFbmREYXRhICE9ICZfX2dsX25vRW5k
RGF0YQotICAgICAgIHx8IHRlc3MtPmNhbGxWZXJ0ZXhEYXRhICE9ICZfX2dsX25vVmVydGV4RGF0
YQotICAgICAgIHx8IHRlc3MtPmNhbGxFZGdlRmxhZ0RhdGEgIT0gJl9fZ2xfbm9FZGdlRmxhZ0Rh
dGEgKQotICAgIHsKLSAgICAgIGlmKCB0ZXNzLT5ib3VuZGFyeU9ubHkgKSB7Ci0JX19nbF9yZW5k
ZXJCb3VuZGFyeSggdGVzcywgbWVzaCApOyAgLyogb3V0cHV0IGJvdW5kYXJ5IGNvbnRvdXJzICov
Ci0gICAgICB9IGVsc2UgewotCV9fZ2xfcmVuZGVyTWVzaCggdGVzcywgbWVzaCApOwkgICAvKiBv
dXRwdXQgc3RyaXBzIGFuZCBmYW5zICovCi0gICAgICB9Ci0gICAgfQotICAgIGlmKCB0ZXNzLT5j
YWxsTWVzaCAhPSAmbm9NZXNoICkgewotCi0gICAgICAvKiBUaHJvdyBhd2F5IHRoZSBleHRlcmlv
ciBmYWNlcywgc28gdGhhdCBhbGwgZmFjZXMgYXJlIGludGVyaW9yLgotICAgICAgICogVGhpcyB3
YXkgdGhlIHVzZXIgZG9lc24ndCBoYXZlIHRvIGNoZWNrIHRoZSAiaW5zaWRlIiBmbGFnLAotICAg
ICAgICogYW5kIHdlIGRvbid0IG5lZWQgdG8gZXZlbiByZXZlYWwgaXRzIGV4aXN0ZW5jZS4gIEl0
IGFsc28gbGVhdmVzCi0gICAgICAgKiB0aGUgZnJlZWRvbSBmb3IgYW4gaW1wbGVtZW50YXRpb24g
dG8gbm90IGdlbmVyYXRlIHRoZSBleHRlcmlvcgotICAgICAgICogZmFjZXMgaW4gdGhlIGZpcnN0
IHBsYWNlLgotICAgICAgICovCi0gICAgICBfX2dsX21lc2hEaXNjYXJkRXh0ZXJpb3IoIG1lc2gg
KTsKLSAgICAgICgqdGVzcy0+Y2FsbE1lc2gpKCBtZXNoICk7CQkvKiB1c2VyIHdhbnRzIHRoZSBt
ZXNoIGl0c2VsZiAqLwotICAgICAgdGVzcy0+bWVzaCA9IE5VTEw7Ci0gICAgICB0ZXNzLT5wb2x5
Z29uRGF0YT0gTlVMTDsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gIH0KLSAgX19nbF9tZXNoRGVs
ZXRlTWVzaCggbWVzaCApOwotICB0ZXNzLT5wb2x5Z29uRGF0YT0gTlVMTDsKLSAgdGVzcy0+bWVz
aCA9IE5VTEw7Ci19Ci0KLQotLypYWFhibHl0aGUgdW51c2VkIGZ1bmN0aW9uKi8KLSNpZiAwCi12
b2lkIEdMQVBJRU5UUlkKLWdsdURlbGV0ZU1lc2goIEdMVW1lc2ggKm1lc2ggKQotewotICBfX2ds
X21lc2hEZWxldGVNZXNoKCBtZXNoICk7Ci19Ci0jZW5kaWYKLQotCi0KLS8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBPYnNvbGV0
ZSBjYWxscyAtLSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCi0jaWYgMAotdm9pZCBH
TEFQSUVOVFJZCi1nbHVCZWdpblBvbHlnb24oIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQotewotICBn
bHVUZXNzQmVnaW5Qb2x5Z29uKCB0ZXNzLCBOVUxMICk7Ci0gIGdsdVRlc3NCZWdpbkNvbnRvdXIo
IHRlc3MgKTsKLX0KLQotCi0vKkFSR1NVU0VEKi8KLXZvaWQgR0xBUElFTlRSWQotZ2x1TmV4dENv
bnRvdXIoIEdMVXRlc3NlbGF0b3IgKnRlc3MsIEdMZW51bSB0eXBlICkKLXsKLSAgZ2x1VGVzc0Vu
ZENvbnRvdXIoIHRlc3MgKTsKLSAgZ2x1VGVzc0JlZ2luQ29udG91ciggdGVzcyApOwotfQotCi0K
LXZvaWQgR0xBUElFTlRSWQotZ2x1RW5kUG9seWdvbiggR0xVdGVzc2VsYXRvciAqdGVzcyApCi17
Ci0gIGdsdVRlc3NFbmRDb250b3VyKCB0ZXNzICk7Ci0gIGdsdVRlc3NFbmRQb2x5Z29uKCB0ZXNz
ICk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNz
L3Rlc3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3MuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDUzZmEwMDk4NmU1MjJkODA5ZGQ0MzdlNTU3YmNlZmFhNzJl
MTJhYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIg
KzAsMCBAQAotLyoKLSoqIExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRl
bnQgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVy
bmF0aXZlIGxpY2Vuc2UgYXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUg
TGljZW5zZSBCLCBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0
aGlzCi0qKiBmaWxlIGFyZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExp
Y2Vuc2UuIFlvdSBtYXkgbm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl
IHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vu
c2UgYXQgU2lsaWNvbiBHcmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAK
LSoqIEFtcGhpdGhlYXRyZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBv
ciBhdDoKLSoqIAotKiogaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoq
IE5vdGUgdGhhdCwgYXMgcHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBk
aXN0cmlidXRlZCBvbiBhbgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQg
SU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJ
TkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENP
TkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVT
UyBGT1IgQQotKiogUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoq
IAotKiogT3JpZ2luYWwgQ29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUg
SW1wbGVtZW50YXRpb24sCi0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAy
MDAwLCBkZXZlbG9wZWQgYnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFs
IENvZGUgaXMgQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgot
KiogQ29weXJpZ2h0IGluIGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMg
YXMgaW5kaWNhdGVkCi0qKiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
KiogCi0qKiBBZGRpdGlvbmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJv
Z3JhbW1pbmcgaW50ZXJmYWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9u
IHdpdGggdGhlIE9yaWdpbmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5
c3RlbTogQSBTcGVjaWZpY2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmls
IDEsIDE5OTk7IFRoZSBPcGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAo
VmVyc2lvbgotKiogMS4zKSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChS
KSBHcmFwaGljcyB3aXRoIHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyks
IHJlbGVhc2VkIE9jdG9iZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVk
IHVzaW5nIHRoZSBPcGVuR0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24K
LSoqIHB1Ymxpc2hlZCBieSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJp
ZmllZCBhcyBiZWluZwotKiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEu
Mi4xIFNwZWNpZmljYXRpb24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1
bHkgMTk5NC4KLSoqCi0qKiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9t
YWluL2dmeC9saWIvZ2x1L2xpYnRlc3MvdGVzcy5oIzYgJAotKi8KLQotI2lmbmRlZiBfX3Rlc3Nf
aF8KLSNkZWZpbmUgX190ZXNzX2hfCi0KLSNpbmNsdWRlIDxpbnRlcm5hbF9nbHUuaD4KLSNpbmNs
dWRlIDxzZXRqbXAuaD4KLSNpbmNsdWRlICJtZXNoLmgiCi0jaW5jbHVkZSAiZGljdC5oIgotI2lu
Y2x1ZGUgInByaW9yaXR5cS5oIgotCi0vKiBUaGUgYmVnaW4vZW5kIGNhbGxzIG11c3QgYmUgcHJv
cGVybHkgbmVzdGVkLiAgV2Uga2VlcCB0cmFjayBvZgotICogdGhlIGN1cnJlbnQgc3RhdGUgdG8g
ZW5mb3JjZSB0aGUgb3JkZXJpbmcuCi0gKi8KLWVudW0gVGVzc1N0YXRlIHsgVF9ET1JNQU5ULCBU
X0lOX1BPTFlHT04sIFRfSU5fQ09OVE9VUiB9OwotCi0vKiBXZSBjYWNoZSB2ZXJ0ZXggZGF0YSBm
b3Igc2luZ2xlLWNvbnRvdXIgcG9seWdvbnMgc28gdGhhdCB3ZSBjYW4KLSAqIHRyeSBhIHF1aWNr
LWFuZC1kaXJ0eSBkZWNvbXBvc2l0aW9uIGZpcnN0LgotICovCi0jZGVmaW5lIFRFU1NfTUFYX0NB
Q0hFCTEwMAotCi10eXBlZGVmIHN0cnVjdCBDYWNoZWRWZXJ0ZXggewotICBHTGRvdWJsZQljb29y
ZHNbM107Ci0gIHZvaWQJCSpkYXRhOwotfSBDYWNoZWRWZXJ0ZXg7Ci0KLXN0cnVjdCBHTFV0ZXNz
ZWxhdG9yIHsKLQotICAvKioqIHN0YXRlIG5lZWRlZCBmb3IgY29sbGVjdGluZyB0aGUgaW5wdXQg
ZGF0YSAqKiovCi0KLSAgZW51bSBUZXNzU3RhdGUgc3RhdGU7CQkvKiB3aGF0IGJlZ2luL2VuZCBj
YWxscyBoYXZlIHdlIHNlZW4/ICovCi0KLSAgR0xVaGFsZkVkZ2UJKmxhc3RFZGdlOwkvKiBsYXN0
RWRnZS0+T3JnIGlzIHRoZSBtb3N0IHJlY2VudCB2ZXJ0ZXggKi8KLSAgR0xVbWVzaAkqbWVzaDsJ
CS8qIHN0b3JlcyB0aGUgaW5wdXQgY29udG91cnMsIGFuZCBldmVudHVhbGx5Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXNzZWxsYXRpb24gaXRzZWxmICovCi0KLSAg
dm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFcnJvcikoIEdMZW51bSBlcnJudW0gKTsKLQotICAvKioq
IHN0YXRlIG5lZWRlZCBmb3IgcHJvamVjdGluZyBvbnRvIHRoZSBzd2VlcCBwbGFuZSAqKiovCi0K
LSAgR0xkb3VibGUJbm9ybWFsWzNdOwkvKiB1c2VyLXNwZWNpZmllZCBub3JtYWwgKGlmIHByb3Zp
ZGVkKSAqLwotICBHTGRvdWJsZQlzVW5pdFszXTsJLyogdW5pdCB2ZWN0b3IgaW4gcy1kaXJlY3Rp
b24gKGRlYnVnZ2luZykgKi8KLSAgR0xkb3VibGUJdFVuaXRbM107CS8qIHVuaXQgdmVjdG9yIGlu
IHQtZGlyZWN0aW9uIChkZWJ1Z2dpbmcpICovCi0KLSAgLyoqKiBzdGF0ZSBuZWVkZWQgZm9yIHRo
ZSBsaW5lIHN3ZWVwICoqKi8KLQotICBHTGRvdWJsZQlyZWxUb2xlcmFuY2U7CS8qIHRvbGVyYW5j
ZSBmb3IgbWVyZ2luZyBmZWF0dXJlcyAqLwotICBHTGVudW0Jd2luZGluZ1J1bGU7CS8qIHJ1bGUg
Zm9yIGRldGVybWluaW5nIHBvbHlnb24gaW50ZXJpb3IgKi8KLSAgR0xib29sZWFuCWZhdGFsRXJy
b3I7CS8qIGZhdGFsIGVycm9yOiBuZWVkZWQgY29tYmluZSBjYWxsYmFjayAqLwotCi0gIERpY3QJ
CSpkaWN0OwkJLyogZWRnZSBkaWN0aW9uYXJ5IGZvciBzd2VlcCBsaW5lICovCi0gIFByaW9yaXR5
UQkqcHE7CQkvKiBwcmlvcml0eSBxdWV1ZSBvZiB2ZXJ0ZXggZXZlbnRzICovCi0gIEdMVXZlcnRl
eAkqZXZlbnQ7CQkvKiBjdXJyZW50IHN3ZWVwIGV2ZW50IGJlaW5nIHByb2Nlc3NlZCAqLwotCi0g
IHZvaWQJCShHTEFQSUVOVFJZICpjYWxsQ29tYmluZSkoIEdMZG91YmxlIGNvb3Jkc1szXSwgdm9p
ZCAqZGF0YVs0XSwKLQkJCSAgICAgICAgR0xmbG9hdCB3ZWlnaHRbNF0sIHZvaWQgKipvdXREYXRh
ICk7Ci0KLSAgLyoqKiBzdGF0ZSBuZWVkZWQgZm9yIHJlbmRlcmluZyBjYWxsYmFja3MgKHNlZSBy
ZW5kZXIuYykgKioqLwotCi0gIEdMYm9vbGVhbglmbGFnQm91bmRhcnk7CS8qIG1hcmsgYm91bmRh
cnkgZWRnZXMgKHVzZSBFZGdlRmxhZykgKi8KLSAgR0xib29sZWFuCWJvdW5kYXJ5T25seTsJLyog
RXh0cmFjdCBjb250b3Vycywgbm90IHRyaWFuZ2xlcyAqLwotICBHTFVmYWNlCSpsb25lbHlUcmlM
aXN0OwotICAgIC8qIGxpc3Qgb2YgdHJpYW5nbGVzIHdoaWNoIGNvdWxkIG5vdCBiZSByZW5kZXJl
ZCBhcyBzdHJpcHMgb3IgZmFucyAqLwotCi0gIHZvaWQJCShHTEFQSUVOVFJZICpjYWxsQmVnaW4p
KCBHTGVudW0gdHlwZSApOwotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbEVkZ2VGbGFnKSggR0xi
b29sZWFuIGJvdW5kYXJ5RWRnZSApOwotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbFZlcnRleCko
IHZvaWQgKmRhdGEgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxFbmQpKCB2b2lkICk7Ci0g
IHZvaWQJCShHTEFQSUVOVFJZICpjYWxsTWVzaCkoIEdMVW1lc2ggKm1lc2ggKTsKLQotCi0gIC8q
Kiogc3RhdGUgbmVlZGVkIHRvIGNhY2hlIHNpbmdsZS1jb250b3VyIHBvbHlnb25zIGZvciByZW5k
ZXJDYWNoZSgpICovCi0KLSAgR0xib29sZWFuCWVtcHR5Q2FjaGU7CQkvKiBlbXB0eSBjYWNoZSBv
biBuZXh0IHZlcnRleCgpIGNhbGwgKi8KLSAgaW50CQljYWNoZUNvdW50OwkJLyogbnVtYmVyIG9m
IGNhY2hlZCB2ZXJ0aWNlcyAqLwotICBDYWNoZWRWZXJ0ZXgJY2FjaGVbVEVTU19NQVhfQ0FDSEVd
OwkvKiB0aGUgdmVydGV4IGRhdGEgKi8KLQotICAvKioqIHJlbmRlcmluZyBjYWxsYmFja3MgdGhh
dCBhbHNvIHBhc3MgcG9seWdvbiBkYXRhICAqKiovIAotICB2b2lkCQkoR0xBUElFTlRSWSAqY2Fs
bEJlZ2luRGF0YSkoIEdMZW51bSB0eXBlLCB2b2lkICpwb2x5Z29uRGF0YSApOwotICB2b2lkCQko
R0xBUElFTlRSWSAqY2FsbEVkZ2VGbGFnRGF0YSkoIEdMYm9vbGVhbiBib3VuZGFyeUVkZ2UsIAot
CQkJCSAgICAgdm9pZCAqcG9seWdvbkRhdGEgKTsKLSAgdm9pZAkJKEdMQVBJRU5UUlkgKmNhbGxW
ZXJ0ZXhEYXRhKSggdm9pZCAqZGF0YSwgdm9pZCAqcG9seWdvbkRhdGEgKTsKLSAgdm9pZAkJKEdM
QVBJRU5UUlkgKmNhbGxFbmREYXRhKSggdm9pZCAqcG9seWdvbkRhdGEgKTsKLSAgdm9pZAkJKEdM
QVBJRU5UUlkgKmNhbGxFcnJvckRhdGEpKCBHTGVudW0gZXJybnVtLCB2b2lkICpwb2x5Z29uRGF0
YSApOwotICB2b2lkCQkoR0xBUElFTlRSWSAqY2FsbENvbWJpbmVEYXRhKSggR0xkb3VibGUgY29v
cmRzWzNdLCB2b2lkICpkYXRhWzRdLAotCQkJCSAgICBHTGZsb2F0IHdlaWdodFs0XSwgdm9pZCAq
Km91dERhdGEsCi0JCQkJICAgIHZvaWQgKnBvbHlnb25EYXRhICk7Ci0KLSAgam1wX2J1ZiBlbnY7
CQkJLyogcGxhY2UgdG8ganVtcCB0byB3aGVuIG1lbUFsbG9jcyBmYWlsICovCi0KLSAgdm9pZCAq
cG9seWdvbkRhdGE7CQkvKiBjbGllbnQgZGF0YSBmb3IgY3VycmVudCBwb2x5Z29uICovCi19Owot
Ci12b2lkIEdMQVBJRU5UUlkgX19nbF9ub0JlZ2luRGF0YSggR0xlbnVtIHR5cGUsIHZvaWQgKnBv
bHlnb25EYXRhICk7Ci12b2lkIEdMQVBJRU5UUlkgX19nbF9ub0VkZ2VGbGFnRGF0YSggR0xib29s
ZWFuIGJvdW5kYXJ5RWRnZSwgdm9pZCAqcG9seWdvbkRhdGEgKTsKLXZvaWQgR0xBUElFTlRSWSBf
X2dsX25vVmVydGV4RGF0YSggdm9pZCAqZGF0YSwgdm9pZCAqcG9seWdvbkRhdGEgKTsKLXZvaWQg
R0xBUElFTlRSWSBfX2dsX25vRW5kRGF0YSggdm9pZCAqcG9seWdvbkRhdGEgKTsKLXZvaWQgR0xB
UElFTlRSWSBfX2dsX25vRXJyb3JEYXRhKCBHTGVudW0gZXJybnVtLCB2b2lkICpwb2x5Z29uRGF0
YSApOwotdm9pZCBHTEFQSUVOVFJZIF9fZ2xfbm9Db21iaW5lRGF0YSggR0xkb3VibGUgY29vcmRz
WzNdLCB2b2lkICpkYXRhWzRdLAotCQkJIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0RGF0
YSwKLQkJCSB2b2lkICpwb2x5Z29uRGF0YSApOwotCi0jZGVmaW5lIENBTExfQkVHSU5fT1JfQkVH
SU5fREFUQShhKSBcCi0gICBpZiAodGVzcy0+Y2FsbEJlZ2luRGF0YSAhPSAmX19nbF9ub0JlZ2lu
RGF0YSkgXAotICAgICAgKCp0ZXNzLT5jYWxsQmVnaW5EYXRhKSgoYSksdGVzcy0+cG9seWdvbkRh
dGEpOyBcCi0gICBlbHNlICgqdGVzcy0+Y2FsbEJlZ2luKSgoYSkpOwotCi0jZGVmaW5lIENBTExf
VkVSVEVYX09SX1ZFUlRFWF9EQVRBKGEpIFwKLSAgIGlmICh0ZXNzLT5jYWxsVmVydGV4RGF0YSAh
PSAmX19nbF9ub1ZlcnRleERhdGEpIFwKLSAgICAgICgqdGVzcy0+Y2FsbFZlcnRleERhdGEpKChh
KSx0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKLSAgIGVsc2UgKCp0ZXNzLT5jYWxsVmVydGV4KSgoYSkp
OwotCi0jZGVmaW5lIENBTExfRURHRV9GTEFHX09SX0VER0VfRkxBR19EQVRBKGEpIFwKLSAgIGlm
ICh0ZXNzLT5jYWxsRWRnZUZsYWdEYXRhICE9ICZfX2dsX25vRWRnZUZsYWdEYXRhKSBcCi0gICAg
ICAoKnRlc3MtPmNhbGxFZGdlRmxhZ0RhdGEpKChhKSx0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKLSAg
IGVsc2UgKCp0ZXNzLT5jYWxsRWRnZUZsYWcpKChhKSk7Ci0KLSNkZWZpbmUgQ0FMTF9FTkRfT1Jf
RU5EX0RBVEEoKSBcCi0gICBpZiAodGVzcy0+Y2FsbEVuZERhdGEgIT0gJl9fZ2xfbm9FbmREYXRh
KSBcCi0gICAgICAoKnRlc3MtPmNhbGxFbmREYXRhKSh0ZXNzLT5wb2x5Z29uRGF0YSk7IFwKLSAg
IGVsc2UgKCp0ZXNzLT5jYWxsRW5kKSgpOwotCi0jZGVmaW5lIENBTExfQ09NQklORV9PUl9DT01C
SU5FX0RBVEEoYSxiLGMsZCkgXAotICAgaWYgKHRlc3MtPmNhbGxDb21iaW5lRGF0YSAhPSAmX19n
bF9ub0NvbWJpbmVEYXRhKSBcCi0gICAgICAoKnRlc3MtPmNhbGxDb21iaW5lRGF0YSkoKGEpLChi
KSwoYyksKGQpLHRlc3MtPnBvbHlnb25EYXRhKTsgXAotICAgZWxzZSAoKnRlc3MtPmNhbGxDb21i
aW5lKSgoYSksKGIpLChjKSwoZCkpOwotCi0jZGVmaW5lIENBTExfRVJST1JfT1JfRVJST1JfREFU
QShhKSBcCi0gICBpZiAodGVzcy0+Y2FsbEVycm9yRGF0YSAhPSAmX19nbF9ub0Vycm9yRGF0YSkg
XAotICAgICAgKCp0ZXNzLT5jYWxsRXJyb3JEYXRhKSgoYSksdGVzcy0+cG9seWdvbkRhdGEpOyBc
Ci0gICBlbHNlICgqdGVzcy0+Y2FsbEVycm9yKSgoYSkpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyZTJjYzc5MDFmZWZiZmY5YzJhYmQ1NWQyZTUxMzU3MjUxMWZjOTdmLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9s
aWJ0ZXNzL3Rlc3Ntb25vLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotLyoKLSoq
IExpY2Vuc2UgQXBwbGljYWJpbGl0eS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcG9ydGlvbnMgb2Yg
dGhpcyBmaWxlIGFyZQotKiogbWFkZSBzdWJqZWN0IHRvIGFuIGFsdGVybmF0aXZlIGxpY2Vuc2Ug
YXMgcGVybWl0dGVkIGluIHRoZSBTR0kgRnJlZQotKiogU29mdHdhcmUgTGljZW5zZSBCLCBWZXJz
aW9uIDEuMSAodGhlICJMaWNlbnNlIiksIHRoZSBjb250ZW50cyBvZiB0aGlzCi0qKiBmaWxlIGFy
ZSBzdWJqZWN0IG9ubHkgdG8gdGhlIHByb3Zpc2lvbnMgb2YgdGhlIExpY2Vuc2UuIFlvdSBtYXkg
bm90IHVzZQotKiogdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
c2UuIFlvdSBtYXkgb2J0YWluIGEgY29weQotKiogb2YgdGhlIExpY2Vuc2UgYXQgU2lsaWNvbiBH
cmFwaGljcywgSW5jLiwgYXR0bjogTGVnYWwgU2VydmljZXMsIDE2MDAKLSoqIEFtcGhpdGhlYXRy
ZSBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0My0xMzUxLCBvciBhdDoKLSoqIAotKiog
aHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCCi0qKiAKLSoqIE5vdGUgdGhhdCwgYXMg
cHJvdmlkZWQgaW4gdGhlIExpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBvbiBh
bgotKiogIkFTIElTIiBiYXNpcywgd2l0aCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5U
SUVTIEFORCBDT05ESVRJT05TCi0qKiBESVNDTEFJTUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElN
SVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBTkQKLSoqIENPTkRJVElPTlMgT0YgTUVS
Q0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQQotKiogUEFS
VElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KLSoqIAotKiogT3JpZ2luYWwg
Q29kZS4gVGhlIE9yaWdpbmFsIENvZGUgaXM6IE9wZW5HTCBTYW1wbGUgSW1wbGVtZW50YXRpb24s
Ci0qKiBWZXJzaW9uIDEuMi4xLCByZWxlYXNlZCBKYW51YXJ5IDI2LCAyMDAwLCBkZXZlbG9wZWQg
YnkgU2lsaWNvbiBHcmFwaGljcywKLSoqIEluYy4gVGhlIE9yaWdpbmFsIENvZGUgaXMgQ29weXJp
Z2h0IChjKSAxOTkxLTIwMDAgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotKiogQ29weXJpZ2h0IGlu
IGFueSBwb3J0aW9ucyBjcmVhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgaXMgYXMgaW5kaWNhdGVkCi0q
KiBlbHNld2hlcmUgaGVyZWluLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotKiogCi0qKiBBZGRpdGlv
bmFsIE5vdGljZSBQcm92aXNpb25zOiBUaGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJm
YWNlcwotKiogZXN0YWJsaXNoZWQgYnkgU0dJIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIE9yaWdp
bmFsIENvZGUgYXJlIFRoZQotKiogT3BlbkdMKFIpIEdyYXBoaWNzIFN5c3RlbTogQSBTcGVjaWZp
Y2F0aW9uIChWZXJzaW9uIDEuMi4xKSwgcmVsZWFzZWQKLSoqIEFwcmlsIDEsIDE5OTk7IFRoZSBP
cGVuR0woUikgR3JhcGhpY3MgU3lzdGVtIFV0aWxpdHkgTGlicmFyeSAoVmVyc2lvbgotKiogMS4z
KSwgcmVsZWFzZWQgTm92ZW1iZXIgNCwgMTk5ODsgYW5kIE9wZW5HTChSKSBHcmFwaGljcyB3aXRo
IHRoZSBYCi0qKiBXaW5kb3cgU3lzdGVtKFIpIChWZXJzaW9uIDEuMyksIHJlbGVhc2VkIE9jdG9i
ZXIgMTksIDE5OTguIFRoaXMgc29mdHdhcmUKLSoqIHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBPcGVu
R0woUikgdmVyc2lvbiAxLjIuMSBTYW1wbGUgSW1wbGVtZW50YXRpb24KLSoqIHB1Ymxpc2hlZCBi
eSBTR0ksIGJ1dCBoYXMgbm90IGJlZW4gaW5kZXBlbmRlbnRseSB2ZXJpZmllZCBhcyBiZWluZwot
KiogY29tcGxpYW50IHdpdGggdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNwZWNpZmljYXRp
b24uCi0qKgotKi8KLS8qCi0qKiBBdXRob3I6IEVyaWMgVmVhY2gsIEp1bHkgMTk5NC4KLSoqCi0q
KiAkRGF0ZSQgJFJldmlzaW9uJAotKiogJEhlYWRlcjogLy9kZXBvdC9tYWluL2dmeC9saWIvZ2x1
L2xpYnRlc3MvdGVzc21vbm8uYyM1ICQKLSovCi0KLSNpbmNsdWRlICJnbHVvcy5oIgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImdlb20uaCIKLSNpbmNsdWRlICJtZXNoLmgiCi0jaW5j
bHVkZSAidGVzc21vbm8uaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotI2RlZmluZSBBZGRXaW5k
aW5nKGVEc3QsZVNyYykJKGVEc3QtPndpbmRpbmcgKz0gZVNyYy0+d2luZGluZywgXAotCQkJCSBl
RHN0LT5TeW0tPndpbmRpbmcgKz0gZVNyYy0+U3ltLT53aW5kaW5nKQotCi0vKiBfX2dsX21lc2hU
ZXNzZWxsYXRlTW9ub1JlZ2lvbiggZmFjZSApIHRlc3NlbGxhdGVzIGEgbW9ub3RvbmUgcmVnaW9u
Ci0gKiAod2hhdCBlbHNlIHdvdWxkIGl0IGRvPz8pICBUaGUgcmVnaW9uIG11c3QgY29uc2lzdCBv
ZiBhIHNpbmdsZQotICogbG9vcCBvZiBoYWxmLWVkZ2VzIChzZWUgbWVzaC5oKSBvcmllbnRlZCBD
Q1cuICAiTW9ub3RvbmUiIGluIHRoaXMKLSAqIGNhc2UgbWVhbnMgdGhhdCBhbnkgdmVydGljYWwg
bGluZSBpbnRlcnNlY3RzIHRoZSBpbnRlcmlvciBvZiB0aGUKLSAqIHJlZ2lvbiBpbiBhIHNpbmds
ZSBpbnRlcnZhbC4gIAotICoKLSAqIFRlc3NlbGxhdGlvbiBjb25zaXN0cyBvZiBhZGRpbmcgaW50
ZXJpb3IgZWRnZXMgKGFjdHVhbGx5IHBhaXJzIG9mCi0gKiBoYWxmLWVkZ2VzKSwgdG8gc3BsaXQg
dGhlIHJlZ2lvbiBpbnRvIG5vbi1vdmVybGFwcGluZyB0cmlhbmdsZXMuCi0gKgotICogVGhlIGJh
c2ljIGlkZWEgaXMgZXhwbGFpbmVkIGluIFByZXBhcmF0YSBhbmQgU2hhbW9zICh3aGljaCBJIGRv
bicndAotICogaGF2ZSBoYW5keSByaWdodCBub3cpLCBhbHRob3VnaCB0aGVpciBpbXBsZW1lbnRh
dGlvbiBpcyBtb3JlCi0gKiBjb21wbGljYXRlZCB0aGFuIHRoaXMgb25lLiAgVGhlIGFyZSB0d28g
ZWRnZSBjaGFpbnMsIGFuIHVwcGVyIGNoYWluCi0gKiBhbmQgYSBsb3dlciBjaGFpbi4gIFdlIHBy
b2Nlc3MgYWxsIHZlcnRpY2VzIGZyb20gYm90aCBjaGFpbnMgaW4gb3JkZXIsCi0gKiBmcm9tIHJp
Z2h0IHRvIGxlZnQuCi0gKgotICogVGhlIGFsZ29yaXRobSBlbnN1cmVzIHRoYXQgdGhlIGZvbGxv
d2luZyBpbnZhcmlhbnQgaG9sZHMgYWZ0ZXIgZWFjaAotICogdmVydGV4IGlzIHByb2Nlc3NlZDog
dGhlIHVudGVzc2VsbGF0ZWQgcmVnaW9uIGNvbnNpc3RzIG9mIHR3bwotICogY2hhaW5zLCB3aGVy
ZSBvbmUgY2hhaW4gKHNheSB0aGUgdXBwZXIpIGlzIGEgc2luZ2xlIGVkZ2UsIGFuZAotICogdGhl
IG90aGVyIGNoYWluIGlzIGNvbmNhdmUuICBUaGUgbGVmdCB2ZXJ0ZXggb2YgdGhlIHNpbmdsZSBl
ZGdlCi0gKiBpcyBhbHdheXMgdG8gdGhlIGxlZnQgb2YgYWxsIHZlcnRpY2VzIGluIHRoZSBjb25j
YXZlIGNoYWluLgotICoKLSAqIEVhY2ggc3RlcCBjb25zaXN0cyBvZiBhZGRpbmcgdGhlIHJpZ2h0
bW9zdCB1bnByb2Nlc3NlZCB2ZXJ0ZXggdG8gb25lCi0gKiBvZiB0aGUgdHdvIGNoYWlucywgYW5k
IGZvcm1pbmcgYSBmYW4gb2YgdHJpYW5nbGVzIGZyb20gdGhlIHJpZ2h0bW9zdAotICogb2YgdHdv
IGNoYWluIGVuZHBvaW50cy4gIERldGVybWluaW5nIHdoZXRoZXIgd2UgY2FuIGFkZCBlYWNoIHRy
aWFuZ2xlCi0gKiB0byB0aGUgZmFuIGlzIGEgc2ltcGxlIG9yaWVudGF0aW9uIHRlc3QuICBCeSBt
YWtpbmcgdGhlIGZhbiBhcyBsYXJnZQotICogYXMgcG9zc2libGUsIHdlIHJlc3RvcmUgdGhlIGlu
dmFyaWFudCAoY2hlY2sgaXQgeW91cnNlbGYpLgotICovCi1pbnQgX19nbF9tZXNoVGVzc2VsbGF0
ZU1vbm9SZWdpb24oIEdMVWZhY2UgKmZhY2UgKQotewotICBHTFVoYWxmRWRnZSAqdXAsICpsbzsK
LQotICAvKiBBbGwgZWRnZXMgYXJlIG9yaWVudGVkIENDVyBhcm91bmQgdGhlIGJvdW5kYXJ5IG9m
IHRoZSByZWdpb24uCi0gICAqIEZpcnN0LCBmaW5kIHRoZSBoYWxmLWVkZ2Ugd2hvc2Ugb3JpZ2lu
IHZlcnRleCBpcyByaWdodG1vc3QuCi0gICAqIFNpbmNlIHRoZSBzd2VlcCBnb2VzIGZyb20gbGVm
dCB0byByaWdodCwgZmFjZS0+YW5FZGdlIHNob3VsZAotICAgKiBiZSBjbG9zZSB0byB0aGUgZWRn
ZSB3ZSB3YW50LgotICAgKi8KLSAgdXAgPSBmYWNlLT5hbkVkZ2U7Ci0gIGFzc2VydCggdXAtPkxu
ZXh0ICE9IHVwICYmIHVwLT5MbmV4dC0+TG5leHQgIT0gdXAgKTsKLQotICBmb3IoIDsgVmVydExl
cSggdXAtPkRzdCwgdXAtPk9yZyApOyB1cCA9IHVwLT5McHJldiApCi0gICAgOwotICBmb3IoIDsg
VmVydExlcSggdXAtPk9yZywgdXAtPkRzdCApOyB1cCA9IHVwLT5MbmV4dCApCi0gICAgOwotICBs
byA9IHVwLT5McHJldjsKLQotICB3aGlsZSggdXAtPkxuZXh0ICE9IGxvICkgewotICAgIGlmKCBW
ZXJ0TGVxKCB1cC0+RHN0LCBsby0+T3JnICkpIHsKLSAgICAgIC8qIHVwLT5Ec3QgaXMgb24gdGhl
IGxlZnQuICBJdCBpcyBzYWZlIHRvIGZvcm0gdHJpYW5nbGVzIGZyb20gbG8tPk9yZy4KLSAgICAg
ICAqIFRoZSBFZGdlR29lc0xlZnQgdGVzdCBndWFyYW50ZWVzIHByb2dyZXNzIGV2ZW4gd2hlbiBz
b21lIHRyaWFuZ2xlcwotICAgICAgICogYXJlIENXLCBnaXZlbiB0aGF0IHRoZSB1cHBlciBhbmQg
bG93ZXIgY2hhaW5zIGFyZSB0cnVseSBtb25vdG9uZS4KLSAgICAgICAqLwotICAgICAgd2hpbGUo
IGxvLT5MbmV4dCAhPSB1cCAmJiAoRWRnZUdvZXNMZWZ0KCBsby0+TG5leHQgKQotCSAgICAgfHwg
RWRnZVNpZ24oIGxvLT5PcmcsIGxvLT5Ec3QsIGxvLT5MbmV4dC0+RHN0ICkgPD0gMCApKSB7Ci0J
R0xVaGFsZkVkZ2UgKnRlbXBIYWxmRWRnZT0gX19nbF9tZXNoQ29ubmVjdCggbG8tPkxuZXh0LCBs
byApOwotCWlmICh0ZW1wSGFsZkVkZ2UgPT0gTlVMTCkgcmV0dXJuIDA7Ci0JbG8gPSB0ZW1wSGFs
ZkVkZ2UtPlN5bTsKLSAgICAgIH0KLSAgICAgIGxvID0gbG8tPkxwcmV2OwotICAgIH0gZWxzZSB7
Ci0gICAgICAvKiBsby0+T3JnIGlzIG9uIHRoZSBsZWZ0LiAgV2UgY2FuIG1ha2UgQ0NXIHRyaWFu
Z2xlcyBmcm9tIHVwLT5Ec3QuICovCi0gICAgICB3aGlsZSggbG8tPkxuZXh0ICE9IHVwICYmIChF
ZGdlR29lc1JpZ2h0KCB1cC0+THByZXYgKQotCSAgICAgfHwgRWRnZVNpZ24oIHVwLT5Ec3QsIHVw
LT5PcmcsIHVwLT5McHJldi0+T3JnICkgPj0gMCApKSB7Ci0JR0xVaGFsZkVkZ2UgKnRlbXBIYWxm
RWRnZT0gX19nbF9tZXNoQ29ubmVjdCggdXAsIHVwLT5McHJldiApOwotCWlmICh0ZW1wSGFsZkVk
Z2UgPT0gTlVMTCkgcmV0dXJuIDA7Ci0JdXAgPSB0ZW1wSGFsZkVkZ2UtPlN5bTsKLSAgICAgIH0K
LSAgICAgIHVwID0gdXAtPkxuZXh0OwotICAgIH0KLSAgfQotCi0gIC8qIE5vdyBsby0+T3JnID09
IHVwLT5Ec3QgPT0gdGhlIGxlZnRtb3N0IHZlcnRleC4gIFRoZSByZW1haW5pbmcgcmVnaW9uCi0g
ICAqIGNhbiBiZSB0ZXNzZWxsYXRlZCBpbiBhIGZhbiBmcm9tIHRoaXMgbGVmdG1vc3QgdmVydGV4
LgotICAgKi8KLSAgYXNzZXJ0KCBsby0+TG5leHQgIT0gdXAgKTsKLSAgd2hpbGUoIGxvLT5MbmV4
dC0+TG5leHQgIT0gdXAgKSB7Ci0gICAgR0xVaGFsZkVkZ2UgKnRlbXBIYWxmRWRnZT0gX19nbF9t
ZXNoQ29ubmVjdCggbG8tPkxuZXh0LCBsbyApOwotICAgIGlmICh0ZW1wSGFsZkVkZ2UgPT0gTlVM
TCkgcmV0dXJuIDA7Ci0gICAgbG8gPSB0ZW1wSGFsZkVkZ2UtPlN5bTsKLSAgfQotCi0gIHJldHVy
biAxOwotfQotCi0KLS8qIF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvciggbWVzaCApIHRlc3Nl
bGxhdGVzIGVhY2ggcmVnaW9uIG9mCi0gKiB0aGUgbWVzaCB3aGljaCBpcyBtYXJrZWQgImluc2lk
ZSIgdGhlIHBvbHlnb24uICBFYWNoIHN1Y2ggcmVnaW9uCi0gKiBtdXN0IGJlIG1vbm90b25lLgot
ICovCi1pbnQgX19nbF9tZXNoVGVzc2VsbGF0ZUludGVyaW9yKCBHTFVtZXNoICptZXNoICkKLXsK
LSAgR0xVZmFjZSAqZiwgKm5leHQ7Ci0KLSAgLypMSU5URUQqLwotICBmb3IoIGYgPSBtZXNoLT5m
SGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVhZDsgZiA9IG5leHQgKSB7Ci0gICAgLyogTWFrZSBz
dXJlIHdlIGRvbicndCB0cnkgdG8gdGVzc2VsbGF0ZSB0aGUgbmV3IHRyaWFuZ2xlcy4gKi8KLSAg
ICBuZXh0ID0gZi0+bmV4dDsKLSAgICBpZiggZi0+aW5zaWRlICkgewotICAgICAgaWYgKCAhX19n
bF9tZXNoVGVzc2VsbGF0ZU1vbm9SZWdpb24oIGYgKSApIHJldHVybiAwOwotICAgIH0KLSAgfQot
Ci0gIHJldHVybiAxOwotfQotCi0KLS8qIF9fZ2xfbWVzaERpc2NhcmRFeHRlcmlvciggbWVzaCAp
IHphcHMgKGllLiBzZXRzIHRvIE5VTEwpIGFsbCBmYWNlcwotICogd2hpY2ggYXJlIG5vdCBtYXJr
ZWQgImluc2lkZSIgdGhlIHBvbHlnb24uICBTaW5jZSBmdXJ0aGVyIG1lc2ggb3BlcmF0aW9ucwot
ICogb24gTlVMTCBmYWNlcyBhcmUgbm90IGFsbG93ZWQsIHRoZSBtYWluIHB1cnBvc2UgaXMgdG8g
Y2xlYW4gdXAgdGhlCi0gKiBtZXNoIHNvIHRoYXQgZXh0ZXJpb3IgbG9vcHMgYXJlIG5vdCByZXBy
ZXNlbnRlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQgX19nbF9tZXNoRGlzY2Fy
ZEV4dGVyaW9yKCBHTFVtZXNoICptZXNoICkKLXsKLSAgR0xVZmFjZSAqZiwgKm5leHQ7Ci0KLSAg
LypMSU5URUQqLwotICBmb3IoIGYgPSBtZXNoLT5mSGVhZC5uZXh0OyBmICE9ICZtZXNoLT5mSGVh
ZDsgZiA9IG5leHQgKSB7Ci0gICAgLyogU2luY2UgZiB3aWxsIGJlIGRlc3Ryb3llZCwgc2F2ZSBp
dHMgbmV4dCBwb2ludGVyLiAqLwotICAgIG5leHQgPSBmLT5uZXh0OwotICAgIGlmKCAhIGYtPmlu
c2lkZSApIHsKLSAgICAgIF9fZ2xfbWVzaFphcEZhY2UoIGYgKTsKLSAgICB9Ci0gIH0KLX0KLQot
I2RlZmluZSBNQVJLRURfRk9SX0RFTEVUSU9OCTB4N2ZmZmZmZmYKLQotLyogX19nbF9tZXNoU2V0
V2luZGluZ051bWJlciggbWVzaCwgdmFsdWUsIGtlZXBPbmx5Qm91bmRhcnkgKSByZXNldHMgdGhl
Ci0gKiB3aW5kaW5nIG51bWJlcnMgb24gYWxsIGVkZ2VzIHNvIHRoYXQgcmVnaW9ucyBtYXJrZWQg
Imluc2lkZSIgdGhlCi0gKiBwb2x5Z29uIGhhdmUgYSB3aW5kaW5nIG51bWJlciBvZiAidmFsdWUi
LCBhbmQgcmVnaW9ucyBvdXRzaWRlCi0gKiBoYXZlIGEgd2luZGluZyBudW1iZXIgb2YgMC4KLSAq
Ci0gKiBJZiBrZWVwT25seUJvdW5kYXJ5IGlzIFRSVUUsIGl0IGFsc28gZGVsZXRlcyBhbGwgZWRn
ZXMgd2hpY2ggZG8gbm90Ci0gKiBzZXBhcmF0ZSBhbiBpbnRlcmlvciByZWdpb24gZnJvbSBhbiBl
eHRlcmlvciBvbmUuCi0gKi8KLWludCBfX2dsX21lc2hTZXRXaW5kaW5nTnVtYmVyKCBHTFVtZXNo
ICptZXNoLCBpbnQgdmFsdWUsCi0JCQkgICAgICAgIEdMYm9vbGVhbiBrZWVwT25seUJvdW5kYXJ5
ICkKLXsKLSAgR0xVaGFsZkVkZ2UgKmUsICplTmV4dDsKLQotICBmb3IoIGUgPSBtZXNoLT5lSGVh
ZC5uZXh0OyBlICE9ICZtZXNoLT5lSGVhZDsgZSA9IGVOZXh0ICkgewotICAgIGVOZXh0ID0gZS0+
bmV4dDsKLSAgICBpZiggZS0+UmZhY2UtPmluc2lkZSAhPSBlLT5MZmFjZS0+aW5zaWRlICkgewot
Ci0gICAgICAvKiBUaGlzIGlzIGEgYm91bmRhcnkgZWRnZSAob25lIHNpZGUgaXMgaW50ZXJpb3Is
IG9uZSBpcyBleHRlcmlvcikuICovCi0gICAgICBlLT53aW5kaW5nID0gKGUtPkxmYWNlLT5pbnNp
ZGUpID8gdmFsdWUgOiAtdmFsdWU7Ci0gICAgfSBlbHNlIHsKLQotICAgICAgLyogQm90aCByZWdp
b25zIGFyZSBpbnRlcmlvciwgb3IgYm90aCBhcmUgZXh0ZXJpb3IuICovCi0gICAgICBpZiggISBr
ZWVwT25seUJvdW5kYXJ5ICkgewotCWUtPndpbmRpbmcgPSAwOwotICAgICAgfSBlbHNlIHsKLQlp
ZiAoICFfX2dsX21lc2hEZWxldGUoIGUgKSApIHJldHVybiAwOwotICAgICAgfQotICAgIH0KLSAg
fQotICByZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0
ZXNzL3Rlc3Ntb25vLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9nbHUvbGlidGVzcy90ZXNzbW9uby5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTcxZWU4ZWRlMjNkMzI1Y2ZjOTg2NWVm
ZTEwODE4ZjNjZTViZjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotKiogTGljZW5zZSBBcHBsaWNhYmlsaXR5LiBFeGNl
cHQgdG8gdGhlIGV4dGVudCBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlCi0qKiBtYWRlIHN1Ympl
Y3QgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBhcyBwZXJtaXR0ZWQgaW4gdGhlIFNHSSBGcmVl
Ci0qKiBTb2Z0d2FyZSBMaWNlbnNlIEIsIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKSwgdGhl
IGNvbnRlbnRzIG9mIHRoaXMKLSoqIGZpbGUgYXJlIHN1YmplY3Qgb25seSB0byB0aGUgcHJvdmlz
aW9ucyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3QgdXNlCi0qKiB0aGlzIGZpbGUgZXhjZXB0
IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5Ci0q
KiBvZiB0aGUgTGljZW5zZSBhdCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLCBhdHRuOiBMZWdhbCBT
ZXJ2aWNlcywgMTYwMAotKiogQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENB
IDk0MDQzLTEzNTEsIG9yIGF0OgotKiogCi0qKiBodHRwOi8vb3NzLnNnaS5jb20vcHJvamVjdHMv
RnJlZUIKLSoqIAotKiogTm90ZSB0aGF0LCBhcyBwcm92aWRlZCBpbiB0aGUgTGljZW5zZSwgdGhl
IFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0qKiAiQVMgSVMiIGJhc2lzLCB3aXRoIEFM
TCBFWFBSRVNTIEFORCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMKLSoqIERJU0NM
QUlNRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5U
SUVTIEFORAotKiogQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWSBR
VUFMSVRZLCBGSVRORVNTIEZPUiBBCi0qKiBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5G
UklOR0VNRU5ULgotKiogCi0qKiBPcmlnaW5hbCBDb2RlLiBUaGUgT3JpZ2luYWwgQ29kZSBpczog
T3BlbkdMIFNhbXBsZSBJbXBsZW1lbnRhdGlvbiwKLSoqIFZlcnNpb24gMS4yLjEsIHJlbGVhc2Vk
IEphbnVhcnkgMjYsIDIwMDAsIGRldmVsb3BlZCBieSBTaWxpY29uIEdyYXBoaWNzLAotKiogSW5j
LiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBDb3B5cmlnaHQgKGMpIDE5OTEtMjAwMCBTaWxpY29uIEdy
YXBoaWNzLCBJbmMuCi0qKiBDb3B5cmlnaHQgaW4gYW55IHBvcnRpb25zIGNyZWF0ZWQgYnkgdGhp
cmQgcGFydGllcyBpcyBhcyBpbmRpY2F0ZWQKLSoqIGVsc2V3aGVyZSBoZXJlaW4uIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0qKiAKLSoqIEFkZGl0aW9uYWwgTm90aWNlIFByb3Zpc2lvbnM6IFRoZSBh
cHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzCi0qKiBlc3RhYmxpc2hlZCBieSBTR0kg
aW4gY29uanVuY3Rpb24gd2l0aCB0aGUgT3JpZ2luYWwgQ29kZSBhcmUgVGhlCi0qKiBPcGVuR0wo
UikgR3JhcGhpY3MgU3lzdGVtOiBBIFNwZWNpZmljYXRpb24gKFZlcnNpb24gMS4yLjEpLCByZWxl
YXNlZAotKiogQXByaWwgMSwgMTk5OTsgVGhlIE9wZW5HTChSKSBHcmFwaGljcyBTeXN0ZW0gVXRp
bGl0eSBMaWJyYXJ5IChWZXJzaW9uCi0qKiAxLjMpLCByZWxlYXNlZCBOb3ZlbWJlciA0LCAxOTk4
OyBhbmQgT3BlbkdMKFIpIEdyYXBoaWNzIHdpdGggdGhlIFgKLSoqIFdpbmRvdyBTeXN0ZW0oUikg
KFZlcnNpb24gMS4zKSwgcmVsZWFzZWQgT2N0b2JlciAxOSwgMTk5OC4gVGhpcyBzb2Z0d2FyZQot
Kiogd2FzIGNyZWF0ZWQgdXNpbmcgdGhlIE9wZW5HTChSKSB2ZXJzaW9uIDEuMi4xIFNhbXBsZSBJ
bXBsZW1lbnRhdGlvbgotKiogcHVibGlzaGVkIGJ5IFNHSSwgYnV0IGhhcyBub3QgYmVlbiBpbmRl
cGVuZGVudGx5IHZlcmlmaWVkIGFzIGJlaW5nCi0qKiBjb21wbGlhbnQgd2l0aCB0aGUgT3BlbkdM
KFIpIHZlcnNpb24gMS4yLjEgU3BlY2lmaWNhdGlvbi4KLSoqCi0qLwotLyoKLSoqIEF1dGhvcjog
RXJpYyBWZWFjaCwgSnVseSAxOTk0LgotKioKLSoqICREYXRlJCAkUmV2aXNpb24kCi0qKiAkSGVh
ZGVyOiAvL2RlcG90L21haW4vZ2Z4L2xpYi9nbHUvbGlidGVzcy90ZXNzbW9uby5oIzUgJAotKi8K
LQotI2lmbmRlZiBfX3Rlc3Ntb25vX2hfCi0jZGVmaW5lIF9fdGVzc21vbm9faF8KLQotLyogX19n
bF9tZXNoVGVzc2VsbGF0ZU1vbm9SZWdpb24oIGZhY2UgKSB0ZXNzZWxsYXRlcyBhIG1vbm90b25l
IHJlZ2lvbgotICogKHdoYXQgZWxzZSB3b3VsZCBpdCBkbz8/KSAgVGhlIHJlZ2lvbiBtdXN0IGNv
bnNpc3Qgb2YgYSBzaW5nbGUKLSAqIGxvb3Agb2YgaGFsZi1lZGdlcyAoc2VlIG1lc2guaCkgb3Jp
ZW50ZWQgQ0NXLiAgIk1vbm90b25lIiBpbiB0aGlzCi0gKiBjYXNlIG1lYW5zIHRoYXQgYW55IHZl
cnRpY2FsIGxpbmUgaW50ZXJzZWN0cyB0aGUgaW50ZXJpb3Igb2YgdGhlCi0gKiByZWdpb24gaW4g
YSBzaW5nbGUgaW50ZXJ2YWwuICAKLSAqCi0gKiBUZXNzZWxsYXRpb24gY29uc2lzdHMgb2YgYWRk
aW5nIGludGVyaW9yIGVkZ2VzIChhY3R1YWxseSBwYWlycyBvZgotICogaGFsZi1lZGdlcyksIHRv
IHNwbGl0IHRoZSByZWdpb24gaW50byBub24tb3ZlcmxhcHBpbmcgdHJpYW5nbGVzLgotICoKLSAq
IF9fZ2xfbWVzaFRlc3NlbGxhdGVJbnRlcmlvciggbWVzaCApIHRlc3NlbGxhdGVzIGVhY2ggcmVn
aW9uIG9mCi0gKiB0aGUgbWVzaCB3aGljaCBpcyBtYXJrZWQgImluc2lkZSIgdGhlIHBvbHlnb24u
ICBFYWNoIHN1Y2ggcmVnaW9uCi0gKiBtdXN0IGJlIG1vbm90b25lLgotICoKLSAqIF9fZ2xfbWVz
aERpc2NhcmRFeHRlcmlvciggbWVzaCApIHphcHMgKGllLiBzZXRzIHRvIE5VTEwpIGFsbCBmYWNl
cwotICogd2hpY2ggYXJlIG5vdCBtYXJrZWQgImluc2lkZSIgdGhlIHBvbHlnb24uICBTaW5jZSBm
dXJ0aGVyIG1lc2ggb3BlcmF0aW9ucwotICogb24gTlVMTCBmYWNlcyBhcmUgbm90IGFsbG93ZWQs
IHRoZSBtYWluIHB1cnBvc2UgaXMgdG8gY2xlYW4gdXAgdGhlCi0gKiBtZXNoIHNvIHRoYXQgZXh0
ZXJpb3IgbG9vcHMgYXJlIG5vdCByZXByZXNlbnRlZCBpbiB0aGUgZGF0YSBzdHJ1Y3R1cmUuCi0g
KgotICogX19nbF9tZXNoU2V0V2luZGluZ051bWJlciggbWVzaCwgdmFsdWUsIGtlZXBPbmx5Qm91
bmRhcnkgKSByZXNldHMgdGhlCi0gKiB3aW5kaW5nIG51bWJlcnMgb24gYWxsIGVkZ2VzIHNvIHRo
YXQgcmVnaW9ucyBtYXJrZWQgImluc2lkZSIgdGhlCi0gKiBwb2x5Z29uIGhhdmUgYSB3aW5kaW5n
IG51bWJlciBvZiAidmFsdWUiLCBhbmQgcmVnaW9ucyBvdXRzaWRlCi0gKiBoYXZlIGEgd2luZGlu
ZyBudW1iZXIgb2YgMC4KLSAqCi0gKiBJZiBrZWVwT25seUJvdW5kYXJ5IGlzIFRSVUUsIGl0IGFs
c28gZGVsZXRlcyBhbGwgZWRnZXMgd2hpY2ggZG8gbm90Ci0gKiBzZXBhcmF0ZSBhbiBpbnRlcmlv
ciByZWdpb24gZnJvbSBhbiBleHRlcmlvciBvbmUuCi0gKi8KLQotaW50IF9fZ2xfbWVzaFRlc3Nl
bGxhdGVNb25vUmVnaW9uKCBHTFVmYWNlICpmYWNlICk7Ci1pbnQgX19nbF9tZXNoVGVzc2VsbGF0
ZUludGVyaW9yKCBHTFVtZXNoICptZXNoICk7Ci12b2lkIF9fZ2xfbWVzaERpc2NhcmRFeHRlcmlv
ciggR0xVbWVzaCAqbWVzaCApOwotaW50IF9fZ2xfbWVzaFNldFdpbmRpbmdOdW1iZXIoIEdMVW1l
c2ggKm1lc2gsIGludCB2YWx1ZSwKLQkJCSAgICAgICAgR0xib29sZWFuIGtlZXBPbmx5Qm91bmRh
cnkgKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGFiMWE3NzRmYjM2NDJhZjdjODE2NzI3N2U3MjJiMThlZDAxMjE1
NGEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTIzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaW5jbHVkZSAiTG9vcEJsaW5uUGF0aFByb2Nlc3Nvci5oIgotCi0jaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkxvb3BCbGlu
bkNsYXNzaWZpZXIuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5Db25zdGFudHMuaCIKLSNpbmNsdWRl
ICJMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvci5oIgotI2luY2x1ZGUgIkxvb3BCbGlubk1hdGhV
dGlscy5oIgotI2luY2x1ZGUgIkxvb3BCbGlublBhdGhDYWNoZS5oIgotI2luY2x1ZGUgIkxvb3BC
bGlublRleHR1cmVDb29yZHMuaCIKLSNpbmNsdWRlICJQT0RBcmVuYS5oIgotI2luY2x1ZGUgIlBP
REludGVydmFsVHJlZS5oIgotI2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJpbnRlcm5hbF9n
bHUuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgotCi0KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJTa0dlb21ldHJ5LmgiCi0jaW5jbHVkZSAi
U2tQYXRoLmgiCi0jaW5jbHVkZSAiU2tTY2FsYXIuaCIKLSNlbHNlCi0vLyBNdXN0IHBvcnQgdG8g
eW91ciBwbGF0Zm9ybS4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIExv
b3BCbGlubk1hdGhVdGlsczo6WFJheTsKLXVzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6Y2hvcEN1
YmljQXQ7Ci11c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6Om51bVhSYXlDcm9zc2luZ3NGb3JDdWJp
YzsKLXVzaW5nIExvb3BCbGlubk1hdGhVdGlsczo6dHJpYW5nbGVzT3ZlcmxhcDsKLXVzaW5nIExv
b3BCbGlubk1hdGhVdGlsczo6eFJheUNyb3NzZXNMaW5lOwotdXNpbmcgTG9vcEJsaW5uUGF0aFBy
b2Nlc3NvckltcGxlbWVudGF0aW9uOjpDb250b3VyOwotdXNpbmcgTG9vcEJsaW5uUGF0aFByb2Nl
c3NvckltcGxlbWVudGF0aW9uOjpTZWdtZW50OwotCi1uYW1lc3BhY2UgewotCi0jaWZuZGVmIE5E
RUJVRwotU3RyaW5nIHZhbHVlVG9TdHJpbmcoY29uc3QgRmxvYXRSZWN0JiBhcmcpCi17Ci0gICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiW0Zsb2F0
UmVjdCB4PSIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGFyZy54KCkpKTsK
LSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiB5PSIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKGFyZy55KCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtYXhY
PSIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKGFyZy5tYXhYKCkpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBtYXhZPSIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKGFyZy5tYXhZKCkpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnXScpOwotICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotc3RydWN0IFN3ZWVwRGF0
YTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLW5hbWVzcGFjZSBMb29wQmxpbm5QYXRo
UHJvY2Vzc29ySW1wbGVtZW50YXRpb24gewotY2xhc3MgU2VnbWVudDsKLX0KLQotI2lmbmRlZiBO
REVCVUcKLS8vIFJvdXRpbmVzIG5lZWRlZCB0byBwcmludCB0aGUgdHlwZXMgb2YgSW50ZXJ2YWxO
b2RlcyB3ZSBpbnN0YW50aWF0ZQotLy8gaW4gdGhpcyBmaWxlLgotdGVtcGxhdGUgPD4KLXN0cnVj
dCBWYWx1ZVRvU3RyaW5nPGZsb2F0PiB7Ci0gICAgc3RhdGljIFN0cmluZyBzdHJpbmcoY29uc3Qg
ZmxvYXQmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVl
KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8Pgotc3RydWN0IFZhbHVlVG9TdHJpbmc8U3dlZXBE
YXRhKj4gewotICAgIHN0YXRpYyBTdHJpbmcgc3RyaW5nKFN3ZWVwRGF0YSogY29uc3QmIHZhbHVl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIweCVwIiwgdmFsdWUpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgVmFsdWVUb1N0cmluZzxMb29wQmxpbm5Q
YXRoUHJvY2Vzc29ySW1wbGVtZW50YXRpb246OlNlZ21lbnQqPiB7Ci0gICAgc3RhdGljIFN0cmlu
ZyBzdHJpbmcoTG9vcEJsaW5uUGF0aFByb2Nlc3NvckltcGxlbWVudGF0aW9uOjpTZWdtZW50KiBj
b25zdCYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIjB4JXAi
LCB2YWx1ZSk7Ci0gICAgfQotfTsKLSNlbmRpZgotCi1uYW1lc3BhY2UgTG9vcEJsaW5uUGF0aFBy
b2Nlc3NvckltcGxlbWVudGF0aW9uIHsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTZWdtZW50Ci0v
LwotCi0vLyBEZXNjcmliZXMgYSBzZWdtZW50IG9mIHRoZSBwYXRoOiBlaXRoZXIgYSBjdWJpYyBv
ciBhIGxpbmUgc2VnbWVudC4KLS8vIFRoZXNlIGFyZSBzdG9yZWQgaW4gYSBkb3VibHkgbGlua2Vk
IGxpc3QgdG8gc3BlZWQgdXAgY3VydmUKLS8vIHN1YmRpdmlzaW9uLCB3aGljaCBvY2N1cnMgZHVl
IHRvIGVpdGhlciByZW5kZXJpbmcgYXJ0aWZhY3RzIGluIHRoZQotLy8gbG9vcCBjYXNlIG9yIGR1
ZSB0byBvdmVybGFwcGluZyB0cmlhbmdsZXMuCi1jbGFzcyBTZWdtZW50IHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTZWdtZW50KTsKLXB1YmxpYzoKLSAgICBlbnVtIEtpbmQgewotICAgICAg
ICBDdWJpYywKLSAgICAgICAgTGluZQotICAgIH07Ci0KLSAgICAvLyBOby1hcmd1bWVudCBjb25z
dHJ1Y3RvciBhbGxvd3MgY29uc3RydWN0aW9uIGJ5IHRoZSBQT0RBcmVuYSBjbGFzcy4KLSAgICBT
ZWdtZW50KCkKLSAgICAgICAgIDogbV9hcmVuYSgwKQotICAgICAgICAgLCBtX2tpbmQoQ3ViaWMp
Ci0gICAgICAgICAsIG1fcHJldigwKQotICAgICAgICAgLCBtX25leHQoMCkKLSAgICAgICAgICwg
bV9jb250b3VyKDApCi0gICAgICAgICAsIG1fdHJpYW5ndWxhdG9yKDApCi0gICAgICAgICAsIG1f
bWFya2VkRm9yU3ViZGl2aXNpb24oZmFsc2UpCi0gICAgewotICAgIH0KLQotICAgIC8vIEluaXRp
YWxpemVyIGZvciBjdWJpYyBjdXJ2ZSBzZWdtZW50cy4KLSAgICB2b2lkIHNldHVwKFBPREFyZW5h
KiBhcmVuYSwKLSAgICAgICAgICAgICAgIENvbnRvdXIqIGNvbnRvdXIsCi0gICAgICAgICAgICAg
ICBGbG9hdFBvaW50IGNwMCwKLSAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgY3AxLAotICAgICAg
ICAgICAgICAgRmxvYXRQb2ludCBjcDIsCi0gICAgICAgICAgICAgICBGbG9hdFBvaW50IGNwMykK
LSAgICB7Ci0gICAgICAgIG1fYXJlbmEgPSBhcmVuYTsKLSAgICAgICAgbV9jb250b3VyID0gY29u
dG91cjsKLSAgICAgICAgbV9raW5kID0gQ3ViaWM7Ci0gICAgICAgIG1fcG9pbnRzWzBdID0gY3Aw
OwotICAgICAgICBtX3BvaW50c1sxXSA9IGNwMTsKLSAgICAgICAgbV9wb2ludHNbMl0gPSBjcDI7
Ci0gICAgICAgIG1fcG9pbnRzWzNdID0gY3AzOwotICAgICAgICBjb21wdXRlQm91bmRpbmdCb3go
KTsKLSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplciBmb3IgbGluZSBzZWdtZW50cy4KLSAgICB2
b2lkIHNldHVwKFBPREFyZW5hKiBhcmVuYSwKLSAgICAgICAgICAgICAgIENvbnRvdXIqIGNvbnRv
dXIsCi0gICAgICAgICAgICAgICBGbG9hdFBvaW50IHAwLAotICAgICAgICAgICAgICAgRmxvYXRQ
b2ludCBwMSkKLSAgICB7Ci0gICAgICAgIG1fYXJlbmEgPSBhcmVuYTsKLSAgICAgICAgbV9jb250
b3VyID0gY29udG91cjsKLSAgICAgICAgbV9raW5kID0gTGluZTsKLSAgICAgICAgbV9wb2ludHNb
MF0gPSBwMDsKLSAgICAgICAgbV9wb2ludHNbMV0gPSBwMTsKLSAgICAgICAgY29tcHV0ZUJvdW5k
aW5nQm94KCk7Ci0gICAgfQotCi0gICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBpJ3RoIGNvbnRyb2wgcG9pbnQsIDAgPD0gaSA8IDQu
Ci0gICAgY29uc3QgRmxvYXRQb2ludCYgZ2V0UG9pbnQoaW50IGkpCi0gICAgewotICAgICAgICBB
U1NFUlQoaSA+PSAwICYmIGkgPCA0KTsKLSAgICAgICAgcmV0dXJuIG1fcG9pbnRzW2ldOwotICAg
IH0KLQotICAgIFNlZ21lbnQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAgICBT
ZWdtZW50KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2OyB9Ci0KLSAgICB2b2lkIHNldE5l
eHQoU2VnbWVudCogbmV4dCkgeyBtX25leHQgPSBuZXh0OyB9Ci0gICAgdm9pZCBzZXRQcmV2KFNl
Z21lbnQqIHByZXYpIHsgbV9wcmV2ID0gcHJldjsgfQotCi0gICAgLy8gVGhlIGNvbnRvdXIgdGhp
cyBzZWdtZW50IGJlbG9uZ3MgdG8uCi0gICAgQ29udG91ciogY29udG91cigpIGNvbnN0IHsgcmV0
dXJuIG1fY29udG91cjsgfQotCi0gICAgLy8gU3ViZGl2aWRlcyB0aGUgY3VycmVudCBzZWdtZW50
IGF0IHRoZSBnaXZlbiBwYXJhbWV0ZXIgdmFsdWUgKDAgPD0KLSAgICAvLyB0IDw9IDEpIGFuZCBy
ZXBsYWNlcyBpdCB3aXRoIHRoZSB0d28gbmV3bHkgY3JlYXRlZCBTZWdtZW50cyBpbgotICAgIC8v
IHRoZSBsaW5rZWQgbGlzdCwgaWYgcG9zc2libGUuIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBs
ZWZ0bW9zdAotICAgIC8vIFNlZ21lbnQuCi0gICAgU2VnbWVudCogc3ViZGl2aWRlKGZsb2F0IHBh
cmFtKQotICAgIHsKLSAgICAgICAgRmxvYXRQb2ludCBkc3RbN107Ci0gICAgICAgIGNob3BDdWJp
Y0F0KG1fcG9pbnRzLCBkc3QsIHBhcmFtKTsKLSAgICAgICAgU2VnbWVudCogbGVmdCA9IG1fYXJl
bmEtPmFsbG9jYXRlT2JqZWN0PFNlZ21lbnQ+KCk7Ci0gICAgICAgIFNlZ21lbnQqIHJpZ2h0ID0g
bV9hcmVuYS0+YWxsb2NhdGVPYmplY3Q8U2VnbWVudD4oKTsKLSAgICAgICAgbGVmdC0+c2V0dXAo
bV9hcmVuYSwgbV9jb250b3VyLCBkc3RbMF0sIGRzdFsxXSwgZHN0WzJdLCBkc3RbM10pOwotICAg
ICAgICByaWdodC0+c2V0dXAobV9hcmVuYSwgbV9jb250b3VyLCBkc3RbM10sIGRzdFs0XSwgZHN0
WzVdLCBkc3RbNl0pOwotICAgICAgICBsZWZ0LT5zZXROZXh0KHJpZ2h0KTsKLSAgICAgICAgcmln
aHQtPnNldFByZXYobGVmdCk7Ci0gICAgICAgIC8vIFRyeSB0byBzZXQgdXAgYSBsaW5rIGJldHdl
ZW4gInRoaXMtPnByZXYoKSIgYW5kICJsZWZ0Ii4KLSAgICAgICAgaWYgKHByZXYoKSkgewotICAg
ICAgICAgICAgbGVmdC0+c2V0UHJldihwcmV2KCkpOwotICAgICAgICAgICAgcHJldigpLT5zZXRO
ZXh0KGxlZnQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRyeSB0byBzZXQgdXAgYSBsaW5rIGJl
dHdlZW4gInRoaXMtPm5leHQoKSIgYW5kICJyaWdodCIuCi0gICAgICAgIFNlZ21lbnQqIG4gPSBu
ZXh0KCk7Ci0gICAgICAgIGlmIChuKSB7Ci0gICAgICAgICAgICByaWdodC0+c2V0TmV4dChuKTsK
LSAgICAgICAgICAgIG4tPnNldFByZXYocmlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIC8vIFNl
dCB1cCBhIGxpbmsgYmV0d2VlbiAidGhpcyIgYW5kICJsZWZ0IjsgdGhpcyBpcyBvbmx5IHRvCi0g
ICAgICAgIC8vIHByb3ZpZGUgYSBjZXJ0YWluIGFtb3VudCBvZiBjb250aW51aXR5IGR1cmluZyBm
b3J3YXJkIGl0ZXJhdGlvbi4KLSAgICAgICAgc2V0TmV4dChsZWZ0KTsKLSAgICAgICAgcmV0dXJu
IGxlZnQ7Ci0gICAgfQotCi0gICAgLy8gU3ViZGl2aWRlcyB0aGUgY3VycmVudCBzZWdtZW50IGF0
IHRoZSBoYWxmd2F5IHBvaW50IGFuZCByZXBsYWNlcwotICAgIC8vIGl0IHdpdGggdGhlIHR3byBu
ZXdseSBjcmVhdGVkIFNlZ21lbnRzIGluIHRoZSBsaW5rZWQgbGlzdCwgaWYKLSAgICAvLyBwb3Nz
aWJsZS4gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGxlZnRtb3N0IFNlZ21lbnQuCi0gICAgU2Vn
bWVudCogc3ViZGl2aWRlKCkgeyByZXR1cm4gc3ViZGl2aWRlKDAuNWYpOyB9Ci0KLSAgICBjb25z
dCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGluZ0JveDsg
fQotCi0gICAgLy8gQ29tcHV0ZXMgdGhlIG51bWJlciBvZiB0aW1lcyBhIHF1ZXJ5IGxpbmUgc3Rh
cnRpbmcgYXQgdGhlIGdpdmVuCi0gICAgLy8gcG9pbnQgYW5kIGV4dGVuZGluZyB0byB4PStpbmZp
bml0eSBjcm9zc2VzIHRoaXMgc2VnbWVudC4gT3V0Z29pbmcKLSAgICAvLyAiYW1iaWd1b3VzIiBh
cmd1bWVudCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcXVlcnkgaW50ZXJzZWN0ZWQgYW4KLSAgICAv
LyBlbmRwb2ludCBvciB0YW5nZW50IHBvaW50IG9mIHRoZSBzZWdtZW50LCBpbmRpY2F0aW5nIHRo
YXQgYW5vdGhlcgotICAgIC8vIHF1ZXJ5IHBvaW50IGlzIHByZWZlcnJlZC4KLSAgICBpbnQgbnVt
Q3Jvc3NpbmdzRm9yWFJheShjb25zdCBYUmF5JiB4UmF5LCBib29sJiBhbWJpZ3VvdXMpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAobV9raW5kID09IEN1YmljKQotICAgICAgICAgICAgLy8gU2hv
dWxkIGNvbnNpZGVyIGNhY2hpbmcgdGhlIG1vbm90b25pYyBjdWJpY3MuCi0gICAgICAgICAgICBy
ZXR1cm4gbnVtWFJheUNyb3NzaW5nc0ZvckN1YmljKHhSYXksIG1fcG9pbnRzLCBhbWJpZ3VvdXMp
OwotCi0gICAgICAgIHJldHVybiB4UmF5Q3Jvc3Nlc0xpbmUoeFJheSwgbV9wb2ludHMsIGFtYmln
dW91cykgPyAxIDogMDsKLSAgICB9Ci0KLSAgICAvLyBQZXJmb3JtcyBhIGxvY2FsIHRyaWFuZ3Vs
YXRpb24gb2YgdGhlIGNvbnRyb2wgcG9pbnRzIGluIHRoaXMKLSAgICAvLyBzZWdtZW50LiBUaGlz
IG9wZXJhdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBjdWJpYyB0eXBlIHNlZ21lbnRzLgotICAg
IC8vIHRleENvb3JkcyBtYXkgYmUgbnVsbCB3aGVuIHRoZSBrbG0gY29vcmRpbmF0ZXMgaGF2ZSBu
b3QgYmVlbgotICAgIC8vIGNvbXB1dGVkIHlldC4KLSAgICB2b2lkIHRyaWFuZ3VsYXRlKExvb3BC
bGlubkxvY2FsVHJpYW5ndWxhdG9yOjpJbnNpZGVFZGdlQ29tcHV0YXRpb24gY29tcHV0ZUluc2lk
ZUVkZ2VzLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
czo6UmVzdWx0KiB0ZXhDb29yZHMpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNv
bnRyb2wgcG9pbnQgdHJpYW5nbGVzIGFzc29jaWF0ZWQgd2l0aAotICAgIC8vIHRoaXMgc2VnbWVu
dC4KLSAgICBpbnQgbnVtYmVyT2ZUcmlhbmdsZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KCFtX3RyaWFuZ3VsYXRvcikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
bV90cmlhbmd1bGF0b3ItPm51bWJlck9mVHJpYW5nbGVzKCk7Ci0gICAgfQotCi0gICAgLy8gRmV0
Y2hlcyB0aGUgZ2l2ZW4gY29udHJvbCBwb2ludCB0cmlhbmdsZSBmb3IgdGhpcyBzZWdtZW50Lgot
ICAgIExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpUcmlhbmdsZSogZ2V0VHJpYW5nbGUoaW50
IGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHJpYW5ndWxhdG9yKTsKLSAgICAgICAg
cmV0dXJuIG1fdHJpYW5ndWxhdG9yLT5nZXRUcmlhbmdsZShpbmRleCk7Ci0gICAgfQotCi0gICAg
Ly8gTnVtYmVyIG9mIHZlcnRpY2VzIGFsb25nIHRoZSBpbnNpZGUgZWRnZSBvZiB0aGlzIHNlZ21l
bnQuIFRoaXMKLSAgICAvLyBjYW4gYmUgY2FsbGVkIGVpdGhlciBmb3IgbGluZSBvciBjdWJpYyB0
eXBlIHNlZ21lbnRzLgotICAgIGludCBudW1iZXJPZkludGVyaW9yVmVydGljZXMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKG1fa2luZCA9PSBDdWJpYykgewotICAgICAgICAgICAgaWYgKG1f
dHJpYW5ndWxhdG9yKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3RyaWFuZ3VsYXRvci0+bnVt
YmVyT2ZJbnRlcmlvclZlcnRpY2VzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIDI7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJucyB0aGUgZ2l2
ZW4gaW50ZXJpb3IgdmVydGV4LCAwIDw9IGluZGV4IDwgbnVtYmVyT2ZJbnRlcmlvclZlcnRpY2Vz
KCkuCi0gICAgRmxvYXRQb2ludCBnZXRJbnRlcmlvclZlcnRleChpbnQgaW5kZXgpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBpbmRleCA8IG51bWJlck9mSW50ZXJp
b3JWZXJ0aWNlcygpKTsKLSAgICAgICAgaWYgKG1fa2luZCA9PSBDdWJpYykgewotICAgICAgICAg
ICAgRmxvYXRQb2ludCByZXM7Ci0gICAgICAgICAgICBpZiAobV90cmlhbmd1bGF0b3IpIHsKLSAg
ICAgICAgICAgICAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VmVydGV4KiB2ZXJ0ZXgg
PSBtX3RyaWFuZ3VsYXRvci0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaW5kZXgpOwotICAgICAgICAgICAg
ICAgIGlmICh2ZXJ0ZXgpCi0gICAgICAgICAgICAgICAgICAgIHJlcy5zZXQodmVydGV4LT54eUNv
b3JkaW5hdGVzKCkueCgpLCB2ZXJ0ZXgtPnh5Q29vcmRpbmF0ZXMoKS55KCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBtX3BvaW50c1tpbmRleF07Ci0gICAgfQotCi0gICAgLy8gU3RhdGUgdG8gYXNzaXN0IHdpdGgg
Y3VydmUgc3ViZGl2aXNpb24uCi0gICAgYm9vbCBtYXJrZWRGb3JTdWJkaXZpc2lvbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFya2VkRm9yU3ViZGl2aXNpb247IH0KLSAgICB2b2lkIHNldE1hcmtlZEZv
clN1YmRpdmlzaW9uKGJvb2wgbWFya2VkRm9yU3ViZGl2aXNpb24pIHsgbV9tYXJrZWRGb3JTdWJk
aXZpc2lvbiA9IG1hcmtlZEZvclN1YmRpdmlzaW9uOyB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAg
Ly8gU3VwcHBvcnQgZm9yIHByaW50aW5nIFNlZ21lbnRzLgotICAgIFN0cmluZyB0b1N0cmluZygp
IGNvbnN0Ci0gICAgewotICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCJbU2VnbWVudCBraW5kPSIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChr
aW5kKCkgPT0gTGluZSA/ICJsaW5lIiA6ICJjdWJpYyIpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIGJvdW5kaW5nQm94PSIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZVRvU3RyaW5n
KGJvdW5kaW5nQm94KCkpKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIiBjb250b3VyPTB4Iik7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCIlcCIsIGNvbnRvdXIoKSkp
OwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiIG1hcmtlZEZvclN1YmRpdmlzaW9uPSIpOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZChtYXJrZWRGb3JTdWJkaXZpc2lvbigpID8gInRydWUiIDogImZh
bHNlIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJdIik7Ci0gICAgICAgIHJldHVybiBidWls
ZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQotI2VuZGlmCi0KLSBwcml2YXRlOgotICAgIC8vIENvbXB1
dGVzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBTZWdtZW50LgotICAgIHZvaWQgY29tcHV0ZUJv
dW5kaW5nQm94KCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgICAgIGNh
c2UgQ3ViaWM6Ci0gICAgICAgICAgICBtX2JvdW5kaW5nQm94LmZpdFRvUG9pbnRzKG1fcG9pbnRz
WzBdLCBtX3BvaW50c1sxXSwgbV9wb2ludHNbMl0sIG1fcG9pbnRzWzNdKTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2UgTGluZToKLSAgICAgICAgICAgIG1fYm91bmRpbmdCb3gu
Zml0VG9Qb2ludHMobV9wb2ludHNbMF0sIG1fcG9pbnRzWzFdKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUE9EQXJlbmEqIG1fYXJlbmE7Ci0gICAgS2luZCBt
X2tpbmQ7Ci0gICAgRmxvYXRQb2ludCBtX3BvaW50c1s0XTsKLSAgICBTZWdtZW50KiBtX3ByZXY7
Ci0gICAgU2VnbWVudCogbV9uZXh0OwotICAgIENvbnRvdXIqIG1fY29udG91cjsKLSAgICBGbG9h
dFJlY3QgbV9ib3VuZGluZ0JveDsKLSAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvciogbV90
cmlhbmd1bGF0b3I7Ci0gICAgYm9vbCBtX21hcmtlZEZvclN1YmRpdmlzaW9uOwotfTsKLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBDb250b3VyCi0vLwotCi0vLyBEZXNjcmliZXMgYSBjbG9zZWQgY29u
dG91ciBvZiB0aGUgcGF0aC4KLWNsYXNzIENvbnRvdXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKENvbnRvdXIpOwotcHVibGljOgotICAgIENvbnRvdXIoKQotICAgIHsKLSAgICAgICAgbV9m
aXJzdCA9ICZtX3NlbnRpbmVsOwotICAgICAgICBtX2ZpcnN0LT5zZXROZXh0KG1fZmlyc3QpOwot
ICAgICAgICBtX2ZpcnN0LT5zZXRQcmV2KG1fZmlyc3QpOwotICAgICAgICBtX2lzT3JpZW50ZWRD
b3VudGVyQ2xvY2t3aXNlID0gdHJ1ZTsKLSAgICAgICAgbV9ib3VuZGluZ0JveERpcnR5ID0gZmFs
c2U7Ci0gICAgICAgIG1fZmlsbFNpZGUgPSBMb29wQmxpbm5Db25zdGFudHM6OlJpZ2h0U2lkZTsK
LSAgICB9Ci0KLSAgICB2b2lkIGFkZChTZWdtZW50KiBzZWdtZW50KQotICAgIHsKLSAgICAgICAg
aWYgKG1fZmlyc3QgPT0gJm1fc2VudGluZWwpIHsKLSAgICAgICAgICAgIC8vIEZpcnN0IGVsZW1l
bnQgaXMgdGhlIHNlbnRpbmVsLiBSZXBsYWNlIGl0IHdpdGggdGhlIGluY29taW5nCi0gICAgICAg
ICAgICAvLyBzZWdtZW50LgotICAgICAgICAgICAgc2VnbWVudC0+c2V0TmV4dChtX2ZpcnN0KTsK
LSAgICAgICAgICAgIHNlZ21lbnQtPnNldFByZXYobV9maXJzdCk7Ci0gICAgICAgICAgICBtX2Zp
cnN0LT5zZXROZXh0KHNlZ21lbnQpOwotICAgICAgICAgICAgbV9maXJzdC0+c2V0UHJldihzZWdt
ZW50KTsKLSAgICAgICAgICAgIG1fZmlyc3QgPSBzZWdtZW50OwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gbV9maXJzdC0+cHJldigpIGlzIHRoZSBzZW50aW5lbC4KLSAgICAgICAg
ICAgIEFTU0VSVChtX2ZpcnN0LT5wcmV2KCkgPT0gJm1fc2VudGluZWwpOwotICAgICAgICAgICAg
U2VnbWVudCogbGFzdCA9IG1fc2VudGluZWwucHJldigpOwotICAgICAgICAgICAgbGFzdC0+c2V0
TmV4dChzZWdtZW50KTsKLSAgICAgICAgICAgIHNlZ21lbnQtPnNldFByZXYobGFzdCk7Ci0gICAg
ICAgICAgICBzZWdtZW50LT5zZXROZXh0KCZtX3NlbnRpbmVsKTsKLSAgICAgICAgICAgIG1fc2Vu
dGluZWwuc2V0UHJldihzZWdtZW50KTsKLSAgICAgICAgfQotICAgICAgICBtX2JvdW5kaW5nQm94
RGlydHkgPSB0cnVlOwotICAgIH0KLQotICAgIC8vIFN1YmRpdmlkZXMgdGhlIGdpdmVuIHNlZ21l
bnQgYXQgdGhlIGdpdmVuIHBhcmFtZXRyaWMgdmFsdWUuCi0gICAgLy8gUmV0dXJucyBhIHBvaW50
ZXIgdG8gdGhlIGZpcnN0IG9mIHRoZSB0d28gcG9ydGlvbnMgb2YgdGhlCi0gICAgLy8gc3ViZGl2
aWRlZCBzZWdtZW50LgotICAgIFNlZ21lbnQqIHN1YmRpdmlkZShTZWdtZW50KiBzZWdtZW50LCBm
bG9hdCBwYXJhbSkKLSAgICB7Ci0gICAgICAgIFNlZ21lbnQqIGxlZnQgPSBzZWdtZW50LT5zdWJk
aXZpZGUocGFyYW0pOwotICAgICAgICBpZiAobV9maXJzdCA9PSBzZWdtZW50KQotICAgICAgICAg
ICAgbV9maXJzdCA9IGxlZnQ7Ci0gICAgICAgIHJldHVybiBsZWZ0OwotICAgIH0KLQotICAgIC8v
IFN1YmRpdmlkZXMgdGhlIGdpdmVuIHNlZ21lbnQgYXQgdGhlIGhhbGZ3YXkgcG9pbnQuIFJldHVy
bnMgYQotICAgIC8vIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9mIHRoZSB0d28gcG9ydGlvbnMgb2Yg
dGhlIHN1YmRpdmlkZWQKLSAgICAvLyBzZWdtZW50LgotICAgIFNlZ21lbnQqIHN1YmRpdmlkZShT
ZWdtZW50KiBzZWdtZW50KQotICAgIHsKLSAgICAgICAgU2VnbWVudCogbGVmdCA9IHNlZ21lbnQt
PnN1YmRpdmlkZSgpOwotICAgICAgICBpZiAobV9maXJzdCA9PSBzZWdtZW50KQotICAgICAgICAg
ICAgbV9maXJzdCA9IGxlZnQ7Ci0gICAgICAgIHJldHVybiBsZWZ0OwotICAgIH0KLQotICAgIC8v
IFJldHVybnMgdGhlIGZpcnN0IHNlZ21lbnQgaW4gdGhlIGNvbnRvdXIgZm9yIGl0ZXJhdGlvbi4K
LSAgICBTZWdtZW50KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3Q7IH0KLQotICAgIC8v
IFJldHVybnMgdGhlIGxhc3Qgc2VnbWVudCBpbiB0aGUgY29udG91ciBmb3IgaXRlcmF0aW9uLiBD
YWxsZXJzCi0gICAgLy8gc2hvdWxkIG5vdCBpdGVyYXRlIG92ZXIgdGhpcyBzZWdtZW50LiBJbiBv
dGhlciB3b3JkczoKLSAgICAvLyAgZm9yIChTZWdtZW50KiBjdXIgPSBjb250b3VyLT5iZWdpbigp
OwotICAgIC8vICAgICAgIGN1ciAhPSBjb250b3VyLT5lbmQoKTsKLSAgICAvLyAgICAgICBjdXIg
PSBjdXItPm5leHQoKSkgewotICAgIC8vICAgIC8vIC4uIHByb2Nlc3MgY3VyIC4uLgotICAgIC8v
ICB9Ci0gICAgU2VnbWVudCogZW5kKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZpcnN0LT5w
cmV2KCkgPT0gJm1fc2VudGluZWwpOwotICAgICAgICByZXR1cm4gJm1fc2VudGluZWw7Ci0gICAg
fQotCi0gICAgYm9vbCBpc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2U7IH0KLSAgICB2b2lkIHNldElzT3JpZW50ZWRD
b3VudGVyQ2xvY2t3aXNlKGJvb2wgaXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2UpIHsgbV9pc09y
aWVudGVkQ291bnRlckNsb2Nrd2lzZSA9IGlzT3JpZW50ZWRDb3VudGVyQ2xvY2t3aXNlOyB9Ci0K
LSAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KCkKLSAgICB7Ci0gICAgICAgIGlmICht
X2JvdW5kaW5nQm94RGlydHkpIHsKLSAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwotICAg
ICAgICAgICAgZm9yIChTZWdtZW50KiBjdXIgPSBiZWdpbigpOyBjdXIgIT0gZW5kKCk7IGN1ciA9
IGN1ci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpcnN0KQotICAgICAgICAgICAg
ICAgICAgICBtX2JvdW5kaW5nQm94ID0gY3VyLT5ib3VuZGluZ0JveCgpOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9ib3VuZGluZ0JveC51bml0ZShjdXItPmJv
dW5kaW5nQm94KCkpOwotICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1fYm91bmRpbmdCb3hEaXJ0eSA9IGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX2JvdW5kaW5nQm94OwotICAgIH0KLQotICAgIC8vIFJldHVybnMg
d2hpY2ggc2lkZSBvZiB0aGlzIGNvbnRvdXIgaXMgZmlsbGVkLgotICAgIExvb3BCbGlubkNvbnN0
YW50czo6RmlsbFNpZGUgZmlsbFNpZGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
ZmlsbFNpZGU7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRGaWxsU2lkZShMb29wQmxpbm5Db25zdGFu
dHM6OkZpbGxTaWRlIGZpbGxTaWRlKQotICAgIHsKLSAgICAgICAgbV9maWxsU2lkZSA9IGZpbGxT
aWRlOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICAvLyBUaGUgc3RhcnQgb2YgdGhlIHNlZ21lbnQg
Y2hhaW4uIFRoZSBzZWdtZW50cyBhcmUga2VwdCBpbiBhCi0gICAgLy8gY2lyY3VsYXIgZG91Ymx5
IGxpbmtlZCBsaXN0IGZvciByYXBpZCBhY2Nlc3MgdG8gdGhlIGJlZ2lubmluZyBhbmQKLSAgICAv
LyBlbmQuCi0gICAgU2VnbWVudCogbV9maXJzdDsKLQotICAgIC8vIFRoZSBzZW50aW5lbCBlbGVt
ZW50IGF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLCBuZWVkZWQgZm9yCi0gICAgLy8gcmVhc29uYWJs
ZSBpdGVyYXRpb24gc2VtYW50aWNzLgotICAgIFNlZ21lbnQgbV9zZW50aW5lbDsKLQotICAgIGJv
b2wgbV9pc09yaWVudGVkQ291bnRlckNsb2Nrd2lzZTsKLQotICAgIEZsb2F0UmVjdCBtX2JvdW5k
aW5nQm94OwotICAgIGJvb2wgbV9ib3VuZGluZ0JveERpcnR5OwotCi0gICAgLy8gV2hpY2ggc2lk
ZSBvZiB0aGlzIGNvbnRvdXIgc2hvdWxkIGJlIGZpbGxlZC4KLSAgICBMb29wQmxpbm5Db25zdGFu
dHM6OkZpbGxTaWRlIG1fZmlsbFNpZGU7Ci19OwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFNlZ21l
bnQKLS8vCi0KLS8vIERlZmluaXRpb24gb2YgU2VnbWVudDo6dHJpYW5ndWxhdGUoKSwgd2hpY2gg
bXVzdCBjb21lIGFmdGVyCi0vLyBkZWNsYXJhdGlvbiBvZiBDb250b3VyLgotdm9pZCBTZWdtZW50
Ojp0cmlhbmd1bGF0ZShMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6SW5zaWRlRWRnZUNvbXB1
dGF0aW9uIGNvbXB1dGVJbnNpZGVFZGdlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTG9vcEJsaW5uVGV4dHVyZUNvb3Jkczo6UmVzdWx0KiB0ZXhDb29yZHMpCi17Ci0gICAgQVNT
RVJUKG1fa2luZCA9PSBDdWJpYyk7Ci0gICAgaWYgKCFtX3RyaWFuZ3VsYXRvcikKLSAgICAgICAg
bV90cmlhbmd1bGF0b3IgPSBtX2FyZW5hLT5hbGxvY2F0ZU9iamVjdDxMb29wQmxpbm5Mb2NhbFRy
aWFuZ3VsYXRvcj4oKTsKLSAgICBtX3RyaWFuZ3VsYXRvci0+cmVzZXQoKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRv
cjo6VmVydGV4KiB2ZXJ0ZXggPSBtX3RyaWFuZ3VsYXRvci0+Z2V0VmVydGV4KGkpOwotICAgICAg
ICBpZiAodGV4Q29vcmRzKSB7Ci0gICAgICAgICAgICB2ZXJ0ZXgtPnNldChnZXRQb2ludChpKS54
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRQb2ludChpKS55KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB0ZXhDb29yZHMtPmtsbUNvb3JkaW5hdGVzW2ldLngoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRleENvb3Jkcy0+a2xtQ29vcmRpbmF0ZXNbaV0ueSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4Q29vcmRzLT5rbG1Db29yZGluYXRlc1tpXS56KCkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmVydGV4LT5zZXQoZ2V0UG9pbnQoaSkueCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UG9pbnQoaSkueSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gTm8gdGV4dHVyZSBjb29yZGluYXRlcyB5ZXQKLSAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fdHJpYW5ndWxhdG9yLT50
cmlhbmd1bGF0ZShjb21wdXRlSW5zaWRlRWRnZXMsIGNvbnRvdXIoKS0+ZmlsbFNpZGUoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIExvb3BCbGlublBhdGhQcm9jZXNzb3JJbXBsZW1lbnRhdGlvbgot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vIExvb3BCbGlublBhdGhQcm9jZXNzb3IKLS8vCi0KLUxvb3BC
bGlublBhdGhQcm9jZXNzb3I6Okxvb3BCbGlublBhdGhQcm9jZXNzb3IoKQotICAgIDogbV9hcmVu
YShQT0RBcmVuYTo6Y3JlYXRlKCkpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV92ZXJib3NlTG9n
Z2luZyhmYWxzZSkKLSNlbmRpZgotewotfQotCi1Mb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpMb29w
Qmxpbm5QYXRoUHJvY2Vzc29yKFBhc3NSZWZQdHI8UE9EQXJlbmE+IGFyZW5hKQotICAgIDogbV9h
cmVuYShhcmVuYSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX3ZlcmJvc2VMb2dnaW5nKGZhbHNl
KQotI2VuZGlmCi17Ci19Ci0KLUxvb3BCbGlublBhdGhQcm9jZXNzb3I6On5Mb29wQmxpbm5QYXRo
UHJvY2Vzc29yKCkKLXsKLX0KLQotdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpwcm9jZXNz
KGNvbnN0IFBhdGgmIHBhdGgsIExvb3BCbGlublBhdGhDYWNoZSYgY2FjaGUpCi17Ci0gICAgYnVp
bGRDb250b3VycyhwYXRoKTsKLQotICAgIC8vIFJ1biBwbGFuZS1zd2VlcCBhbGdvcml0aG0gdG8g
ZGV0ZXJtaW5lIG92ZXJsYXBzIG9mIGNvbnRyb2wgcG9pbnQKLSAgICAvLyBjdXJ2ZXMgYW5kIHN1
YmRpdmlkZSBjdXJ2ZXMgYXBwcm9wcmlhdGVseS4KLSAgICBzdWJkaXZpZGVDdXJ2ZXMoKTsKLQot
ICAgIC8vIERldGVybWluZSBvcmllbnRhdGlvbnMgb2YgY291bnRvdXJzLiBCYXNlZCBvbiBvcmll
bnRhdGlvbiBhbmQgdGhlCi0gICAgLy8gbnVtYmVyIG9mIGN1cnZlIGNyb3NzaW5ncyBhdCBhIHJh
bmRvbSBwb2ludCBvbiB0aGUgY29udG91ciwKLSAgICAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBm
aWxsIHRoZSBsZWZ0IG9yIHJpZ2h0IHNpZGUgb2YgdGhlIGNvbnRvdXIuCi0gICAgZGV0ZXJtaW5l
U2lkZXNUb0ZpbGwoKTsKLQotICAgIC8vIENsYXNzaWZ5IGN1cnZlcywgY29tcHV0ZSB0ZXh0dXJl
IGNvb3JkaW5hdGVzIGFuZCBzdWJkaXZpZGUgYXMKLSAgICAvLyBuZWNlc3NhcnkgdG8gZWxpbWlu
YXRlIHJlbmRlcmluZyBhcnRpZmFjdHMuIERvIHRoZSBmaW5hbAotICAgIC8vIHRyaWFuZ3VsYXRp
b24gb2YgdGhlIGN1cnZlIHNlZ21lbnRzLCBkZXRlcm1pbmluZyB0aGUgcGF0aCBhbG9uZwotICAg
IC8vIHRoZSBpbnRlcmlvciBvZiB0aGUgc2hhcGUuCi0gICAgZm9yIChWZWN0b3I8Q29udG91cio+
OjppdGVyYXRvciBpdGVyID0gbV9jb250b3Vycy5iZWdpbigpOyBpdGVyICE9IG1fY29udG91cnMu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKLSAgICAgICAg
Zm9yIChTZWdtZW50KiBzZWcgPSBjdXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcg
PSBzZWctPm5leHQoKSkgewotICAgICAgICAgICAgaWYgKHNlZy0+a2luZCgpID09IFNlZ21lbnQ6
OkN1YmljKSB7Ci0gICAgICAgICAgICAgICAgTG9vcEJsaW5uQ2xhc3NpZmllcjo6UmVzdWx0IGNs
YXNzaWZpY2F0aW9uID0gTG9vcEJsaW5uQ2xhc3NpZmllcjo6Y2xhc3NpZnkoc2VnLT5nZXRQb2lu
dCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWctPmdldFBvaW50KDEp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZy0+Z2V0UG9pbnQoMiksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnLT5nZXRQb2ludCgzKSk7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2VMb2dnaW5nKQotICAgICAg
ICAgICAgICAgICAgICBMT0dfRVJST1IoIkNsYXNzaWZpY2F0aW9uOiAlZCIsIChpbnQpIGNsYXNz
aWZpY2F0aW9uLmN1cnZlVHlwZSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBMb29wQmxpbm5U
ZXh0dXJlQ29vcmRzOjpSZXN1bHQgdGV4Q29vcmRzID0KLSAgICAgICAgICAgICAgICAgICAgTG9v
cEJsaW5uVGV4dHVyZUNvb3Jkczo6Y29tcHV0ZShjbGFzc2lmaWNhdGlvbiwgY3VyLT5maWxsU2lk
ZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAodGV4Q29vcmRzLmhhc1JlbmRlcmluZ0FydGlmYWN0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGVyZSBpcyBhIHByb2JsZW0gd2hl
cmUgdGhlIGFsZ29yaXRobQotICAgICAgICAgICAgICAgICAgICAvLyBzb21ldGltZXMgZmFpbHMg
dG8gY29udmVyZ2Ugd2hlbiBzcGxpdHRpbmcgYXQgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8v
IHN1YmRpdmlzaW9uIHBhcmFtZXRlciB2YWx1ZS4gRm9yIHRoZSB0aW1lIGJlaW5nLAotICAgICAg
ICAgICAgICAgICAgICAvLyBzcGxpdCBoYWxmd2F5LgotICAgICAgICAgICAgICAgICAgICBjdXIt
PnN1YmRpdmlkZShzZWcpOwotICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IGl0ZXJhdGlvbiB3
aWxsIGhhbmRsZSB0aGUgbmV3bHkgc3ViZGl2aWRlZCBjdXJ2ZXMKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXRleENvb3Jkcy5pc0xpbmVPclBvaW50
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWctPnRyaWFuZ3VsYXRlKExvb3BCbGlubkxv
Y2FsVHJpYW5ndWxhdG9yOjpDb21wdXRlSW5zaWRlRWRnZXMsICZ0ZXhDb29yZHMpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZWctPm51bWJlck9mVHJpYW5n
bGVzKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BCbGlubkxvY2Fs
VHJpYW5ndWxhdG9yOjpUcmlhbmdsZSogdHJpYW5nbGUgPSBzZWctPmdldFRyaWFuZ2xlKGkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BCbGlubkxvY2FsVHJpYW5ndWxh
dG9yOjpWZXJ0ZXgqIHZlcnQgPSB0cmlhbmdsZS0+Z2V0VmVydGV4KGopOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGRWZXJ0ZXgodmVydC0+eHlDb29yZGluYXRlcygp
LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZl
cnQtPnh5Q29vcmRpbmF0ZXMoKS55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2ZXJ0LT5rbG1Db29yZGluYXRlcygpLngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnQtPmtsbUNvb3JkaW5hdGVz
KCkueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmVydC0+a2xtQ29vcmRpbmF0ZXMoKS56KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNpZmRlZiBMT09QX0JMSU5OX1BBVEhfQ0FD
SEVfREVCVUdfSU5URVJJT1JfRURHRVMKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3cg
dGhlIGVuZCB1c2VyIHRoZSBpbnRlcmlvciBlZGdlcyBhcyB3ZWxsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHNlZy0+bnVtYmVyT2ZJbnRlcmlvclZlcnRpY2Vz
KCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQgdmVydCA9
IHNlZy0+Z2V0SW50ZXJpb3JWZXJ0ZXgoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gRHVwbGljYXRlIHByZXZpb3VzIHZlcnRleCB0byBiZSBhYmxlIHRvIGRyYXcgR0xfTElORVMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHByZXYgPSBzZWctPmdldElu
dGVyaW9yVmVydGV4KGkgLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5h
ZGRJbnRlcmlvckVkZ2VWZXJ0ZXgocHJldi54KCksIHByZXYueSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWNoZS5hZGRJbnRlcmlvckVkZ2VWZXJ0ZXgodmVydC54KCksIHZlcnQu
eSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZiAvLyBMT09QX0JMSU5OX1BB
VEhfQ0FDSEVfREVCVUdfSU5URVJJT1JfRURHRVMKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IFJ1biB0aGUgaW50ZXJpb3IgcGF0aHMgdGhyb3VnaCBhIHRlc3NlbGxhdGlvbiBhbGdvcml0aG0K
LSAgICAvLyBzdXBwb3J0aW5nIG11bHRpcGxlIGNvbnRvdXJzLgotICAgIHRlc3NlbGxhdGVJbnRl
cmlvcihjYWNoZSk7Ci19Ci0KLXZvaWQgTG9vcEJsaW5uUGF0aFByb2Nlc3Nvcjo6YnVpbGRDb250
b3Vycyhjb25zdCBQYXRoJiBwYXRoKQotewotICAgIC8vIENsZWFyIG91dCB0aGUgY29udG91cnMK
LSAgICBtX2NvbnRvdXJzLmNsZWFyKCk7Ci0gICAgaWYgKHBhdGguaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmIFVTRShTS0lBKQotICAgIFNrUGF0aDo6SXRlciBpdGVyKCpwYXRoLnBs
YXRmb3JtUGF0aCgpLCBmYWxzZSk7Ci0gICAgU2tQb2ludCBwb2ludHNbNF07Ci0gICAgU2tQYXRo
OjpWZXJiIHZlcmI7Ci0gICAgQ29udG91ciogY29udG91ciA9IDA7Ci0gICAgU2tQb2ludCBjdXJQ
b2ludCA9IHsgMCB9OwotICAgIFNrUG9pbnQgbW92ZVRvUG9pbnQgPSB7IDAgfTsKLSAgICBkbyB7
Ci0gICAgICAgIHZlcmIgPSBpdGVyLm5leHQocG9pbnRzKTsKLSAgICAgICAgaWYgKHZlcmIgIT0g
U2tQYXRoOjprTW92ZV9WZXJiKSB7Ci0gICAgICAgICAgICBpZiAoIWNvbnRvdXIpIHsKLSAgICAg
ICAgICAgICAgICBjb250b3VyID0gbV9hcmVuYS0+YWxsb2NhdGVPYmplY3Q8Q29udG91cj4oKTsK
LSAgICAgICAgICAgICAgICBtX2NvbnRvdXJzLmFwcGVuZChjb250b3VyKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBzd2l0Y2ggKHZlcmIpIHsKLSAgICAgICAgY2FzZSBTa1Bh
dGg6OmtNb3ZlX1ZlcmI6IHsKLSAgICAgICAgICAgIGNvbnRvdXIgPSBtX2FyZW5hLT5hbGxvY2F0
ZU9iamVjdDxDb250b3VyPigpOwotICAgICAgICAgICAgbV9jb250b3Vycy5hcHBlbmQoY29udG91
cik7Ci0gICAgICAgICAgICBjdXJQb2ludCA9IHBvaW50c1swXTsKLSAgICAgICAgICAgIG1vdmVU
b1BvaW50ID0gcG9pbnRzWzBdOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGlmIChtX3Zl
cmJvc2VMb2dnaW5nKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiTW92ZVRvICglZiwgJWYp
IiwgcG9pbnRzWzBdLmZYLCBwb2ludHNbMF0uZlkpOwotI2VuZGlmCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFNrUGF0aDo6a0xpbmVfVmVyYjogewotICAgICAg
ICAgICAgU2VnbWVudCogc2VnbWVudCA9IG1fYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFNlZ21lbnQ+
KCk7Ci0gICAgICAgICAgICBpZiAoaXRlci5pc0Nsb3NlTGluZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgc2VnbWVudC0+c2V0dXAobV9hcmVuYS5nZXQoKSwgY29udG91ciwgY3VyUG9pbnQsIHBvaW50
c1sxXSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIGlmIChtX3ZlcmJvc2VMb2dn
aW5nKQotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNsb3NlTGluZVRvICglZiwgJWYp
LCAoJWYsICVmKSIsIGN1clBvaW50LmZYLCBjdXJQb2ludC5mWSwgcG9pbnRzWzFdLmZYLCBwb2lu
dHNbMV0uZlkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udG91ci0+YWRkKHNlZ21lbnQp
OwotICAgICAgICAgICAgICAgIGNvbnRvdXIgPSAwOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBzZWdtZW50LT5zZXR1cChtX2FyZW5hLmdldCgpLCBjb250b3VyLCBwb2lu
dHNbMF0sIHBvaW50c1sxXSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgICAgIGlmICht
X3ZlcmJvc2VMb2dnaW5nKQotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkxpbmVUbyAo
JWYsICVmKSwgKCVmLCAlZikiLCBwb2ludHNbMF0uZlgsIHBvaW50c1swXS5mWSwgcG9pbnRzWzFd
LmZYLCBwb2ludHNbMV0uZlkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgY29udG91ci0+YWRk
KHNlZ21lbnQpOwotICAgICAgICAgICAgICAgIGN1clBvaW50ID0gcG9pbnRzWzFdOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTa1Bh
dGg6OmtRdWFkX1ZlcmI6IHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gZGVncmVlIGVsZXZhdGUg
dGhlIHF1YWRyYXRpYyBpbnRvIGEgY3ViaWMKLSAgICAgICAgICAgIFNrUG9pbnQgY3ViaWNbNF07
Ci0gICAgICAgICAgICBTa0NvbnZlcnRRdWFkVG9DdWJpYyhwb2ludHMsIGN1YmljKTsKLSAgICAg
ICAgICAgIFNlZ21lbnQqIHNlZ21lbnQgPSBtX2FyZW5hLT5hbGxvY2F0ZU9iamVjdDxTZWdtZW50
PigpOwotICAgICAgICAgICAgc2VnbWVudC0+c2V0dXAobV9hcmVuYS5nZXQoKSwgY29udG91ciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1YmljWzBdLCBjdWJpY1sxXSwgY3ViaWNbMl0s
IGN1YmljWzNdKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICBpZiAobV92ZXJib3NlTG9n
Z2luZykKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlF1YWQtPkN1YmljVG8gKCVmLCAlZiks
ICglZiwgJWYpLCAoJWYsICVmKSwgKCVmLCAlZikiLCBjdWJpY1swXS5mWCwgY3ViaWNbMF0uZlks
IGN1YmljWzFdLmZYLCBjdWJpY1sxXS5mWSwgY3ViaWNbMl0uZlgsIGN1YmljWzJdLmZZLCBjdWJp
Y1szXS5mWCwgY3ViaWNbM10uZlkpOwotI2VuZGlmCi0gICAgICAgICAgICBjb250b3VyLT5hZGQo
c2VnbWVudCk7Ci0gICAgICAgICAgICBjdXJQb2ludCA9IGN1YmljWzNdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBTa1BhdGg6OmtDdWJpY19WZXJiOiB7Ci0g
ICAgICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gbV9hcmVuYS0+YWxsb2NhdGVPYmplY3Q8U2Vn
bWVudD4oKTsKLSAgICAgICAgICAgIHNlZ21lbnQtPnNldHVwKG1fYXJlbmEuZ2V0KCksIGNvbnRv
dXIsIHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSk7Ci0jaWZuZGVm
IE5ERUJVRwotICAgICAgICAgICAgaWYgKG1fdmVyYm9zZUxvZ2dpbmcpCi0gICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDdWJpY1RvICglZiwgJWYpLCAoJWYsICVmKSwgKCVmLCAlZiksICglZiwg
JWYpIiwgcG9pbnRzWzBdLmZYLCBwb2ludHNbMF0uZlksIHBvaW50c1sxXS5mWCwgcG9pbnRzWzFd
LmZZLCBwb2ludHNbMl0uZlgsIHBvaW50c1syXS5mWSwgcG9pbnRzWzNdLmZYLCBwb2ludHNbM10u
ZlkpOwotI2VuZGlmCi0gICAgICAgICAgICBjb250b3VyLT5hZGQoc2VnbWVudCk7Ci0gICAgICAg
ICAgICBjdXJQb2ludCA9IHBvaW50c1szXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgU2tQYXRoOjprQ2xvc2VfVmVyYjogewotICAgICAgICAgICAgU2VnbWVu
dCogc2VnbWVudCA9IG1fYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFNlZ21lbnQ+KCk7Ci0gICAgICAg
ICAgICBzZWdtZW50LT5zZXR1cChtX2FyZW5hLmdldCgpLCBjb250b3VyLCBjdXJQb2ludCwgbW92
ZVRvUG9pbnQpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgICAgIGlmIChtX3ZlcmJvc2VMb2dn
aW5nKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ2xvc2UgKCVmLCAlZikgLT4gKCVmLCAl
ZikiLCBjdXJQb2ludC5mWCwgY3VyUG9pbnQuZlksIG1vdmVUb1BvaW50LmZYLCBtb3ZlVG9Qb2lu
dC5mWSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGNvbnRvdXItPmFkZChzZWdtZW50KTsKLSAgICAg
ICAgICAgIGNvbnRvdXIgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2tQYXRoOjprRG9u
ZV9WZXJiOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlICh2ZXJi
ICE9IFNrUGF0aDo6a0RvbmVfVmVyYik7Ci0jZWxzZSAvLyAhVVNFKFNLSUEpCi0gICAgVU5VU0VE
X1BBUkFNKHBhdGgpOwotICAgIC8vIE11c3QgcG9ydCB0byB5b3VyIHBsYXRmb3JtLgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLSNpZm5kZWYgTkRFQlVHCi1WZWN0b3I8
U2VnbWVudCo+IExvb3BCbGlublBhdGhQcm9jZXNzb3I6OmFsbFNlZ21lbnRzT3ZlcmxhcHBpbmdZ
KENvbnRvdXIqIHF1ZXJ5Q29udG91ciwgZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBWZWN0b3I8
U2VnbWVudCo+IHJlczsKLSAgICBmb3IgKFZlY3RvcjxDb250b3VyKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2NvbnRvdXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jb250b3Vycy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIENvbnRvdXIqIGN1ciA9ICppdGVyOwotICAgICAgICBmb3IgKFNlZ21lbnQqIHNl
ZyA9IGN1ci0+YmVnaW4oKTsgc2VnICE9IGN1ci0+ZW5kKCk7IHNlZyA9IHNlZy0+bmV4dCgpKSB7
Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gc2VnLT5ib3VuZGlu
Z0JveCgpOwotICAgICAgICAgICAgaWYgKGJvdW5kaW5nQm94LnkoKSA8PSB5ICYmIHkgPD0gYm91
bmRpbmdCb3gubWF4WSgpKQotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoc2VnKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzOwotfQotI2VuZGlmCi0KLS8vIFVuY29tbWVudCB0
aGlzIHRvIGRlYnVnIHRoZSBvcmllbnRhdGlvbiBjb21wdXRhdGlvbi4KLS8vICNkZWZpbmUgR1BV
X1BBVEhfUFJPQ0VTU09SX0RFQlVHX09SSUVOVEFUSU9OCi0KLXZvaWQgTG9vcEJsaW5uUGF0aFBy
b2Nlc3Nvcjo6ZGV0ZXJtaW5lU2lkZXNUb0ZpbGwoKQotewotICAgIC8vIExvb3AgYW5kIEJsaW5u
J3MgYWxnb3JpdGhtIGNhbiBvbmx5IGVhc2lseSBlbXVsYXRlIHRoZSBldmVuL29kZAotICAgIC8v
IGZpbGwgcnVsZSwgYW5kIG9ubHkgZm9yIG5vbi1pbnRlcnNlY3RpbmcgY3VydmVzLiBXZSBjYW4g
ZGV0ZXJtaW5lCi0gICAgLy8gd2hpY2ggc2lkZSBvZiBlYWNoIGN1cnZlIHNlZ21lbnQgdG8gZmls
bCBiYXNlZCBvbiBpdHMKLSAgICAvLyBjbG9ja3dpc2UvY291bnRlcmNsb2Nrd2lzZSBvcmllbnRh
dGlvbiBhbmQgaG93IG1hbnkgb3RoZXIKLSAgICAvLyBjb250b3VycyBzdXJyb3VuZCBpdC4KLQot
ICAgIC8vIFRvIG9wdGltaXplIHRoZSBxdWVyeSBvZiBhbGwgY3VydmUgc2VnbWVudHMgaW50ZXJz
ZWN0aW5nIGEKLSAgICAvLyBob3Jpem9udGFsIGxpbmUgZ29pbmcgdG8geD0raW5maW5pdHksIHdl
IGJ1aWxkIHVwIGFuIGludGVydmFsCi0gICAgLy8gdHJlZSB3aG9zZSBrZXlzIGFyZSB0aGUgeSBl
eHRlbnRzIG9mIHRoZSBzZWdtZW50cy4KLSAgICBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIFNlZ21l
bnQqPiB0cmVlKG1fYXJlbmEpOwotICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGZsb2F0LCBT
ZWdtZW50Kj46OkludGVydmFsVHlwZSBJbnRlcnZhbFR5cGU7Ci0KLSAgICBmb3IgKFZlY3RvcjxD
b250b3VyKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NvbnRvdXJzLmJlZ2luKCk7IGl0ZXIgIT0gbV9j
b250b3Vycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIENvbnRvdXIqIGN1ciA9ICppdGVyOwot
ICAgICAgICBkZXRlcm1pbmVPcmllbnRhdGlvbihjdXIpOwotICAgICAgICBmb3IgKFNlZ21lbnQq
IHNlZyA9IGN1ci0+YmVnaW4oKTsgc2VnICE9IGN1ci0+ZW5kKCk7IHNlZyA9IHNlZy0+bmV4dCgp
KSB7Ci0gICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gc2VnLT5ib3Vu
ZGluZ0JveCgpOwotICAgICAgICAgICAgdHJlZS5hZGQodHJlZS5jcmVhdGVJbnRlcnZhbChib3Vu
ZGluZ0JveC55KCksIGJvdW5kaW5nQm94Lm1heFkoKSwgc2VnKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBOb3cgaXRlcmF0ZSB0aHJvdWdoIHRoZSBjb250b3VycyBhbmQgcGljayBhIHJh
bmRvbSBzZWdtZW50IChpbgotICAgIC8vIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIGZpcnN0KSBhbmQg
YSByYW5kb20gcG9pbnQgb24gdGhhdCBzZWdtZW50LgotICAgIC8vIEZpbmQgYWxsIHNlZ21lbnRz
IGZyb20gb3RoZXIgY29udG91cnMgd2hpY2ggaW50ZXJzZWN0IHRoaXMgb25lCi0gICAgLy8gYW5k
IGNvdW50IHRoZSBudW1iZXIgb2YgY3Jvc3NpbmdzIGEgaG9yaXpvbnRhbCBsaW5lIHRvCi0gICAg
Ly8geD0raW5maW5pdHkgbWFrZXMgd2l0aCB0aG9zZSBjb250b3Vycy4gVGhpcyBjb21iaW5lZCB3
aXRoIHRoZQotICAgIC8vIG9yaWVudGF0aW9uIG9mIHRoZSBjdXJ2ZSB0ZWxscyB1cyB3aGljaCBz
aWRlIHRvIGZpbGwgLS0gYWdhaW4sCi0gICAgLy8gYXNzdW1pbmcgYW4gZXZlbi9vZGQgZmlsbCBy
dWxlLCB3aGljaCBpcyBhbGwgd2UgY2FuIGVhc2lseQotICAgIC8vIGhhbmRsZS4KLSAgICBmb3Ig
KFZlY3RvcjxDb250b3VyKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NvbnRvdXJzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jb250b3Vycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIENvbnRvdXIqIGN1ciA9
ICppdGVyOwotCi0gICAgICAgIGJvb2wgYW1iaWd1b3VzID0gdHJ1ZTsKLSAgICAgICAgaW50IG51
bUNyb3NzaW5ncyA9IDA7Ci0KLSAgICAgICAgLy8gRm9yIGVhY2ggY29udG91ciwgYXR0ZW1wdCB0
byBmaW5kIGEgcG9pbnQgb24gdGhlIGNvbnRvdXIgd2hpY2gsCi0gICAgICAgIC8vIHdoZW4gd2Ug
Y2FzdCBhbiBYUmF5LCBkb2VzIG5vdCBpbnRlcnNlY3QgdGhlIG90aGVyIGNvbnRvdXJzIGF0Ci0g
ICAgICAgIC8vIGFuIGFtYmlndW91cyBwb2ludCAodGhlIGp1bmN0aW9uIGJldHdlZW4gdHdvIGN1
cnZlcyBvciBhdCBhCi0gICAgICAgIC8vIHRhbmdlbnQgcG9pbnQpLiBBbWJpZ3VvdXMgcG9pbnRz
IG1ha2UgdGhlIGRldGVybWluYXRpb24gb2YKLSAgICAgICAgLy8gd2hldGhlciB0aGlzIGNvbnRv
dXIgaXMgY29udGFpbmVkIHdpdGhpbiBhbm90aGVyIGZyYWdpbGUuIE5vdGUKLSAgICAgICAgLy8g
dGhhdCB0aGlzIGxvb3AgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIHRvIHRoZSBzZWxlY3Rpb24g
b2YgYQotICAgICAgICAvLyBnb29kIGNhc3RpbmcgcG9pbnQuIFdlIGNvdWxkIGFzIHdlbGwgZXZh
bHVhdGUgYSBzZWdtZW50IHRvCi0gICAgICAgIC8vIGRldGVybWluZSBhIHBvaW50IHVwb24gaXQu
Ci0gICAgICAgIGZvciAoU2VnbWVudCogc2VnID0gY3VyLT5iZWdpbigpOwotICAgICAgICAgICAg
IGFtYmlndW91cyAmJiBzZWcgIT0gY3VyLT5lbmQoKTsKLSAgICAgICAgICAgICBzZWcgPSBzZWct
Pm5leHQoKSkgewotICAgICAgICAgICAgbnVtQ3Jvc3NpbmdzID0gMDsKLSAgICAgICAgICAgIC8v
IFdlIHVzZSBhIHplcm8tc2l6ZWQgdmVydGljYWwgaW50ZXJ2YWwgZm9yIHRoZSBxdWVyeS4KLSAg
ICAgICAgICAgIFZlY3RvcjxJbnRlcnZhbFR5cGU+IG92ZXJsYXBzID0gdHJlZS5hbGxPdmVybGFw
cyh0cmVlLmNyZWF0ZUludGVydmFsKHNlZy0+Z2V0UG9pbnQoMCkueSgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VnLT5nZXRQb2ludCgwKS55KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwKSk7Ci0jaWYgZGVmaW5lZChHUFVfUEFUSF9QUk9DRVNTT1JfREVCVUdfT1JJRU5UQVRJT04p
ICYmICFkZWZpbmVkKE5ERUJVRykKLSAgICAgICAgICAgIFZlY3RvcjxTZWdtZW50Kj4gc2xvd092
ZXJsYXBzID0gYWxsU2VnbWVudHNPdmVybGFwcGluZ1koY3VyLCBzZWctPmdldFBvaW50KDApLngo
KSwgc2VnLT5nZXRQb2ludCgwKS55KCkpOwotICAgICAgICAgICAgaWYgKG92ZXJsYXBzLnNpemUo
KSAhPSBzbG93T3ZlcmxhcHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJG
b3IgcXVlcnkgcG9pbnQgKCVmLCAlZikgb24gY29udG91ciAweCVwOiIsIHNlZy0+Z2V0UG9pbnQo
MCkueCgpLCBzZWctPmdldFBvaW50KDApLnkoKSwgY3VyKTsKLSAgICAgICAgICAgICAgICBMT0df
RVJST1IoIiBvdmVybGFwczoiKTsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG92ZXJsYXBzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IiAgJWQ6ICVzIiwgaSsxLCBvdmVybGFwc1tpXS5kYXRhKCktPnRvU3RyaW5nKCkuYXNjaWkoKS5k
YXRhKCkpOwotICAgICAgICAgICAgICAgIExPR19FUlJPUigiIHNsb3dPdmVybGFwczoiKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNsb3dPdmVybGFwcy5zaXplKCk7
IGkrKykKLSAgICAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCIgICVkOiAlcyIsIChpKzEpIHNs
b3dPdmVybGFwc1tpXS0+dG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJJ
bnRlcnZhbCB0cmVlOiIpOwotICAgICAgICAgICAgICAgIHRyZWUuZHVtcCgpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgQVNTRVJUKG92ZXJsYXBzLnNpemUoKSA9PSBzbG93T3ZlcmxhcHMu
c2l6ZSgpKTsKLSNlbmRpZiAvLyBkZWZpbmVkKEdQVV9QQVRIX1BST0NFU1NPUl9ERUJVR19PUklF
TlRBVElPTikgJiYgIWRlZmluZWQoTkRFQlVHKQotICAgICAgICAgICAgZm9yIChWZWN0b3I8SW50
ZXJ2YWxUeXBlPjo6aXRlcmF0b3IgaXRlciA9IG92ZXJsYXBzLmJlZ2luKCk7IGl0ZXIgIT0gb3Zl
cmxhcHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgICAgIGNvbnN0IEludGVydmFsVHlw
ZSYgaW50ZXJ2YWwgPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBTZWdtZW50KiBxdWVyeVNlZ21l
bnQgPSBpbnRlcnZhbC5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3JlIHNlZ21lbnRz
IGNvbWluZyBmcm9tIHRoZSBzYW1lIGNvbnRvdXIuCi0gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5
U2VnbWVudC0+Y29udG91cigpICE9IGN1cikgewotICAgICAgICAgICAgICAgICAgICAvLyBPbmx5
IHBlcmZvcm0gcXVlcmllcyB0aGF0IGNhbiBhZmZlY3QgdGhlIGNvbXB1dGF0aW9uLgotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94ID0gcXVlcnlTZWdtZW50
LT5jb250b3VyKCktPmJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWct
PmdldFBvaW50KDApLngoKSA+PSBib3VuZGluZ0JveC54KCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICYmIHNlZy0+Z2V0UG9pbnQoMCkueCgpIDw9IGJvdW5kaW5nQm94Lm1heFgoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtQ3Jvc3NpbmdzICs9IHF1ZXJ5U2VnbWVudC0+bnVtQ3Jv
c3NpbmdzRm9yWFJheShzZWctPmdldFBvaW50KDApLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbWJpZ3Vv
dXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFtYmlndW91cykgewotI2lmbmRlZiBO
REVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV92ZXJib3NlTG9nZ2luZykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkFtYmlndW91cyBp
bnRlcnNlY3Rpb24gcXVlcnkgYXQgcG9pbnQgKCVmLCAlZikiLCBzZWctPmdldFBvaW50KDApLngo
KSwgc2VnLT5nZXRQb2ludCgwKS55KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIlF1ZXJ5IHNlZ21lbnQ6ICVzIiwgcXVlcnlTZWdtZW50LT50b1N0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gQWJvcnQgaXRlcmF0aW9uIG92
ZXIgb3ZlcmxhcHMuCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gLy8gZm9y
IChTZWdtZW50KiBzZWcgPSBjdXItPmJlZ2luKCk7IC4uLgotCi0gICAgICAgIGN1ci0+c2V0Rmls
bFNpZGUoKGN1ci0+aXNPcmllbnRlZENvdW50ZXJDbG9ja3dpc2UoKSBeIChudW1Dcm9zc2luZ3Mg
JiAxKSkgPyBMb29wQmxpbm5Db25zdGFudHM6OkxlZnRTaWRlIDogTG9vcEJsaW5uQ29uc3RhbnRz
OjpSaWdodFNpZGUpOwotICAgIH0KLX0KLQotdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpk
ZXRlcm1pbmVPcmllbnRhdGlvbihDb250b3VyKiBjb250b3VyKQotewotICAgIC8vIERldGVybWlu
ZSBzaWduZWQgYXJlYSBvZiB0aGUgcG9seWdvbiByZXByZXNlbnRlZCBieSB0aGUgcG9pbnRzCi0g
ICAgLy8gYWxvbmcgdGhlIHNlZ21lbnRzLiBDb25zaWRlciB0aGlzIGFuIGFwcHJveGltYXRpb24g
dG8gdGhlIHRydWUKLSAgICAvLyBvcmllbnRhdGlvbiBvZiB0aGUgcG9seWdvbjsgaXQgcHJvYmFi
bHkgd29uJ3QgaGFuZGxlCi0gICAgLy8gc2VsZi1pbnRlcnNlY3RpbmcgY3VydmVzIGNvcnJlY3Rs
eS4KLSAgICAvLwotICAgIC8vIFRoZXJlIGlzIGFsc28gYSBwcmV0dHkgYmFzaWMgYXNzdW1wdGlv
biBoZXJlIHRoYXQgdGhlIGNvbnRvdXIgaXMKLSAgICAvLyBjbG9zZWQuCi0gICAgZmxvYXQgc2ln
bmVkQXJlYSA9IDA7Ci0gICAgZm9yIChTZWdtZW50KiBzZWcgPSBjb250b3VyLT5iZWdpbigpOwot
ICAgICAgICAgc2VnICE9IGNvbnRvdXItPmVuZCgpOwotICAgICAgICAgc2VnID0gc2VnLT5uZXh0
KCkpIHsKLSAgICAgICAgaW50IGxpbWl0ID0gKHNlZy0+a2luZCgpID09IFNlZ21lbnQ6OkN1Ymlj
KSA/IDQgOiAyOwotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxpbWl0OyBpKyspIHsKLSAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHByZXZQb2ludCA9IHNlZy0+Z2V0UG9pbnQoaSAt
IDEpOwotICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQgPSBzZWctPmdldFBvaW50
KGkpOwotICAgICAgICAgICAgZmxvYXQgY3VyQXJlYSA9IHByZXZQb2ludC54KCkgKiBwb2ludC55
KCkgLSBwcmV2UG9pbnQueSgpICogcG9pbnQueCgpOwotI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
ICAgIGlmIChtX3ZlcmJvc2VMb2dnaW5nKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiQWRk
aW5nIHRvIHNpZ25lZCBhcmVhICglZiwgJWYpIC0+ICglZiwgJWYpID0gJWYiLCBwcmV2UG9pbnQu
eCgpLCBwcmV2UG9pbnQueSgpLCBwb2ludC54KCksIHBvaW50LnkoKSwgY3VyQXJlYSk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIHNpZ25lZEFyZWEgKz0gY3VyQXJlYTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGlmIChzaWduZWRBcmVhID4gMCkKLSAgICAgICAgY29udG91ci0+c2V0SXNPcmllbnRl
ZENvdW50ZXJDbG9ja3dpc2UodHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBjb250b3VyLT5zZXRJ
c09yaWVudGVkQ291bnRlckNsb2Nrd2lzZShmYWxzZSk7Ci19Ci0KLW5hbWVzcGFjZSB7Ci0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gQ2xhc3NlcyBhbmQgdHlwZWRlZnMgbmVlZGVkIGZvciBjdXJ2ZSBz
dWJkaXZpc2lvbi4gVGhlc2UgY2FuJ3QgYmUgc2NvcGVkCi0vLyB3aXRoaW4gdGhlIHN1YmRpdmlk
ZUN1cnZlcygpIG1ldGhvZCBpdHNlbGYsIGJlY2F1c2UgdGVtcGxhdGVzIHRoZW4gZmFpbAotLy8g
dG8gaW5zdGFudGlhdGUuCi0KLS8vIFRoZSB1c2VyIGRhdGEgd2hpY2ggaXMgcGxhY2VkIGluIHRo
ZSBQT0RJbnRlcnZhbFRyZWUuCi1zdHJ1Y3QgU3dlZXBEYXRhIHsKLSAgICBTd2VlcERhdGEoKQot
ICAgICAgICA6IHRyaWFuZ2xlKDApCi0gICAgICAgICwgc2VnbWVudCgwKQotICAgIHsKLSAgICB9
Ci0KLSAgICAvLyBUaGUgdHJpYW5nbGUgdGhpcyBpbnRlcnZhbCBpcyBhc3NvY2lhdGVkIHdpdGgK
LSAgICBMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VHJpYW5nbGUqIHRyaWFuZ2xlOwotICAg
IC8vIFRoZSBzZWdtZW50IHRoZSB0cmlhbmdsZSBpcyBhc3NvY2lhdGVkIHdpdGgKLSAgICBTZWdt
ZW50KiBzZWdtZW50OwotfTsKLQotdHlwZWRlZiBQT0RJbnRlcnZhbFRyZWU8ZmxvYXQsIFN3ZWVw
RGF0YSo+IFN3ZWVwVHJlZTsKLXR5cGVkZWYgU3dlZXBUcmVlOjpJbnRlcnZhbFR5cGUgU3dlZXBJ
bnRlcnZhbDsKLQotLy8gVGhlIGVudHJ5IC8gZXhpdCBldmVudHMgd2hpY2ggb2NjdXIgYXQgdGhl
IG1pbmltdW0gYW5kIG1heGltdW0geAotLy8gY29vcmRpbmF0ZXMgb2YgdGhlIGNvbnRyb2wgcG9p
bnQgdHJpYW5nbGVzJyBib3VuZGluZyBib3hlcy4KLS8vCi0vLyBOb3RlIHRoYXQgdGhpcyBjbGFz
cyByZXF1aXJlcyBpdHMgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudAotLy8gb3BlcmF0
b3Igc2luY2UgaXQgbmVlZHMgdG8gYmUgc3RvcmVkIGluIGEgVmVjdG9yLgotY2xhc3MgU3dlZXBF
dmVudCB7Ci1wdWJsaWM6Ci0gICAgU3dlZXBFdmVudCgpCi0gICAgICAgIDogbV94KDApCi0gICAg
ICAgICwgbV9lbnRyeShmYWxzZSkKLSAgICAgICAgLCBtX2ludGVydmFsKDAsIDAsIDApCi0gICAg
ewotICAgIH0KLQotICAgIC8vIEluaXRpYWxpemVzIHRoZSBTd2VlcEV2ZW50LgotICAgIHZvaWQg
c2V0dXAoZmxvYXQgeCwgYm9vbCBlbnRyeSwgU3dlZXBJbnRlcnZhbCBpbnRlcnZhbCkKLSAgICB7
Ci0gICAgICAgIG1feCA9IHg7Ci0gICAgICAgIG1fZW50cnkgPSBlbnRyeTsKLSAgICAgICAgbV9p
bnRlcnZhbCA9IGludGVydmFsOwotICAgIH0KLQotICAgIGZsb2F0IHgoKSBjb25zdCB7IHJldHVy
biBtX3g7IH0KLSAgICBib29sIGVudHJ5KCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeTsgfQotICAg
IGNvbnN0IFN3ZWVwSW50ZXJ2YWwmIGludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcnZh
bDsgfQotCi0gICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3dlZXBFdmVudCYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV94IDwgb3RoZXIubV94OwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBmbG9hdCBtX3g7Ci0gICAgYm9vbCBtX2VudHJ5OwotICAgIFN3ZWVwSW50ZXJ2YWwg
bV9pbnRlcnZhbDsKLX07Ci0KLWJvb2wgdHJpYW5nbGVzT3ZlcmxhcChMb29wQmxpbm5Mb2NhbFRy
aWFuZ3VsYXRvcjo6VHJpYW5nbGUqIHQwLAotICAgICAgICAgICAgICAgICAgICAgIExvb3BCbGlu
bkxvY2FsVHJpYW5ndWxhdG9yOjpUcmlhbmdsZSogdDEpCi17Ci0gICAgcmV0dXJuIHRyaWFuZ2xl
c092ZXJsYXAodDAtPmdldFZlcnRleCgwKS0+eHlDb29yZGluYXRlcygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHQwLT5nZXRWZXJ0ZXgoMSktPnh5Q29vcmRpbmF0ZXMoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0MC0+Z2V0VmVydGV4KDIpLT54eUNvb3JkaW5hdGVzKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEtPmdldFZlcnRleCgwKS0+eHlDb29yZGlu
YXRlcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxLT5nZXRWZXJ0ZXgoMSktPnh5
Q29vcmRpbmF0ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MS0+Z2V0VmVydGV4
KDIpLT54eUNvb3JkaW5hdGVzKCkpOwotfQotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQot
dm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpzdWJkaXZpZGVDdXJ2ZXMoKQotewotICAgIC8v
IFdlIG5lZWQgdG8gZGV0ZXJtaW5lIGFsbCBvdmVybGFwcyBvZiBhbGwgY29udHJvbCBwb2ludCB0
cmlhbmdsZXMKLSAgICAvLyAoZnJvbSBkaWZmZXJlbnQgc2VnbWVudHMsIG5vdCB0aGUgc2FtZSBz
ZWdtZW50KSBhbmQsIGlmIGFueQotICAgIC8vIGV4aXN0LCBzdWJkaXZpZGUgdGhlIGFzc29jaWF0
ZWQgY3VydmVzLgotICAgIC8vCi0gICAgLy8gVGhlIHBsYW5lLXN3ZWVwIGFsZ29yaXRobSBkZXRl
cm1pbmVzIGFsbCBvdmVybGFwcyBvZiBhIHNldCBvZgotICAgIC8vIHJlY3RhbmdsZXMgaW4gdGhl
IDJEIHBsYW5lLiBPdXIgcHJvYmxlbSBtYXBzIHZlcnkgd2VsbCB0byB0aGlzCi0gICAgLy8gYWxn
b3JpdGhtIGFuZCBzaWduaWZpY2FudGx5IHJlZHVjZXMgdGhlIGNvbXBsZXhpdHkgY29tcGFyZWQg
dG8gYQotICAgIC8vIG5haXZlIGltcGxlbWVudGF0aW9uLgotICAgIC8vCi0gICAgLy8gRWFjaCBi
b3VuZGluZyBib3ggb2YgYSBjb250cm9sIHBvaW50IHRyaWFuZ2xlIGlzIGNvbnZlcnRlZCBpbnRv
Ci0gICAgLy8gYW4gImVudHJ5IiBldmVudCBhdCBpdHMgc21hbGxlc3QgWCBjb29yZGluYXRlIGFu
ZCBhbiAiZXhpdCIgZXZlbnQKLSAgICAvLyBhdCBpdHMgbGFyZ2VzdCBYIGNvb3JkaW5hdGUuIEVh
Y2ggZXZlbnQgaGFzIGFuIGFzc29jaWF0ZWQKLSAgICAvLyBvbmUtZGltZW5zaW9uYWwgaW50ZXJ2
YWwgcmVwcmVzZW50aW5nIHRoZSBZIHNwYW4gb2YgdGhlIGJvdW5kaW5nCi0gICAgLy8gYm94LiBX
ZSBzb3J0IHRoZXNlIGV2ZW50cyBieSBpbmNyZWFzaW5nIFggY29vcmRpbmF0ZS4gV2UgdGhlbgot
ICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCB0aGVtLiBGb3IgZWFjaCBlbnRyeSBldmVudCB3ZSBhZGQg
dGhlIGludGVydmFsIHRvCi0gICAgLy8gYSBzaWRlIGludGVydmFsIHRyZWUsIGFuZCBxdWVyeSB0
aGlzIHRyZWUgZm9yIG92ZXJsYXBwaW5nCi0gICAgLy8gaW50ZXJ2YWxzLiBBbnkgb3ZlcmxhcHBp
bmcgaW50ZXJ2YWwgY29ycmVzcG9uZHMgdG8gYW4gb3ZlcmxhcHBpbmcKLSAgICAvLyBib3VuZGlu
ZyBib3guIEZvciBlYWNoIGV4aXQgZXZlbnQgd2UgcmVtb3ZlIHRoZSBhc3NvY2lhdGVkCi0gICAg
Ly8gaW50ZXJ2YWwgZnJvbSB0aGUgaW50ZXJ2YWwgdHJlZS4KLQotICAgIFZlY3RvcjxTZWdtZW50
Kj4gY3VyU2VnbWVudHM7Ci0gICAgVmVjdG9yPFNlZ21lbnQqPiBuZXh0U2VnbWVudHM7Ci0KLSAg
ICAvLyBTdGFydCB0aGluZ3Mgb2ZmIGJ5IGNvbnNpZGVyaW5nIGFsbCBvZiB0aGUgc2VnbWVudHMK
LSAgICBmb3IgKFZlY3RvcjxDb250b3VyKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NvbnRvdXJzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9jb250b3Vycy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIENvbnRv
dXIqIGN1ciA9ICppdGVyOwotICAgICAgICBmb3IgKFNlZ21lbnQqIHNlZyA9IGN1ci0+YmVnaW4o
KTsgc2VnICE9IGN1ci0+ZW5kKCk7IHNlZyA9IHNlZy0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBp
ZiAoc2VnLT5raW5kKCkgPT0gU2VnbWVudDo6Q3ViaWMpIHsKLSAgICAgICAgICAgICAgICBzZWct
PnRyaWFuZ3VsYXRlKExvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yOjpEb250Q29tcHV0ZUluc2lk
ZUVkZ2VzLCAwKTsKLSAgICAgICAgICAgICAgICBjdXJTZWdtZW50cy5hcHBlbmQoc2VnKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFN1YmRpdmlkZSBjdXJ2ZXMg
YXQgbW9zdCB0aGlzIG1hbnkgdGltZXMKLSAgICBjb25zdCBpbnQgTWF4SXRlcmF0aW9ucyA9IDU7
Ci0gICAgVmVjdG9yPFN3ZWVwSW50ZXJ2YWw+IG92ZXJsYXBzOwotCi0gICAgZm9yIChpbnQgY3Vy
cmVudEl0ZXJhdGlvbiA9IDA7IGN1cnJlbnRJdGVyYXRpb24gPCBNYXhJdGVyYXRpb25zOyArK2N1
cnJlbnRJdGVyYXRpb24pIHsKLSAgICAgICAgaWYgKCFjdXJTZWdtZW50cy5zaXplKCkpCi0gICAg
ICAgICAgICAvLyBEb25lCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBWZWN0b3I8U3dl
ZXBFdmVudD4gZXZlbnRzOwotICAgICAgICBTd2VlcFRyZWUgdHJlZShtX2FyZW5hKTsKLSAgICAg
ICAgZm9yIChWZWN0b3I8U2VnbWVudCo+OjppdGVyYXRvciBpdGVyID0gY3VyU2VnbWVudHMuYmVn
aW4oKTsgaXRlciAhPSBjdXJTZWdtZW50cy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBT
ZWdtZW50KiBzZWcgPSAqaXRlcjsKLSAgICAgICAgICAgIEFTU0VSVChzZWctPmtpbmQoKSA9PSBT
ZWdtZW50OjpDdWJpYyk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlZy0+bnVt
YmVyT2ZUcmlhbmdsZXMoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgTG9vcEJsaW5uTG9jYWxU
cmlhbmd1bGF0b3I6OlRyaWFuZ2xlKiB0cmlhbmdsZSA9IHNlZy0+Z2V0VHJpYW5nbGUoaSk7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OwotICAgICAgICAgICAgICAgIGJv
dW5kaW5nQm94LmZpdFRvUG9pbnRzKHRyaWFuZ2xlLT5nZXRWZXJ0ZXgoMCktPnh5Q29vcmRpbmF0
ZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlhbmdsZS0+
Z2V0VmVydGV4KDEpLT54eUNvb3JkaW5hdGVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJpYW5nbGUtPmdldFZlcnRleCgyKS0+eHlDb29yZGluYXRlcygpKTsK
LSAgICAgICAgICAgICAgICAvLyBJZ25vcmUgemVyby13aWR0aCB0cmlhbmdsZXMgdG8gYXZvaWQg
aXNzdWVzIHdpdGgKLSAgICAgICAgICAgICAgICAvLyBjb2luY2lkZW50IGVudHJ5IGFuZCBleGl0
IGV2ZW50cyBmb3IgdGhlIHNhbWUgdHJpYW5nbGUKLSAgICAgICAgICAgICAgICBpZiAoYm91bmRp
bmdCb3gubWF4WCgpID4gYm91bmRpbmdCb3gueCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN3
ZWVwRGF0YSogZGF0YSA9IG1fYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFN3ZWVwRGF0YT4oKTsKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YS0+dHJpYW5nbGUgPSB0cmlhbmdsZTsKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YS0+c2VnbWVudCA9IHNlZzsKLSAgICAgICAgICAgICAgICAgICAgU3dlZXBJ
bnRlcnZhbCBpbnRlcnZhbCA9IHRyZWUuY3JlYXRlSW50ZXJ2YWwoYm91bmRpbmdCb3gueSgpLCBi
b3VuZGluZ0JveC5tYXhZKCksIGRhdGEpOwotICAgICAgICAgICAgICAgICAgICAvLyBBZGQgZW50
cnkgYW5kIGV4aXQgZXZlbnRzCi0gICAgICAgICAgICAgICAgICAgIFN3ZWVwRXZlbnQgZXZlbnQ7
Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LnNldHVwKGJvdW5kaW5nQm94LngoKSwgdHJ1ZSwg
aW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKGV2ZW50KTsKLSAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuc2V0dXAoYm91bmRpbmdCb3gubWF4WCgpLCBmYWxzZSwg
aW50ZXJ2YWwpOwotICAgICAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKGV2ZW50KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBT
b3J0IGV2ZW50cyBieSBpbmNyZWFzaW5nIFggY29vcmRpbmF0ZQotICAgICAgICBzdGQ6OnNvcnQo
ZXZlbnRzLmJlZ2luKCksIGV2ZW50cy5lbmQoKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBm
b3IgKHNpemVfdCBpaSA9IDE7IGlpIDwgZXZlbnRzLnNpemUoKTsgKytpaSkKLSAgICAgICAgICAg
IEFTU0VSVChldmVudHNbaWkgLSAxXS54KCkgPD0gZXZlbnRzW2lpXS54KCkpOwotI2VuZGlmCi0K
LSAgICAgICAgLy8gTm93IGl0ZXJhdGUgdGhyb3VnaCB0aGUgZXZlbnRzCi0gICAgICAgIGZvciAo
VmVjdG9yPFN3ZWVwRXZlbnQ+OjppdGVyYXRvciBpdGVyID0gZXZlbnRzLmJlZ2luKCk7IGl0ZXIg
IT0gZXZlbnRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIFN3ZWVwRXZlbnQgZXZlbnQg
PSAqaXRlcjsKLSAgICAgICAgICAgIGlmIChldmVudC5lbnRyeSgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gU2VlIHdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgc2VnbWVudCBoYXMgYmVlbiBzdWJkaXZp
ZGVkIHlldAotICAgICAgICAgICAgICAgIGlmICghZXZlbnQuaW50ZXJ2YWwoKS5kYXRhKCktPnNl
Z21lbnQtPm1hcmtlZEZvclN1YmRpdmlzaW9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
UXVlcnkgdGhlIHRyZWUKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHMuY2xlYXIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgdHJlZS5hbGxPdmVybGFwcyhldmVudC5pbnRlcnZhbCgpLCBvdmVy
bGFwcyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdyBzZWUgZXhhY3RseSB3aGljaCB0cmlh
bmdsZXMgb3ZlcmxhcCB0aGlzIG9uZQotICAgICAgICAgICAgICAgICAgICBmb3IgKFZlY3RvcjxT
d2VlcEludGVydmFsPjo6aXRlcmF0b3IgaXRlciA9IG92ZXJsYXBzLmJlZ2luKCk7IGl0ZXIgIT0g
b3ZlcmxhcHMuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3dlZXBJ
bnRlcnZhbCBvdmVybGFwID0gKml0ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5
IHBheSBhdHRlbnRpb24gdG8gb3ZlcmxhcHMgZnJvbSBhIGRpZmZlcmVudCBTZWdtZW50Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuaW50ZXJ2YWwoKS5kYXRhKCktPnNlZ21lbnQg
IT0gb3ZlcmxhcC5kYXRhKCktPnNlZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTZWUgd2hldGhlciB0aGUgdHJpYW5nbGVzIGFjdHVhbGx5IG92ZXJsYXAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodHJpYW5nbGVzT3ZlcmxhcChldmVudC5pbnRlcnZhbCgp
LmRhdGEoKS0+dHJpYW5nbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3ZlcmxhcC5kYXRhKCktPnRyaWFuZ2xlKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSBzdWJkaXZpZGUgdGhlIHNlZ21lbnRzLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBFYWNoIG9uZSBtaWdodCBhbHJlYWR5IGhh
dmUgYmVlbiBzdWJkaXZpZGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWdt
ZW50KiBzZWcgPSBldmVudC5pbnRlcnZhbCgpLmRhdGEoKS0+c2VnbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxseVN1YmRpdmlkZShzZWcsIG5leHRTZWdt
ZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZyA9IG92ZXJsYXAuZGF0
YSgpLT5zZWdtZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25h
bGx5U3ViZGl2aWRlKHNlZywgbmV4dFNlZ21lbnRzKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgaW50ZXJ2YWwg
aW50byB0aGUgdHJlZQotICAgICAgICAgICAgICAgIHRyZWUuYWRkKGV2ZW50LmludGVydmFsKCkp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhpcyBp
bnRlcnZhbCBmcm9tIHRoZSB0cmVlCi0gICAgICAgICAgICAgICAgdHJlZS5yZW1vdmUoZXZlbnQu
aW50ZXJ2YWwoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJTZWdt
ZW50cy5zd2FwKG5leHRTZWdtZW50cyk7Ci0gICAgICAgIG5leHRTZWdtZW50cy5jbGVhcigpOwot
ICAgIH0KLX0KLQotdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpjb25kaXRpb25hbGx5U3Vi
ZGl2aWRlKFNlZ21lbnQqIHNlZywgVmVjdG9yPFNlZ21lbnQqPiYgbmV4dFNlZ21lbnRzKQotewot
ICAgIGlmICghc2VnLT5tYXJrZWRGb3JTdWJkaXZpc2lvbigpKSB7Ci0gICAgICAgIHNlZy0+c2V0
TWFya2VkRm9yU3ViZGl2aXNpb24odHJ1ZSk7Ci0gICAgICAgIFNlZ21lbnQqIG5leHQgPSBzZWct
PmNvbnRvdXIoKS0+c3ViZGl2aWRlKHNlZyk7Ci0gICAgICAgIC8vIFRyaWFuZ3VsYXRlIHRoZSBu
ZXdseSBzdWJkaXZpZGVkIHNlZ21lbnRzLgotICAgICAgICBuZXh0LT50cmlhbmd1bGF0ZShMb29w
Qmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6RG9udENvbXB1dGVJbnNpZGVFZGdlcywgMCk7Ci0gICAg
ICAgIG5leHQtPm5leHQoKS0+dHJpYW5ndWxhdGUoTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3I6
OkRvbnRDb21wdXRlSW5zaWRlRWRnZXMsIDApOwotICAgICAgICAvLyBBZGQgdGhlbSBmb3IgdGhl
IG5leHQgaXRlcmF0aW9uLgotICAgICAgICBuZXh0U2VnbWVudHMuYXBwZW5kKG5leHQpOwotICAg
ICAgICBuZXh0U2VnbWVudHMuYXBwZW5kKG5leHQtPm5leHQoKSk7Ci0gICAgfQotfQotCi0jaWZu
ZGVmIE5ERUJVRwotdm9pZCBMb29wQmxpbm5QYXRoUHJvY2Vzc29yOjpzdWJkaXZpZGVDdXJ2ZXNT
bG93KCkKLXsKLSAgICAvLyBBbHRlcm5hdGUsIHNpZ25pZmljYW50bHkgc2xvd2VyIGFsZ29yaXRo
bSBmb3IgY3VydmUgc3ViZGl2aXNpb24KLSAgICAvLyBmb3IgdXNlIGluIGRlYnVnZ2luZy4KLSAg
ICBWZWN0b3I8U2VnbWVudCo+IGN1clNlZ21lbnRzOwotICAgIFZlY3RvcjxTZWdtZW50Kj4gbmV4
dFNlZ21lbnRzOwotCi0gICAgLy8gU3RhcnQgdGhpbmdzIG9mZiBieSBjb25zaWRlcmluZyBhbGwg
b2YgdGhlIHNlZ21lbnRzCi0gICAgZm9yIChWZWN0b3I8Q29udG91cio+OjppdGVyYXRvciBpdGVy
ID0gbV9jb250b3Vycy5iZWdpbigpOyBpdGVyICE9IG1fY29udG91cnMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKLSAgICAgICAgZm9yIChTZWdtZW50KiBz
ZWcgPSBjdXItPmJlZ2luKCk7IHNlZyAhPSBjdXItPmVuZCgpOyBzZWcgPSBzZWctPm5leHQoKSkg
ewotICAgICAgICAgICAgaWYgKHNlZy0+a2luZCgpID09IFNlZ21lbnQ6OkN1YmljKSB7Ci0gICAg
ICAgICAgICAgICAgc2VnLT50cmlhbmd1bGF0ZShMb29wQmxpbm5Mb2NhbFRyaWFuZ3VsYXRvcjo6
RG9udENvbXB1dGVJbnNpZGVFZGdlcywgMCk7Ci0gICAgICAgICAgICAgICAgY3VyU2VnbWVudHMu
YXBwZW5kKHNlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBT
dWJkaXZpZGUgY3VydmVzIGF0IG1vc3QgdGhpcyBtYW55IHRpbWVzCi0gICAgY29uc3QgaW50IE1h
eEl0ZXJhdGlvbnMgPSA1OwotCi0gICAgZm9yIChpbnQgY3VycmVudEl0ZXJhdGlvbiA9IDA7IGN1
cnJlbnRJdGVyYXRpb24gPCBNYXhJdGVyYXRpb25zOyArK2N1cnJlbnRJdGVyYXRpb24pIHsKLSAg
ICAgICAgaWYgKCFjdXJTZWdtZW50cy5zaXplKCkpCi0gICAgICAgICAgICAvLyBEb25lCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBmb3IgKFZlY3RvcjxTZWdtZW50Kj46Oml0ZXJhdG9y
IGl0ZXIgPSBjdXJTZWdtZW50cy5iZWdpbigpOyBpdGVyICE9IGN1clNlZ21lbnRzLmVuZCgpOyAr
K2l0ZXIpIHsKLSAgICAgICAgICAgIFNlZ21lbnQqIHNlZyA9ICppdGVyOwotICAgICAgICAgICAg
QVNTRVJUKHNlZy0+a2luZCgpID09IFNlZ21lbnQ6OkN1YmljKTsKLSAgICAgICAgICAgIGZvciAo
VmVjdG9yPFNlZ21lbnQqPjo6aXRlcmF0b3IgaXRlcjIgPSBjdXJTZWdtZW50cy5iZWdpbigpOyBp
dGVyMiAhPSBjdXJTZWdtZW50cy5lbmQoKTsgKytpdGVyMikgewotICAgICAgICAgICAgICAgIFNl
Z21lbnQqIHNlZzIgPSAqaXRlcjI7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHNlZzItPmtpbmQo
KSA9PSBTZWdtZW50OjpDdWJpYyk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlZyAhPSBzZWcyKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2VnLT5udW1iZXJPZlRy
aWFuZ2xlcygpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExvb3BCbGlubkxvY2Fs
VHJpYW5ndWxhdG9yOjpUcmlhbmdsZSogdHJpYW5nbGUgPSBzZWctPmdldFRyaWFuZ2xlKGkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzZWcyLT5udW1iZXJP
ZlRyaWFuZ2xlcygpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wQmxp
bm5Mb2NhbFRyaWFuZ3VsYXRvcjo6VHJpYW5nbGUqIHRyaWFuZ2xlMiA9IHNlZzItPmdldFRyaWFu
Z2xlKGopOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmlhbmdsZXNPdmVybGFw
KHRyaWFuZ2xlLCB0cmlhbmdsZTIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmRpdGlvbmFsbHlTdWJkaXZpZGUoc2VnLCBuZXh0U2VnbWVudHMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25hbGx5U3ViZGl2aWRlKHNlZzIsIG5leHRTZWdt
ZW50cyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgY3VyU2VnbWVudHMuc3dhcChuZXh0U2VnbWVu
dHMpOwotICAgICAgICBuZXh0U2VnbWVudHMuY2xlYXIoKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQot
bmFtZXNwYWNlIHsKLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTdHJ1Y3R1cmVzIGFuZCBjYWxsYmFj
a3MgZm9yIHRlc3NlbGxhdGlvbiBvZiB0aGUgaW50ZXJpb3IgcmVnaW9uIG9mCi0vLyB0aGUgY29u
dG91cnMuCi0KLS8vIFRoZSB1c2VyIGRhdGEgZm9yIHRoZSBHTFUgdGVzc2VsbGF0b3IuCi1zdHJ1
Y3QgVGVzc2VsbGF0aW9uU3RhdGUgewotICAgIFRlc3NlbGxhdGlvblN0YXRlKExvb3BCbGlublBh
dGhDYWNoZSYgaW5wdXRDYWNoZSkKLSAgICAgICAgOiBjYWNoZShpbnB1dENhY2hlKSB7IH0KLQot
ICAgIExvb3BCbGlublBhdGhDYWNoZSYgY2FjaGU7Ci0gICAgVmVjdG9yPHZvaWQqPiBhbGxvY2F0
ZWRQb2ludGVyczsKLX07Ci0KLXN0YXRpYyB2b2lkIHZlcnRleENhbGxiYWNrKHZvaWQqIHZlcnRl
eERhdGEsIHZvaWQqIGRhdGEpCi17Ci0gICAgVGVzc2VsbGF0aW9uU3RhdGUqIHN0YXRlID0gc3Rh
dGljX2Nhc3Q8VGVzc2VsbGF0aW9uU3RhdGUqPihkYXRhKTsKLSAgICBHTGRvdWJsZSogbG9jYXRp
b24gPSBzdGF0aWNfY2FzdDxHTGRvdWJsZSo+KHZlcnRleERhdGEpOwotICAgIHN0YXRlLT5jYWNo
ZS5hZGRJbnRlcmlvclZlcnRleChzdGF0aWNfY2FzdDxmbG9hdD4obG9jYXRpb25bMF0pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4obG9jYXRp
b25bMV0pKTsKLX0KLQotc3RhdGljIHZvaWQgY29tYmluZUNhbGxiYWNrKEdMZG91YmxlIGNvb3Jk
c1szXSwgdm9pZCogdmVydGV4RGF0YVs0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGZsb2F0IHdlaWdodFs0XSwgdm9pZCoqIG91dERhdGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCogcG9seWdvbkRhdGEpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHZlcnRleERhdGEp
OwotICAgIFVOVVNFRF9QQVJBTSh3ZWlnaHQpOwotICAgIFRlc3NlbGxhdGlvblN0YXRlKiBzdGF0
ZSA9IHN0YXRpY19jYXN0PFRlc3NlbGxhdGlvblN0YXRlKj4ocG9seWdvbkRhdGEpOwotICAgIEdM
ZG91YmxlKiBvdXRWZXJ0ZXggPSBzdGF0aWNfY2FzdDxHTGRvdWJsZSo+KGZhc3RNYWxsb2MoMyAq
IHNpemVvZihHTGRvdWJsZSkpKTsKLSAgICBzdGF0ZS0+YWxsb2NhdGVkUG9pbnRlcnMuYXBwZW5k
KG91dFZlcnRleCk7Ci0gICAgb3V0VmVydGV4WzBdID0gY29vcmRzWzBdOwotICAgIG91dFZlcnRl
eFsxXSA9IGNvb3Jkc1sxXTsKLSAgICBvdXRWZXJ0ZXhbMl0gPSBjb29yZHNbMl07Ci0gICAgKm91
dERhdGEgPSBvdXRWZXJ0ZXg7Ci19Ci0KLXN0YXRpYyB2b2lkIGVkZ2VGbGFnQ2FsbGJhY2soR0xi
b29sZWFuKQotewotICAgIC8vIE5vLW9wIGp1c3QgdG8gcHJldmVudCB0cmlhbmdsZSBzdHJpcHMg
YW5kIGZhbnMgZnJvbSBiZWluZyBwYXNzZWQgdG8gdXMuCi0gICAgLy8gU2VlIHRoZSBPcGVuR0wg
UHJvZ3JhbW1pbmcgR3VpZGUsIENoYXB0ZXIgMTEsICJUZXNzZWxsYXRvcnMgYW5kIFF1YWRyaWNz
Ii4KLX0KLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgTG9vcEJsaW5uUGF0aFBy
b2Nlc3Nvcjo6dGVzc2VsbGF0ZUludGVyaW9yKExvb3BCbGlublBhdGhDYWNoZSYgY2FjaGUpCi17
Ci0gICAgLy8gQmVjYXVzZSB0aGUgR0xVIHRlc3NlbGxhdG9yIHJlcXVpcmVzIGl0cyBpbnB1dCBp
bgotICAgIC8vIGRvdWJsZS1wcmVjaXNpb24gZm9ybWF0LCB3ZSBuZWVkIHRvIG1ha2UgYSBzZXBh
cmF0ZSBjb3B5IG9mIHRoZQotICAgIC8vIGRhdGEuCi0gICAgVmVjdG9yPEdMZG91YmxlPiB2ZXJ0
ZXhEYXRhOwotICAgIFZlY3RvcjxzaXplX3Q+IGNvbnRvdXJFbmRpbmdzOwotICAgIC8vIEZvciBh
dm9pZGluZyBhZGRpbmcgY29pbmNpZGVudCB2ZXJ0aWNlcy4KLSAgICBmbG9hdCBjdXJYID0gMCwg
Y3VyWSA9IDA7Ci0gICAgZm9yIChWZWN0b3I8Q29udG91cio+OjppdGVyYXRvciBpdGVyID0gbV9j
b250b3Vycy5iZWdpbigpOyBpdGVyICE9IG1fY29udG91cnMuZW5kKCk7ICsraXRlcikgewotICAg
ICAgICBDb250b3VyKiBjdXIgPSAqaXRlcjsKLSAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0g
ICAgICAgIGZvciAoU2VnbWVudCogc2VnID0gY3VyLT5iZWdpbigpOyBzZWcgIT0gY3VyLT5lbmQo
KTsgc2VnID0gc2VnLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGludCBudW1iZXJPZkludGVyaW9y
VmVydGljZXMgPSBzZWctPm51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcygpOwotICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkludGVyaW9yVmVydGljZXMgLSAxOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBGbG9hdFBvaW50IHBvaW50ID0gc2VnLT5nZXRJbnRlcmlvclZlcnRl
eChpKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5hcHBlbmQocG9p
bnQueCgpKTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5hcHBlbmQocG9pbnQueSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5hcHBlbmQoMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGN1clggPSBwb2ludC54KCk7Ci0gICAgICAgICAgICAgICAgICAgIGN1clkgPSBw
b2ludC55KCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb2ludC54KCkgIT0gY3VyWCB8
fCBwb2ludC55KCkgIT0gY3VyWSkgIHsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5h
cHBlbmQocG9pbnQueCgpKTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5hcHBlbmQo
cG9pbnQueSgpKTsKLSAgICAgICAgICAgICAgICAgICAgdmVydGV4RGF0YS5hcHBlbmQoMCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGN1clggPSBwb2ludC54KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGN1clkgPSBwb2ludC55KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGNvbnRvdXJFbmRpbmdzLmFwcGVuZCh2ZXJ0ZXhEYXRhLnNpemUoKSk7
Ci0gICAgfQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYWxsIG9mIHRoZSB2ZXJ0ZXggZGF0YSBp
biBhIHN0YWJsZSBsb2NhdGlvbiBpbgotICAgIC8vIG1lbW9yeSwgY2FsbCB0aGUgdGVzc2VsbGF0
b3IuCi0gICAgR0xVdGVzc2VsYXRvciogdGVzcyA9IGludGVybmFsX2dsdU5ld1Rlc3MoKTsKLSAg
ICBUZXNzZWxsYXRpb25TdGF0ZSBzdGF0ZShjYWNoZSk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0Nh
bGxiYWNrKHRlc3MsIEdMVV9URVNTX1ZFUlRFWF9EQVRBLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEdMdm9pZCAoKikoKT4odmVydGV4Q2FsbGJhY2spKTsK
LSAgICBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xVX1RFU1NfQ09NQklORV9EQVRB
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdMdm9pZCAo
KikoKT4oY29tYmluZUNhbGxiYWNrKSk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRl
c3MsIEdMVV9URVNTX0VER0VfRkxBRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQgKCopKCk+KGVkZ2VGbGFnQ2FsbGJhY2spKTsKLSAgICBpbnRl
cm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKHRlc3MsICZzdGF0ZSk7Ci0gICAgaW50ZXJuYWxfZ2x1
VGVzc0JlZ2luQ29udG91cih0ZXNzKTsKLSAgICBHTGRvdWJsZSogYmFzZSA9IHZlcnRleERhdGEu
ZGF0YSgpOwotICAgIGludCBjb250b3VySW5kZXggPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdmVydGV4RGF0YS5zaXplKCk7IGkgKz0gMykgewotICAgICAgICBpZiAoaSA9PSBjb250
b3VyRW5kaW5nc1tjb250b3VySW5kZXhdKSB7Ci0gICAgICAgICAgICBpbnRlcm5hbF9nbHVUZXNz
RW5kQ29udG91cih0ZXNzKTsKLSAgICAgICAgICAgIGludGVybmFsX2dsdVRlc3NCZWdpbkNvbnRv
dXIodGVzcyk7Ci0gICAgICAgICAgICArK2NvbnRvdXJJbmRleDsKLSAgICAgICAgfQotICAgICAg
ICBpbnRlcm5hbF9nbHVUZXNzVmVydGV4KHRlc3MsICZiYXNlW2ldLCAmYmFzZVtpXSk7Ci0gICAg
fQotICAgIGludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKHRlc3MpOwotICAgIGludGVybmFsX2ds
dVRlc3NFbmRQb2x5Z29uKHRlc3MpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUu
YWxsb2NhdGVkUG9pbnRlcnMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZhc3RGcmVlKHN0YXRlLmFs
bG9jYXRlZFBvaW50ZXJzW2ldKTsKLSAgICBpbnRlcm5hbF9nbHVEZWxldGVUZXNzKHRlc3MpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="219156"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>