From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-0.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 22678 invoked from network); 18 Jun 2021 19:36:28 -0000 Received: from 1ess.inri.net (216.126.196.35) by inbox.vuxu.org with ESMTPUTF8; 18 Jun 2021 19:36:28 -0000 Received: from mail-ot1-f49.google.com ([209.85.210.49]) by 1ess; Fri Jun 18 14:58:06 -0400 2021 Received: by mail-ot1-f49.google.com with SMTP id q5-20020a9d4b050000b029044ecc922d44so418426otf.7 for <9front@9front.org>; Fri, 18 Jun 2021 11:57:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to; bh=OrltG3AT92SxiqViuNFx9anQojB3IpJYP5r6qb7PVH0=; b=bdOkym9ivqW0Vj1xgKfALb23gTjUJtpYRV3jmyFX5vLFQbCtT5G0BCom7wnCb3nz5F ZS0t0fuRtfMlz/uL1utB76ZXxzMsolHf+LzA07s/XRuoPOlGegtNrqm4tbDkZf7RlsAa jjRl6tKzTFdEWXiBNpGTIU3Nun1Q3lT76rRcIXMLFlS8itXZWxkGjxQmrO1du32qW6k5 2NQT6bREVXquLPTlU7rmY3cVYS3eG0rPyeEqbgzw1D46qJ81DkOwJqbduO9GQsY1TlL+ Gs8nLqwSuLRJ4OxyXky9AfldMqXoS98074/xkYkQ/u5oboIOK1m800QF/jAPX9G88i5E mMhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=OrltG3AT92SxiqViuNFx9anQojB3IpJYP5r6qb7PVH0=; b=P5erJmeluXDZ6BEvPD0myzdHdkQ9nDuPPNQK89N+NkcEINK8NL5LFWnz2mIMfnD4/O 463mGP0p9rlfluCPE1758V+VeHTmmmuXZtIrgSb5bEgFOn9Eb67bgY260LadW/Pm9tcJ tN4PMr4V97fB5HzpHrQ5BGadIRj2Sj8R1LOauLqcVDNC2/8+qnluOAyTIbTJEEFGltr1 HO+K3hRlXAVs1xilbsPWgxISKwWa67Zjflkrgoz9Y8d5HYb7yWeWslPGtNbzhGmudTRl 9gav2btMGiqmUeq1qs9MJHH5/JTrHHL1HhQZ2YhsLeVvqwuZ2+Vb915/hQYR+WkDNzP+ rBZg== X-Gm-Message-State: AOAM530ceE5/dnvWeEQSCqpxpvwWE3+DDPSN+BjSM7XRvGq8JzDQMNeT ObyB0i5StKc0KBBAk/sD7GeGcxkzOPTSAYS1UUhMRGMniTM= X-Google-Smtp-Source: ABdhPJzQkAxZMCP3t2ELcr1rKtoy3mStI+CvDSZvwUHb6/U0/4AJkxFqB7F2wETfsNRMgBSOrgMOKdSPXhmeDYt8x2c= X-Received: by 2002:a05:6830:1658:: with SMTP id h24mr1367236otr.149.1624042270253; Fri, 18 Jun 2021 11:51:10 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:ac9:410a:0:0:0:0:0 with HTTP; Fri, 18 Jun 2021 11:51:09 -0700 (PDT) In-Reply-To: <1F0E89C0DA556E9265991DE6E86C77D4@felloff.net> References: <1F0E89C0DA556E9265991DE6E86C77D4@felloff.net> From: kemal Date: Fri, 18 Jun 2021 18:51:09 +0000 Message-ID: To: 9front@9front.org Content-Type: multipart/mixed; boundary="0000000000009eab3e05c50ece88" List-ID: <9front.9front.org> List-Help: X-Glyph: ➈ X-Bullshit: basic polling high-performance extension Subject: Re: [9front] libsec: various tls changes Reply-To: 9front@9front.org Precedence: bulk --0000000000009eab3e05c50ece88 Content-Type: text/plain; charset="UTF-8" > if we never produce any extension response, maybe > it would be better to just get rid of it for now > and return a error status instead? > > also, the naming would need to change. as this > function actually never *produces* server > extensions and instead *processes* the client > extensions... what about something like: > > if(!okClientExtensions(c, m.u.clientHello.extensions)) > goto Err; ok. also, after a bit of diving in the rfcs i found out that the x25519 rfc specifies an optional step that if the shared secret turned out to be all zeroes, abort. rfc 8422 (tls ecc rfc) says that this MUST be done. i was unsure if i should have added that check to curve25519_finish, as it would break source compatibility, so i added it to tlsSecECDHE*. --0000000000009eab3e05c50ece88 Content-Type: application/octet-stream; name=diff Content-Disposition: attachment; filename=diff Content-Transfer-Encoding: base64 X-Attachment-Id: file0 RnJvbSBlOTJhYjNiMDRhZDA1YjRmNWYyMjc5N2MyOWFlODhkNjJmYmUzMDlkCkZyb206IGtlbWFs IDxrZW1hbGluYW5jOEBnbWFpbC5jb20+CkRhdGU6IEZyaSwgMTggSnVuIDIwMjEgMTg6MzY6Mzgg KzAwMDAKU3ViamVjdDogW1BBVENIXSBsaWJzZWM6IHZhcmlvdXMgY2hhbmdlcyB0byB0bHMKCgox LiBhZGQgdGhlIGN1cnZlIHgyNTUxOSB0byB0bHMsIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIuCml0 J3MgbW9yZSBmYXN0ZXIsIGltbXVuZSB0byB0aW1pbmcgYXR0YWNrcyBieSBkZXNpZ24sCmRvZXMg bm90IHJlcXVpcmUgdmVyaWZ5aW5nIGlmIHRoZSBwdWJsaWMga2V5IGlzIHZhbGlkLApldGMgZXRj LiBzZXJ2ZXItc2lkZSBoYXMgdG8gY2hlY2sgaWYgdGhlIGNsaWVudCBzdXBwb3J0cwp0aGUgY3Vy dmUsIHNvIGEgbmV3IGZ1bmN0aW9uIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gcGFyc2UKdGhlIGNs aWVudCdzIGV4dGVuc2lvbnMuCgoyLiByZWplY3Qgd2VhayBkaGUgcHJpbWVzIHRoYXQgY2FuIGJl IGVhc2lseSBjcmFja2VkIHdpdGgKdGhlIG51bWJlciBmaWVsZCBzaWV2ZSBhbGdvcml0aG0uIHRo aXMgYXZvaWRzIGF0dGFja3MgbGlrZQpsb2dqYW0uCgozLiBzdG9wIHB1dHRpbmcgdW5peCB0aW1l IHRvIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIGNsaWVudC8Kc2VydmVyIHJhbmRvbS4gaXQgY2FuIGFs bG93IGZpbmdlcnByaW50aW5nLCB0bHMgMS4zIGRvZXNuJ3QKcmVjb21tZW5kIGl0IGFueSBtb3Jl IGFuZCB0aGVyZSB3YXMgYSBkcmFmdCB0byBkZXByZWNhdGUKdGhpcyBiZWhhdmlvdXIgZWFybGll ci5bMV0KCjQuIHNpbXBseSBwcmYgY29kZSwgcmVtb3ZlIHVzZWxlc3MgY2lwaGVyIGVudW1zLgoK WzFdIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtbWF0aGV3c29u LW5vLWdtdHVuaXh0aW1lLTAwCi0tLQpkaWZmIDdmNjk3ZTgyMmIyZWZkNWM3NTcxNDE3MjA0Njlk MTA1YTU2MDVjYTQgZTkyYWIzYjA0YWQwNWI0ZjVmMjI3OTdjMjlhZTg4ZDYyZmJlMzA5ZAotLS0g YS9zeXMvbWFuLzEvZGF0ZQlXZWQgSnVuIDE2IDAzOjI4OjAxIDIwMjEKKysrIGIvc3lzL21hbi8x L2RhdGUJRnJpIEp1biAxOCAyMTozNjozOCAyMDIxCkBAIC02LDYgKzYsOSBAQAogWwogLkkgb3B0 aW9uCiBdIFsKKy5CIC1mCisuSSBmb3JtYXQKK10gWwogLkkgc2Vjb25kcwogXQogLmJyCkBAIC0x Niw2ICsxOSw4IEBACiAuQgogCVR1ZSBBdWcgMTYgMTc6MDM6NTIgQ0RUIDE5NzcKIC5QUAorT3Ig dGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlIGZvcm1hdCBvcHRpb24uCisKIFRoZSBvcHRpb25z IGFyZQogLlRQCiAuQiAtdQpAQCAtMzMsNiArMzgsMTMgQEAKIC5UUAogLkIgLW0KIFJlcG9ydCB0 aGUgZGF0ZSBhcyBhbiBlbWFpbCBjb21wYXRpYmxlIChSRkMyODIyKSB0aW1lIHN0YW1wLgorLlRQ CisuQiAtZgorUHJpbnQgdXNpbmcgdGhlIGZvcm1hdCBzcGVjaWZpZWQgYnkgdGhlCisuSSBmb3Jt YXQKK3N0cmluZyByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdC4gRm9ybWF0IHN0cmluZ3MgYXJlIGlu IHRoZSBmb3JtYXQgdXNlZCBieQorLklSIHRtZGF0ZSAoMikKKwogLlBQCiBUaGUgY29udmVyc2lv biBmcm9tIEdyZWVud2ljaCBNZWFuIFRpbWUgdG8gbG9jYWwgdGltZSBkZXBlbmRzIG9uIHRoZQog LkIgJHRpbWV6b25lCkBAIC02NSwzICs3Nyw1IEBACiAuQiAvc3lzL3NyYy9jbWQvZGF0ZS5jCiAu YnIKIC5CIC9zeXMvc3JjL2NtZC9jbG9jay5jCisuU0ggIlNFRSBBTFNPIgorLklSIHRtZGF0ZSAo MikKLS0tIGEvc3lzL3NyYy9jbWQvZ2l0L2JyYW5jaAlXZWQgSnVuIDE2IDAzOjI4OjAxIDIwMjEK KysrIGIvc3lzL3NyYy9jbWQvZ2l0L2JyYW5jaAlGcmkgSnVuIDE4IDIxOjM2OjM4IDIwMjEKQEAg LTM3LDYgKzM3LDE1IEBACiBpZiBub3QKIAliYXNlPWB7Z2l0L3F1ZXJ5IEhFQUR9CiAKK2lmKH4g JCNuZXdiciAwKXsKKwlpZighIH4gJCNiYXNlcmVmIDApCisJCWRpZSB1cGRhdGUgd291bGQgY2xv YmJlciAkYnJhbmNoIHdpdGggJGJhc2VyZWYKKwliYXNlcmVmPWAkbmx7ZWNobyAtbiAkbmV3IHwg c2VkIHNAcmVmcy9oZWFkcy9AcmVmcy9yZW1vdGVzL29yaWdpbi9AfQorCWVjaG8gJGJhc2VyZWYK KwlpZighIHRlc3QgLWUgLmdpdC8kbmV3KQorCQlpZighIGJhc2U9YHtnaXQvcXVlcnkgJGJhc2Vy ZWZ9KQorCQkJZGllIGNvdWxkIG5vdCBmaW5kIGJyYW5jaCAkYnJhbmNoCit9CiBtb2RpZmllZD1g JG5se2dpdC9xdWVyeSAtYyBIRUFEICRiYXNlIHwgZ3JlcCAnXlteLV0nIHwgc3Vic3QgJ14uLid9 CiBkZWxldGVkPWAkbmx7Z2l0L3F1ZXJ5IC1jIEhFQUQgJGJhc2UgfCBncmVwICdeLScgfCBzdWJz dCAnXi4uJ30KIApAQCAtNDgsMTQgKzU3LDYgQEAKIAlybSAtZiAuZ2l0LyRuZXcKIAllY2hvICdk ZWxldGVkIGJyYW5jaCcgJG5ldwogCWV4aXQKLX0KLWlmKH4gJCNuZXdiciAwKXsKLQlpZighIH4g JCNiYXNlcmVmIDApCi0JCWRpZSB1cGRhdGUgd291bGQgY2xvYmJlciAkYnJhbmNoIHdpdGggJGJh c2VyZWYKLQliYXNlcmVmPWAkbmx7ZWNobyAtbiAkbmV3IHwgc2VkIHNAcmVmcy9oZWFkcy9AcmVm cy9yZW1vdGVzL29yaWdpbi9AfQotCWlmKCEgdGVzdCAtZSAuZ2l0LyRuZXcpCi0JCWlmKCEgYmFz ZT1ge2dpdC9xdWVyeSAkYmFzZXJlZn0pCi0JCQlkaWUgY291bGQgbm90IGZpbmQgYnJhbmNoICRi cmFuY2gKIH0KIGNvbW1pdD1ge2dpdC9xdWVyeSAkYmFzZX0gfHwgZGllICdicmFuY2ggZG9lcyBu b3QgZXhpc3Q6JyAkYmFzZQogaWYofiAkbmV3ICovKikKLS0tIGEvc3lzL3NyYy9saWJzZWMvcG9y dC90bHNoYW5kLmMJV2VkIEp1biAxNiAwMzoyODowMSAyMDIxCisrKyBiL3N5cy9zcmMvbGlic2Vj L3BvcnQvdGxzaGFuZC5jCUZyaSBKdW4gMTggMjE6MzY6MzggMjAyMQpAQCAtNjYsMTggKzY2LDIw IEBACiAJaW50IHBza2xlbjsKIAlpbnQgY2xpZW50VmVyczsJCQkvLyB2ZXJzaW9uIGluIENsaWVu dEhlbGxvCiAJdWNoYXIgc2VjW01hc3RlclNlY3JldFNpemVdOwkvLyBtYXN0ZXIgc2VjcmV0Ci0J dWNoYXIgY3JhbmRvbVtSYW5kb21TaXplXTsJLy8gY2xpZW50IHJhbmRvbQogCXVjaGFyIHNyYW5k b21bUmFuZG9tU2l6ZV07CS8vIHNlcnZlciByYW5kb20KKwl1Y2hhciBjcmFuZG9tW1JhbmRvbVNp emVdOwkvLyBjbGllbnQgcmFuZG9tCiAKKwlOYW1lZGN1cnZlICpuYzsgLy8gc2VsZWN0ZWQgY3Vy dmUgZm9yIEVDREhFCiAJLy8gZGlmZmllIGhlbGxtYW4gc3RhdGUKIAlESHN0YXRlIGRoOwogCXN0 cnVjdCB7CiAJCUVDZG9tYWluIGRvbTsKIAkJRUNwcml2IFE7CiAJfSBlYzsKKwl1Y2hhciBYWzMy XTsKIAogCS8vIGJ5dGUgZ2VuZXJhdGlvbiBhbmQgaGFuZHNoYWtlIGNoZWNrc3VtCi0Jdm9pZCAo KnByZikodWNoYXIqLCBpbnQsIHVjaGFyKiwgaW50LCBjaGFyKiwgdWNoYXIqLCBpbnQsIHVjaGFy KiwgaW50KTsKKwl2b2lkICgqcHJmKSh1Y2hhciosIGludCwgdWNoYXIqLCBpbnQsIGNoYXIqLCB1 Y2hhciosIGludCk7CiAJdm9pZCAoKnNldEZpbmlzaGVkKShUbHNTZWMqLCBIYW5kc2hha2VIYXNo LCB1Y2hhciosIGludCk7CiAJaW50IG5maW47CiB9OwpAQCAtMTA3LDcgKzEwOSw3IEBACiAJaW50 IHRhZzsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlpbnQgdmVyc2lvbjsKKwkJCWludAl2ZXJz aW9uOwogCQkJdWNoYXIgCXJhbmRvbVtSYW5kb21TaXplXTsKIAkJCUJ5dGVzKglzaWQ7CiAJCQlJ bnRzKgljaXBoZXJzOwpAQCAtMTE1LDcgKzExNyw3IEBACiAJCQlCeXRlcyoJZXh0ZW5zaW9uczsK IAkJfSBjbGllbnRIZWxsbzsKIAkJc3RydWN0IHsKLQkJCWludCB2ZXJzaW9uOworCQkJaW50CXZl cnNpb247CiAJCQl1Y2hhcglyYW5kb21bUmFuZG9tU2l6ZV07CiAJCQlCeXRlcyoJc2lkOwogCQkJ aW50CWNpcGhlcjsKQEAgLTIxNCw3OSArMjE2LDM2IEBACiAKIC8vIGNpcGhlciBzdWl0ZXMKIGVu dW0gewotCVRMU19OVUxMX1dJVEhfTlVMTF9OVUxMCQkJPSAweDAwMDAsCi0JVExTX1JTQV9XSVRI X05VTExfTUQ1CQkJPSAweDAwMDEsCi0JVExTX1JTQV9XSVRIX05VTExfU0hBCQkJPSAweDAwMDIs Ci0JVExTX1JTQV9FWFBPUlRfV0lUSF9SQzRfNDBfTUQ1CQk9IDB4MDAwMywKLQlUTFNfUlNBX1dJ VEhfUkM0XzEyOF9NRDUJCT0gMHgwMDA0LAotCVRMU19SU0FfV0lUSF9SQzRfMTI4X1NIQQkJPSAw eDAwMDUsCi0JVExTX1JTQV9FWFBPUlRfV0lUSF9SQzJfQ0JDXzQwX01ENQk9IDBYMDAwNiwKLQlU TFNfUlNBX1dJVEhfSURFQV9DQkNfU0hBCQk9IDBYMDAwNywKLQlUTFNfUlNBX0VYUE9SVF9XSVRI X0RFUzQwX0NCQ19TSEEJPSAwWDAwMDgsCi0JVExTX1JTQV9XSVRIX0RFU19DQkNfU0hBCQk9IDBY MDAwOSwKIAlUTFNfUlNBX1dJVEhfM0RFU19FREVfQ0JDX1NIQQkJPSAwWDAwMEEsCi0JVExTX0RI X0RTU19FWFBPUlRfV0lUSF9ERVM0MF9DQkNfU0hBCT0gMFgwMDBCLAotCVRMU19ESF9EU1NfV0lU SF9ERVNfQ0JDX1NIQQkJPSAwWDAwMEMsCi0JVExTX0RIX0RTU19XSVRIXzNERVNfRURFX0NCQ19T SEEJPSAwWDAwMEQsCi0JVExTX0RIX1JTQV9FWFBPUlRfV0lUSF9ERVM0MF9DQkNfU0hBCT0gMFgw MDBFLAotCVRMU19ESF9SU0FfV0lUSF9ERVNfQ0JDX1NIQQkJPSAwWDAwMEYsCi0JVExTX0RIX1JT QV9XSVRIXzNERVNfRURFX0NCQ19TSEEJPSAwWDAwMTAsCi0JVExTX0RIRV9EU1NfRVhQT1JUX1dJ VEhfREVTNDBfQ0JDX1NIQQk9IDBYMDAxMSwKLQlUTFNfREhFX0RTU19XSVRIX0RFU19DQkNfU0hB CQk9IDBYMDAxMiwKLQlUTFNfREhFX0RTU19XSVRIXzNERVNfRURFX0NCQ19TSEEJPSAwWDAwMTMs CS8vIFpaWiBtdXN0IGJlIGltcGxlbWVudGVkIGZvciB0bHMxLjAgY29tcGxpYW5jZQotCVRMU19E SEVfUlNBX0VYUE9SVF9XSVRIX0RFUzQwX0NCQ19TSEEJPSAwWDAwMTQsCi0JVExTX0RIRV9SU0Ff V0lUSF9ERVNfQ0JDX1NIQQkJPSAwWDAwMTUsCiAJVExTX0RIRV9SU0FfV0lUSF8zREVTX0VERV9D QkNfU0hBCT0gMFgwMDE2LAotCVRMU19ESF9hbm9uX0VYUE9SVF9XSVRIX1JDNF80MF9NRDUJPSAw eDAwMTcsCi0JVExTX0RIX2Fub25fV0lUSF9SQzRfMTI4X01ENQkJPSAweDAwMTgsCi0JVExTX0RI X2Fub25fRVhQT1JUX1dJVEhfREVTNDBfQ0JDX1NIQQk9IDBYMDAxOSwKLQlUTFNfREhfYW5vbl9X SVRIX0RFU19DQkNfU0hBCQk9IDBYMDAxQSwKLQlUTFNfREhfYW5vbl9XSVRIXzNERVNfRURFX0NC Q19TSEEJPSAwWDAwMUIsCi0JVExTX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NIQQkJPSAwWDAwMkYs CS8vIGFlcywgYWthIHJpam5kYWVsIHdpdGggMTI4IGJpdCBibG9ja3MKLQlUTFNfREhfRFNTX1dJ VEhfQUVTXzEyOF9DQkNfU0hBCQk9IDBYMDAzMCwKLQlUTFNfREhfUlNBX1dJVEhfQUVTXzEyOF9D QkNfU0hBCQk9IDBYMDAzMSwKLQlUTFNfREhFX0RTU19XSVRIX0FFU18xMjhfQ0JDX1NIQQk9IDBY MDAzMiwKKworCVRMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEJCT0gMFgwMDJGLAogCVRMU19E SEVfUlNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBCT0gMFgwMDMzLAotCVRMU19ESF9hbm9uX1dJVEhf QUVTXzEyOF9DQkNfU0hBCT0gMFgwMDM0LAogCVRMU19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEJ CT0gMFgwMDM1LAotCVRMU19ESF9EU1NfV0lUSF9BRVNfMjU2X0NCQ19TSEEJCT0gMFgwMDM2LAot CVRMU19ESF9SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEJCT0gMFgwMDM3LAotCVRMU19ESEVfRFNT X1dJVEhfQUVTXzI1Nl9DQkNfU0hBCT0gMFgwMDM4LAogCVRMU19ESEVfUlNBX1dJVEhfQUVTXzI1 Nl9DQkNfU0hBCT0gMFgwMDM5LAotCVRMU19ESF9hbm9uX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCT0g MFgwMDNBLAogCVRMU19SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJCT0gMFgwMDNDLAogCVRM U19SU0FfV0lUSF9BRVNfMjU2X0NCQ19TSEEyNTYJCT0gMFgwMDNELAogCVRMU19ESEVfUlNBX1dJ VEhfQUVTXzEyOF9DQkNfU0hBMjU2CT0gMFgwMDY3LAogCiAJVExTX1JTQV9XSVRIX0FFU18xMjhf R0NNX1NIQTI1NgkJPSAweDAwOUMsCi0JVExTX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAkJ PSAweDAwOUQsCiAJVExTX0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJPSAweDAwOUUs Ci0JVExTX0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQJPSAweDAwOUYsCi0JVExTX0RI X1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1Ngk9IDB4MDBBMCwKLQlUTFNfREhfUlNBX1dJVEhf QUVTXzI1Nl9HQ01fU0hBMzg0CT0gMHgwMEExLAotCVRMU19ESEVfRFNTX1dJVEhfQUVTXzEyOF9H Q01fU0hBMjU2CT0gMHgwMEEyLAotCVRMU19ESEVfRFNTX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0 CT0gMHgwMEEzLAotCVRMU19ESF9EU1NfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYJPSAweDAwQTQs Ci0JVExTX0RIX0RTU19XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAk9IDB4MDBBNSwKLQlUTFNfREhf YW5vbl9XSVRIX0FFU18xMjhfR0NNX1NIQTI1Ngk9IDB4MDBBNiwKLQlUTFNfREhfYW5vbl9XSVRI X0FFU18yNTZfR0NNX1NIQTM4NAk9IDB4MDBBNywKLQotCVRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FF U18xMjhfR0NNX1NIQTI1NiA9IDB4QzAyQiwKLQlUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9H Q01fU0hBMjU2CT0gMHhDMDJGLAogCiAJVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfQ0JDX1NI QQk9IDB4QzAxMywKIAlUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9DQkNfU0hBCT0gMHhDMDE0 LAotCVRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJPSAweEMwMjcsCiAJVExT X0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9DQkNfU0hBMjU2CT0gMHhDMDIzLAorCVRMU19FQ0RI RV9SU0FfV0lUSF9BRVNfMTI4X0NCQ19TSEEyNTYJPSAweEMwMjcsCiAKLQlUTFNfRUNESEVfUlNB X1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUJPSAweENDQTgsCi0JVExTX0VDREhFX0VDRFNBX1dJVEhf Q0hBQ0hBMjBfUE9MWTEzMDUJPSAweENDQTksCi0JVExTX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9Q T0xZMTMwNQk9IDB4Q0NBQSwKKwlUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEy NTYgPSAweEMwMkIsCisJVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1Ngk9IDB4 QzAyRiwKIAogCUdPT0dMRV9FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQkJPSAweEND MTMsCiAJR09PR0xFX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUJPSAweENDMTQs CiAJR09PR0xFX0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQkJPSAweENDMTUsCiAKKwlU TFNfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUJPSAweENDQTgsCisJVExTX0VDREhF X0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUJPSAweENDQTksCisJVExTX0RIRV9SU0FfV0lU SF9DSEFDSEEyMF9QT0xZMTMwNQk9IDB4Q0NBQSwKKwogCVRMU19QU0tfV0lUSF9DSEFDSEEyMF9Q T0xZMTMwNQkJPSAweENDQUIsCiAJVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQTI1NgkJPSAw eDAwQUUsCiAJVExTX1BTS19XSVRIX0FFU18xMjhfQ0JDX1NIQQkJPSAweDAwOEMsCkBAIC0zMDAs NiArMjU5LDIwIEBACiAJQ29tcHJlc3Npb25NYXgKIH07CiAKKworLy8gY3VydmVzCitlbnVtIHsK KwlYMjU1MTkgPSAweDAwMWQsCit9OworCisvLyBleHRlbnNpb25zCitlbnVtIHsKKwlFeHRzbmkg PSAweDAwMDAsCisJRXh0ZWMgPSAweDAwMGEsCisJRXh0ZWNwID0gMHgwMDBiLAorCUV4dHNpZ2Fs Z3MgPSAweDAwMGQsCit9OworCiBzdGF0aWMgQWxncyBjaXBoZXJBbGdzW10gPSB7CiAJLy8gRUNE SEUtRUNEU0EKIAl7ImNjcG9seTk2X2FlYWQiLCAiY2xlYXIiLCAyKigzMisxMiksIFRMU19FQ0RI RV9FQ0RTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1fSwKQEAgLTM0Myw2ICszMTYsNyBAQAogfTsK IAogc3RhdGljIE5hbWVkY3VydmUgbmFtZWRjdXJ2ZXNbXSA9IHsKKwlYMjU1MTksIG5pbCwKIAkw eDAwMTcsIHNlY3AyNTZyMSwKIAkweDAwMTgsIHNlY3AzODRyMSwKIH07CkBAIC00MDIsNyArMzc2 LDcgQEAKIHN0YXRpYyBpbnQgaXNFQ0RTQShpbnQgdGxzaWQpOwogCiBzdGF0aWMgaW50IHNldEFs Z3MoVGxzQ29ubmVjdGlvbiAqYywgaW50IGEpOwotc3RhdGljIGludCBva0NpcGhlcihJbnRzICpj diwgaW50IGlzcHNrKTsKK3N0YXRpYyBpbnQgb2tDaXBoZXIoSW50cyAqY3YsIGludCBpc3Bzaywg aW50IGNhbmVjKTsKIHN0YXRpYyBpbnQgb2tDb21wcmVzc2lvbihCeXRlcyAqY3YpOwogc3RhdGlj IGludCBpbml0Q2lwaGVycyh2b2lkKTsKIHN0YXRpYyBJbnRzKiBtYWtlY2lwaGVycyhpbnQgaXNw c2spOwpAQCAtNDEzLDcgKzM4Nyw3IEBACiAKIHN0YXRpYyB2b2lkCXRsc1NlY0luaXRzKFRsc1Nl YyAqc2VjLCBpbnQgY3ZlcnMsIHVjaGFyICpjcmFuZG9tKTsKIHN0YXRpYyBpbnQJdGxzU2VjUlNB cyhUbHNTZWMgKnNlYywgQnl0ZXMgKmVwbSk7Ci1zdGF0aWMgQnl0ZXMqCXRsc1NlY0VDREhFczEo VGxzU2VjICpzZWMsIE5hbWVkY3VydmUgKm5jKTsKK3N0YXRpYyBCeXRlcyoJdGxzU2VjRUNESEVz MShUbHNTZWMgKnNlYyk7CiBzdGF0aWMgaW50CXRsc1NlY0VDREhFczIoVGxzU2VjICpzZWMsIEJ5 dGVzICpZYyk7CiBzdGF0aWMgdm9pZAl0bHNTZWNJbml0YyhUbHNTZWMgKnNlYywgaW50IGN2ZXJz KTsKIHN0YXRpYyBCeXRlcyoJdGxzU2VjUlNBYyhUbHNTZWMgKnNlYywgdWNoYXIgKmNlcnQsIGlu dCBuY2VydCk7CkBAIC00NTQsNiArNDI4LDcgQEAKIHsKIAljaGFyIGJ1Zls4XTsKIAljaGFyIGRu YW1lWzY0XTsKKwl1Y2hhciBzZWVkWzIqUmFuZG9tU2l6ZV07CiAJaW50IG4sIGRhdGEsIGN0bCwg aGFuZDsKIAlUbHNDb25uZWN0aW9uICp0bHM7CiAKQEAgLTQ5OCwxMyArNDczLDE1IEBACiAJY29u bi0+c2Vzc2lvbklEID0gbmlsOwogCWlmKGNvbm4tPnNlc3Npb25LZXkgIT0gbmlsCiAJJiYgY29u bi0+c2Vzc2lvblR5cGUgIT0gbmlsCi0JJiYgc3RyY21wKGNvbm4tPnNlc3Npb25UeXBlLCAidHRs cyIpID09IDApCisJJiYgc3RyY21wKGNvbm4tPnNlc3Npb25UeXBlLCAidHRscyIpID09IDApewor CQltZW1tb3ZlKHNlZWQsIHRscy0+c2VjLT5jcmFuZG9tLCBSYW5kb21TaXplKTsKKwkJbWVtbW92 ZShzZWVkK1JhbmRvbVNpemUsIHRscy0+c2VjLT5zcmFuZG9tLCBSYW5kb21TaXplKTsKIAkJdGxz LT5zZWMtPnByZigKIAkJCWNvbm4tPnNlc3Npb25LZXksIGNvbm4tPnNlc3Npb25LZXlsZW4sCiAJ CQl0bHMtPnNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLAogCQkJY29ubi0+c2Vzc2lvbkNvbnN0 LCAKLQkJCXRscy0+c2VjLT5jcmFuZG9tLCBSYW5kb21TaXplLAotCQkJdGxzLT5zZWMtPnNyYW5k b20sIFJhbmRvbVNpemUpOworCQkJc2VlZCwgc2l6ZW9mKHNlZWQpKTsKKwl9CiAJdGxzQ29ubmVj dGlvbkZyZWUodGxzKTsKIAljbG9zZShmZCk7CiAJcmV0dXJuIGRhdGE7CkBAIC01MjYsNyArNTAz LDcgQEAKIAkJYiA9IGVyZWFsbG9jKGIsIG0gKyAyKzIrMisxKzIrbik7CiAJCXAgPSBiICsgbTsK IAotCQlwdXQxNihwLCAwKSwgcCArPSAyOwkJLyogVHlwZTogc2VydmVyX25hbWUgKi8KKwkJcHV0 MTYocCwgRXh0c25pKSwgcCArPSAyOwkvKiBUeXBlOiBzZXJ2ZXJfbmFtZSAqLwogCQlwdXQxNihw LCAyKzErMituKSwgcCArPSAyOwkvKiBMZW5ndGggKi8KIAkJcHV0MTYocCwgMSsyK24pLCBwICs9 IDI7CS8qIFNlcnZlciBOYW1lIGxpc3QgbGVuZ3RoICovCiAJCSpwKysgPSAwOwkJCS8qIFNlcnZl ciBOYW1lIFR5cGU6IGhvc3RfbmFtZSAqLwpAQCAtNTM1LDI2ICs1MTIsMjYgQEAKIAkJcCArPSBu OwogCX0KIAotCS8vIEVDREhFCisJLy8gRWxsaXB0aWMgQ3VydmVzIChhbHNvIGNhbGxlZCBTdXBw b3J0ZWQgR3JvdXBzKQogCWlmKFByb3RvY29sVmVyc2lvbiA+PSBUTFMxMFZlcnNpb24pewogCQlt ID0gcCAtIGI7CiAJCWIgPSBlcmVhbGxvYyhiLCBtICsgMisyKzIrbmVsZW0obmFtZWRjdXJ2ZXMp KjIgKyAyKzIrMStuZWxlbShwb2ludGZvcm1hdHMpKTsKIAkJcCA9IGIgKyBtOwogCiAJCW4gPSBu ZWxlbShuYW1lZGN1cnZlcyk7Ci0JCXB1dDE2KHAsIDB4MDAwYSksIHAgKz0gMjsJLyogVHlwZTog ZWxsaXB0aWNfY3VydmVzICovCisJCXB1dDE2KHAsIEV4dGVjKSwgcCArPSAyOwkvKiBUeXBlOiBl bGxpcHRpY19jdXJ2ZXMgLyBzdXBwb3J0ZWRfZ3JvdXBzICovCiAJCXB1dDE2KHAsIChuKzEpKjIp LCBwICs9IDI7CS8qIExlbmd0aCAqLwogCQlwdXQxNihwLCBuKjIpLCBwICs9IDI7CQkvKiBFbGxp cHRpYyBDdXJ2ZXMgTGVuZ3RoICovCi0JCWZvcihpPTA7IGkgPCBuOyBpKyspewkJLyogRWxsaXB0 aWMgY3VydmVzICovCisJCWZvcihpPTA7IGkgPCBuOyBpKyspewkJLyogRWxsaXB0aWMgQ3VydmVz ICovCiAJCQlwdXQxNihwLCBuYW1lZGN1cnZlc1tpXS50bHNpZCk7CiAJCQlwICs9IDI7CiAJCX0K IAogCQluID0gbmVsZW0ocG9pbnRmb3JtYXRzKTsKLQkJcHV0MTYocCwgMHgwMDBiKSwgcCArPSAy OwkvKiBUeXBlOiBlY19wb2ludF9mb3JtYXRzICovCisJCXB1dDE2KHAsIEV4dGVjcCksIHAgKz0g MjsJLyogVHlwZTogZWNfcG9pbnRfZm9ybWF0cyAqLwogCQlwdXQxNihwLCBuKzEpLCBwICs9IDI7 CQkvKiBMZW5ndGggKi8KIAkJKnArKyA9IG47CQkJLyogRUMgcG9pbnQgZm9ybWF0cyBMZW5ndGgg Ki8KLQkJZm9yKGk9MDsgaSA8IG47IGkrKykJCS8qIEVsbGlwdGljIGN1cnZlcyBwb2ludCBmb3Jt YXRzICovCisJCWZvcihpPTA7IGkgPCBuOyBpKyspCQkvKiBFQyBwb2ludCBmb3JtYXRzICovCiAJ CQkqcCsrID0gcG9pbnRmb3JtYXRzW2ldOwogCX0KIApAQCAtNTY2LDcgKzU0Myw3IEBACiAJCWIg PSBlcmVhbGxvYyhiLCBtICsgMisyKzIrbioyKTsKIAkJcCA9IGIgKyBtOwogCi0JCXB1dDE2KHAs IDB4MDAwZCksIHAgKz0gMjsKKwkJcHV0MTYocCwgRXh0c2lnYWxncyksIHAgKz0gMjsKIAkJcHV0 MTYocCwgbioyICsgMiksIHAgKz0gMjsKIAkJcHV0MTYocCwgbioyKSwgcCArPSAyOwogCQlmb3Io aT0wOyBpIDwgbjsgaSsrKXsKQEAgLTU4Niw2ICs1NjMsNyBAQAogewogCWNoYXIgYnVmWzhdOwog CWNoYXIgZG5hbWVbNjRdOworCXVjaGFyIHNlZWRbMipSYW5kb21TaXplXTsKIAlpbnQgbiwgZGF0 YSwgY3RsLCBoYW5kOwogCVRsc0Nvbm5lY3Rpb24gKnRsczsKIAl1Y2hhciAqZXh0OwpAQCAtNjQx LDEzICs2MTksMTUgQEAKIAljb25uLT5zZXNzaW9uSUQgPSBuaWw7CiAJaWYoY29ubi0+c2Vzc2lv bktleSAhPSBuaWwKIAkmJiBjb25uLT5zZXNzaW9uVHlwZSAhPSBuaWwKLQkmJiBzdHJjbXAoY29u bi0+c2Vzc2lvblR5cGUsICJ0dGxzIikgPT0gMCkKKwkmJiBzdHJjbXAoY29ubi0+c2Vzc2lvblR5 cGUsICJ0dGxzIikgPT0gMCl7CisJCW1lbW1vdmUoc2VlZCwgdGxzLT5zZWMtPmNyYW5kb20sIFJh bmRvbVNpemUpOworCQltZW1tb3ZlKHNlZWQrUmFuZG9tU2l6ZSwgdGxzLT5zZWMtPnNyYW5kb20s IFJhbmRvbVNpemUpOwogCQl0bHMtPnNlYy0+cHJmKAogCQkJY29ubi0+c2Vzc2lvbktleSwgY29u bi0+c2Vzc2lvbktleWxlbiwKIAkJCXRscy0+c2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsCiAJ CQljb25uLT5zZXNzaW9uQ29uc3QsIAotCQkJdGxzLT5zZWMtPmNyYW5kb20sIFJhbmRvbVNpemUs Ci0JCQl0bHMtPnNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCQlzZWVkLCBzaXplb2Yoc2Vl ZCkpOworCX0KIAl0bHNDb25uZWN0aW9uRnJlZSh0bHMpOwogCWNsb3NlKGZkKTsKIAlyZXR1cm4g ZGF0YTsKQEAgLTY2NSw2ICs2NDUsNTMgQEAKIAlyZXR1cm4gaTsKIH0KIAorc3RhdGljIGludAor Y2hlY2tDbGllbnRFeHRlbnNpb25zKFRsc0Nvbm5lY3Rpb24gKmMsIEJ5dGVzICpleHQpCit7CisJ dWNoYXIgKnAsICplOworCWludCBpLCBqLCBuOworCisJcCA9IGV4dC0+ZGF0YTsKKwllID0gcCtl eHQtPmxlbjsKKwl3aGlsZShwIDwgZSl7CisJCWlmKGUtcCA8IDIpCisJCQlnb3RvIFNob3J0Owor CQlzd2l0Y2goZ2V0MTYocCkpeworCQljYXNlIEV4dGVjOgkKKwkJCXAgKz0gMjsKKwkJCW4gPSBn ZXQxNihwKTsKKwkJCWlmKGUtcCA8IG4gfHwgbiA8IDIpCisJCQkJZ290byBTaG9ydDsKKwkJCXAg Kz0gMjsKKwkJCW4gPSBnZXQxNihwKTsKKwkJCXAgKz0gMjsKKwkJCWlmKGUtcCA8IG4gfHwgbiAm IDEgfHwgbiA9PSAwKQorCQkJCWdvdG8gU2hvcnQ7CisJCQlmb3IoaSA9IDA7IGkgPCBuZWxlbShu YW1lZGN1cnZlcykgJiYgYy0+c2VjLT5uYyA9PSBuaWw7IGkrKykKKwkJCQlmb3IoaiA9IDA7IGog PCBuOyBqICs9IDIpCisJCQkJCWlmKG5hbWVkY3VydmVzW2ldLnRsc2lkID09IGdldDE2KHAraikp eworCQkJCQkJYy0+c2VjLT5uYyA9ICZuYW1lZGN1cnZlc1tpXTsKKwkJCQkJCWJyZWFrOworCQkJ CQl9CisJCQlwICs9IG47CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXAgKz0gMjsKKwkJCW4g PSBnZXQxNihwKTsKKwkJCXAgKz0gMjsKKwkJCWlmKGUtcCA8IG4pCisJCQkJZ290byBTaG9ydDsK KwkJCXAgKz0gbjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIDA7CitTaG9ydDoKKwl0 bHNFcnJvcihjLCBFRGVjb2RlRXJyb3IsICJjbGllbnRoZWxsbyBleHRlbnNpb25zIGhhcyBpbnZh bGlkIGxlbmd0aCIpOworCXJldHVybiAtMTsgCit9IAorCiBzdGF0aWMgVGxzQ29ubmVjdGlvbiAq CiB0bHNTZXJ2ZXIyKGludCBjdGwsIGludCBoYW5kLAogCXVjaGFyICpjZXJ0LCBpbnQgY2VydGxl biwKQEAgLTcwOCwxOSArNzM1LDYgQEAKIAkJdGxzRXJyb3IoYywgRUluYXBwcm9wcmlhdGVGYWxs YmFjaywgImluYXBwcm9wcmlhdGUgZmFsbGJhY2siKTsKIAkJZ290byBFcnI7CiAJfQotCWNpcGhl ciA9IG9rQ2lwaGVyKG0udS5jbGllbnRIZWxsby5jaXBoZXJzLCBwc2tsZW4gPiAwKTsKLQlpZihj aXBoZXIgPCAwIHx8ICFzZXRBbGdzKGMsIGNpcGhlcikpIHsKLQkJdGxzRXJyb3IoYywgRUhhbmRz aGFrZUZhaWx1cmUsICJubyBtYXRjaGluZyBjaXBoZXIgc3VpdGUiKTsKLQkJZ290byBFcnI7Ci0J fQotCWNvbXByZXNzb3IgPSBva0NvbXByZXNzaW9uKG0udS5jbGllbnRIZWxsby5jb21wcmVzc29y cyk7Ci0JaWYoY29tcHJlc3NvciA8IDApIHsKLQkJdGxzRXJyb3IoYywgRUhhbmRzaGFrZUZhaWx1 cmUsICJubyBtYXRjaGluZyBjb21wcmVzc29yIik7Ci0JCWdvdG8gRXJyOwotCX0KLQlpZih0cmFj ZSkKLQkJdHJhY2UoIiAgY2lwaGVyICV4LCBjb21wcmVzc29yICV4XG4iLCBjaXBoZXIsIGNvbXBy ZXNzb3IpOwotCiAJdGxzU2VjSW5pdHMoYy0+c2VjLCBtLnUuY2xpZW50SGVsbG8udmVyc2lvbiwg bS51LmNsaWVudEhlbGxvLnJhbmRvbSk7CiAJdGxzU2VjVmVycyhjLT5zZWMsIGMtPnZlcnNpb24p OwogCWlmKHBza2xlbiA+IDApewpAQCAtNzQwLDYgKzc1NCwyMCBAQAogCQkJZ290byBFcnI7CiAJ CX0KIAl9CisJaWYoY2hlY2tDbGllbnRFeHRlbnNpb25zKGMsIG0udS5jbGllbnRIZWxsby5leHRl bnNpb25zKSA8IDApCisJCWdvdG8gRXJyOworCWNpcGhlciA9IG9rQ2lwaGVyKG0udS5jbGllbnRI ZWxsby5jaXBoZXJzLCBwc2tsZW4gPiAwLCBjLT5zZWMtPm5jICE9IG5pbCk7CisJaWYoY2lwaGVy IDwgMCB8fCAhc2V0QWxncyhjLCBjaXBoZXIpKSB7CisJCXRsc0Vycm9yKGMsIEVIYW5kc2hha2VG YWlsdXJlLCAibm8gbWF0Y2hpbmcgY2lwaGVyIHN1aXRlIik7CisJCWdvdG8gRXJyOworCX0KKwlj b21wcmVzc29yID0gb2tDb21wcmVzc2lvbihtLnUuY2xpZW50SGVsbG8uY29tcHJlc3NvcnMpOwor CWlmKGNvbXByZXNzb3IgPCAwKSB7CisJCXRsc0Vycm9yKGMsIEVIYW5kc2hha2VGYWlsdXJlLCAi bm8gbWF0Y2hpbmcgY29tcHJlc3NvciIpOworCQlnb3RvIEVycjsKKwl9CisJaWYodHJhY2UpCisJ CXRyYWNlKCIgIGNpcGhlciAleCwgY29tcHJlc3NvciAleFxuIiwgY2lwaGVyLCBjb21wcmVzc29y KTsKIAltc2dDbGVhcigmbSk7CiAKIAltLnRhZyA9IEhTZXJ2ZXJIZWxsbzsKQEAgLTc2NCwxMSAr NzkyLDkgQEAKIAl9CiAKIAlpZihpc0VDREhFKGNpcGhlcikpewotCQlOYW1lZGN1cnZlICpuYyA9 ICZuYW1lZGN1cnZlc1swXTsJLyogc2VjcDI1NnIxICovCi0KIAkJbS50YWcgPSBIU2VydmVyS2V5 RXhjaGFuZ2U7Ci0JCW0udS5zZXJ2ZXJLZXlFeGNoYW5nZS5jdXJ2ZSA9IG5jLT50bHNpZDsKLQkJ bS51LnNlcnZlcktleUV4Y2hhbmdlLmRoX3BhcmFtZXRlcnMgPSB0bHNTZWNFQ0RIRXMxKGMtPnNl YywgbmMpOworCQltLnUuc2VydmVyS2V5RXhjaGFuZ2UuY3VydmUgPSBjLT5zZWMtPm5jLT50bHNp ZDsKKwkJbS51LnNlcnZlcktleUV4Y2hhbmdlLmRoX3BhcmFtZXRlcnMgPSB0bHNTZWNFQ0RIRXMx KGMtPnNlYyk7CiAJCWlmKG0udS5zZXJ2ZXJLZXlFeGNoYW5nZS5kaF9wYXJhbWV0ZXJzID09IG5p bCl7CiAJCQl0bHNFcnJvcihjLCBFSW50ZXJuYWxFcnJvciwgImNhbid0IHNldCBESCBwYXJhbWV0 ZXJzIik7CiAJCQlnb3RvIEVycjsKQEAgLTg4OSw3ICs5MTUsOSBAQAogCiAJaWYocCA9PSBuaWwg fHwgZyA9PSBuaWwgfHwgWXMgPT0gbmlsKQogCQlyZXR1cm4gbmlsOwotCisJLy8gcmVqZWN0IGRo IHByaW1lcyB0aGF0IGlzIHN1c2NlcHRpYmxlIHRvIGxvZ2phbQorCWlmKHAtPmxlbiA8PSAxMDI0 LzgpCisJCXJldHVybiBuaWw7CiAJWWMgPSBuaWw7CiAJUCA9IGJ5dGVzdG9tcChwKTsKIAlHID0g Ynl0ZXN0b21wKGcpOwpAQCAtOTIwLDQ5ICs5NDgsNjUgQEAKIHN0YXRpYyBCeXRlcyoKIHRsc1Nl Y0VDREhFYyhUbHNTZWMgKnNlYywgaW50IGN1cnZlLCBCeXRlcyAqWXMpCiB7CisJc3RhdGljIGNo YXIgemVyb1szMl0gPSB7MH07CiAJRUNkb21haW4gKmRvbSA9ICZzZWMtPmVjLmRvbTsKIAlFQ3By aXYgKlEgPSAmc2VjLT5lYy5ROwotCU5hbWVkY3VydmUgKm5jOwogCUVDcHViICpwdWI7CiAJRUNw b2ludCBLOworCU5hbWVkY3VydmUgKm5jOwogCUJ5dGVzICpZYzsKKwlCeXRlcyAqWjsKIAlpbnQg bjsKIAogCWlmKFlzID09IG5pbCkKIAkJcmV0dXJuIG5pbDsKLQlmb3IobmMgPSBuYW1lZGN1cnZl czsgbmMgIT0gJm5hbWVkY3VydmVzW25lbGVtKG5hbWVkY3VydmVzKV07IG5jKyspCi0JCWlmKG5j LT50bHNpZCA9PSBjdXJ2ZSkKLQkJCWdvdG8gRm91bmQ7Ci0JcmV0dXJuIG5pbDsKLQotRm91bmQ6 Ci0JZWNkb21pbml0KGRvbSwgbmMtPmluaXQpOwotCXB1YiA9IGVjZGVjb2RlcHViKGRvbSwgWXMt PmRhdGEsIFlzLT5sZW4pOwotCWlmKHB1YiA9PSBuaWwpCi0JCXJldHVybiBuaWw7CiAKLQltZW1z ZXQoUSwgMCwgc2l6ZW9mKCpRKSk7Ci0JUS0+eCA9IG1wbmV3KDApOwotCVEtPnkgPSBtcG5ldygw KTsKLQlRLT5kID0gbXBuZXcoMCk7Ci0KLQltZW1zZXQoJkssIDAsIHNpemVvZihLKSk7Ci0JSy54 ID0gbXBuZXcoMCk7Ci0JSy55ID0gbXBuZXcoMCk7Ci0KLQllY2dlbihkb20sIFEpOwotCWVjbXVs KGRvbSwgcHViLCBRLT5kLCAmSyk7Ci0KLQluID0gKG1wc2lnbmlmKGRvbS0+cCkrNykvODsKLQlz ZXRNYXN0ZXJTZWNyZXQoc2VjLCBtcHRvYnl0ZXMoSy54LCBuKSk7Ci0JWWMgPSBuZXdieXRlcygx ICsgMipuKTsKLQlZYy0+bGVuID0gZWNlbmNvZGVwdWIoZG9tLCBRLCBZYy0+ZGF0YSwgWWMtPmxl bik7CisJaWYoY3VydmUgPT0gWDI1NTE5KXsKKwkJaWYoWXMtPmxlbiAhPSAzMikKKwkJCXJldHVy biBuaWw7CisJCVljID0gbmV3Ynl0ZXMoMzIpOworCQljdXJ2ZTI1NTE5X2RoX25ldyhzZWMtPlgs IFljLT5kYXRhKTsKKwkJWiA9IG5ld2J5dGVzKDMyKTsKKwkJY3VydmUyNTUxOV9kaF9maW5pc2go c2VjLT5YLCBZcy0+ZGF0YSwgWi0+ZGF0YSk7CisJCS8vIHJmYyB3YW50cyB1cyB0byB0ZXJtaW5h dGUgdGhlIGNvbm5lY3Rpb24gaWYKKwkJLy8gc2hhcmVkIHNlY3JldCA9PSBhbGwgemVyb2VzLgor CQlpZih0c21lbWNtcChaLT5kYXRhLCB6ZXJvLCBaLT5sZW4pID09IDApeworCQkJZnJlZWJ5dGVz KFljKTsKKwkJCWZyZWVieXRlcyhaKTsKKwkJCXJldHVybiBuaWw7CisJCX0KKwkJc2V0TWFzdGVy U2VjcmV0KHNlYywgWik7CisJfWVsc2V7CisJCWZvcihuYyA9IG5hbWVkY3VydmVzOyBuYy0+dGxz aWQgIT0gY3VydmU7IG5jKyspCisJCQlpZihuYyA9PSAmbmFtZWRjdXJ2ZXNbbmVsZW0obmFtZWRj dXJ2ZXMpXSkKKwkJCQlyZXR1cm4gbmlsOworCQllY2RvbWluaXQoZG9tLCBuYy0+aW5pdCk7CisJ CXB1YiA9IGVjZGVjb2RlcHViKGRvbSwgWXMtPmRhdGEsIFlzLT5sZW4pOworCQlpZihwdWIgPT0g bmlsKQorCQkJcmV0dXJuIG5pbDsKIAotCW1wZnJlZShLLngpOwotCW1wZnJlZShLLnkpOworCQlt ZW1zZXQoUSwgMCwgc2l6ZW9mKCpRKSk7CisJCVEtPnggPSBtcG5ldygwKTsKKwkJUS0+eSA9IG1w bmV3KDApOworCQlRLT5kID0gbXBuZXcoMCk7CisKKwkJbWVtc2V0KCZLLCAwLCBzaXplb2YoSykp OworCQlLLnggPSBtcG5ldygwKTsKKwkJSy55ID0gbXBuZXcoMCk7CisKKwkJZWNnZW4oZG9tLCBR KTsKKwkJZWNtdWwoZG9tLCBwdWIsIFEtPmQsICZLKTsKKworCQluID0gKG1wc2lnbmlmKGRvbS0+ cCkrNykvODsKKwkJc2V0TWFzdGVyU2VjcmV0KHNlYywgbXB0b2J5dGVzKEsueCwgbikpOworCQlZ YyA9IG5ld2J5dGVzKDEgKyAyKm4pOworCQlZYy0+bGVuID0gZWNlbmNvZGVwdWIoZG9tLCBRLCBZ Yy0+ZGF0YSwgWWMtPmxlbik7CiAKLQllY3B1YmZyZWUocHViKTsKKwkJbXBmcmVlKEsueCk7CisJ CW1wZnJlZShLLnkpOwogCisJCWVjcHViZnJlZShwdWIpOworCX0KIAlyZXR1cm4gWWM7CiB9CiAK QEAgLTEwNDUsNyArMTA4OSw2IEBACiAJCXRsc0Vycm9yKGMsIEVJbGxlZ2FsUGFyYW1ldGVyLCAi aW52YWxpZCBjb21wcmVzc2lvbiIpOwogCQlnb3RvIEVycjsKIAl9Ci0KIAlkaHggPSBpc0RIRShj aXBoZXIpIHx8IGlzRUNESEUoY2lwaGVyKTsKIAlpZighbXNnUmVjdihjLCAmbSkpCiAJCWdvdG8g RXJyOwpAQCAtMjEzNiwxMyArMjE3OSwxNyBAQAogfQogCiBzdGF0aWMgaW50Ci1va0NpcGhlcihJ bnRzICpjdiwgaW50IGlzcHNrKQorb2tDaXBoZXIoSW50cyAqY3YsIGludCBpc3BzaywgaW50IGNh bmVjKQogewogCWludCBpLCBjOwogCiAJZm9yKGkgPSAwOyBpIDwgbmVsZW0oY2lwaGVyQWxncyk7 IGkrKykgewogCQljID0gY2lwaGVyQWxnc1tpXS50bHNpZDsKLQkJaWYoIWNpcGhlckFsZ3NbaV0u b2sgfHwgaXNFQ0RTQShjKSB8fCBpc0RIRShjKSB8fCBpc1BTSyhjKSAhPSBpc3BzaykKKwkJaWYo IWNpcGhlckFsZ3NbaV0ub2sgfHwgaXNFQ0RTQShjKSB8fCBpc0RIRShjKSkKKwkJCWNvbnRpbnVl OworCQlpZihpc1BTSyhjKSAhPSBpc3BzaykKKwkJCWNvbnRpbnVlOworCQlpZihpc0VDREhFKGMp ICYmICFjYW5lYykKIAkJCWNvbnRpbnVlOwogCQlpZihsb29rdXBpZChjdiwgYykgPj0gMCkKIAkJ CXJldHVybiBjOwpAQCAtMjMxMywxMTQgKzIzNjAsNTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLXRs c1BtZDUodWNoYXIgKmJ1ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCB1Y2hhciAq bGFiZWwsIGludCBubGFiZWwsIHVjaGFyICpzZWVkMCwgaW50IG5zZWVkMCwgdWNoYXIgKnNlZWQx LCBpbnQgbnNlZWQxKQotewotCXVjaGFyIGFpW01ENWRsZW5dLCB0bXBbTUQ1ZGxlbl07Ci0JaW50 IGksIG47Ci0JTUQ1c3RhdGUgKnM7Ci0KLQkvLyBnZW5lcmF0ZSBhMQotCXMgPSBobWFjX21kNShs YWJlbCwgbmxhYmVsLCBrZXksIG5rZXksIG5pbCwgbmlsKTsKLQlzID0gaG1hY19tZDUoc2VlZDAs IG5zZWVkMCwga2V5LCBua2V5LCBuaWwsIHMpOwotCWhtYWNfbWQ1KHNlZWQxLCBuc2VlZDEsIGtl eSwgbmtleSwgYWksIHMpOwotCi0Jd2hpbGUobmJ1ZiA+IDApIHsKLQkJcyA9IGhtYWNfbWQ1KGFp LCBNRDVkbGVuLCBrZXksIG5rZXksIG5pbCwgbmlsKTsKLQkJcyA9IGhtYWNfbWQ1KGxhYmVsLCBu bGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsKLQkJcyA9IGhtYWNfbWQ1KHNlZWQwLCBuc2VlZDAs IGtleSwgbmtleSwgbmlsLCBzKTsKLQkJaG1hY19tZDUoc2VlZDEsIG5zZWVkMSwga2V5LCBua2V5 LCB0bXAsIHMpOwotCQluID0gTUQ1ZGxlbjsKLQkJaWYobiA+IG5idWYpCi0JCQluID0gbmJ1ZjsK LQkJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQotCQkJYnVmW2ldIF49IHRtcFtpXTsKLQkJYnVmICs9 IG47Ci0JCW5idWYgLT0gbjsKLQkJaG1hY19tZDUoYWksIE1ENWRsZW4sIGtleSwgbmtleSwgdG1w LCBuaWwpOwotCQltZW1tb3ZlKGFpLCB0bXAsIE1ENWRsZW4pOwotCX0KLX0KLQotc3RhdGljIHZv aWQKLXRsc1BzaGExKHVjaGFyICpidWYsIGludCBuYnVmLCB1Y2hhciAqa2V5LCBpbnQgbmtleSwg dWNoYXIgKmxhYmVsLCBpbnQgbmxhYmVsLCB1Y2hhciAqc2VlZDAsIGludCBuc2VlZDAsIHVjaGFy ICpzZWVkMSwgaW50IG5zZWVkMSkKLXsKLQl1Y2hhciBhaVtTSEExZGxlbl0sIHRtcFtTSEExZGxl bl07Ci0JaW50IGksIG47Ci0JU0hBc3RhdGUgKnM7Ci0KLQkvLyBnZW5lcmF0ZSBhMQotCXMgPSBo bWFjX3NoYTEobGFiZWwsIG5sYWJlbCwga2V5LCBua2V5LCBuaWwsIG5pbCk7Ci0JcyA9IGhtYWNf c2hhMShzZWVkMCwgbnNlZWQwLCBrZXksIG5rZXksIG5pbCwgcyk7Ci0JaG1hY19zaGExKHNlZWQx LCBuc2VlZDEsIGtleSwgbmtleSwgYWksIHMpOwotCi0Jd2hpbGUobmJ1ZiA+IDApIHsKLQkJcyA9 IGhtYWNfc2hhMShhaSwgU0hBMWRsZW4sIGtleSwgbmtleSwgbmlsLCBuaWwpOwotCQlzID0gaG1h Y19zaGExKGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsKLQkJcyA9IGhtYWNfc2hh MShzZWVkMCwgbnNlZWQwLCBrZXksIG5rZXksIG5pbCwgcyk7Ci0JCWhtYWNfc2hhMShzZWVkMSwg bnNlZWQxLCBrZXksIG5rZXksIHRtcCwgcyk7Ci0JCW4gPSBTSEExZGxlbjsKLQkJaWYobiA+IG5i dWYpCi0JCQluID0gbmJ1ZjsKLQkJZm9yKGkgPSAwOyBpIDwgbjsgaSsrKQotCQkJYnVmW2ldIF49 IHRtcFtpXTsKLQkJYnVmICs9IG47Ci0JCW5idWYgLT0gbjsKLQkJaG1hY19zaGExKGFpLCBTSEEx ZGxlbiwga2V5LCBua2V5LCB0bXAsIG5pbCk7Ci0JCW1lbW1vdmUoYWksIHRtcCwgU0hBMWRsZW4p OwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXBfc2hhMjU2KHVjaGFyICpidWYsIGludCBuYnVmLCB1 Y2hhciAqa2V5LCBpbnQgbmtleSwgdWNoYXIgKmxhYmVsLCBpbnQgbmxhYmVsLCB1Y2hhciAqc2Vl ZCwgaW50IG5zZWVkKQordGxzUCh1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtleSwgaW50 IG5rZXksIHVjaGFyICpsYWJlbCwgaW50IG5sYWJlbCwgdWNoYXIgKnNlZWQsIGludCBuc2VlZCwK KwlEaWdlc3RTdGF0ZSogKCp4KSh1Y2hhciosIHVsb25nLCB1Y2hhciosIHVsb25nLCB1Y2hhcios IERpZ2VzdFN0YXRlKiksIGludCB4bGVuKQogewogCXVjaGFyIGFpW1NIQTJfMjU2ZGxlbl0sIHRt cFtTSEEyXzI1NmRsZW5dOwotCVNIQXN0YXRlICpzOworCURpZ2VzdFN0YXRlICpzOwogCWludCBu OwogCisJYXNzZXJ0KHNpemVvZihhaSkgPD0geGxlbiAmJiBzaXplb2YodG1wKSA8PSB4bGVuKTsK IAkvLyBnZW5lcmF0ZSBhMQotCXMgPSBobWFjX3NoYTJfMjU2KGxhYmVsLCBubGFiZWwsIGtleSwg bmtleSwgbmlsLCBuaWwpOwotCWhtYWNfc2hhMl8yNTYoc2VlZCwgbnNlZWQsIGtleSwgbmtleSwg YWksIHMpOworCXMgPSB4KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBuaWwpOworCXgo c2VlZCwgbnNlZWQsIGtleSwgbmtleSwgYWksIHMpOwogCiAJd2hpbGUobmJ1ZiA+IDApIHsKLQkJ cyA9IGhtYWNfc2hhMl8yNTYoYWksIFNIQTJfMjU2ZGxlbiwga2V5LCBua2V5LCBuaWwsIG5pbCk7 Ci0JCXMgPSBobWFjX3NoYTJfMjU2KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsK LQkJaG1hY19zaGEyXzI1NihzZWVkLCBuc2VlZCwga2V5LCBua2V5LCB0bXAsIHMpOwotCQluID0g U0hBMl8yNTZkbGVuOworCQlzID0geChhaSwgeGxlbiwga2V5LCBua2V5LCBuaWwsIG5pbCk7CisJ CXMgPSB4KGxhYmVsLCBubGFiZWwsIGtleSwgbmtleSwgbmlsLCBzKTsKKwkJeChzZWVkLCBuc2Vl ZCwga2V5LCBua2V5LCB0bXAsIHMpOworCQluID0geGxlbjsKIAkJaWYobiA+IG5idWYpCiAJCQlu ID0gbmJ1ZjsKIAkJbWVtbW92ZShidWYsIHRtcCwgbik7CiAJCWJ1ZiArPSBuOwogCQluYnVmIC09 IG47Ci0JCWhtYWNfc2hhMl8yNTYoYWksIFNIQTJfMjU2ZGxlbiwga2V5LCBua2V5LCB0bXAsIG5p bCk7Ci0JCW1lbW1vdmUoYWksIHRtcCwgU0hBMl8yNTZkbGVuKTsKKwkJeChhaSwgeGxlbiwga2V5 LCBua2V5LCB0bXAsIG5pbCk7CisJCW1lbW1vdmUoYWksIHRtcCwgeGxlbik7CiAJfQogfQogCiAv LyBmaWxsIGJ1ZiB3aXRoIG1kNShhcmdzKV5zaGExKGFyZ3MpCiBzdGF0aWMgdm9pZAotdGxzMTBQ UkYodWNoYXIgKmJ1ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCBjaGFyICpsYWJl bCwgdWNoYXIgKnNlZWQwLCBpbnQgbnNlZWQwLCB1Y2hhciAqc2VlZDEsIGludCBuc2VlZDEpCit0 bHMxMFBSRih1Y2hhciAqYnVmLCBpbnQgbmJ1ZiwgdWNoYXIgKmtleSwgaW50IG5rZXksIGNoYXIg KmxhYmVsLCB1Y2hhciAqc2VlZCwgaW50IG5zZWVkKQogewogCWludCBubGFiZWwgPSBzdHJsZW4o bGFiZWwpOwogCWludCBuID0gKG5rZXkgKyAxKSA+PiAxOwogCi0JbWVtc2V0KGJ1ZiwgMCwgbmJ1 Zik7Ci0JdGxzUG1kNShidWYsIG5idWYsIGtleSwgbiwgKHVjaGFyKilsYWJlbCwgbmxhYmVsLCBz ZWVkMCwgbnNlZWQwLCBzZWVkMSwgbnNlZWQxKTsKLQl0bHNQc2hhMShidWYsIG5idWYsIGtleStu a2V5LW4sIG4sICh1Y2hhciopbGFiZWwsIG5sYWJlbCwgc2VlZDAsIG5zZWVkMCwgc2VlZDEsIG5z ZWVkMSk7CisJdGxzUChidWYsIG5idWYsIGtleSwgbiwgKHVjaGFyKilsYWJlbCwgbmxhYmVsLCBz ZWVkLCBuc2VlZCwKKwkJaG1hY19tZDUsIE1ENWRsZW4pOworCXRsc1AoYnVmLCBuYnVmLCBrZXkr bmtleS1uLCBuLCAodWNoYXIqKWxhYmVsLCBubGFiZWwsIHNlZWQsIG5zZWVkLAorCQlobWFjX3No YTEsIFNIQTFkbGVuKTsKIH0KIAogc3RhdGljIHZvaWQKLXRsczEyUFJGKHVjaGFyICpidWYsIGlu dCBuYnVmLCB1Y2hhciAqa2V5LCBpbnQgbmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkMCwg aW50IG5zZWVkMCwgdWNoYXIgKnNlZWQxLCBpbnQgbnNlZWQxKQordGxzMTJQUkYodWNoYXIgKmJ1 ZiwgaW50IG5idWYsIHVjaGFyICprZXksIGludCBua2V5LCBjaGFyICpsYWJlbCwgdWNoYXIgKnNl ZWQsIGludCBuc2VlZCkKIHsKLQl1Y2hhciBzZWVkWzIqUmFuZG9tU2l6ZV07Ci0KLQlhc3NlcnQo bnNlZWQwK25zZWVkMSA8PSBzaXplb2Yoc2VlZCkpOwotCW1lbW1vdmUoc2VlZCwgc2VlZDAsIG5z ZWVkMCk7Ci0JbWVtbW92ZShzZWVkK25zZWVkMCwgc2VlZDEsIG5zZWVkMSk7Ci0JcF9zaGEyNTYo YnVmLCBuYnVmLCBrZXksIG5rZXksICh1Y2hhciopbGFiZWwsIHN0cmxlbihsYWJlbCksIHNlZWQs IG5zZWVkMCtuc2VlZDEpOworCXRsc1AoYnVmLCBuYnVmLCBrZXksIG5rZXksICh1Y2hhciopbGFi ZWwsIHN0cmxlbihsYWJlbCksIHNlZWQsIG5zZWVkLAorCQlobWFjX3NoYTJfMjU2LCBTSEEyXzI1 NmRsZW4pOwogfQogCiBzdGF0aWMgdm9pZAotc3NsUFJGKHVjaGFyICpidWYsIGludCBuYnVmLCB1 Y2hhciAqa2V5LCBpbnQgbmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkMCwgaW50IG5zZWVk MCwgdWNoYXIgKnNlZWQxLCBpbnQgbnNlZWQxKQorc3NsUFJGKHVjaGFyICpidWYsIGludCBuYnVm LCB1Y2hhciAqa2V5LCBpbnQgbmtleSwgY2hhciAqbGFiZWwsIHVjaGFyICpzZWVkLCBpbnQgbnNl ZWQpCiB7CiAJdWNoYXIgc2hhMWRpZ1tTSEExZGxlbl0sIG1kNWRpZ1tNRDVkbGVuXSwgdG1wWzI2 XTsKIAlEaWdlc3RTdGF0ZSAqczsKQEAgLTI0MzUsOCArMjQyMyw3IEBACiAJCQl0bXBbaV0gPSAn QScgLSAxICsgbGVuOwogCQlzID0gc2hhMSh0bXAsIGxlbiwgbmlsLCBuaWwpOwogCQlzID0gc2hh MShrZXksIG5rZXksIG5pbCwgcyk7Ci0JCXMgPSBzaGExKHNlZWQwLCBuc2VlZDAsIG5pbCwgcyk7 Ci0JCXNoYTEoc2VlZDEsIG5zZWVkMSwgc2hhMWRpZywgcyk7CisJCXNoYTEoc2VlZCwgbnNlZWQs IHNoYTFkaWcsIHMpOwogCQlzID0gbWQ1KGtleSwgbmtleSwgbmlsLCBuaWwpOwogCQltZDUoc2hh MWRpZywgU0hBMWRsZW4sIG1kNWRpZywgcyk7CiAJCW4gPSBNRDVkbGVuOwpAQCAtMjQ4NiwxOCAr MjQ3MywxOCBAQAogc3RhdGljIHZvaWQKIHRsczEwU2V0RmluaXNoZWQoVGxzU2VjICpzZWMsIEhh bmRzaGFrZUhhc2ggaHNoLCB1Y2hhciAqZmluaXNoZWQsIGludCBpc2NsaWVudCkKIHsKLQl1Y2hh ciBoMFtNRDVkbGVuXSwgaDFbU0hBMWRsZW5dOworCXVjaGFyIGhbTUQ1ZGxlbitTSEExZGxlbl07 CiAJY2hhciAqbGFiZWw7CiAKIAkvLyBnZXQgY3VycmVudCBoYXNoIHZhbHVlLCBidXQgYWxsb3cg ZnVydGhlciBtZXNzYWdlcyB0byBiZSBoYXNoZWQgaW4KLQltZDUobmlsLCAwLCBoMCwgJmhzaC5t ZDUpOwotCXNoYTEobmlsLCAwLCBoMSwgJmhzaC5zaGExKTsKKwltZDUobmlsLCAwLCBoLCAmaHNo Lm1kNSk7CisJc2hhMShuaWwsIDAsIGgrTUQ1ZGxlbiwgJmhzaC5zaGExKTsKIAogCWlmKGlzY2xp ZW50KQogCQlsYWJlbCA9ICJjbGllbnQgZmluaXNoZWQiOwogCWVsc2UKIAkJbGFiZWwgPSAic2Vy dmVyIGZpbmlzaGVkIjsKLQl0bHMxMFBSRihmaW5pc2hlZCwgVExTRmluaXNoZWRMZW4sIHNlYy0+ c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCBsYWJlbCwgaDAsIE1ENWRsZW4sIGgxLCBTSEExZGxlbik7 CisJdGxzMTBQUkYoZmluaXNoZWQsIFRMU0ZpbmlzaGVkTGVuLCBzZWMtPnNlYywgTWFzdGVyU2Vj cmV0U2l6ZSwgbGFiZWwsIGgsIHNpemVvZihoKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNTEz LDcgKzI1MDAsNyBAQAogCQlsYWJlbCA9ICJjbGllbnQgZmluaXNoZWQiOwogCWVsc2UKIAkJbGFi ZWwgPSAic2VydmVyIGZpbmlzaGVkIjsKLQlwX3NoYTI1NihmaW5pc2hlZCwgVExTRmluaXNoZWRM ZW4sIHNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCAodWNoYXIqKWxhYmVsLCBzdHJsZW4obGFi ZWwpLCBzZWVkLCBTSEEyXzI1NmRsZW4pOworCXRsczEyUFJGKGZpbmlzaGVkLCBUTFNGaW5pc2hl ZExlbiwgc2VjLT5zZWMsIE1hc3RlclNlY3JldFNpemUsIGxhYmVsLCBzZWVkLCBTSEEyXzI1NmRs ZW4pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjUyMyw4ICsyNTEwLDkgQEAKIAlzZWMtPmNsaWVu dFZlcnMgPSBjdmVyczsKIAltZW1tb3ZlKHNlYy0+Y3JhbmRvbSwgY3JhbmRvbSwgUmFuZG9tU2l6 ZSk7CiAKLQlwdXQzMihzZWMtPnNyYW5kb20sIHRpbWUobmlsKSk7Ci0JZ2VucmFuZG9tKHNlYy0+ c3JhbmRvbSs0LCBSYW5kb21TaXplLTQpOworCS8vIHB1dHRpbmcgdGltZSgpJ3Mgb3V0cHV0IHRv IHRoZSBmaXJzdCA0IGJ5dGVzIGlzIG5vCisJLy8gbG9uZ2VyIHJlY29tbWVuZGVkIGFuZCBpcyBu b3QgdXNlZnVsCisJZ2VucmFuZG9tKHNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiB9CiAKIHN0 YXRpYyBpbnQKQEAgLTI1NDksNjEgKzI1MzcsODggQEAKIH0KIAogc3RhdGljIEJ5dGVzKgotdGxz U2VjRUNESEVzMShUbHNTZWMgKnNlYywgTmFtZWRjdXJ2ZSAqbmMpCit0bHNTZWNFQ0RIRXMxKFRs c1NlYyAqc2VjKQogewogCUVDZG9tYWluICpkb20gPSAmc2VjLT5lYy5kb207CiAJRUNwcml2ICpR ID0gJnNlYy0+ZWMuUTsKIAlCeXRlcyAqcGFyOwogCWludCBuOwogCi0JZWNkb21pbml0KGRvbSwg bmMtPmluaXQpOwotCW1lbXNldChRLCAwLCBzaXplb2YoKlEpKTsKLQlRLT54ID0gbXBuZXcoMCk7 Ci0JUS0+eSA9IG1wbmV3KDApOwotCVEtPmQgPSBtcG5ldygwKTsKLQllY2dlbihkb20sIFEpOwot CW4gPSAxICsgMiooKG1wc2lnbmlmKGRvbS0+cCkrNykvOCk7Ci0JcGFyID0gbmV3Ynl0ZXMoMSsy KzErbik7Ci0JcGFyLT5kYXRhWzBdID0gMzsKLQlwdXQxNihwYXItPmRhdGErMSwgbmMtPnRsc2lk KTsKLQluID0gZWNlbmNvZGVwdWIoZG9tLCBRLCBwYXItPmRhdGErNCwgcGFyLT5sZW4tNCk7Ci0J cGFyLT5kYXRhWzNdID0gbjsKLQlwYXItPmxlbiA9IDErMisxK247Ci0KKwlpZihzZWMtPm5jID09 IG5pbCkKKwkJcmV0dXJuIG5pbDsKKwlpZihzZWMtPm5jLT50bHNpZCA9PSBYMjU1MTkpeworCQlw YXIgPSBuZXdieXRlcygxKzIrMSszMik7CisJCXBhci0+ZGF0YVswXSA9IDM7CisJCXB1dDE2KHBh ci0+ZGF0YSsxLCBYMjU1MTkpOworCQlwYXItPmRhdGFbM10gPSAzMjsKKwkJY3VydmUyNTUxOV9k aF9uZXcoc2VjLT5YLCBwYXItPmRhdGErNCk7CisJfWVsc2V7CisJCWVjZG9taW5pdChkb20sIHNl Yy0+bmMtPmluaXQpOworCQltZW1zZXQoUSwgMCwgc2l6ZW9mKCpRKSk7CisJCVEtPnggPSBtcG5l dygwKTsKKwkJUS0+eSA9IG1wbmV3KDApOworCQlRLT5kID0gbXBuZXcoMCk7CisJCWVjZ2VuKGRv bSwgUSk7CisJCW4gPSAxICsgMiooKG1wc2lnbmlmKGRvbS0+cCkrNykvOCk7CisJCXBhciA9IG5l d2J5dGVzKDErMisxK24pOworCQlwYXItPmRhdGFbMF0gPSAzOworCQlwdXQxNihwYXItPmRhdGEr MSwgc2VjLT5uYy0+dGxzaWQpOworCQluID0gZWNlbmNvZGVwdWIoZG9tLCBRLCBwYXItPmRhdGEr NCwgcGFyLT5sZW4tNCk7CisJCXBhci0+ZGF0YVszXSA9IG47CisJCXBhci0+bGVuID0gMSsyKzEr bjsKKwl9CiAJcmV0dXJuIHBhcjsKIH0KIAogc3RhdGljIGludAogdGxzU2VjRUNESEVzMihUbHNT ZWMgKnNlYywgQnl0ZXMgKlljKQogeworCXN0YXRpYyBjaGFyIHplcm9bMzJdID0gezB9OwogCUVD ZG9tYWluICpkb20gPSAmc2VjLT5lYy5kb207CiAJRUNwcml2ICpRID0gJnNlYy0+ZWMuUTsKIAlF Q3BvaW50IEs7CiAJRUNwdWIgKlk7CisJQnl0ZXMgKlo7CiAKIAlpZihZYyA9PSBuaWwpewogCQl3 ZXJyc3RyKCJubyBwdWJsaWMga2V5Iik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZigoWSA9IGVj ZGVjb2RlcHViKGRvbSwgWWMtPmRhdGEsIFljLT5sZW4pKSA9PSBuaWwpewotCQl3ZXJyc3RyKCJi YWQgcHVibGljIGtleSIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbWVtc2V0KCZLLCAwLCBzaXpl b2YoSykpOwotCUsueCA9IG1wbmV3KDApOwotCUsueSA9IG1wbmV3KDApOworCWlmKHNlYy0+bmMt PnRsc2lkID09IFgyNTUxOSl7CisJCWlmKFljLT5sZW4gIT0gMzIpeworCQkJd2VycnN0cigiYmFk IHB1YmxpYyBrZXkiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlaID0gbmV3Ynl0ZXMoMzIpOwor CQljdXJ2ZTI1NTE5X2RoX2ZpbmlzaChzZWMtPlgsIFljLT5kYXRhLCBaLT5kYXRhKTsKKwkJLy8g cmZjIHdhbnRzIHVzIHRvIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBpZgorCQkvLyBzaGFyZWQg c2VjcmV0ID09IGFsbCB6ZXJvZXMuCisJCWlmKHRzbWVtY21wKFotPmRhdGEsIHplcm8sIFotPmxl bikgPT0gMCl7CisJCQl3ZXJyc3RyKCJ1bmx1Y2t5IHNoYXJlZCBrZXkiKTsKKwkJCWZyZWVieXRl cyhaKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlzZXRNYXN0ZXJTZWNyZXQoc2VjLCBaKTsKKwl9 ZWxzZXsKKwkJaWYoKFkgPSBlY2RlY29kZXB1Yihkb20sIFljLT5kYXRhLCBZYy0+bGVuKSkgPT0g bmlsKXsKKwkJCXdlcnJzdHIoImJhZCBwdWJsaWMga2V5Iik7CisJCQlyZXR1cm4gLTE7CisJCX0K KworCQltZW1zZXQoJkssIDAsIHNpemVvZihLKSk7CisJCUsueCA9IG1wbmV3KDApOworCQlLLnkg PSBtcG5ldygwKTsKIAotCWVjbXVsKGRvbSwgWSwgUS0+ZCwgJkspOworCQllY211bChkb20sIFks IFEtPmQsICZLKTsKIAotCXNldE1hc3RlclNlY3JldChzZWMsIG1wdG9ieXRlcyhLLngsIChtcHNp Z25pZihkb20tPnApKzcpLzgpKTsKKwkJc2V0TWFzdGVyU2VjcmV0KHNlYywgbXB0b2J5dGVzKEsu eCwgKG1wc2lnbmlmKGRvbS0+cCkrNykvOCkpOwogCi0JbXBmcmVlKEsueCk7Ci0JbXBmcmVlKEsu eSk7Ci0KLQllY3B1YmZyZWUoWSk7CisJCW1wZnJlZShLLngpOworCQltcGZyZWUoSy55KTsKIAor CQllY3B1YmZyZWUoWSk7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0yNjEyLDggKzI2MjcsOCBA QAogewogCW1lbXNldChzZWMsIDAsIHNpemVvZigqc2VjKSk7CiAJc2VjLT5jbGllbnRWZXJzID0g Y3ZlcnM7Ci0JcHV0MzIoc2VjLT5jcmFuZG9tLCB0aW1lKG5pbCkpOwotCWdlbnJhbmRvbShzZWMt PmNyYW5kb20rNCwgUmFuZG9tU2l6ZS00KTsKKwkvLyBzZWUgdGhlIGNvbW1lbnQgb24gdGxzU2Vj SW5pdHMKKwlnZW5yYW5kb20oc2VjLT5jcmFuZG9tLCBSYW5kb21TaXplKTsKIH0KIAogc3RhdGlj IEJ5dGVzKgpAQCAtMjY3MSwxMyArMjY4NiwxNSBAQAogc3RhdGljIGludAogc2V0U2VjcmV0cyhU bHNDb25uZWN0aW9uICpjLCBpbnQgaXNjbGllbnQpCiB7Ci0JdWNoYXIga2RbTWF4S2V5RGF0YV07 CisJdWNoYXIga2RbTWF4S2V5RGF0YV0sIHNlZWRbMipSYW5kb21TaXplXTsKIAljaGFyICpzZWNy ZXRzOwogCWludCBydjsKIAogCWFzc2VydChjLT5uc2VjcmV0IDw9IHNpemVvZihrZCkpOwogCXNl Y3JldHMgPSBlbWFsbG9jKDIqYy0+bnNlY3JldCk7CiAKKwltZW1tb3ZlKHNlZWQsIGMtPnNlYy0+ c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJbWVtbW92ZShzZWVkK1JhbmRvbVNpemUsIGMtPnNlYy0+ Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiAJLyoKIAkgKiBnZW5lcmF0ZSBzZWNyZXQga2V5cyBmcm9t IHRoZSBtYXN0ZXIgc2VjcmV0LgogCSAqCkBAIC0yNjg2LDcgKzI3MDMsNyBAQAogCSAqIGJ1dCBp dCdzIGFsbCBnZW5lcmF0ZWQgdXNpbmcgdGhlIHNhbWUgZnVuY3Rpb24uCiAJICovCiAJKCpjLT5z ZWMtPnByZikoa2QsIGMtPm5zZWNyZXQsIGMtPnNlYy0+c2VjLCBNYXN0ZXJTZWNyZXRTaXplLCAi a2V5IGV4cGFuc2lvbiIsCi0JCQljLT5zZWMtPnNyYW5kb20sIFJhbmRvbVNpemUsIGMtPnNlYy0+ Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJCQlzZWVkLCBzaXplb2Yoc2VlZCkpOwogCiAJZW5jNjQo c2VjcmV0cywgMipjLT5uc2VjcmV0LCBrZCwgYy0+bnNlY3JldCk7CiAJbWVtc2V0KGtkLCAwLCBj LT5uc2VjcmV0KTsKQEAgLTI3MDUsNiArMjcyMiw4IEBACiBzdGF0aWMgdm9pZAogc2V0TWFzdGVy U2VjcmV0KFRsc1NlYyAqc2VjLCBCeXRlcyAqcG0pCiB7CisJdWNoYXIgc2VlZFsyKlJhbmRvbVNp emVdOworCiAJaWYoc2VjLT5wc2tsZW4gPiAwKXsKIAkJQnl0ZXMgKm9wbSA9IHBtOwogCQl1Y2hh ciAqcDsKQEAgLTI3MjEsOCArMjc0MCwxMCBAQAogCQlmcmVlYnl0ZXMob3BtKTsKIAl9CiAKKwlt ZW1tb3ZlKHNlZWQsIHNlYy0+Y3JhbmRvbSwgUmFuZG9tU2l6ZSk7CisJbWVtbW92ZShzZWVkK1Jh bmRvbVNpemUsIHNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7CiAJKCpzZWMtPnByZikoc2VjLT5z ZWMsIE1hc3RlclNlY3JldFNpemUsIHBtLT5kYXRhLCBwbS0+bGVuLCAibWFzdGVyIHNlY3JldCIs Ci0JCQlzZWMtPmNyYW5kb20sIFJhbmRvbVNpemUsIHNlYy0+c3JhbmRvbSwgUmFuZG9tU2l6ZSk7 CisJCQlzZWVkLCBzaXplb2Yoc2VlZCkpOwogCiAJbWVtc2V0KHBtLT5kYXRhLCAwLCBwbS0+bGVu KTsJCiAJZnJlZWJ5dGVzKHBtKTsK --0000000000009eab3e05c50ece88--