From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#11935: XINT etc. should be functions Date: Fri, 14 Jun 2013 23:43:30 -0700 Organization: UCLA Computer Science Department Message-ID: <51BC0D12.4060807@cs.ucla.edu> References: <500039B7.8050106@cs.ucla.edu> <51B0B137.5020705@cs.ucla.edu> <51B3D1B5.8020807@cs.ucla.edu> <51B42B07.5090209@cs.ucla.edu> <51B9DAFC.3010502@cs.ucla.edu> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070603050203080502010407" X-Trace: ger.gmane.org 1371278664 18028 80.91.229.3 (15 Jun 2013 06:44:24 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 15 Jun 2013 06:44:24 +0000 (UTC) Cc: 11935@debbugs.gnu.org To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sat Jun 15 08:44:25 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1UnkDo-0008U9-Bi for geb-bug-gnu-emacs@m.gmane.org; Sat, 15 Jun 2013 08:44:25 +0200 Original-Received: from localhost ([::1]:57126 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UnkDo-0000eD-0Z for geb-bug-gnu-emacs@m.gmane.org; Sat, 15 Jun 2013 02:44:24 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:54990) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UnkDb-0000cz-Nd for bug-gnu-emacs@gnu.org; Sat, 15 Jun 2013 02:44:19 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UnkDT-0008Ci-DF for bug-gnu-emacs@gnu.org; Sat, 15 Jun 2013 02:44:11 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:60780) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UnkDT-0008Ce-8A for bug-gnu-emacs@gnu.org; Sat, 15 Jun 2013 02:44:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1UnkDS-0008V1-ED for bug-gnu-emacs@gnu.org; Sat, 15 Jun 2013 02:44:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 15 Jun 2013 06:44:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 11935 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 11935-submit@debbugs.gnu.org id=B11935.137127862532608 (code B ref 11935); Sat, 15 Jun 2013 06:44:02 +0000 Original-Received: (at 11935) by debbugs.gnu.org; 15 Jun 2013 06:43:45 +0000 Original-Received: from localhost ([127.0.0.1]:45447 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UnkDB-0008Tq-B1 for submit@debbugs.gnu.org; Sat, 15 Jun 2013 02:43:45 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:47554) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1UnkD5-0008TK-SM for 11935@debbugs.gnu.org; Sat, 15 Jun 2013 02:43:41 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 613B2A60003; Fri, 14 Jun 2013 23:43:34 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NdDb296BHjIR; Fri, 14 Jun 2013 23:43:30 -0700 (PDT) Original-Received: from [192.168.1.9] (pool-71-108-49-126.lsanca.fios.verizon.net [71.108.49.126]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 4ECAB39E8100; Fri, 14 Jun 2013 23:43:30 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130510 Thunderbird/17.0.6 In-Reply-To: X-Enigmail-Version: 1.5.1 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:75135 Archived-At: This is a multi-part message in MIME format. --------------070603050203080502010407 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 06/13/2013 01:08 PM, Stefan Monnier wrote: > Can't we use something like > > #define FUNCTION_OF_MACRO(fun, type_in, type_out) \ > LISP_INLINE type_out (fun) (type_in x) { return lisp_h_##fun (x); } Sure, though we need to adjust that a bit, as the function can take multiple args, and it might return void (where the 'return' keyword must be omitted). The following variant works for me, and the attached combined patch implements this suggestion. /* Define NAME as a lisp.h inline function that returns TYPE and has arguments declared as ARGDECLS and passed as ARGS. ARGDECLS and ARGS should be parenthesized. Implement the function by calling lisp_h_NAME ARGS. */ #define LISP_MACRO_DEFUN(name, type, argdecls, args) \ LISP_INLINE type (name) argdecls { return lisp_h_##name args; } /* like LISP_MACRO_DEFUN, except NAME returns void. */ #define LISP_MACRO_DEFUN_VOID(name, argdecls, args) \ LISP_INLINE void (name) argdecls { lisp_h_##name args; } --------------070603050203080502010407 Content-Type: text/plain; charset=UTF-8; name="inline4o.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="inline4o.txt" PT09IG1vZGlmaWVkIGZpbGUgJ0NoYW5nZUxvZycKLS0tIENoYW5nZUxvZwkyMDEzLTA2LTEx IDE4OjA1OjA1ICswMDAwCisrKyBDaGFuZ2VMb2cJMjAxMy0wNi0xNSAwNjoxNzowNyArMDAw MApAQCAtMSwzICsxLDkgQEAKKzIwMTMtMDYtMTUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QGNz LnVjbGEuZWR1PgorCisJVXNlIGZ1bmN0aW9ucywgbm90IG1hY3JvcywgZm9yIFhJTlQgZXRj LiAoQnVnIzExOTM1KS4KKwkqIGNvbmZpZ3VyZS5hYyAoV0FSTl9DRkxBR1MpOiBSZW1vdmUg LVdiYWQtZnVuY3Rpb24tY2FzdCwKKwlhcyBpdCBnZW5lcmF0ZXMgYm9ndXMgd2FybmluZ3Mg YWJvdXQgcmVhc29uYWJsZSBjYXN0cyBvZiBjYWxscy4KKwogMjAxMy0wNi0xMSAgUGF1bCBF Z2dlcnQgIDxlZ2dlcnRAY3MudWNsYS5lZHU+CiAKIAktLXdpdGhvdXQtYWxsIHNob3VsZCBp bXBseSAtLXdpdGgtZmlsZS1ub3RpZmljYXRpb249bm8uICAoQnVnIzE0NTY5KQoKPT09IG1v ZGlmaWVkIGZpbGUgJ2NvbmZpZ3VyZS5hYycKLS0tIGNvbmZpZ3VyZS5hYwkyMDEzLTA2LTEz IDA2OjI4OjA1ICswMDAwCisrKyBjb25maWd1cmUuYWMJMjAxMy0wNi0xMyAxNTozODowMyAr MDAwMApAQCAtNzc2LDYgKzc3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIHNpZ25lZCBvdmVyZmxvdyBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yCiAgIG53 PSIkbncgLVdzeW5jLW5hbmQiICAgICAgICAgICAgICAjIGlycmVsZXZhbnQgaGVyZSwgYW5k IHByb3Zva2VzIE9iakMgd2FybmluZwogICBudz0iJG53IC1XdW5zYWZlLWxvb3Atb3B0aW1p emF0aW9ucyIgIyBPSyB0byBzdXBwcmVzcyB1bnNhZmUgb3B0aW1pemF0aW9ucworICBudz0i JG53IC1XYmFkLWZ1bmN0aW9uLWNhc3QiICAgICAgIyBUaGVzZSBjYXN0cyBhcmUgbm8gd29y c2UgdGhhbiBvdGhlcnMuCiAKICAgIyBFbWFjcyBkb2Vzbid0IGNhcmUgYWJvdXQgc2hhZG93 aW5nOyBzZWUKICAgIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNz LWRpZmZzLzIwMTEtMTEvbXNnMDAyNjUuaHRtbD4uCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3Jj L0NoYW5nZUxvZycKLS0tIHNyYy9DaGFuZ2VMb2cJMjAxMy0wNi0xMyAyMjoyNDo1MiArMDAw MAorKysgc3JjL0NoYW5nZUxvZwkyMDEzLTA2LTE1IDA2OjE3OjA3ICswMDAwCkBAIC0xLDMg KzEsMTY0IEBACisyMDEzLTA2LTE1ICBQYXVsIEVnZ2VydCAgPGVnZ2VydEBjcy51Y2xhLmVk dT4KKworCU1vdmUgZnVuY3Rpb25zIGZyb20gbGlzcC5oIHRvIGluZGl2aWR1YWwgbW9kdWxl cyB3aGVuIHBvc3NpYmxlLgorCUZyb20gYSBzdWdnZXN0aW9uIGJ5IEFuZHJlYXMgU2Nod2Fi IGluIDxodHRwOi8vYnVncy5nbnUub3JnLzExOTM1IzY4Pi4KKwkqIGFsbG9jLmMgKFhGTE9B VF9JTklULCBzZXRfc3ltYm9sX25hbWUpOgorCSogYnVmZmVyLmMgKENIRUNLX09WRVJMQVkp OgorCSogY2hhcnRhYi5jIChDSEVDS19DSEFSX1RBQkxFLCBzZXRfY2hhcl90YWJsZV9hc2Np aSkKKwkoc2V0X2NoYXJfdGFibGVfcGFyZW50KToKKwkqIGNvZGluZy5jIChDSEVDS19OQVRO VU1fQ0FSLCBDSEVDS19OQVROVU1fQ0RSKToKKwkqIGRhdGEuYyAoQk9PTEZXRFAsIElOVEZX RFAsIEtCT0FSRF9PQkpGV0RQLCBPQkpGV0RQLCBYQk9PTEZXRCkKKwkoWEtCT0FSRF9PQkpG V0QsIFhJTlRGV0QsIFhPQkpGV0QsIENIRUNLX1NVQlIsIHNldF9ibHZfZm91bmQpCisJKGJs dl92YWx1ZSwgc2V0X2Jsdl92YWx1ZSwgc2V0X2Jsdl93aGVyZSwgc2V0X2Jsdl9kZWZjZWxs KQorCShzZXRfYmx2X3ZhbGNlbGwpOgorCSogZW1hY3MuYyAoc2V0bG9jYWxlKSBbIUhBVkVf U0VUTE9DQUxFXToKKwkqIGV2YWwuYyAoc3BlY3BkbF9zeW1ib2wsIHNwZWNwZGxfb2xkX3Zh bHVlLCBzcGVjcGRsX3doZXJlKQorCShzcGVjcGRsX2FyZywgc3BlY3BkbF9mdW5jLCBiYWNr dHJhY2VfZnVuY3Rpb24sIGJhY2t0cmFjZV9uYXJncykKKwkoYmFja3RyYWNlX2FyZ3MsIGJh Y2t0cmFjZV9kZWJ1Z19vbl9leGl0KToKKwkqIGZsb2F0Zm5zLmMgKENIRUNLX0ZMT0FUKToK KwkqIGZucy5jIChDSEVDS19IQVNIX1RBQkxFLCBDSEVDS19MSVNUX0VORCkKKwkoc2V0X2hh c2hfa2V5X2FuZF92YWx1ZSwgc2V0X2hhc2hfbmV4dCwgc2V0X2hhc2hfbmV4dF9zbG90KQor CShzZXRfaGFzaF9oYXNoLCBzZXRfaGFzaF9oYXNoX3Nsb3QsIHNldF9oYXNoX2luZGV4KQor CShzZXRfaGFzaF9pbmRleF9zbG90KToKKwkqIGtleW1hcC5jIChDSEVDS19WRUNUT1JfT1Jf Q0hBUl9UQUJMRSk6CisJKiBtYXJrZXIuYyAoQ0hFQ0tfTUFSS0VSKToKKwkqIHRleHRwcm9w LmMgKENIRUNLX1NUUklOR19PUl9CVUZGRVIpOgorCSogd2luZG93LmMgKENIRUNLX1dJTkRP V19DT05GSUdVUkFUSU9OKToKKwlNb3ZlIGhlcmUgZnJvbSBsaXNwLmgsIGFuZCBtYWtlIHRo ZXNlIGZ1bmN0aW9ucyBzdGF0aWMgcmF0aGVyIHRoYW4KKwlleHRlcm4gaW5saW5lLgorCSog YnVmZmVyLmMgKFFvdmVybGF5cCk6CisJKiBkYXRhLmMgKFFzdWJycCk6CisJKiBmbnMuYyAo UWhhc2hfdGFibGVfcCk6CisJKiB3aW5kb3cuYyAoUXdpbmRvd19jb25maWd1cmF0aW9uX3Ap OgorCU5vdyBzdGF0aWMuCisJKiBsaXNwLmg6IFJlbW92ZSB0aGUgYWJvdmVtZW50aW9uZWQg ZGVmbnMgYW5kIGRlY2xzLgorCisJVXNlIGZ1bmN0aW9ucywgbm90IG1hY3JvcywgZm9yIFhJ TlQgZXRjLiAoQnVnIzExOTM1KS4KKwlJbiBsaXNwLmgsIHByZWZlciBmdW5jdGlvbnMgdG8g ZnVuY3Rpb24tbGlrZSBtYWNyb3MsIGFuZAorCWNvbnN0YW50cyB0byBvYmplY3QtbGlrZSBt YWNyb3MsIHdoZW4gZWl0aGVyIHdpbGwgZG8uICBUaGlzOgorCSAuIHNpbXBsaWZpZXMgdXNl LCBhcyB0aGVyZSdzIG5vIG1vcmUgbmVlZCB0byB3b3JyeSBhYm91dAorCSAgIGFyZ3VtZW50 cycgc2lkZSBlZmZlY3RzIGJlaW5nIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcy4KKwkgLiBt YWtlcyB0aGUgY29kZSBlYXNpZXIgdG8gZGVidWcgb24gc29tZSBwbGF0Zm9ybXMuCisJSG93 ZXZlciwgd2hlbiB1c2luZyBnY2MgLU8wLCBrZWVwIHVzaW5nIGZ1bmN0aW9uLWxpa2UgbWFj cm9zCisJZm9yIGEgZmV3IGNyaXRpY2FsIG9wZXJhdGlvbnMsIGZvciBwZXJmb3JtYW5jZSBy ZWFzb25zLgorCVRoaXMgc29ydCBvZiB0aGluZyBpc24ndCBuZWVkZWQgd2l0aCBnY2MgLU9n LCBidXQgLU9nCisJaXMgYSBHQ0MgNC44IGZlYXR1cmUgYW5kIGlzbid0IHdpZGVseS1lbm91 Z2ggYXZhaWxhYmxlIHlldC4KKwkqIGFsbG9jLmMgKGdkYl9tYWtlX2VudW1zX3Zpc2libGUp IFtVU0VfTFNCX1RBR106CisJUmVtb3ZlIGVudW0gbHNiX2JpdHM7IG5vIGxvbmdlciBuZWVk ZWQuCisJKGFsbG9jYXRlX21pc2MsIGZyZWVfbWlzYyk6IERvbid0IHVzZSBYTUlTQ1RZUEUg YXMgYW4gbHZhbHVlLgorCSogYnVmZmVyLmMgKFFvdmVybGFwKToKKwkqIGRhdGEuYyAoUXN1 YnJwKToKKwkqIGZucy5jIChRaGFzaF90YWJsZV9wKToKKwlOb3cgZXh0ZXJuLCBzbyBsaXNw LmggY2FuIHVzZSB0aGVzZSBzeW1ib2xzLgorCSogZGlzcGV4dGVybi5oOiBJbmNsdWRlIGNo YXJhY3Rlci5oLCBmb3IgTUFYX0NIQVIgZXRjLgorCShHTFlQSCwgR0xZUEhfQ0hBUiwgR0xZ UEhfRkFDRSwgU0VUX0dMWVBIX0NIQVIsIFNFVF9HTFlQSF9GQUNFKQorCShTRVRfR0xZUEgs IEdMWVBIX0NPREVfQ0hBUiwgR0xZUEhfQ09ERV9GQUNFKQorCShTRVRfR0xZUEhfRlJPTV9H TFlQSF9DT0RFLCBHTFlQSF9NT0RFX0xJTkVfRkFDRSwgR0xZUEhfQ0hBUl9WQUxJRF9QKQor CShHTFlQSF9DT0RFX1ApOiBNb3ZlIGhlcmUgZnJvbSBsaXNwLmguCisJKEdMWVBIX0NIQVIs IEdMWVBIX0ZBQ0UsIEdMWVBIX0NPREVfQ0hBUiwgR0xZUEhfQ09ERV9GQUNFKQorCShHTFlQ SF9DSEFSX1ZBTElEX1AsIEdMWVBIX0NPREVfUCk6IE5vdyBmdW5jdGlvbnMsIG5vdCBtYWNy b3MuCisJKEdMWVBIX01PREVfTElORV9GQUNFKTogTm93IGVudW1zLCBub3QgbWFjcm9zLgor CSogZXZhbC5jIChGYXV0b2xvYWQpOiBDYXN0IFhVTlRBRyBvdXRwdXQgdG8gaW50cHRyX3Qs IHNpbmNlCisJWFVOVEFHIG5vdyByZXR1cm5zIHZvaWQgKi4KKwkqIGxpc3AuaCAobGlzcF9o X1hMSSwgbGlzcF9oX1hJTCwgbGlzcF9oX0NIRUNLX0xJU1RfQ09OUykKKwkobGlzcF9oX0NI RUNLX05VTUJFUiBDSEVDS19TWU1CT0wsIGxpc3BfaF9DSEVDS19UWVBFKQorCShsaXNwX2hf Q09OU1AsIGxpc3BfaF9FUSwgbGlzcF9oX0ZMT0FUUCwgbGlzcF9oX0lOVEVHRVJQKQorCShs aXNwX2hfTUFSS0VSUCwgbGlzcF9oX01JU0NQLCBsaXNwX2hfTklMUCkKKwkobGlzcF9oX1NF VF9TWU1CT0xfVkFMLCBsaXNwX2hfU1lNQk9MX0NPTlNUQU5UX1ApCisJKGxpc3BfaF9TWU1C T0xfVkFMLCBsaXNwX2hfU1lNQk9MUCwgbGlzcF9oX1ZFQ1RPUkxJS0VQKQorCShsaXNwX2hf WENBUiwgbGlzcF9oX1hDRFIsIGxpc3BfaF9YQ09OUywgbGlzcF9oX1hIQVNIKQorCShsaXNw X2hfWFBOVFIsIGxpc3BfaF9YU1lNQk9MKToKKwlOZXcgbWFjcm9zLCByZW5hbWVkIGZyb20g dGhlaXIgc2Fucy1saXNwX2hfIGNvdW50ZXJwYXJ0cy4KKwkoWExJLCBYSUwsIENIRUNLX0xJ U1RfQ09OUywgQ0hFQ0tfTlVNQkVSIENIRUNLX1NZTUJPTCkKKwkoQ0hFQ0tfVFlQRSwgQ09O U1AsIEVRLCBGTE9BVFAsIElOVEVHRVJQLCBNQVJLRVJQKQorCShNSVNDUCwgTklMUCwgU0VU X1NZTUJPTF9WQUwsIFNZTUJPTF9DT05TVEFOVF9QLCBTWU1CT0xfVkFMLCBTWU1CT0xQKQor CShWRUNUT1JMSUtFUCwgWENBUiwgWENEUiwgWENPTlMsIFhIQVNILCBYUE5UUiwgWFNZTUJP TCk6CisJSWYgY29tcGlsaW5nIHZpYSBHQ0Mgd2l0aG91dCBvcHRpbWl6YXRpb24sIGRlZmlu ZSB0aGVzZSBhcyBtYWNyb3MKKwlpbiBhZGRpdGlvbiB0byBpbmxpbmUgZnVuY3Rpb25zLgor CVRvIGRpc2FibGUgdGhpcywgY29tcGlsZSB3aXRoIC1ESU5MSU5JTkc9MC4KKwkoTElTUF9N QUNST19ERUZVTiwgTElTUF9NQUNST19ERUZVTl9WT0lEKTogTmV3IG1hY3Jvcy4KKwkoY2hl Y2tfY29uc19saXN0KSBbIUdDX0NIRUNLX0NPTlNfTElTVF06IExpa2V3aXNlLgorCShtYWtl X251bWJlciwgWEZBU1RJTlQsIFhJTlQsIFhUWVBFLCBYVU5UQUcpOiBMaWtld2lzZSwgYnV0 CisJaGFuZC1vcHRpbWl6ZSBvbmx5IGluIHRoZSBVU0VfTFNCX1RBRyBjYXNlLCBhcyBHTlVp c2ggaG9zdHMgZG8gdGhhdC4KKwkoSU5UTUFTSywgVkFMTUFTSyk6IE5vdyBtYWNyb3MsIHNp bmNlIHN0YXRpYyB2YWx1ZXMgY2Fubm90IGJlCisJYWNjZXNzZWQgZnJvbSBleHRlcm4gaW5s aW5lIGZ1bmN0aW9ucy4KKwkoVkFMTUFTSyk6IEFsc28gYSBjb25zdGFudCwgZm9yIGJlbmVm aXQgb2Ygb2xkIEdEQi4KKwkoTElTUF9JTlRfVEFHX1ApOiBSZW1vdmU7IG5vIGxvbmdlciBu ZWVkZWQgYXMgdGhlIG9ubHkgY2FsbGVyCisJaXMgSU5URUdFUlAsIHdoaWNoIGNhbiBmb2xk IGl0IGluLgorCShYTEksIFhJTCwgWEhBU0gsIFhUWVBFLFhJTlQsIFhGQVNUSU5ULCBYVUlO VCkKKwkobWFrZV9udW1iZXIsIFhQTlRSLCBYVU5UQUcsIEVRLCBYQ09OUywgWFZFQ1RPUiwg WFNUUklORywgWFNZTUJPTCkKKwkoWEZMT0FULCBYUFJPQ0VTUywgWFdJTkRPVywgWFRFUk1J TkFMLCBYU1VCUiwgWEJVRkZFUiwgWENIQVJfVEFCTEUpCisJKFhTVUJfQ0hBUl9UQUJMRSwg WEJPT0xfVkVDVE9SLCBtYWtlX2xpc3BfcHRyLCBDSEVDS19UWVBFKQorCShDSEVDS19TVFJJ TkdfT1JfQlVGRkVSLCBYQ0FSLCBYQ0RSLCBYU0VUQ0FSLCBYU0VUQ0RSLCBDQVIsIENEUikK KwkoQ0FSX1NBRkUsIENEUl9TQUZFLCBTVFJJTkdfTVVMVElCWVRFLCBTREFUQSwgU1NEQVRB LCBTUkVGLCBTU0VUKQorCShTQ0hBUlMsIFNUUklOR19CWVRFUywgU0JZVEVTLCBTVFJJTkdf U0VUX0NIQVJTLCBTVFJJTkdfQ09QWUlOLCBBUkVGKQorCShBU0laRSwgQVNFVCwgQ0hBUl9U QUJMRV9SRUZfQVNDSUksIENIQVJfVEFCTEVfUkVGKQorCShDSEFSX1RBQkxFX1NFVCwgQ0hB Ul9UQUJMRV9FWFRSQV9TTE9UUywgU1lNQk9MX1ZBTCwgU1lNQk9MX0FMSUFTKQorCShTWU1C T0xfQkxWLCBTWU1CT0xfRldELCBTRVRfU1lNQk9MX1ZBTCwgU0VUX1NZTUJPTF9BTElBUykK KwkoU0VUX1NZTUJPTF9CTFYsIFNFVF9TWU1CT0xfRldELCBTWU1CT0xfTkFNRSwgU1lNQk9M X0lOVEVSTkVEX1ApCisJKFNZTUJPTF9JTlRFUk5FRF9JTl9JTklUSUFMX09CQVJSQVlfUCwg U1lNQk9MX0NPTlNUQU5UX1ApCisJKFhIQVNIX1RBQkxFLCBIQVNIX1RBQkxFX1AsIENIRUNL X0hBU0hfVEFCTEUsIEhBU0hfS0VZLCBIQVNIX1ZBTFVFKQorCShIQVNIX05FWFQsIEhBU0hf SEFTSCwgSEFTSF9JTkRFWCwgSEFTSF9UQUJMRV9TSVpFKQorCShYTUlTQywgWE1JU0NBTlks IFhNQVJLRVIsIFhPVkVSTEFZLCBYU0FWRV9WQUxVRSwgWEZXRFRZUEUpCisJKFhJTlRGV0Qs IFhCT09MRldELCBYT0JKRldELCBYQlVGRkVSX09CSkZXRCwgWEtCT0FSRF9PQkpGV0QpCisJ KFhGTE9BVF9EQVRBLCBYRkxPQVRfSU5JVCwgTklMUCwgTlVNQkVSUCwgTkFUTlVNUCkKKwko UkFOR0VEX0lOVEVHRVJQLCBDT05TUCwgRkxPQVRQLCBNSVNDUCwgU1RSSU5HUCwgU1lNQk9M UCkKKwkoSU5URUdFUlAsIFZFQ1RPUkxJS0VQLCBWRUNUT1JQLCBPVkVSTEFZUCkKKwkoTUFS S0VSUCwgU0FWRV9WQUxVRVAsIEFVVE9MT0FEUCwgSU5URldEUCwgQk9PTEZXRFAsIE9CSkZX RFApCisJKEJVRkZFUl9PQkpGV0RQLCBLQk9BUkRfT0JKRldEUCwgUFNFVURPVkVDVE9SX1RZ UEVQKQorCShQU0VVRE9WRUNUT1JQLCBXSU5ET1dfQ09ORklHVVJBVElPTlAsIFBST0NFU1NQ LCBXSU5ET1dQKQorCShURVJNSU5BTFAsIFNVQlJQLCBDT01QSUxFRFAsIEJVRkZFUlAsIENI QVJfVEFCTEVfUCkKKwkoU1VCX0NIQVJfVEFCTEVfUCwgQk9PTF9WRUNUT1JfUCwgRlJBTUVQ LCBJTUFHRVAsIEFSUkFZUCkKKwkoQ0hFQ0tfTElTVCwgQ0hFQ0tfTElTVF9DT05TLCBDSEVD S19MSVNUX0VORCwgQ0hFQ0tfU1RSSU5HKQorCShDSEVDS19TVFJJTkdfQ0FSLCBDSEVDS19D T05TLCBDSEVDS19TWU1CT0wsIENIRUNLX0NIQVJfVEFCTEUpCisJKENIRUNLX1ZFQ1RPUiwg Q0hFQ0tfVkVDVE9SX09SX1NUUklORywgQ0hFQ0tfQVJSQVkpCisJKENIRUNLX1ZFQ1RPUl9P Ul9DSEFSX1RBQkxFLCBDSEVDS19CVUZGRVIsIENIRUNLX1dJTkRPVykKKwkoQ0hFQ0tfV0lO RE9XX0NPTkZJR1VSQVRJT04sIENIRUNLX1BST0NFU1MsIENIRUNLX1NVQlIpCisJKENIRUNL X05VTUJFUiwgQ0hFQ0tfTkFUTlVNLCBDSEVDS19NQVJLRVIsIFhGTE9BVElOVCkKKwkoQ0hF Q0tfRkxPQVQsIENIRUNLX05VTUJFUl9PUl9GTE9BVCwgQ0hFQ0tfT1ZFUkxBWSkKKwkoQ0hF Q0tfTlVNQkVSX0NBUiwgQ0hFQ0tfTlVNQkVSX0NEUiwgQ0hFQ0tfTkFUTlVNX0NBUikKKwko Q0hFQ0tfTkFUTlVNX0NEUiwgRlVOQ1RJT05QLCBTUEVDUERMX0lOREVYLCBMT0FESElTVF9B VFRBQ0gpCisJTm93IGZ1bmN0aW9ucy4KKwkoY2hlY2tfY29uc19saXN0KSBbIUdDX0NIRUNL X0NPTlNfTElTVF06IE5ldyBlbXB0eSBmdW5jdGlvbi4KKwkoTElTUF9NQUtFX1JWQUxVRSwg VFlQRU1BU0spOiBSZW1vdmU7IG5vIGxvbmdlciBuZWVkZWQuCisJKFZBTE1BU0spOiBEZWZp bmUgaW4gb25lIHBsYWNlIHJhdGhlciB0aGFuIGluIHR3bywgbWVyZ2luZyB0aGUKKwlVU0Vf TFNCX1RBRyBwYXJ0czsgdGhpcyBpcyBzaW1wbGVyLgorCShhcmVmX2FkZHIsIGdjX2FzZXQs IE1PU1RfUE9TSVRJVkVfRklYTlVNLCBNT1NUX05FR0FUSVZFX0ZJWE5VTSkKKwkobWF4LCBt aW4sIHN0cnVjdCBMaXNwX1N0cmluZywgVU5TSUdORURfQ01QLCBBU0NJSV9DSEFSX1ApOgor CU1vdmUgdXAsIHRvIGF2b2lkIHVzZSBiZWZvcmUgZGVmaW5pdGlvbi4KKwlBbHNvIGluY2x1 ZGUgImdsb2JhbHMuaCIgZWFybGllciwgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKwkobWFrZV9u YXRudW0pOiBOZXcgZnVuY3Rpb24uCisJKFhVTlRBRyk6IE5vdyByZXR1cm5zIHZvaWQgKiwg bm90IGludHB0cl90LCBhcyB0aGlzIG1lYW5zIGZld2VyIGNhc3RzLgorCSh1bmlvbiBMaXNw X0Z3ZCwgQk9PTEZXRFAsIEJPT0xfVkVDVE9SX1AsIEJVRkZFUl9PQkpGV0RQLCBCVUZGRVJQ KQorCShDSEFSX1RBQkxFX1AsIENIQVJfVEFCTEVfUkVGX0FTQ0lJLCBDT05TUCwgRkxPQVRQ LCBJTlRFR0VSUCwgSU5URldEUCkKKwkoS0JPQVJEX09CSkZXRFAsIE1BUktFUlAsIE1JU0NQ LCBOSUxQLCBPQkpGV0RQLCBPVkVSTEFZUCwgUFJPQ0VTU1ApCisJKFBTRVVET1ZFQ1RPUlAs IFNBVkVfVkFMVUVQLCBTVFJJTkdQLCBTVUJfQ0hBUl9UQUJMRV9QLCBTVUJSUCwgU1lNQk9M UCkKKwkoVkVDVE9STElLRVAsIFdJTkRPV1AsIFFvdmVybGF5cCwgY2hhcl90YWJsZV9yZWYs IGNoYXJfdGFibGVfc2V0KQorCShjaGFyX3RhYmxlX3RyYW5zbGF0ZSwgUWFycmF5cCwgUWJ1 ZmZlcnAsIFFidWZmZXJfb3Jfc3RyaW5nX3ApCisJKFFjaGFyX3RhYmxlX3AsIFFjb25zcCwg UWZsb2F0cCwgUWludGVnZXJwLCBRbGFtYmRhLCBRbGlzdHAsIFFtYXJrZXJwKQorCShRbmls LCBRbnVtYmVycCwgUXN1YnJwLCBRc3RyaW5ncCwgUXN5bWJvbHAsIFF2ZWN0b3JwKQorCShR dmVjdG9yX29yX2NoYXJfdGFibGVfcCwgUXdob2xlbnVtcCwgRmZib3VuZHAsIHdyb25nX3R5 cGVfYXJndW1lbnQpCisJKGluaXRpYWxpemVkLCBRaGFzaF90YWJsZV9wLCBleHRyYWN0X2Zs b2F0LCBRcHJvY2Vzc3AsIFF3aW5kb3dwKQorCShRd2luZG93X2NvbmZpZ3VyYXRpb25fcCwg UWltYWdlKTogTmV3IGZvcndhcmQgZGVjbGFyYXRpb25zLgorCShYU0VURkFTVElOVCk6IFNp bXBsaWZ5IGJ5IHJld3JpdGluZyBpbiB0ZXJtcyBvZiBtYWtlX25hdG51bS4KKwkoU1RSSU5H X0NPUFlJTik6IFJlbW92ZTsgdW51c2VkLgorCShYQ0FSX0FTX0xWQUxVRSwgWENEUl9BU19M VkFMVUUpOiBSZW1vdmUgdGhlc2UgbWFjcm9zLCByZXBsYWNpbmcgd2l0aCAuLi4KKwkoeGNh cl9hZGRyLCB4Y2RyX2FkZHIpOiBOZXcgZnVuY3Rpb25zLiAgQWxsIHVzZXMgY2hhbmdlZC4K KwkoSUVFRV9GTE9BVElOR19QT0lOVCk6IE5vdyBhIGNvbnN0YW50LCBub3QgYSBtYWNyby4K KwkoR0xZUEgsIEdMWVBIX0NIQVIsIEdMWVBIX0ZBQ0UsIFNFVF9HTFlQSF9DSEFSLCBTRVRf R0xZUEhfRkFDRSkKKwkoU0VUX0dMWVBILCBHTFlQSF9DT0RFX0NIQVIsIEdMWVBIX0NPREVf RkFDRSkKKwkoU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERSwgR0xZUEhfTU9ERV9MSU5FX0ZB Q0UsIEdMWVBIX0NIQVJfVkFMSURfUCkKKwkoR0xZUEhfQ09ERV9QKTogTW92ZSB0byBkaXNw ZXh0ZXJuLmgsIHRvIGF2b2lkIGRlZmluZS1iZWZvcmUtdXNlLgorCShUWVBFX1JBTkdFRF9J TlRFR0VSUCk6IFNpbXBsaWZ5LgorCShRc3VicnAsIFFoYXNoX3RhYmxlX3AsIFFvdmVybGF5 cCk6IE5ldyBleHRlcm4gZGVjbHMuCisJKHNldGxvY2FsZSwgZml4dXBfbG9jYWxlLCBzeW5j aHJvbml6ZV9zeXN0ZW1fbWVzc2FnZXNfbG9jYWxlKQorCShzeW5jaHJvbml6ZV9zeXN0ZW1f dGltZV9sb2NhbGUpIFshSEFWRV9TRVRMT0NBTEVdOgorCU5vdyBlbXB0eSBmdW5jdGlvbnMs IG5vdCBtYWNyb3MuCisJKGZ1bmN0aW9ucCk6IFJldHVybiBib29sLCBub3QgaW50LgorCSog d2luZG93LmMgKFF3aW5kb3dfY29uZmlndXJhdGlvbl9wKTogTm93IGV4dGVybiwKKwlzbyB3 aW5kb3cuaCBjYW4gdXNlIGl0LgorCSogd2luZG93LmggKFF3aW5kb3dwKTogTW92ZSBkZWNs IGJhY2sgdG8gbGlzcC5oLgorCiAyMDEzLTA2LTEzICBTdGVmYW4gTW9ubmllciAgPG1vbm5p ZXJAaXJvLnVtb250cmVhbC5jYT4KIAogCSogbHJlYWQuYyAoc3ltc19vZl9scmVhZCk6Cgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2FsbG9jLmMnCi0tLSBzcmMvYWxsb2MuYwkyMDEzLTA2 LTAzIDA5OjAxOjUzICswMDAwCisrKyBzcmMvYWxsb2MuYwkyMDEzLTA2LTEzIDE1OjM4OjQx ICswMDAwCkBAIC0zNjMsNiArMzYzLDExIEBACiAgICgodm9pZCAqKSAoKCh1aW50cHRyX3Qp IChwdHIpICsgKEFMSUdOTUVOVCkgLSAxKSBcCiAJICAgICAmIH4gKChBTElHTk1FTlQpIC0g MSkpKQogCitzdGF0aWMgdm9pZAorWEZMT0FUX0lOSVQgKExpc3BfT2JqZWN0IGYsIGRvdWJs ZSBuKQoreworICBYRkxPQVQgKGYpLT51LmRhdGEgPSBuOworfQogCiAMCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCkBAIC0zMTg5LDYgKzMxOTQsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBMaXNw X1N5bWJvbCAqc3ltYm9sX2ZyZWVfbGlzdDsKIAorc3RhdGljIHZvaWQKK3NldF9zeW1ib2xf bmFtZSAoTGlzcF9PYmplY3Qgc3ltLCBMaXNwX09iamVjdCBuYW1lKQoreworICBYU1lNQk9M IChzeW0pLT5uYW1lID0gbmFtZTsKK30KKwogREVGVU4gKCJtYWtlLXN5bWJvbCIsIEZtYWtl X3N5bWJvbCwgU21ha2Vfc3ltYm9sLCAxLCAxLCAwLAogICAgICAgIGRvYzogLyogUmV0dXJu IGEgbmV3bHkgYWxsb2NhdGVkIHVuaW50ZXJuZWQgc3ltYm9sIHdob3NlIG5hbWUgaXMgTkFN RS4KIEl0cyB2YWx1ZSBpcyB2b2lkLCBhbmQgaXRzIGZ1bmN0aW9uIGRlZmluaXRpb24gYW5k IHByb3BlcnR5IGxpc3QgYXJlIG5pbC4gICovKQpAQCAtMzMwOSw3ICszMzIwLDcgQEAKICAg LS10b3RhbF9mcmVlX21hcmtlcnM7CiAgIGNvbnNpbmdfc2luY2VfZ2MgKz0gc2l6ZW9mICh1 bmlvbiBMaXNwX01pc2MpOwogICBtaXNjX29iamVjdHNfY29uc2VkKys7Ci0gIFhNSVNDVFlQ RSAodmFsKSA9IHR5cGU7CisgIFhNSVNDQU5ZICh2YWwpLT50eXBlID0gdHlwZTsKICAgWE1J U0NBTlkgKHZhbCktPmdjbWFya2JpdCA9IDA7CiAgIHJldHVybiB2YWw7CiB9CkBAIC0zMzE5 LDcgKzMzMzAsNyBAQAogdm9pZAogZnJlZV9taXNjIChMaXNwX09iamVjdCBtaXNjKQogewot ICBYTUlTQ1RZUEUgKG1pc2MpID0gTGlzcF9NaXNjX0ZyZWU7CisgIFhNSVNDQU5ZIChtaXNj KS0+dHlwZSA9IExpc3BfTWlzY19GcmVlOwogICBYTUlTQyAobWlzYyktPnVfZnJlZS5jaGFp biA9IG1hcmtlcl9mcmVlX2xpc3Q7CiAgIG1hcmtlcl9mcmVlX2xpc3QgPSBYTUlTQyAobWlz Yyk7CiAgIGNvbnNpbmdfc2luY2VfZ2MgLT0gc2l6ZW9mICh1bmlvbiBMaXNwX01pc2MpOwpA QCAtNTY0Nyw3ICs1NjU4LDcgQEAKIAl7CiAJICBDT05TX01BUksgKFhDT05TICh0YWlsKSk7 CiAJICBtYXJrX29iamVjdCAoWENBUiAodGFpbCkpOwotCSAgcHJldiA9ICZYQ0RSX0FTX0xW QUxVRSAodGFpbCk7CisJICBwcmV2ID0geGNkcl9hZGRyICh0YWlsKTsKIAl9CiAgICAgfQog ICBtYXJrX29iamVjdCAodGFpbCk7CkBAIC02Njg5LDggKzY3MDAsNSBAQAogICBlbnVtIE1B WF9BTExPQ0EgTUFYX0FMTE9DQTsKICAgZW51bSBNb3JlX0xpc3BfQml0cyBNb3JlX0xpc3Bf Qml0czsKICAgZW51bSBwdmVjX3R5cGUgcHZlY190eXBlOwotI2lmIFVTRV9MU0JfVEFHCi0g IGVudW0gbHNiX2JpdHMgbHNiX2JpdHM7Ci0jZW5kaWYKIH0gY29uc3QgRVhURVJOQUxMWV9W SVNJQkxFIGdkYl9tYWtlX2VudW1zX3Zpc2libGUgPSB7MH07CiAjZW5kaWYJLyogX19HTlVD X18gKi8KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvYnVmZmVyLmMnCi0tLSBzcmMvYnVmZmVy LmMJMjAxMy0wNS0wNyAxNDoxMjo1NyArMDAwMAorKysgc3JjL2J1ZmZlci5jCTIwMTMtMDYt MTMgMTU6NTY6NDYgKzAwMDAKQEAgLTE1MCw2ICsxNTAsMTIgQEAKIHN0YXRpYyB2b2lkIG1v ZGlmeV9vdmVybGF5IChzdHJ1Y3QgYnVmZmVyICosIHB0cmRpZmZfdCwgcHRyZGlmZl90KTsK IHN0YXRpYyBMaXNwX09iamVjdCBidWZmZXJfbGlzcF9sb2NhbF92YXJpYWJsZXMgKHN0cnVj dCBidWZmZXIgKiwgYm9vbCk7CiAKK3N0YXRpYyB2b2lkCitDSEVDS19PVkVSTEFZIChMaXNw X09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChPVkVSTEFZUCAoeCksIFFvdmVybGF5cCwg eCk7Cit9CisKIC8qIFRoZXNlIHNldHRlcnMgYXJlIHVzZWQgb25seSBpbiB0aGlzIGZpbGUs IHNvIHRoZXkgY2FuIGJlIHByaXZhdGUuICAqLwogc3RhdGljIHZvaWQKIGJzZXRfYWJicmV2 X21vZGUgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKQEAgLTE1MzksNyAr MTU0NSw3IEBACiAJICAmJiBCVUZGRVJfTElWRV9QIChYQlVGRkVSIChiKSkKIAkgICYmICFC VUZGRVJfSElEREVOX1AgKFhCVUZGRVIgKGIpKSk7CiB9Ci0JICAKKwogREVGVU4gKCJvdGhl ci1idWZmZXIiLCBGb3RoZXJfYnVmZmVyLCBTb3RoZXJfYnVmZmVyLCAwLCAzLCAwLAogICAg ICAgIGRvYzogLyogUmV0dXJuIG1vc3QgcmVjZW50bHkgc2VsZWN0ZWQgYnVmZmVyIG90aGVy IHRoYW4gQlVGRkVSLgogQnVmZmVycyBub3QgdmlzaWJsZSBpbiB3aW5kb3dzIGFyZSBwcmVm ZXJyZWQgdG8gdmlzaWJsZSBidWZmZXJzLCB1bmxlc3MKCj09PSBtb2RpZmllZCBmaWxlICdz cmMvY2hhcnRhYi5jJwotLS0gc3JjL2NoYXJ0YWIuYwkyMDEyLTA5LTI0IDEyOjIzOjI1ICsw MDAwCisrKyBzcmMvY2hhcnRhYi5jCTIwMTMtMDYtMTMgMTU6Mzg6MTYgKzAwMDAKQEAgLTg0 LDYgKzg0LDIyIEBACiAgIChTVFJJTkdQIChPQkopICYmIFNDSEFSUyAoT0JKKSA+IDAJXAog ICAgJiYgKChTUkVGIChPQkosIDApID09IDEgfHwgKFNSRUYgKE9CSiwgMCkgPT0gMikpKSkK IAorc3RhdGljIHZvaWQKK0NIRUNLX0NIQVJfVEFCTEUgKExpc3BfT2JqZWN0IHgpCit7Cisg IENIRUNLX1RZUEUgKENIQVJfVEFCTEVfUCAoeCksIFFjaGFyX3RhYmxlX3AsIHgpOworfQor CitzdGF0aWMgdm9pZAorc2V0X2NoYXJfdGFibGVfYXNjaWkgKExpc3BfT2JqZWN0IHRhYmxl LCBMaXNwX09iamVjdCB2YWwpCit7CisgIFhDSEFSX1RBQkxFICh0YWJsZSktPmFzY2lpID0g dmFsOworfQorc3RhdGljIHZvaWQKK3NldF9jaGFyX3RhYmxlX3BhcmVudCAoTGlzcF9PYmpl Y3QgdGFibGUsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgWENIQVJfVEFCTEUgKHRhYmxlKS0+ cGFyZW50ID0gdmFsOworfQogDAogREVGVU4gKCJtYWtlLWNoYXItdGFibGUiLCBGbWFrZV9j aGFyX3RhYmxlLCBTbWFrZV9jaGFyX3RhYmxlLCAxLCAyLCAwLAogICAgICAgIGRvYzogLyog UmV0dXJuIGEgbmV3bHkgY3JlYXRlZCBjaGFyLXRhYmxlLCB3aXRoIHB1cnBvc2UgUFVSUE9T RS4KCj09PSBtb2RpZmllZCBmaWxlICdzcmMvY29kaW5nLmMnCi0tLSBzcmMvY29kaW5nLmMJ MjAxMy0wNS0yMiAxNDo1MzoyMSArMDAwMAorKysgc3JjL2NvZGluZy5jCTIwMTMtMDYtMTMg MTU6Mzg6MTYgKzAwMDAKQEAgLTY1NSw2ICs2NTUsMjIgQEAKICAgICAoY2hhcnNldF9saXN0 KSA9IENPRElOR19BVFRSX0NIQVJTRVRfTElTVCAoYXR0cnMpOwlcCiAgIH0gd2hpbGUgKDAp CiAKK3N0YXRpYyB2b2lkCitDSEVDS19OQVROVU1fQ0FSIChMaXNwX09iamVjdCB4KQorewor ICBMaXNwX09iamVjdCB0bXAgPSBYQ0FSICh4KTsKKyAgQ0hFQ0tfTkFUTlVNICh0bXApOwor ICBYU0VUQ0FSICh4LCB0bXApOworfQorCitzdGF0aWMgdm9pZAorQ0hFQ0tfTkFUTlVNX0NE UiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgTGlzcF9PYmplY3QgdG1wID0gWENEUiAoeCk7Cisg IENIRUNLX05BVE5VTSAodG1wKTsKKyAgWFNFVENEUiAoeCwgdG1wKTsKK30KKwogCiAvKiBT YWZlbHkgZ2V0IG9uZSBieXRlIGZyb20gdGhlIHNvdXJjZSB0ZXh0IHBvaW50ZWQgYnkgU1JD IHdoaWNoIGVuZHMKICAgIGF0IFNSQ19FTkQsIGFuZCBzZXQgQyB0byB0aGF0IGJ5dGUuICBJ ZiB0aGVyZSBhcmUgbm90IGVub3VnaCBieXRlcwoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9k YXRhLmMnCi0tLSBzcmMvZGF0YS5jCTIwMTMtMDYtMDMgMTg6Mjk6MzAgKzAwMDAKKysrIHNy Yy9kYXRhLmMJMjAxMy0wNi0xMyAxNTo1Njo1MiArMDAwMApAQCAtNzYsNyArNzYsOCBAQAog c3RhdGljIExpc3BfT2JqZWN0IFFjb21waWxlZF9mdW5jdGlvbiwgUWZyYW1lOwogTGlzcF9P YmplY3QgUWJ1ZmZlcjsKIHN0YXRpYyBMaXNwX09iamVjdCBRY2hhcl90YWJsZSwgUWJvb2xf dmVjdG9yLCBRaGFzaF90YWJsZTsKLXN0YXRpYyBMaXNwX09iamVjdCBRc3VicnAsIFFtYW55 LCBRdW5ldmFsbGVkOworc3RhdGljIExpc3BfT2JqZWN0IFFzdWJycDsKK3N0YXRpYyBMaXNw X09iamVjdCBRbWFueSwgUXVuZXZhbGxlZDsKIExpc3BfT2JqZWN0IFFmb250X3NwZWMsIFFm b250X2VudGl0eSwgUWZvbnRfb2JqZWN0Owogc3RhdGljIExpc3BfT2JqZWN0IFFkZWZ1bjsK IApAQCAtODUsNiArODYsOTQgQEAKIAogc3RhdGljIHZvaWQgc3dhcF9pbl9zeW12YWxfZm9y d2FyZGluZyAoc3RydWN0IExpc3BfU3ltYm9sICosIHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2Nh bF9WYWx1ZSAqKTsKIAorc3RhdGljIGJvb2wKK0JPT0xGV0RQICh1bmlvbiBMaXNwX0Z3ZCAq YSkKK3sKKyAgcmV0dXJuIFhGV0RUWVBFIChhKSA9PSBMaXNwX0Z3ZF9Cb29sOworfQorc3Rh dGljIGJvb2wKK0lOVEZXRFAgKHVuaW9uIExpc3BfRndkICphKQoreworICByZXR1cm4gWEZX RFRZUEUgKGEpID09IExpc3BfRndkX0ludDsKK30KK3N0YXRpYyBib29sCitLQk9BUkRfT0JK RldEUCAodW5pb24gTGlzcF9Gd2QgKmEpCit7CisgIHJldHVybiBYRldEVFlQRSAoYSkgPT0g TGlzcF9Gd2RfS2JvYXJkX09iajsKK30KK3N0YXRpYyBib29sCitPQkpGV0RQICh1bmlvbiBM aXNwX0Z3ZCAqYSkKK3sKKyAgcmV0dXJuIFhGV0RUWVBFIChhKSA9PSBMaXNwX0Z3ZF9PYmo7 Cit9CisKK3N0YXRpYyBzdHJ1Y3QgTGlzcF9Cb29sZndkICoKK1hCT09MRldEICh1bmlvbiBM aXNwX0Z3ZCAqYSkKK3sKKyAgZWFzc2VydCAoQk9PTEZXRFAgKGEpKTsKKyAgcmV0dXJuICZh LT51X2Jvb2xmd2Q7Cit9CitzdGF0aWMgc3RydWN0IExpc3BfS2JvYXJkX09iamZ3ZCAqCitY S0JPQVJEX09CSkZXRCAodW5pb24gTGlzcF9Gd2QgKmEpCit7CisgIGVhc3NlcnQgKEtCT0FS RF9PQkpGV0RQIChhKSk7CisgIHJldHVybiAmYS0+dV9rYm9hcmRfb2JqZndkOworfQorc3Rh dGljIHN0cnVjdCBMaXNwX0ludGZ3ZCAqCitYSU5URldEICh1bmlvbiBMaXNwX0Z3ZCAqYSkK K3sKKyAgZWFzc2VydCAoSU5URldEUCAoYSkpOworICByZXR1cm4gJmEtPnVfaW50ZndkOwor fQorc3RhdGljIHN0cnVjdCBMaXNwX09iamZ3ZCAqCitYT0JKRldEICh1bmlvbiBMaXNwX0Z3 ZCAqYSkKK3sKKyAgZWFzc2VydCAoT0JKRldEUCAoYSkpOworICByZXR1cm4gJmEtPnVfb2Jq ZndkOworfQorCitzdGF0aWMgdm9pZAorQ0hFQ0tfU1VCUiAoTGlzcF9PYmplY3QgeCkKK3sK KyAgQ0hFQ0tfVFlQRSAoU1VCUlAgKHgpLCBRc3VicnAsIHgpOworfQorCitzdGF0aWMgdm9p ZAorc2V0X2Jsdl9mb3VuZCAoc3RydWN0IExpc3BfQnVmZmVyX0xvY2FsX1ZhbHVlICpibHYs IGludCBmb3VuZCkKK3sKKyAgZWFzc2VydCAoZm91bmQgPT0gIUVRIChibHYtPmRlZmNlbGws IGJsdi0+dmFsY2VsbCkpOworICBibHYtPmZvdW5kID0gZm91bmQ7Cit9CisKK3N0YXRpYyBM aXNwX09iamVjdAorYmx2X3ZhbHVlIChzdHJ1Y3QgTGlzcF9CdWZmZXJfTG9jYWxfVmFsdWUg KmJsdikKK3sKKyAgcmV0dXJuIFhDRFIgKGJsdi0+dmFsY2VsbCk7Cit9CisKK3N0YXRpYyB2 b2lkCitzZXRfYmx2X3ZhbHVlIChzdHJ1Y3QgTGlzcF9CdWZmZXJfTG9jYWxfVmFsdWUgKmJs diwgTGlzcF9PYmplY3QgdmFsKQoreworICBYU0VUQ0RSIChibHYtPnZhbGNlbGwsIHZhbCk7 Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfYmx2X3doZXJlIChzdHJ1Y3QgTGlzcF9CdWZmZXJf TG9jYWxfVmFsdWUgKmJsdiwgTGlzcF9PYmplY3QgdmFsKQoreworICBibHYtPndoZXJlID0g dmFsOworfQorCitzdGF0aWMgdm9pZAorc2V0X2Jsdl9kZWZjZWxsIChzdHJ1Y3QgTGlzcF9C dWZmZXJfTG9jYWxfVmFsdWUgKmJsdiwgTGlzcF9PYmplY3QgdmFsKQoreworICBibHYtPmRl ZmNlbGwgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfYmx2X3ZhbGNlbGwgKHN0cnVj dCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1ZSAqYmx2LCBMaXNwX09iamVjdCB2YWwpCit7Cisg IGJsdi0+dmFsY2VsbCA9IHZhbDsKK30KIAogTGlzcF9PYmplY3QKIHdyb25nX3R5cGVfYXJn dW1lbnQgKHJlZ2lzdGVyIExpc3BfT2JqZWN0IHByZWRpY2F0ZSwgcmVnaXN0ZXIgTGlzcF9P YmplY3QgdmFsdWUpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Rpc3BleHRlcm4uaCcKLS0t IHNyYy9kaXNwZXh0ZXJuLmgJMjAxMy0wNi0wOCAxODoyODozNiArMDAwMAorKysgc3JjL2Rp c3BleHRlcm4uaAkyMDEzLTA2LTEzIDE1OjM4OjAzICswMDAwCkBAIC0yMiw2ICsyMiw4IEBA CiAjaWZuZGVmIERJU1BFWFRFUk5fSF9JTkNMVURFRAogI2RlZmluZSBESVNQRVhURVJOX0hf SU5DTFVERUQKIAorI2luY2x1ZGUgImNoYXJhY3Rlci5oIgorCiAjaWZkZWYgSEFWRV9YX1dJ TkRPV1MKIAogI2luY2x1ZGUgPFgxMS9YbGliLmg+CkBAIC0yNzAsNiArMjcyLDU1IEBACiAJ CQkJR2x5cGhzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIFRoZSBnbHlwaCBkYXRhdHlw ZSwgdXNlZCB0byByZXByZXNlbnQgY2hhcmFjdGVycyBvbiB0aGUgZGlzcGxheS4KKyAgIEl0 IGNvbnNpc3RzIG9mIGEgY2hhciBjb2RlIGFuZCBhIGZhY2UgaWQuICAqLworCit0eXBlZGVm IHN0cnVjdCB7CisgIGludCBjaDsKKyAgaW50IGZhY2VfaWQ7Cit9IEdMWVBIOworCisvKiBS ZXR1cm4gYSBnbHlwaCdzIGNoYXJhY3RlciBjb2RlLiAgKi8KK0RJU1BFWFRFUk5fSU5MSU5F IGludCBHTFlQSF9DSEFSIChHTFlQSCBnbHlwaCkgeyByZXR1cm4gZ2x5cGguY2g7IH0KKwor LyogUmV0dXJuIGEgZ2x5cGgncyBmYWNlIElELiAgKi8KK0RJU1BFWFRFUk5fSU5MSU5FIGlu dCBHTFlQSF9GQUNFIChHTFlQSCBnbHlwaCkgeyByZXR1cm4gZ2x5cGguZmFjZV9pZDsgfQor CisjZGVmaW5lIFNFVF9HTFlQSF9DSEFSKGdseXBoLCBjaGFyKSAoKGdseXBoKS5jaCA9IChj aGFyKSkKKyNkZWZpbmUgU0VUX0dMWVBIX0ZBQ0UoZ2x5cGgsIGZhY2UpICgoZ2x5cGgpLmZh Y2VfaWQgPSAoZmFjZSkpCisjZGVmaW5lIFNFVF9HTFlQSChnbHlwaCwgY2hhciwgZmFjZSkg XAorICAoKGdseXBoKS5jaCA9IChjaGFyKSwgKGdseXBoKS5mYWNlX2lkID0gKGZhY2UpKQor CisvKiBUaGUgZm9sbG93aW5nIGFyZSB2YWxpZCBvbmx5IGlmIEdMWVBIX0NPREVfUCAoZ2Mp LiAgKi8KKworRElTUEVYVEVSTl9JTkxJTkUgaW50CitHTFlQSF9DT0RFX0NIQVIgKExpc3Bf T2JqZWN0IGdjKQoreworICByZXR1cm4gKENPTlNQIChnYykKKwkgID8gWElOVCAoWENBUiAo Z2MpKQorCSAgOiBYSU5UIChnYykgJiBNQVhfQ0hBUik7Cit9CisKK0RJU1BFWFRFUk5fSU5M SU5FIGludAorR0xZUEhfQ09ERV9GQUNFIChMaXNwX09iamVjdCBnYykKK3sKKyAgcmV0dXJu IENPTlNQIChnYykgPyBYSU5UIChYQ0RSIChnYykpIDogWElOVCAoZ2MpID4+IENIQVJBQ1RF UkJJVFM7Cit9CisKKyNkZWZpbmUgU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERShnbHlwaCwg Z2MpCQkJCVwKKyAgZG8JCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCVwKKyAgICAgIGlmIChD T05TUCAoZ2MpKQkJCQkJCQlcCisJU0VUX0dMWVBIIChnbHlwaCwgWElOVCAoWENBUiAoZ2Mp KSwgWElOVCAoWENEUiAoZ2MpKSk7CQlcCisgICAgICBlbHNlCQkJCQkJCQlcCisJU0VUX0dM WVBIIChnbHlwaCwgKFhJTlQgKGdjKSAmICgoMSA8PCBDSEFSQUNURVJCSVRTKS0xKSksCVwK KwkJICAgKFhJTlQgKGdjKSA+PiBDSEFSQUNURVJCSVRTKSk7CQkJXAorICAgIH0JCQkJCQkJ CQlcCisgIHdoaWxlICgwKQorCisvKiBUaGUgSUQgb2YgdGhlIG1vZGUgbGluZSBoaWdobGln aHRpbmcgZmFjZS4gICovCitlbnVtIHsgR0xZUEhfTU9ERV9MSU5FX0ZBQ0UgPSAxIH07CisK IC8qIEVudW1lcmF0aW9uIG9mIGdseXBoIHR5cGVzLiAgR2x5cGggc3RydWN0dXJlcyBjb250 YWluIGEgdHlwZSBmaWVsZAogICAgY29udGFpbmluZyBvbmUgb2YgdGhlIGVudW1lcmF0b3Jz IGRlZmluZWQgaGVyZS4gICovCiAKQEAgLTE3NzQsNiArMTgyNSwzMCBAQAogCiAjZW5kaWYg Lyogbm90IEhBVkVfV0lORE9XX1NZU1RFTSAqLwogCisvKiBSZXR1cm4gdHJ1ZSBpZiBHIGNv bnRhaW5zIGEgdmFsaWQgY2hhcmFjdGVyIGNvZGUuICAqLworRElTUEVYVEVSTl9JTkxJTkUg Ym9vbAorR0xZUEhfQ0hBUl9WQUxJRF9QIChHTFlQSCBnKQoreworICByZXR1cm4gQ0hBUl9W QUxJRF9QIChHTFlQSF9DSEFSIChnKSk7Cit9CisKKy8qIFRoZSBnbHlwaCBjb2RlIGZyb20g YSBkaXNwbGF5IHZlY3RvciBtYXkgZWl0aGVyIGJlIGFuIGludGVnZXIgd2hpY2gKKyAgIGVu Y29kZXMgYSBjaGFyIGNvZGUgaW4gdGhlIGxvd2VyIENIQVJBQ1RFUkJJVFMgYml0cyBhbmQg YSAodmVyeSBzbWFsbCkKKyAgIGZhY2UtaWQgaW4gdGhlIHVwcGVyIGJpdHMsIG9yIGl0IG1h eSBiZSBhIGNvbnMgKENIQVIgLiBGQUNFLUlEKS4gICovCisKK0RJU1BFWFRFUk5fSU5MSU5F IGJvb2wKK0dMWVBIX0NPREVfUCAoTGlzcF9PYmplY3QgZ2MpCit7CisgIHJldHVybiAoQ09O U1AgKGdjKQorCSAgPyAoQ0hBUkFDVEVSUCAoWENBUiAoZ2MpKQorCSAgICAgJiYgUkFOR0VE X0lOVEVHRVJQICgwLCBYQ0RSIChnYyksIE1BWF9GQUNFX0lEKSkKKwkgIDogKFJBTkdFRF9J TlRFR0VSUAorCSAgICAgKDAsIGdjLAorCSAgICAgIChNQVhfRkFDRV9JRCA8IFRZUEVfTUFY SU1VTSAoRU1BQ1NfSU5UKSA+PiBDSEFSQUNURVJCSVRTCisJICAgICAgID8gKChFTUFDU19J TlQpIE1BWF9GQUNFX0lEIDw8IENIQVJBQ1RFUkJJVFMpIHwgTUFYX0NIQVIKKwkgICAgICAg OiBUWVBFX01BWElNVU0gKEVNQUNTX0lOVCkpKSkpOworfQorCiAvKiBOb24temVybyBtZWFu cyBmYWNlIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QKICAg IHJlZGlzcGxheS4gIFVzZWQgaW4gcmVkaXNwbGF5X2ludGVybmFsLiAgKi8KIAoKPT09IG1v ZGlmaWVkIGZpbGUgJ3NyYy9lbWFjcy5jJwotLS0gc3JjL2VtYWNzLmMJMjAxMy0wNi0wNSAx MjoxNzowMiArMDAwMAorKysgc3JjL2VtYWNzLmMJMjAxMy0wNi0xMyAxNTozODoxNiArMDAw MApAQCAtMzA2LDYgKzMwNiwxMyBAQAogc3RhdGljIHZvaWQgKm5zX3Bvb2w7CiAjZW5kaWYK IAorI2lmICFIQVZFX1NFVExPQ0FMRQorc3RhdGljIGNoYXIgKgorc2V0bG9jYWxlIChpbnQg Y2F0LCBjaGFyIGNvbnN0ICpsb2NhbGUpCit7CisgIHJldHVybiAwOworfQorI2VuZGlmCiAK IAogLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IgZHVlIHRvIHNpZ25hbCBTSUcsIG91dHB1dCBh IGJhY2t0cmFjZSBvZiBhdAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9ldmFsLmMnCi0tLSBz cmMvZXZhbC5jCTIwMTMtMDYtMDMgMTg6Mjk6MzAgKzAwMDAKKysrIHNyYy9ldmFsLmMJMjAx My0wNi0xMyAxNTo0NDowMCArMDAwMApAQCAtMTE1LDYgKzExNSw2OSBAQAogc3RhdGljIExp c3BfT2JqZWN0IGZ1bmNhbGxfbGFtYmRhIChMaXNwX09iamVjdCwgcHRyZGlmZl90LCBMaXNw X09iamVjdCAqKTsKIHN0YXRpYyBMaXNwX09iamVjdCBhcHBseV9sYW1iZGEgKExpc3BfT2Jq ZWN0IGZ1biwgTGlzcF9PYmplY3QgYXJncyk7CiAKK3N0YXRpYyBMaXNwX09iamVjdAorc3Bl Y3BkbF9zeW1ib2wgKHN0cnVjdCBzcGVjYmluZGluZyAqcGRsKQoreworICBlYXNzZXJ0IChw ZGwtPmtpbmQgPj0gU1BFQ1BETF9MRVQpOworICByZXR1cm4gcGRsLT52LmxldC5zeW1ib2w7 Cit9CisKK3N0YXRpYyBMaXNwX09iamVjdAorc3BlY3BkbF9vbGRfdmFsdWUgKHN0cnVjdCBz cGVjYmluZGluZyAqcGRsKQoreworICBlYXNzZXJ0IChwZGwtPmtpbmQgPj0gU1BFQ1BETF9M RVQpOworICByZXR1cm4gcGRsLT52LmxldC5vbGRfdmFsdWU7Cit9CisKK3N0YXRpYyBMaXNw X09iamVjdAorc3BlY3BkbF93aGVyZSAoc3RydWN0IHNwZWNiaW5kaW5nICpwZGwpCit7Cisg IGVhc3NlcnQgKHBkbC0+a2luZCA+IFNQRUNQRExfTEVUKTsKKyAgcmV0dXJuIHBkbC0+di5s ZXQud2hlcmU7Cit9CisKK3N0YXRpYyBMaXNwX09iamVjdAorc3BlY3BkbF9hcmcgKHN0cnVj dCBzcGVjYmluZGluZyAqcGRsKQoreworICBlYXNzZXJ0IChwZGwtPmtpbmQgPT0gU1BFQ1BE TF9VTldJTkQpOworICByZXR1cm4gcGRsLT52LnVud2luZC5hcmc7Cit9CisKK3N0YXRpYyBz cGVjYmluZGluZ19mdW5jCitzcGVjcGRsX2Z1bmMgKHN0cnVjdCBzcGVjYmluZGluZyAqcGRs KQoreworICBlYXNzZXJ0IChwZGwtPmtpbmQgPT0gU1BFQ1BETF9VTldJTkQpOworICByZXR1 cm4gcGRsLT52LnVud2luZC5mdW5jOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK2JhY2t0 cmFjZV9mdW5jdGlvbiAoc3RydWN0IHNwZWNiaW5kaW5nICpwZGwpCit7CisgIGVhc3NlcnQg KHBkbC0+a2luZCA9PSBTUEVDUERMX0JBQ0tUUkFDRSk7CisgIHJldHVybiBwZGwtPnYuYnQu ZnVuY3Rpb247Cit9CisKK3N0YXRpYyBwdHJkaWZmX3QKK2JhY2t0cmFjZV9uYXJncyAoc3Ry dWN0IHNwZWNiaW5kaW5nICpwZGwpCit7CisgIGVhc3NlcnQgKHBkbC0+a2luZCA9PSBTUEVD UERMX0JBQ0tUUkFDRSk7CisgIHJldHVybiBwZGwtPnYuYnQubmFyZ3M7Cit9CisKK3N0YXRp YyBMaXNwX09iamVjdCAqCitiYWNrdHJhY2VfYXJncyAoc3RydWN0IHNwZWNiaW5kaW5nICpw ZGwpCit7CisgIGVhc3NlcnQgKHBkbC0+a2luZCA9PSBTUEVDUERMX0JBQ0tUUkFDRSk7Cisg IHJldHVybiBwZGwtPnYuYnQuYXJnczsKK30KKworc3RhdGljIGJvb2wKK2JhY2t0cmFjZV9k ZWJ1Z19vbl9leGl0IChzdHJ1Y3Qgc3BlY2JpbmRpbmcgKnBkbCkKK3sKKyAgZWFzc2VydCAo cGRsLT5raW5kID09IFNQRUNQRExfQkFDS1RSQUNFKTsKKyAgcmV0dXJuIHBkbC0+di5idC5k ZWJ1Z19vbl9leGl0OworfQorCiAvKiBGdW5jdGlvbnMgdG8gbW9kaWZ5IHNsb3RzIG9mIGJh Y2t0cmFjZSByZWNvcmRzLiAgKi8KIAogc3RhdGljIHZvaWQKCj09PSBtb2RpZmllZCBmaWxl ICdzcmMvZmxvYXRmbnMuYycKLS0tIHNyYy9mbG9hdGZucy5jCTIwMTMtMDMtMjQgMTI6NTk6 NDUgKzAwMDAKKysrIHNyYy9mbG9hdGZucy5jCTIwMTMtMDYtMTMgMTU6Mzg6MTYgKzAwMDAK QEAgLTQxLDYgKzQxLDE0IEBACiAjIGRlZmluZSBpc25hbih4KSAoKHgpICE9ICh4KSkKICNl bmRpZgogCisvKiBDaGVjayB0aGF0IFggaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIuICAq LworCitzdGF0aWMgdm9pZAorQ0hFQ0tfRkxPQVQgKExpc3BfT2JqZWN0IHgpCit7CisgIENI RUNLX1RZUEUgKEZMT0FUUCAoeCksIFFmbG9hdHAsIHgpOworfQorCiAvKiBFeHRyYWN0IGEg TGlzcCBudW1iZXIgYXMgYSBgZG91YmxlJywgb3Igc2lnbmFsIGFuIGVycm9yLiAgKi8KIAog ZG91YmxlCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2Zucy5jJwotLS0gc3JjL2Zucy5jCTIw MTMtMDYtMTMgMjI6MjQ6NTIgKzAwMDAKKysrIHNyYy9mbnMuYwkyMDEzLTA2LTE1IDA2OjE3 OjA3ICswMDAwCkBAIC05MSw2ICs5MSwxMiBAQAogCiAvKiBSYW5kb20gZGF0YS1zdHJ1Y3R1 cmUgZnVuY3Rpb25zLiAgKi8KIAorc3RhdGljIHZvaWQKK0NIRUNLX0xJU1RfRU5EIChMaXNw X09iamVjdCB4LCBMaXNwX09iamVjdCB5KQoreworICBDSEVDS19UWVBFIChOSUxQICh4KSwg UWxpc3RwLCB5KTsKK30KKwogREVGVU4gKCJsZW5ndGgiLCBGbGVuZ3RoLCBTbGVuZ3RoLCAx LCAxLCAwLAogICAgICAgIGRvYzogLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgdmVjdG9yLCBs aXN0IG9yIHN0cmluZyBTRVFVRU5DRS4KIEEgYnl0ZS1jb2RlIGZ1bmN0aW9uIG9iamVjdCBp cyBhbHNvIGFsbG93ZWQuCkBAIC0zMzM3LDcgKzMzNDMsOCBAQAogCiAvKiBWYXJpb3VzIHN5 bWJvbHMuICAqLwogCi1zdGF0aWMgTGlzcF9PYmplY3QgUWhhc2hfdGFibGVfcCwgUWtleSwg UXZhbHVlLCBRZXFsOworc3RhdGljIExpc3BfT2JqZWN0IFFoYXNoX3RhYmxlX3A7CitzdGF0 aWMgTGlzcF9PYmplY3QgUWtleSwgUXZhbHVlLCBRZXFsOwogTGlzcF9PYmplY3QgUWVxLCBR ZXF1YWw7CiBMaXNwX09iamVjdCBRQ3Rlc3QsIFFDc2l6ZSwgUUNyZWhhc2hfc2l6ZSwgUUNy ZWhhc2hfdGhyZXNob2xkLCBRQ3dlYWtuZXNzOwogc3RhdGljIExpc3BfT2JqZWN0IFFoYXNo X3RhYmxlX3Rlc3QsIFFrZXlfb3JfdmFsdWUsIFFrZXlfYW5kX3ZhbHVlOwpAQCAtMzM0Nyw2 ICszMzU0LDQ4IEBACiAJCQkgICAgICAgVXRpbGl0aWVzCiAgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CiAKK3N0YXRpYyB2b2lkCitDSEVDS19IQVNIX1RBQkxFIChMaXNwX09iamVjdCB4KQorewor ICByZXR1cm4gQ0hFQ0tfVFlQRSAoSEFTSF9UQUJMRV9QICh4KSwgUWhhc2hfdGFibGVfcCwg eCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfaGFzaF9rZXlfYW5kX3ZhbHVlIChzdHJ1Y3Qg TGlzcF9IYXNoX1RhYmxlICpoLCBMaXNwX09iamVjdCBrZXlfYW5kX3ZhbHVlKQoreworICBo LT5rZXlfYW5kX3ZhbHVlID0ga2V5X2FuZF92YWx1ZTsKK30KK3N0YXRpYyB2b2lkCitzZXRf aGFzaF9uZXh0IChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoLCBMaXNwX09iamVjdCBuZXh0 KQoreworICBoLT5uZXh0ID0gbmV4dDsKK30KK3N0YXRpYyB2b2lkCitzZXRfaGFzaF9uZXh0 X3Nsb3QgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIHB0cmRpZmZfdCBpZHgsIExpc3Bf T2JqZWN0IHZhbCkKK3sKKyAgZ2NfYXNldCAoaC0+bmV4dCwgaWR4LCB2YWwpOworfQorc3Rh dGljIHZvaWQKK3NldF9oYXNoX2hhc2ggKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIExp c3BfT2JqZWN0IGhhc2gpCit7CisgIGgtPmhhc2ggPSBoYXNoOworfQorc3RhdGljIHZvaWQK K3NldF9oYXNoX2hhc2hfc2xvdCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgcHRyZGlm Zl90IGlkeCwgTGlzcF9PYmplY3QgdmFsKQoreworICBnY19hc2V0IChoLT5oYXNoLCBpZHgs IHZhbCk7Cit9CitzdGF0aWMgdm9pZAorc2V0X2hhc2hfaW5kZXggKHN0cnVjdCBMaXNwX0hh c2hfVGFibGUgKmgsIExpc3BfT2JqZWN0IGluZGV4KQoreworICBoLT5pbmRleCA9IGluZGV4 OworfQorc3RhdGljIHZvaWQKK3NldF9oYXNoX2luZGV4X3Nsb3QgKHN0cnVjdCBMaXNwX0hh c2hfVGFibGUgKmgsIHB0cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgZ2Nf YXNldCAoaC0+aW5kZXgsIGlkeCwgdmFsKTsKK30KKwogLyogSWYgT0JKIGlzIGEgTGlzcCBo YXNoIHRhYmxlLCByZXR1cm4gYSBwb2ludGVyIHRvIGl0cyBzdHJ1Y3QKICAgIExpc3BfSGFz aF9UYWJsZS4gIE90aGVyd2lzZSwgc2lnbmFsIGFuIGVycm9yLiAgKi8KIAoKPT09IG1vZGlm aWVkIGZpbGUgJ3NyYy9rZXltYXAuYycKLS0tIHNyYy9rZXltYXAuYwkyMDEzLTA2LTA1IDAx OjU4OjQzICswMDAwCisrKyBzcmMva2V5bWFwLmMJMjAxMy0wNi0xMyAxNTozODoxNiArMDAw MApAQCAtMTA2LDYgKzEwNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM aXNwX09iamVjdCwgTGlzcF9PYmplY3QsIGJvb2wsIGJvb2wpOwogc3RhdGljIHZvaWQgc2ls bHlfZXZlbnRfc3ltYm9sX2Vycm9yIChMaXNwX09iamVjdCk7CiBzdGF0aWMgTGlzcF9PYmpl Y3QgZ2V0X2tleWVsdCAoTGlzcF9PYmplY3QsIGJvb2wpOworCitzdGF0aWMgdm9pZAorQ0hF Q0tfVkVDVE9SX09SX0NIQVJfVEFCTEUgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZ UEUgKFZFQ1RPUlAgKHgpIHx8IENIQVJfVEFCTEVfUCAoeCksIFF2ZWN0b3Jfb3JfY2hhcl90 YWJsZV9wLCB4KTsKK30KIAwKIC8qIEtleW1hcCBvYmplY3Qgc3VwcG9ydCAtIGNvbnN0cnVj dG9ycyBhbmQgcHJlZGljYXRlcy4JCQkqLwogCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL2xp c3AuaCcKLS0tIHNyYy9saXNwLmgJMjAxMy0wNi0wNSAxMjoxNzowMiArMDAwMAorKysgc3Jj L2xpc3AuaAkyMDEzLTA2LTE1IDA2OjMzOjI3ICswMDAwCkBAIC0yMjAsNiArMjIwLDEzOSBA QAogI2VuZGlmCiAKIAorLyogU29tZSBvcGVyYXRpb25zIGFyZSBzbyBjb21tb25seSBleGVj dXRlZCB0aGF0IHRoZXkgYXJlIGltcGxlbWVudGVkCisgICBhcyBtYWNyb3MsIG5vdCBmdW5j dGlvbnMsIGJlY2F1c2Ugb3RoZXJ3aXNlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugd291bGQKKyAg IHN1ZmZlciB0b28gbXVjaCB3aGVuIGNvbXBpbGluZyB3aXRoIEdDQyB3aXRob3V0IG9wdGlt aXphdGlvbi4KKyAgIFRoZXJlJ3Mgbm8gbmVlZCB0byBpbmxpbmUgZXZlcnl0aGluZywganVz dCB0aGUgb3BlcmF0aW9ucyB0aGF0CisgICB3b3VsZCBvdGhlcndpc2UgY2F1c2UgYSBzZXJp b3VzIHBlcmZvcm1hbmNlIHByb2JsZW0uCisKKyAgIEZvciBlYWNoIHN1Y2ggb3BlcmF0aW9u IE9QLCBkZWZpbmUgYSBtYWNybyBsaXNwX2hfT1AgdGhhdCBjb250YWlucworICAgdGhlIG9w ZXJhdGlvbidzIGltcGxlbWVudGF0aW9uLiAgVGhhdCB3YXksIE9QIGNhbiBiZSBpbXBsZW1l bnRhdGVkCisgICB2aWEgYSBtYWNybyBkZWZpbml0aW9uIGxpa2UgdGhpczoKKworICAgICAj ZGVmaW5lIE9QKHgpIGxpc3BfaF9PUCAoeCkKKworICAgYW5kL29yIHZpYSBhIGZ1bmN0aW9u IGRlZmluaXRpb24gbGlrZSB0aGlzOgorCisgICAgIExJU1BfTUFDUk9fREVGVU4gKE9QLCBM aXNwX09iamVjdCwgKExpc3BfT2JqZWN0IHgpLCAoeCkpCisKKyAgIHdoaWNoIG1hY3JvLWV4 cGFuZHMgdG8gdGhpczoKKworICAgICBMaXNwX09iamVjdCAoT1ApIChMaXNwX09iamVjdCB4 KSB7IHJldHVybiBsaXNwX2hfT1AgKHgpOyB9CisKKyAgIHdpdGhvdXQgd29ycnlpbmcgYWJv dXQgdGhlIGltcGxlbWVudGF0aW9ucyBkaXZlcmdpbmcsIHNpbmNlCisgICBsaXNwX2hfT1Ag ZGVmaW5lcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLiAgVGhlIGxpc3BfaF9PUCBtYWNy b3MKKyAgIGFyZSBpbnRlbmRlZCB0byBiZSBwcml2YXRlIHRvIHRoaXMgaW5jbHVkZSBmaWxl LCBhbmQgc2hvdWxkIG5vdCBiZQorICAgdXNlZCBlbHNld2hlcmUuCisKKyAgIEZJWE1FOiBS ZW1vdmUgdGhlIGxpc3BfaF9PUCBtYWNyb3MsIGFuZCBkZWZpbmUganVzdCB0aGUgaW5saW5l IE9QCisgICBmdW5jdGlvbnMsIG9uY2UgbW9zdCBkZXZlbG9wZXJzIGhhdmUgYWNjZXNzIHRv IEdDQyA0Ljggb3IgbGF0ZXIgYW5kCisgICBjYW4gdXNlICJnY2MgLU9nIiB0byBkZWJ1Zy4g IE1heWJlIGluIHRoZSB5ZWFyIDIwMTYuICBTZWUKKyAgIEJ1ZyMxMTkzNS4KKworICAgQ29t bWVudGFyeSBmb3IgdGhlc2UgbWFjcm9zIGNhbiBiZSBmb3VuZCBuZWFyIHRoZWlyIGNvcnJl c3BvbmRpbmcKKyAgIGZ1bmN0aW9ucywgYmVsb3cuICAqLworCisjaWYgQ0hFQ0tfTElTUF9P QkpFQ1RfVFlQRQorIyBkZWZpbmUgbGlzcF9oX1hMSShvKSAoKG8pLmkpCisjIGRlZmluZSBs aXNwX2hfWElMKGkpICgoTGlzcF9PYmplY3QpIHsgaSB9KQorI2Vsc2UKKyMgZGVmaW5lIGxp c3BfaF9YTEkobykgKG8pCisjIGRlZmluZSBsaXNwX2hfWElMKGkpIChpKQorI2VuZGlmCisj ZGVmaW5lIGxpc3BfaF9DSEVDS19MSVNUX0NPTlMoeCwgeSkgQ0hFQ0tfVFlQRSAoQ09OU1Ag KHgpLCBRbGlzdHAsIHkpCisjZGVmaW5lIGxpc3BfaF9DSEVDS19OVU1CRVIoeCkgQ0hFQ0tf VFlQRSAoSU5URUdFUlAgKHgpLCBRaW50ZWdlcnAsIHgpCisjZGVmaW5lIGxpc3BfaF9DSEVD S19TWU1CT0woeCkgQ0hFQ0tfVFlQRSAoU1lNQk9MUCAoeCksIFFzeW1ib2xwLCB4KQorI2Rl ZmluZSBsaXNwX2hfQ0hFQ0tfVFlQRShvaywgUXh4eHAsIHgpIFwKKyAgICgodm9pZCkgKChv aykgfHwgd3JvbmdfdHlwZV9hcmd1bWVudCAoUXh4eHAsIHgpKSkKKyNkZWZpbmUgbGlzcF9o X0NPTlNQKHgpIChYVFlQRSAoeCkgPT0gTGlzcF9Db25zKQorI2RlZmluZSBsaXNwX2hfRVEo eCwgeSkgKFhMSSAoeCkgPT0gWExJICh5KSkKKyNkZWZpbmUgbGlzcF9oX0ZMT0FUUCh4KSAo WFRZUEUgKHgpID09IExpc3BfRmxvYXQpCisjZGVmaW5lIGxpc3BfaF9JTlRFR0VSUCh4KSAo KFhUWVBFICh4KSAmIH5MaXNwX0ludDEpID09IDApCisjZGVmaW5lIGxpc3BfaF9NQVJLRVJQ KHgpIChNSVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfTWFya2VyKQor I2RlZmluZSBsaXNwX2hfTUlTQ1AoeCkgKFhUWVBFICh4KSA9PSBMaXNwX01pc2MpCisjZGVm aW5lIGxpc3BfaF9OSUxQKHgpIEVRICh4LCBRbmlsKQorI2RlZmluZSBsaXNwX2hfU0VUX1NZ TUJPTF9WQUwoc3ltLCB2KSBcCisgICAoZWFzc2VydCAoKHN5bSktPnJlZGlyZWN0ID09IFNZ TUJPTF9QTEFJTlZBTCksIChzeW0pLT52YWwudmFsdWUgPSAodikpCisjZGVmaW5lIGxpc3Bf aF9TWU1CT0xfQ09OU1RBTlRfUChzeW0pIChYU1lNQk9MIChzeW0pLT5jb25zdGFudCkKKyNk ZWZpbmUgbGlzcF9oX1NZTUJPTF9WQUwoc3ltKSBcCisgICAoZWFzc2VydCAoKHN5bSktPnJl ZGlyZWN0ID09IFNZTUJPTF9QTEFJTlZBTCksIChzeW0pLT52YWwudmFsdWUpCisjZGVmaW5l IGxpc3BfaF9TWU1CT0xQKHgpIChYVFlQRSAoeCkgPT0gTGlzcF9TeW1ib2wpCisjZGVmaW5l IGxpc3BfaF9WRUNUT1JMSUtFUCh4KSAoWFRZUEUgKHgpID09IExpc3BfVmVjdG9ybGlrZSkK KyNkZWZpbmUgbGlzcF9oX1hDQVIoYykgWENPTlMgKGMpLT5jYXIKKyNkZWZpbmUgbGlzcF9o X1hDRFIoYykgWENPTlMgKGMpLT51LmNkcgorI2RlZmluZSBsaXNwX2hfWENPTlMoYSkgXAor ICAgKGVhc3NlcnQgKENPTlNQIChhKSksIChzdHJ1Y3QgTGlzcF9Db25zICopIFhVTlRBRyAo YSwgTGlzcF9Db25zKSkKKyNkZWZpbmUgbGlzcF9oX1hIQVNIKGEpIFhVSU5UIChhKQorI2Rl ZmluZSBsaXNwX2hfWFBOVFIoYSkgXAorICAgKCh2b2lkICopIChpbnRwdHJfdCkgKChYTEkg KGEpICYgVkFMTUFTSykgfCBEQVRBX1NFR19CSVRTKSkKKyNkZWZpbmUgbGlzcF9oX1hTWU1C T0woYSkgXAorICAgKGVhc3NlcnQgKFNZTUJPTFAgKGEpKSwgKHN0cnVjdCBMaXNwX1N5bWJv bCAqKSBYVU5UQUcgKGEsIExpc3BfU3ltYm9sKSkKKyNpZm5kZWYgR0NfQ0hFQ0tfQ09OU19M SVNUCisjIGRlZmluZSBsaXNwX2hfY2hlY2tfY29uc19saXN0KCkgKCh2b2lkKSAwKQorI2Vu ZGlmCisjaWYgVVNFX0xTQl9UQUcKKyMgZGVmaW5lIGxpc3BfaF9tYWtlX251bWJlcihuKSBY SUwgKChFTUFDU19JTlQpIChuKSA8PCBJTlRUWVBFQklUUykKKyMgZGVmaW5lIGxpc3BfaF9Y RkFTVElOVChhKSBYSU5UIChhKQorIyBkZWZpbmUgbGlzcF9oX1hJTlQoYSkgKFhMSSAoYSkg Pj4gSU5UVFlQRUJJVFMpCisjIGRlZmluZSBsaXNwX2hfWFRZUEUoYSkgKChlbnVtIExpc3Bf VHlwZSkgKFhMSSAoYSkgJiB+VkFMTUFTSykpCisjIGRlZmluZSBsaXNwX2hfWFVOVEFHKGEs IHR5cGUpICgodm9pZCAqKSAoWExJIChhKSAtICh0eXBlKSkpCisjZW5kaWYKKworLyogV2hl biBjb21waWxpbmcgdmlhIGdjYyAtTzAsIGRlZmluZSB0aGUga2V5IG9wZXJhdGlvbnMgYXMg bWFjcm9zLCBhcworICAgRW1hY3MgaXMgdG9vIHNsb3cgb3RoZXJ3aXNlLiAgVG8gZGlzYWJs ZSB0aGlzIG9wdGltaXphdGlvbiwgY29tcGlsZQorICAgd2l0aCAtRElOTElOSU5HPTAuICAq LworI2lmIChkZWZpbmVkIF9fTk9fSU5MSU5FX18gXAorICAgICAmJiAhIGRlZmluZWQgX19P UFRJTUlaRV9fICYmICEgZGVmaW5lZCBfX09QVElNSVpFX1NJWkVfXyBcCisgICAgICYmICEg KGRlZmluZWQgSU5MSU5JTkcgJiYgISBJTkxJTklORykpCisjIGRlZmluZSBYTEkobykgbGlz cF9oX1hMSSAobykKKyMgZGVmaW5lIFhJTChpKSBsaXNwX2hfWElMIChpKQorIyBkZWZpbmUg Q0hFQ0tfTElTVF9DT05TKHgsIHkpIGxpc3BfaF9DSEVDS19MSVNUX0NPTlMgKHgsIHkpCisj IGRlZmluZSBDSEVDS19OVU1CRVIoeCkgbGlzcF9oX0NIRUNLX05VTUJFUiAoeCkKKyMgZGVm aW5lIENIRUNLX1NZTUJPTCh4KSBsaXNwX2hfQ0hFQ0tfU1lNQk9MICh4KQorIyBkZWZpbmUg Q0hFQ0tfVFlQRShvaywgUXh4eHAsIHgpIGxpc3BfaF9DSEVDS19UWVBFIChvaywgUXh4eHAs IHgpCisjIGRlZmluZSBDT05TUCh4KSBsaXNwX2hfQ09OU1AgKHgpCisjIGRlZmluZSBFUSh4 LCB5KSBsaXNwX2hfRVEgKHgsIHkpCisjIGRlZmluZSBGTE9BVFAoeCkgbGlzcF9oX0ZMT0FU UCAoeCkKKyMgZGVmaW5lIElOVEVHRVJQKHgpIGxpc3BfaF9JTlRFR0VSUCAoeCkKKyMgZGVm aW5lIE1BUktFUlAoeCkgbGlzcF9oX01BUktFUlAgKHgpCisjIGRlZmluZSBNSVNDUCh4KSBs aXNwX2hfTUlTQ1AgKHgpCisjIGRlZmluZSBOSUxQKHgpIGxpc3BfaF9OSUxQICh4KQorIyBk ZWZpbmUgU0VUX1NZTUJPTF9WQUwoc3ltLCB2KSBsaXNwX2hfU0VUX1NZTUJPTF9WQUwgKHN5 bSwgdikKKyMgZGVmaW5lIFNZTUJPTF9DT05TVEFOVF9QKHN5bSkgbGlzcF9oX1NZTUJPTF9D T05TVEFOVF9QIChzeW0pCisjIGRlZmluZSBTWU1CT0xfVkFMKHN5bSkgbGlzcF9oX1NZTUJP TF9WQUwgKHN5bSkKKyMgZGVmaW5lIFNZTUJPTFAoeCkgbGlzcF9oX1NZTUJPTFAgKHgpCisj IGRlZmluZSBWRUNUT1JMSUtFUCh4KSBsaXNwX2hfVkVDVE9STElLRVAgKHgpCisjIGRlZmlu ZSBYQ0FSKGMpIGxpc3BfaF9YQ0FSIChjKQorIyBkZWZpbmUgWENEUihjKSBsaXNwX2hfWENE UiAoYykKKyMgZGVmaW5lIFhDT05TKGEpIGxpc3BfaF9YQ09OUyAoYSkKKyMgZGVmaW5lIFhI QVNIKGEpIGxpc3BfaF9YSEFTSCAoYSkKKyMgZGVmaW5lIFhQTlRSKGEpIGxpc3BfaF9YUE5U UiAoYSkKKyMgZGVmaW5lIFhTWU1CT0woYSkgbGlzcF9oX1hTWU1CT0wgKGEpCisjIGlmbmRl ZiBHQ19DSEVDS19DT05TX0xJU1QKKyMgIGRlZmluZSBjaGVja19jb25zX2xpc3QoKSBsaXNw X2hfY2hlY2tfY29uc19saXN0ICgpCisjIGVuZGlmCisjIGlmIFVTRV9MU0JfVEFHCisjICBk ZWZpbmUgbWFrZV9udW1iZXIobikgbGlzcF9oX21ha2VfbnVtYmVyIChuKQorIyAgZGVmaW5l IFhGQVNUSU5UKGEpIGxpc3BfaF9YRkFTVElOVCAoYSkKKyMgIGRlZmluZSBYSU5UKGEpIGxp c3BfaF9YSU5UIChhKQorIyAgZGVmaW5lIFhUWVBFKGEpIGxpc3BfaF9YVFlQRSAoYSkKKyMg IGRlZmluZSBYVU5UQUcoYSwgdHlwZSkgbGlzcF9oX1hVTlRBRyAoYSwgdHlwZSkKKyMgZW5k aWYKKyNlbmRpZgorCisvKiBEZWZpbmUgTkFNRSBhcyBhIGxpc3AuaCBpbmxpbmUgZnVuY3Rp b24gdGhhdCByZXR1cm5zIFRZUEUgYW5kIGhhcworICAgYXJndW1lbnRzIGRlY2xhcmVkIGFz IEFSR0RFQ0xTIGFuZCBwYXNzZWQgYXMgQVJHUy4gIEFSR0RFQ0xTIGFuZAorICAgQVJHUyBz aG91bGQgYmUgcGFyZW50aGVzaXplZC4gIEltcGxlbWVudCB0aGUgZnVuY3Rpb24gYnkgY2Fs bGluZworICAgbGlzcF9oX05BTUUgQVJHUy4gICovCisjZGVmaW5lIExJU1BfTUFDUk9fREVG VU4obmFtZSwgdHlwZSwgYXJnZGVjbHMsIGFyZ3MpIFwKKyAgTElTUF9JTkxJTkUgdHlwZSAo bmFtZSkgYXJnZGVjbHMgeyByZXR1cm4gbGlzcF9oXyMjbmFtZSBhcmdzOyB9CisKKy8qIGxp a2UgTElTUF9NQUNST19ERUZVTiwgZXhjZXB0IE5BTUUgcmV0dXJucyB2b2lkLiAgKi8KKyNk ZWZpbmUgTElTUF9NQUNST19ERUZVTl9WT0lEKG5hbWUsIGFyZ2RlY2xzLCBhcmdzKSBcCisg IExJU1BfSU5MSU5FIHZvaWQgKG5hbWUpIGFyZ2RlY2xzIHsgbGlzcF9oXyMjbmFtZSBhcmdz OyB9CisKKwogLyogRGVmaW5lIHRoZSBmdW5kYW1lbnRhbCBMaXNwIGRhdGEgc3RydWN0dXJl cy4gICovCiAKIC8qIFRoaXMgaXMgdGhlIHNldCBvZiBMaXNwIGRhdGEgdHlwZXMuICBJZiB5 b3Ugd2FudCB0byBkZWZpbmUgYSBuZXcKQEAgLTIzMCw3ICszNjMsNiBAQAogICAgZXh0ZW5k aW5nIHRoZWlyIHJhbmdlIGZyb20sIGUuZy4sIC0yXjI4Li4yXjI4LTEgdG8gLTJeMjkuLjJe MjktMS4gICovCiAjZGVmaW5lIElOVE1BU0sgKEVNQUNTX0lOVF9NQVggPj4gKElOVFRZUEVC SVRTIC0gMSkpCiAjZGVmaW5lIGNhc2VfTGlzcF9JbnQgY2FzZSBMaXNwX0ludDA6IGNhc2Ug TGlzcF9JbnQxCi0jZGVmaW5lIExJU1BfSU5UX1RBR19QKHgpICgoKHgpICYgfkxpc3BfSW50 MSkgPT0gMCkKIAogLyogSWRlYSBzdG9sZW4gZnJvbSBHREIuICBNU1ZDIGRvZXNuJ3Qgc3Vw cG9ydCBlbnVtcyBpbiBiaXRmaWVsZHMsCiAgICBhbmQgeGxjIGNvbXBsYWlucyB2b2NpZmVy b3VzbHkgYWJvdXQgdGhlbS4gICovCkBAIC0zNTksMjAgKzQ5MSw2IEBACiAKIHR5cGVkZWYg c3RydWN0IHsgRU1BQ1NfSU5UIGk7IH0gTGlzcF9PYmplY3Q7CiAKLSNkZWZpbmUgWExJKG8p IChvKS5pCi1MSVNQX0lOTElORSBMaXNwX09iamVjdAotWElMIChFTUFDU19JTlQgaSkKLXsK LSAgTGlzcF9PYmplY3QgbyA9IHsgaSB9OwotICByZXR1cm4gbzsKLX0KLQotTElTUF9JTkxJ TkUgTGlzcF9PYmplY3QKLUxJU1BfTUFLRV9SVkFMVUUgKExpc3BfT2JqZWN0IG8pCi17Ci0g ICAgcmV0dXJuIG87Ci19Ci0KICNkZWZpbmUgTElTUF9JTklUSUFMTFlfWkVSTyB7MH0KIAog I3VuZGVmIENIRUNLX0xJU1BfT0JKRUNUX1RZUEUKQEAgLTM4MiwxMyArNTAwLDE1IEBACiAv KiBJZiBhIHN0cnVjdCB0eXBlIGlzIG5vdCB3YW50ZWQsIGRlZmluZSBMaXNwX09iamVjdCBh cyBqdXN0IGEgbnVtYmVyLiAgKi8KIAogdHlwZWRlZiBFTUFDU19JTlQgTGlzcF9PYmplY3Q7 Ci0jZGVmaW5lIFhMSShvKSAobykKLSNkZWZpbmUgWElMKGkpIChpKQotI2RlZmluZSBMSVNQ X01BS0VfUlZBTFVFKG8pICgwICsgKG8pKQogI2RlZmluZSBMSVNQX0lOSVRJQUxMWV9aRVJP IDAKIGVudW0gQ0hFQ0tfTElTUF9PQkpFQ1RfVFlQRSB7IENIRUNLX0xJU1BfT0JKRUNUX1RZ UEUgPSAwIH07CiAjZW5kaWYgLyogQ0hFQ0tfTElTUF9PQkpFQ1RfVFlQRSAqLwogCisvKiBD b252ZXJ0IGEgTGlzcF9PYmplY3QgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRU1BQ1NfSU5UIGFu ZCB2aWNlIHZlcnNhLgorICAgQXQgdGhlIG1hY2hpbmUgbGV2ZWwsIHRoZXNlIG9wZXJhdGlv bnMgYXJlIG5vLW9wcy4gICovCitMSVNQX01BQ1JPX0RFRlVOIChYTEksIEVNQUNTX0lOVCwg KExpc3BfT2JqZWN0IG8pLCAobykpCitMSVNQX01BQ1JPX0RFRlVOIChYSUwsIExpc3BfT2Jq ZWN0LCAoRU1BQ1NfSU5UIGkpLCAoaSkpCisKIC8qIEluIHRoZSBzaXplIHdvcmQgb2YgYSB2 ZWN0b3IsIHRoaXMgYml0IG1lYW5zIHRoZSB2ZWN0b3IgaGFzIGJlZW4gbWFya2VkLiAgKi8K IAogc3RhdGljIHB0cmRpZmZfdCBjb25zdCBBUlJBWV9NQVJLX0ZMQUcKQEAgLTQ2MCw4NSAr NTgwLDEwOSBAQAogICAgIEJPT0xfVkVDVE9SX0JJVFNfUEVSX0NIQVIgPSA4CiAgIH07CiAM Ci0vKiBUaGVzZSBtYWNyb3MgZXh0cmFjdCB2YXJpb3VzIHNvcnRzIG9mIHZhbHVlcyBmcm9t IGEgTGlzcF9PYmplY3QuCisvKiBUaGVzZSBmdW5jdGlvbnMgZXh0cmFjdCB2YXJpb3VzIHNv cnRzIG9mIHZhbHVlcyBmcm9tIGEgTGlzcF9PYmplY3QuCiAgRm9yIGV4YW1wbGUsIGlmIHRl bSBpcyBhIExpc3BfT2JqZWN0IHdob3NlIHR5cGUgaXMgTGlzcF9Db25zLAogIFhDT05TICh0 ZW0pIGlzIHRoZSBzdHJ1Y3QgTGlzcF9Db25zICogcG9pbnRpbmcgdG8gdGhlIG1lbW9yeSBm b3IgdGhhdCBjb25zLiAgKi8KIAotI2lmIFVTRV9MU0JfVEFHCi0KLWVudW0gbHNiX2JpdHMK LSAgewotICAgIFRZUEVNQVNLID0gKDEgPDwgR0NUWVBFQklUUykgLSAxLAotICAgIFZBTE1B U0sgPSB+IFRZUEVNQVNLCi0gIH07Ci0jZGVmaW5lIFhUWVBFKGEpICgoZW51bSBMaXNwX1R5 cGUpIChYTEkgKGEpICYgVFlQRU1BU0spKQotI2RlZmluZSBYSU5UKGEpIChYTEkgKGEpID4+ IElOVFRZUEVCSVRTKQotI2RlZmluZSBYVUlOVChhKSAoKEVNQUNTX1VJTlQpIFhMSSAoYSkg Pj4gSU5UVFlQRUJJVFMpCi0jZGVmaW5lIG1ha2VfbnVtYmVyKE4pIFhJTCAoKEVNQUNTX0lO VCkgKE4pIDw8IElOVFRZUEVCSVRTKQotI2RlZmluZSBtYWtlX2xpc3BfcHRyKHB0ciwgdHlw ZSkgXAotICAoZWFzc2VydCAoWFRZUEUgKFhJTCAoKGludHB0cl90KSAocHRyKSkpID09IDAp LCAvKiBDaGVjayBhbGlnbm1lbnQuICAqLyAgXAotICAgWElMICgodHlwZSkgfCAoaW50cHRy X3QpIChwdHIpKSkKLQotI2RlZmluZSBYUE5UUihhKSAoKGludHB0cl90KSAoWExJIChhKSAm IH5UWVBFTUFTSykpCi0jZGVmaW5lIFhVTlRBRyhhLCB0eXBlKSAoKGludHB0cl90KSAoWExJ IChhKSAtICh0eXBlKSkpCi0KLSNlbHNlICAvKiBub3QgVVNFX0xTQl9UQUcgKi8KLQogc3Rh dGljIEVNQUNTX0lOVCBjb25zdCBWQUxNQVNLCi0jZGVmaW5lIFZBTE1BU0sgVkFMX01BWAor I2RlZmluZSBWQUxNQVNLIChVU0VfTFNCX1RBRyA/IC0gKDEgPDwgR0NUWVBFQklUUykgOiBW QUxfTUFYKQogICAgICAgPSBWQUxNQVNLOwogCi0jZGVmaW5lIFhUWVBFKGEpICgoZW51bSBM aXNwX1R5cGUpICgoRU1BQ1NfVUlOVCkgWExJIChhKSA+PiBWQUxCSVRTKSkKLQotLyogRm9y IGludGVnZXJzIGtub3duIHRvIGJlIHBvc2l0aXZlLCBYRkFTVElOVCBwcm92aWRlcyBmYXN0 IHJldHJpZXZhbAotICAgYW5kIFhTRVRGQVNUSU5UIHByb3ZpZGVzIGZhc3Qgc3RvcmFnZS4g IFRoaXMgdGFrZXMgYWR2YW50YWdlIG9mIHRoZQotICAgZmFjdCB0aGF0IExpc3AgaW50ZWdl cnMgaGF2ZSB6ZXJvLWJpdHMgaW4gdGhlaXIgdGFncy4gICovCi0jZGVmaW5lIFhGQVNUSU5U KGEpIChYTEkgKGEpICsgMCkKLSNkZWZpbmUgWFNFVEZBU1RJTlQoYSwgYikgKChhKSA9IFhJ TCAoYikpCi0KLS8qIEV4dHJhY3QgdGhlIHZhbHVlIG9mIGEgTGlzcF9PYmplY3QgYXMgYSAo dW4pc2lnbmVkIGludGVnZXIuICAqLwotCi0jZGVmaW5lIFhJTlQoYSkgKFhMSSAoYSkgPDwg SU5UVFlQRUJJVFMgPj4gSU5UVFlQRUJJVFMpCi0jZGVmaW5lIFhVSU5UKGEpICgoRU1BQ1Nf VUlOVCkgKFhMSSAoYSkgJiBJTlRNQVNLKSkKLSNkZWZpbmUgbWFrZV9udW1iZXIoTikgWElM ICgoRU1BQ1NfSU5UKSAoTikgJiBJTlRNQVNLKQotCi0jZGVmaW5lIG1ha2VfbGlzcF9wdHIo cHRyLCB0eXBlKSBcCi0gIChYSUwgKChFTUFDU19JTlQpICgoRU1BQ1NfVUlOVCkgKHR5cGUp IDw8IFZBTEJJVFMpICBcCi0JKyAoKGludHB0cl90KSAocHRyKSAmIFZBTE1BU0spKSkKLQot LyogREFUQV9TRUdfQklUUyBmb3JjZXMgZXh0cmEgYml0cyB0byBiZSBvcidkIGluIHdpdGgg YW55IHBvaW50ZXJzCi0gICB3aGljaCB3ZXJlIHN0b3JlZCBpbiBhIExpc3BfT2JqZWN0LiAg Ki8KLSNkZWZpbmUgWFBOVFIoYSkgKCh1aW50cHRyX3QpICgoWExJIChhKSAmIFZBTE1BU0sp IHwgREFUQV9TRUdfQklUUykpCi0KLSNlbmRpZiAvKiBub3QgVVNFX0xTQl9UQUcgKi8KLQot LyogUmV0dXJuIGEgKExpc3AtaW50ZWdlciBzaXplZCkgaGFzaCBvZiB0aGUgTGlzcF9PYmpl Y3QgdmFsdWUuICBIYXBwZW5zIHRvIGJlCi0gICBsaWtlIFhVSU5UIHJpZ2h0IG5vdywgYnV0 IFhVSU5UIHNob3VsZCBvbmx5IGJlIGFwcGxpZWQgdG8gb2JqZWN0cyB3ZSBrbm93Ci0gICBh cmUgaW50ZWdlcnMuICAqLwotI2RlZmluZSBYSEFTSChhKSBYVUlOVCAoYSkKLQotLyogRm9y IGludGVnZXJzIGtub3duIHRvIGJlIHBvc2l0aXZlLCBYRkFTVElOVCBzb21ldGltZXMgcHJv dmlkZXMKLSAgIGZhc3RlciByZXRyaWV2YWwgYW5kIFhTRVRGQVNUSU5UIHByb3ZpZGVzIGZh c3RlciBzdG9yYWdlLgotICAgSWYgbm90LCBmYWxsYmFjayBvbiB0aGUgbm9uLWFjY2VsZXJh dGVkIHBhdGguICAqLwotI2lmbmRlZiBYRkFTVElOVAotIyBkZWZpbmUgWEZBU1RJTlQoYSkg KFhJTlQgKGEpKQotIyBkZWZpbmUgWFNFVEZBU1RJTlQoYSwgYikgKFhTRVRJTlQgKGEsIGIp KQotI2VuZGlmCi0KLS8qIEV4dHJhY3QgdGhlIHBvaW50ZXIgdmFsdWUgb2YgdGhlIExpc3Ag b2JqZWN0IEEsIHVuZGVyIHRoZQotICAgYXNzdW1wdGlvbiB0aGF0IEEncyB0eXBlIGlzIFRZ UEUuICBUaGlzIGlzIGEgZmFsbGJhY2sKLSAgIGltcGxlbWVudGF0aW9uIGlmIG5vdGhpbmcg ZmFzdGVyIGlzIGF2YWlsYWJsZS4gICovCi0jaWZuZGVmIFhVTlRBRwotIyBkZWZpbmUgWFVO VEFHKGEsIHR5cGUpIFhQTlRSIChhKQotI2VuZGlmCi0KLSNkZWZpbmUgRVEoeCwgeSkgKFhM SSAoeCkgPT0gWExJICh5KSkKLQogLyogTGFyZ2VzdCBhbmQgc21hbGxlc3QgcmVwcmVzZW50 YWJsZSBmaXhudW0gdmFsdWVzLiAgVGhlc2UgYXJlIHRoZSBDCiAgICB2YWx1ZXMuICBUaGV5 IGFyZSBtYWNyb3MgZm9yIHVzZSBpbiBzdGF0aWMgaW5pdGlhbGl6ZXJzLiAgKi8KICNkZWZp bmUgTU9TVF9QT1NJVElWRV9GSVhOVU0gKEVNQUNTX0lOVF9NQVggPj4gSU5UVFlQRUJJVFMp CiAjZGVmaW5lIE1PU1RfTkVHQVRJVkVfRklYTlVNICgtMSAtIE1PU1RfUE9TSVRJVkVfRklY TlVNKQogCisvKiBFeHRyYWN0IHRoZSBwb2ludGVyIGhpZGRlbiB3aXRoaW4gQS4gICovCitM SVNQX01BQ1JPX0RFRlVOIChYUE5UUiwgdm9pZCAqLCAoTGlzcF9PYmplY3QgYSksIChhKSkK KworI2lmIFVTRV9MU0JfVEFHCisKK0xJU1BfTUFDUk9fREVGVU4gKG1ha2VfbnVtYmVyLCBM aXNwX09iamVjdCwgKEVNQUNTX0lOVCBuKSwgKG4pKQorTElTUF9NQUNST19ERUZVTiAoWElO VCwgRU1BQ1NfSU5ULCAoTGlzcF9PYmplY3QgYSksIChhKSkKK0xJU1BfTUFDUk9fREVGVU4g KFhGQVNUSU5ULCBFTUFDU19JTlQsIChMaXNwX09iamVjdCBhKSwgKGEpKQorTElTUF9NQUNS T19ERUZVTiAoWFRZUEUsIGVudW0gTGlzcF9UeXBlLCAoTGlzcF9PYmplY3QgYSksIChhKSkK K0xJU1BfTUFDUk9fREVGVU4gKFhVTlRBRywgdm9pZCAqLCAoTGlzcF9PYmplY3QgYSwgaW50 IHR5cGUpLCAoYSwgdHlwZSkpCisKKyNlbHNlIC8qICEgVVNFX0xTQl9UQUcgKi8KKworLyog QWx0aG91Z2ggY29tcGlsZWQgb25seSBpZiAhIFVTRV9MU0JfVEFHLCB0aGUgZm9sbG93aW5n IGZ1bmN0aW9ucworICAgYWxzbyB3b3JrIHdoZW4gVVNFX0xTQl9UQUc7IHRoaXMgaXMgdG8g YWlkIGZ1dHVyZSBtYWludGVuYW5jZSB3aGVuCisgICB0aGUgbGlzcF9oXyogbWFjcm9zIGFy ZSBldmVudHVhbGx5IHJlbW92ZWQuICAqLworCisvKiBNYWtlIGEgTGlzcCBpbnRlZ2VyIHJl cHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhlIGxvdyBvcmRlcgorICAgYml0cyBvZiBOLiAg Ki8KK0xJU1BfSU5MSU5FIExpc3BfT2JqZWN0CittYWtlX251bWJlciAoRU1BQ1NfSU5UIG4p Cit7CisgIHJldHVybiBYSUwgKFVTRV9MU0JfVEFHID8gbiA8PCBJTlRUWVBFQklUUyA6IG4g JiBJTlRNQVNLKTsKK30KKworLyogRXh0cmFjdCBBJ3MgdmFsdWUgYXMgYSBzaWduZWQgaW50 ZWdlci4gICovCitMSVNQX0lOTElORSBFTUFDU19JTlQKK1hJTlQgKExpc3BfT2JqZWN0IGEp Cit7CisgIEVNQUNTX0lOVCBpID0gWExJIChhKTsKKyAgcmV0dXJuIChVU0VfTFNCX1RBRyA/ IGkgOiBpIDw8IElOVFRZUEVCSVRTKSA+PiBJTlRUWVBFQklUUzsKK30KKworLyogTGlrZSBY SU5UIChBKSwgYnV0IG1heSBiZSBmYXN0ZXIuICBBIG11c3QgYmUgbm9ubmVnYXRpdmUuCisg ICBJZiAhIFVTRV9MU0JfVEFHLCB0aGlzIHRha2VzIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0 aGF0IExpc3AKKyAgIGludGVnZXJzIGhhdmUgemVyby1iaXRzIGluIHRoZWlyIHRhZ3MuICAq LworTElTUF9JTkxJTkUgRU1BQ1NfSU5UCitYRkFTVElOVCAoTGlzcF9PYmplY3QgYSkKK3sK KyAgRU1BQ1NfSU5UIG4gPSBVU0VfTFNCX1RBRyA/IFhJTlQgKGEpIDogWExJIChhKTsKKyAg ZWFzc2VydCAoMCA8PSBuKTsKKyAgcmV0dXJuIG47Cit9CisKKy8qIEV4dHJhY3QgQSdzIHR5 cGUuICAqLworTElTUF9JTkxJTkUgZW51bSBMaXNwX1R5cGUKK1hUWVBFIChMaXNwX09iamVj dCBhKQoreworICBFTUFDU19VSU5UIGkgPSBYTEkgKGEpOworICByZXR1cm4gVVNFX0xTQl9U QUcgPyBpICYgflZBTE1BU0sgOiBpID4+IFZBTEJJVFM7Cit9CisKKy8qIEV4dHJhY3QgQSdz IHBvaW50ZXIgdmFsdWUsIGFzc3VtaW5nIEEncyB0eXBlIGlzIFRZUEUuICAqLworTElTUF9J TkxJTkUgdm9pZCAqCitYVU5UQUcgKExpc3BfT2JqZWN0IGEsIGludCB0eXBlKQoreworICBp ZiAoVVNFX0xTQl9UQUcpCisgICAgeworICAgICAgaW50cHRyX3QgaSA9IFhMSSAoYSkgLSB0 eXBlOworICAgICAgcmV0dXJuICh2b2lkICopIGk7CisgICAgfQorICByZXR1cm4gWFBOVFIg KGEpOworfQorCisjZW5kaWYgLyogISBVU0VfTFNCX1RBRyAqLworCisvKiBFeHRyYWN0IEEn cyB2YWx1ZSBhcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLiAgKi8KK0xJU1BfSU5MSU5FIEVNQUNT X1VJTlQKK1hVSU5UIChMaXNwX09iamVjdCBhKQoreworICBFTUFDU19VSU5UIGkgPSBYTEkg KGEpOworICByZXR1cm4gVVNFX0xTQl9UQUcgPyBpID4+IElOVFRZUEVCSVRTIDogaSAmIElO VE1BU0s7Cit9CisKKy8qIFJldHVybiBBJ3MgKExpc3AtaW50ZWdlciBzaXplZCkgaGFzaC4g IEhhcHBlbnMgdG8gYmUgbGlrZSBYVUlOVAorICAgcmlnaHQgbm93LCBidXQgWFVJTlQgc2hv dWxkIG9ubHkgYmUgYXBwbGllZCB0byBvYmplY3RzIHdlIGtub3cgYXJlCisgICBpbnRlZ2Vy cy4gICovCitMSVNQX01BQ1JPX0RFRlVOIChYSEFTSCwgRU1BQ1NfSU5ULCAoTGlzcF9PYmpl Y3QgYSksIChhKSkKKworLyogTGlrZSBtYWtlX251bWJlciAoTiksIGJ1dCBtYXkgYmUgZmFz dGVyLiAgTiBtdXN0IGJlIGluIG5vbm5lZ2F0aXZlIHJhbmdlLiAgKi8KK0xJU1BfSU5MSU5F IExpc3BfT2JqZWN0CittYWtlX25hdG51bSAoRU1BQ1NfSU5UIG4pCit7CisgIGVhc3NlcnQg KDAgPD0gbiAmJiBuIDw9IE1PU1RfUE9TSVRJVkVfRklYTlVNKTsKKyAgcmV0dXJuIFVTRV9M U0JfVEFHID8gbWFrZV9udW1iZXIgKG4pIDogWElMIChuKTsKK30KKworLyogUmV0dXJuIHRy dWUgaWYgWCBhbmQgWSBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgKi8KK0xJU1BfTUFDUk9fREVG VU4gKEVRLCBib29sLCAoTGlzcF9PYmplY3QgeCwgTGlzcF9PYmplY3QgeSksICh4LCB5KSkK KwogLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgSSBkb2Vzbid0IGZpdCBpbnRvIGEgTGlzcCBm aXhudW0uICBJdCBpcwogICAgd3JpdHRlbiB0aGlzIHdheSBzbyB0aGF0IGl0IGFsc28gd29y a3MgaWYgSSBpcyBvZiB1bnNpZ25lZAogICAgdHlwZSBvciBpZiBJIGlzIGEgTmFOLiAgKi8K QEAgLTU1MSw2NiArNjk1LDE3MyBAQAogewogICByZXR1cm4gbnVtIDwgbG93ZXIgPyBsb3dl ciA6IG51bSA8PSB1cHBlciA/IG51bSA6IHVwcGVyOwogfQotCi0MCisMCisvKiBGb3J3YXJk IGRlY2xhcmF0aW9ucy4gICovCisKKy8qIERlZmluZWQgaW4gdGhpcyBmaWxlLiAgKi8KK3Vu aW9uIExpc3BfRndkOworTElTUF9JTkxJTkUgYm9vbCBCT09MX1ZFQ1RPUl9QIChMaXNwX09i amVjdCk7CitMSVNQX0lOTElORSBib29sIEJVRkZFUl9PQkpGV0RQICh1bmlvbiBMaXNwX0Z3 ZCAqKTsKK0xJU1BfSU5MSU5FIGJvb2wgQlVGRkVSUCAoTGlzcF9PYmplY3QpOworTElTUF9J TkxJTkUgYm9vbCBDSEFSX1RBQkxFX1AgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIExp c3BfT2JqZWN0IENIQVJfVEFCTEVfUkVGX0FTQ0lJIChMaXNwX09iamVjdCwgcHRyZGlmZl90 KTsKK0xJU1BfSU5MSU5FIGJvb2wgKENPTlNQKSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJ TkUgYm9vbCAoRkxPQVRQKSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCBmdW5j dGlvbnAgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgKElOVEVHRVJQKSAoTGlz cF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCAoTUFSS0VSUCkgKExpc3BfT2JqZWN0KTsK K0xJU1BfSU5MSU5FIGJvb2wgKE1JU0NQKSAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUg Ym9vbCAoTklMUCkgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgT1ZFUkxBWVAg KExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgUFJPQ0VTU1AgKExpc3BfT2JqZWN0 KTsKK0xJU1BfSU5MSU5FIGJvb2wgUFNFVURPVkVDVE9SUCAoTGlzcF9PYmplY3QsIGludCk7 CitMSVNQX0lOTElORSBib29sIFNBVkVfVkFMVUVQIChMaXNwX09iamVjdCk7CitMSVNQX0lO TElORSB2b2lkIHNldF9zdWJfY2hhcl90YWJsZV9jb250ZW50cyAoTGlzcF9PYmplY3QsIHB0 cmRpZmZfdCwKKwkJCQkJICAgICAgTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgYm9vbCBT VFJJTkdQIChMaXNwX09iamVjdCk7CitMSVNQX0lOTElORSBib29sIFNVQl9DSEFSX1RBQkxF X1AgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJvb2wgU1VCUlAgKExpc3BfT2JqZWN0 KTsKK0xJU1BfSU5MSU5FIGJvb2wgKFNZTUJPTFApIChMaXNwX09iamVjdCk7CitMSVNQX0lO TElORSBib29sIChWRUNUT1JMSUtFUCkgKExpc3BfT2JqZWN0KTsKK0xJU1BfSU5MSU5FIGJv b2wgV0lORE9XUCAoTGlzcF9PYmplY3QpOworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfU2F2 ZV9WYWx1ZSAqWFNBVkVfVkFMVUUgKExpc3BfT2JqZWN0KTsKKworLyogRGVmaW5lZCBpbiBj aGFydGFiLmMuICAqLworZXh0ZXJuIExpc3BfT2JqZWN0IGNoYXJfdGFibGVfcmVmIChMaXNw X09iamVjdCwgaW50KTsKK2V4dGVybiB2b2lkIGNoYXJfdGFibGVfc2V0IChMaXNwX09iamVj dCwgaW50LCBMaXNwX09iamVjdCk7CitleHRlcm4gaW50IGNoYXJfdGFibGVfdHJhbnNsYXRl IChMaXNwX09iamVjdCwgaW50KTsKKworLyogRGVmaW5lZCBpbiBkYXRhLmMuICAqLworZXh0 ZXJuIExpc3BfT2JqZWN0IFFhcnJheXAsIFFidWZmZXJwLCBRYnVmZmVyX29yX3N0cmluZ19w LCBRY2hhcl90YWJsZV9wOworZXh0ZXJuIExpc3BfT2JqZWN0IFFjb25zcCwgUWZsb2F0cCwg UWludGVnZXJwLCBRbGFtYmRhLCBRbGlzdHAsIFFtYXJrZXJwLCBRbmlsOworZXh0ZXJuIExp c3BfT2JqZWN0IFFudW1iZXJwLCBRc3RyaW5ncCwgUXN5bWJvbHAsIFF2ZWN0b3JwOworZXh0 ZXJuIExpc3BfT2JqZWN0IFF2ZWN0b3Jfb3JfY2hhcl90YWJsZV9wLCBRd2hvbGVudW1wOwor ZXh0ZXJuIExpc3BfT2JqZWN0IEZmYm91bmRwIChMaXNwX09iamVjdCk7CitleHRlcm4gX05v cmV0dXJuIExpc3BfT2JqZWN0IHdyb25nX3R5cGVfYXJndW1lbnQgKExpc3BfT2JqZWN0LCBM aXNwX09iamVjdCk7CisKKy8qIERlZmluZWQgaW4gZW1hY3MuYy4gICovCitleHRlcm4gYm9v bCBpbml0aWFsaXplZDsKKworLyogRGVmaW5lZCBpbiBldmFsLmMuICAqLworZXh0ZXJuIExp c3BfT2JqZWN0IFFhdXRvbG9hZDsKKworLyogRGVmaW5lZCBpbiBmbG9hdGZucy5jLiAgKi8K K2V4dGVybiBkb3VibGUgZXh0cmFjdF9mbG9hdCAoTGlzcF9PYmplY3QpOworCisvKiBEZWZp bmVkIGluIHByb2Nlc3MuYy4gICovCitleHRlcm4gTGlzcF9PYmplY3QgUXByb2Nlc3NwOwor CisvKiBEZWZpbmVkIGluIHdpbmRvdy5jLiAgKi8KK2V4dGVybiBMaXNwX09iamVjdCBRd2lu ZG93cDsKKworLyogRGVmaW5lZCBpbiB4ZGlzcC5jLiAgKi8KK2V4dGVybiBMaXNwX09iamVj dCBRaW1hZ2U7CisMCisKIC8qIEV4dHJhY3QgYSB2YWx1ZSBvciBhZGRyZXNzIGZyb20gYSBM aXNwX09iamVjdC4gICovCiAKLSNkZWZpbmUgWENPTlMoYSkgICAoZWFzc2VydCAoQ09OU1Ag KGEpKSwgXAotCQkgICAgKHN0cnVjdCBMaXNwX0NvbnMgKikgWFVOVEFHIChhLCBMaXNwX0Nv bnMpKQotI2RlZmluZSBYVkVDVE9SKGEpIChlYXNzZXJ0IChWRUNUT1JMSUtFUCAoYSkpLCBc Ci0JCSAgICAoc3RydWN0IExpc3BfVmVjdG9yICopIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3Js aWtlKSkKLSNkZWZpbmUgWFNUUklORyhhKSAoZWFzc2VydCAoU1RSSU5HUCAoYSkpLCBcCi0J CSAgICAoc3RydWN0IExpc3BfU3RyaW5nICopIFhVTlRBRyAoYSwgTGlzcF9TdHJpbmcpKQot I2RlZmluZSBYU1lNQk9MKGEpIChlYXNzZXJ0IChTWU1CT0xQIChhKSksIFwKLQkJICAgIChz dHJ1Y3QgTGlzcF9TeW1ib2wgKikgWFVOVEFHIChhLCBMaXNwX1N5bWJvbCkpCi0jZGVmaW5l IFhGTE9BVChhKSAgKGVhc3NlcnQgKEZMT0FUUCAoYSkpLCBcCi0JCSAgICAoc3RydWN0IExp c3BfRmxvYXQgKikgWFVOVEFHIChhLCBMaXNwX0Zsb2F0KSkKLQotLyogTWlzYyB0eXBlcy4g ICovCi0KLSNkZWZpbmUgWE1JU0MoYSkJKCh1bmlvbiBMaXNwX01pc2MgKikgWFVOVEFHIChh LCBMaXNwX01pc2MpKQotI2RlZmluZSBYTUlTQ0FOWShhKQkoZWFzc2VydCAoTUlTQ1AgKGEp KSwgJihYTUlTQyAoYSktPnVfYW55KSkKLSNkZWZpbmUgWE1JU0NUWVBFKGEpICAgKFhNSVND QU5ZIChhKS0+dHlwZSkKLSNkZWZpbmUgWE1BUktFUihhKQkoZWFzc2VydCAoTUFSS0VSUCAo YSkpLCAmKFhNSVNDIChhKS0+dV9tYXJrZXIpKQotI2RlZmluZSBYT1ZFUkxBWShhKQkoZWFz c2VydCAoT1ZFUkxBWVAgKGEpKSwgJihYTUlTQyAoYSktPnVfb3ZlcmxheSkpCi0KLS8qIEZv cndhcmRpbmcgb2JqZWN0IHR5cGVzLiAgKi8KLQotI2RlZmluZSBYRldEVFlQRShhKSAgICAg KGEtPnVfaW50ZndkLnR5cGUpCi0jZGVmaW5lIFhJTlRGV0QoYSkJKGVhc3NlcnQgKElOVEZX RFAgKGEpKSwgJigoYSktPnVfaW50ZndkKSkKLSNkZWZpbmUgWEJPT0xGV0QoYSkJKGVhc3Nl cnQgKEJPT0xGV0RQIChhKSksICYoKGEpLT51X2Jvb2xmd2QpKQotI2RlZmluZSBYT0JKRldE KGEpCShlYXNzZXJ0IChPQkpGV0RQIChhKSksICYoKGEpLT51X29iamZ3ZCkpCi0jZGVmaW5l IFhCVUZGRVJfT0JKRldEKGEpIFwKLSAgKGVhc3NlcnQgKEJVRkZFUl9PQkpGV0RQIChhKSks ICYoKGEpLT51X2J1ZmZlcl9vYmpmd2QpKQotI2RlZmluZSBYS0JPQVJEX09CSkZXRChhKSBc Ci0gIChlYXNzZXJ0IChLQk9BUkRfT0JKRldEUCAoYSkpLCAmKChhKS0+dV9rYm9hcmRfb2Jq ZndkKSkKK0xJU1BfTUFDUk9fREVGVU4gKFhDT05TLCBzdHJ1Y3QgTGlzcF9Db25zICosIChM aXNwX09iamVjdCBhKSwgKGEpKQorCitMSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9WZWN0b3Ig KgorWFZFQ1RPUiAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoVkVDVE9STElLRVAg KGEpKTsKKyAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKTsKK30KKworTElT UF9JTkxJTkUgc3RydWN0IExpc3BfU3RyaW5nICoKK1hTVFJJTkcgKExpc3BfT2JqZWN0IGEp Cit7CisgIGVhc3NlcnQgKFNUUklOR1AgKGEpKTsKKyAgcmV0dXJuIFhVTlRBRyAoYSwgTGlz cF9TdHJpbmcpOworfQorCitMSVNQX01BQ1JPX0RFRlVOIChYU1lNQk9MLCBzdHJ1Y3QgTGlz cF9TeW1ib2wgKiwgKExpc3BfT2JqZWN0IGEpLCAoYSkpCisKK0xJU1BfSU5MSU5FIHN0cnVj dCBMaXNwX0Zsb2F0ICoKK1hGTE9BVCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAo RkxPQVRQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfRmxvYXQpOworfQogCiAv KiBQc2V1ZG92ZWN0b3IgdHlwZXMuICAqLwotc3RydWN0IExpc3BfUHJvY2VzczsKLUxJU1Bf SU5MSU5FIExpc3BfT2JqZWN0IG1ha2VfbGlzcF9wcm9jIChzdHJ1Y3QgTGlzcF9Qcm9jZXNz ICpwKQoteyByZXR1cm4gbWFrZV9saXNwX3B0ciAocCwgTGlzcF9WZWN0b3JsaWtlKTsgfQot I2RlZmluZSBYUFJPQ0VTUyhhKSAoZWFzc2VydCAoUFJPQ0VTU1AgKGEpKSwgXAotCQkgICAg IChzdHJ1Y3QgTGlzcF9Qcm9jZXNzICopIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKSkK LSNkZWZpbmUgWFdJTkRPVyhhKSAoZWFzc2VydCAoV0lORE9XUCAoYSkpLAkJCQlcCi0JCSAg ICAoc3RydWN0IHdpbmRvdyAqKSBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSkpCi0jZGVm aW5lIFhURVJNSU5BTChhKSAoZWFzc2VydCAoVEVSTUlOQUxQIChhKSksIFwKLQkJICAgICAg KHN0cnVjdCB0ZXJtaW5hbCAqKSBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSkpCi0jZGVm aW5lIFhTVUJSKGEpIChlYXNzZXJ0IChTVUJSUCAoYSkpLCBcCi0JCSAgKHN0cnVjdCBMaXNw X1N1YnIgKikgWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpKQotI2RlZmluZSBYQlVGRkVS KGEpIChlYXNzZXJ0IChCVUZGRVJQIChhKSksIFwKLQkJICAgIChzdHJ1Y3QgYnVmZmVyICop IFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKSkKLSNkZWZpbmUgWENIQVJfVEFCTEUoYSkg KGVhc3NlcnQgKENIQVJfVEFCTEVfUCAoYSkpLCBcCi0JCQkoc3RydWN0IExpc3BfQ2hhcl9U YWJsZSAqKSBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSkpCi0jZGVmaW5lIFhTVUJfQ0hB Ul9UQUJMRShhKSAoZWFzc2VydCAoU1VCX0NIQVJfVEFCTEVfUCAoYSkpLCBcCi0JCQkgICAg KChzdHJ1Y3QgTGlzcF9TdWJfQ2hhcl9UYWJsZSAqKSBcCi0JCQkgICAgIFhVTlRBRyAoYSwg TGlzcF9WZWN0b3JsaWtlKSkpCi0jZGVmaW5lIFhCT09MX1ZFQ1RPUihhKSAoZWFzc2VydCAo Qk9PTF9WRUNUT1JfUCAoYSkpLCBcCi0JCQkgKChzdHJ1Y3QgTGlzcF9Cb29sX1ZlY3RvciAq KSBcCi0JCQkgIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKSkpCisKK0xJU1BfSU5MSU5F IHN0cnVjdCBMaXNwX1Byb2Nlc3MgKgorWFBST0NFU1MgKExpc3BfT2JqZWN0IGEpCit7Cisg IGVhc3NlcnQgKFBST0NFU1NQIChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVj dG9ybGlrZSk7Cit9CisKK0xJU1BfSU5MSU5FIHN0cnVjdCB3aW5kb3cgKgorWFdJTkRPVyAo TGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoV0lORE9XUCAoYSkpOworICByZXR1cm4g WFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3Qg dGVybWluYWwgKgorWFRFUk1JTkFMIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gWFVO VEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3QgTGlz cF9TdWJyICoKK1hTVUJSIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChTVUJSUCAo YSkpOworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitMSVNQ X0lOTElORSBzdHJ1Y3QgYnVmZmVyICoKK1hCVUZGRVIgKExpc3BfT2JqZWN0IGEpCit7Cisg IGVhc3NlcnQgKEJVRkZFUlAgKGEpKTsKKyAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9WZWN0 b3JsaWtlKTsKK30KKworTElTUF9JTkxJTkUgc3RydWN0IExpc3BfQ2hhcl9UYWJsZSAqCitY Q0hBUl9UQUJMRSAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoQ0hBUl9UQUJMRV9Q IChhKSk7CisgIHJldHVybiBYVU5UQUcgKGEsIExpc3BfVmVjdG9ybGlrZSk7Cit9CisKK0xJ U1BfSU5MSU5FIHN0cnVjdCBMaXNwX1N1Yl9DaGFyX1RhYmxlICoKK1hTVUJfQ0hBUl9UQUJM RSAoTGlzcF9PYmplY3QgYSkKK3sKKyAgZWFzc2VydCAoU1VCX0NIQVJfVEFCTEVfUCAoYSkp OworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworfQorCitMSVNQX0lO TElORSBzdHJ1Y3QgTGlzcF9Cb29sX1ZlY3RvciAqCitYQk9PTF9WRUNUT1IgKExpc3BfT2Jq ZWN0IGEpCit7CisgIGVhc3NlcnQgKEJPT0xfVkVDVE9SX1AgKGEpKTsKKyAgcmV0dXJuIFhV TlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKTsKK30KIAogLyogQ29uc3RydWN0IGEgTGlzcF9P YmplY3QgZnJvbSBhIHZhbHVlIG9yIGFkZHJlc3MuICAqLwogCitMSVNQX0lOTElORSBMaXNw X09iamVjdAorbWFrZV9saXNwX3B0ciAodm9pZCAqcHRyLCBlbnVtIExpc3BfVHlwZSB0eXBl KQoreworICBFTUFDU19VSU5UIHV0eXBlID0gdHlwZTsKKyAgRU1BQ1NfVUlOVCB0eXBlYml0 cyA9IFVTRV9MU0JfVEFHID8gdHlwZSA6IHV0eXBlIDw8IFZBTEJJVFM7CisgIExpc3BfT2Jq ZWN0IGEgPSBYSUwgKHR5cGViaXRzIHwgKHVpbnRwdHJfdCkgcHRyKTsKKyAgZWFzc2VydCAo WFRZUEUgKGEpID09IHR5cGUgJiYgWFVOVEFHIChhLCB0eXBlKSA9PSBwdHIpOworICByZXR1 cm4gYTsKK30KKworTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK21ha2VfbGlzcF9wcm9jIChz dHJ1Y3QgTGlzcF9Qcm9jZXNzICpwKQoreworICByZXR1cm4gbWFrZV9saXNwX3B0ciAocCwg TGlzcF9WZWN0b3JsaWtlKTsKK30KKwogI2RlZmluZSBYU0VUSU5UKGEsIGIpICgoYSkgPSBt YWtlX251bWJlciAoYikpCisjZGVmaW5lIFhTRVRGQVNUSU5UKGEsIGIpICgoYSkgPSBtYWtl X25hdG51bSAoYikpCiAjZGVmaW5lIFhTRVRDT05TKGEsIGIpICgoYSkgPSBtYWtlX2xpc3Bf cHRyIChiLCBMaXNwX0NvbnMpKQogI2RlZmluZSBYU0VUVkVDVE9SKGEsIGIpICgoYSkgPSBt YWtlX2xpc3BfcHRyIChiLCBMaXNwX1ZlY3Rvcmxpa2UpKQogI2RlZmluZSBYU0VUU1RSSU5H KGEsIGIpICgoYSkgPSBtYWtlX2xpc3BfcHRyIChiLCBMaXNwX1N0cmluZykpCkBAIC02NTYs MzUgKzkwNywxMCBAQAogI2RlZmluZSBYU0VUQk9PTF9WRUNUT1IoYSwgYikgKFhTRVRQU0VV RE9WRUNUT1IgKGEsIGIsIFBWRUNfQk9PTF9WRUNUT1IpKQogI2RlZmluZSBYU0VUU1VCX0NI QVJfVEFCTEUoYSwgYikgKFhTRVRQU0VVRE9WRUNUT1IgKGEsIGIsIFBWRUNfU1VCX0NIQVJf VEFCTEUpKQogCi0vKiBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIGRlYWxpbmcgd2l0aCBMaXNw IGFycmF5cy4gICovCi0KLSNkZWZpbmUgQVJFRihBUlJBWSwgSURYKQlYVkVDVE9SICgoQVJS QVkpKS0+Y29udGVudHNbSURYXQotI2RlZmluZSBBU0laRShBUlJBWSkJCVhWRUNUT1IgKChB UlJBWSkpLT5oZWFkZXIuc2l6ZQotI2RlZmluZSBBU0VUKEFSUkFZLCBJRFgsIFZBTCkJXAot ICAoZWFzc2VydCAoMCA8PSAoSURYKSAmJiAoSURYKSA8IEFTSVpFIChBUlJBWSkpLAlcCi0g ICBYVkVDVE9SIChBUlJBWSktPmNvbnRlbnRzW0lEWF0gPSAoVkFMKSkKLQotLyogQ29udmVu aWVuY2UgbWFjcm9zIGZvciBkZWFsaW5nIHdpdGggTGlzcCBzdHJpbmdzLiAgKi8KLQotI2Rl ZmluZSBTREFUQShzdHJpbmcpCQkoWFNUUklORyAoc3RyaW5nKS0+ZGF0YSArIDApCi0jZGVm aW5lIFNSRUYoc3RyaW5nLCBpbmRleCkJKFNEQVRBIChzdHJpbmcpW2luZGV4XSArIDApCi0j ZGVmaW5lIFNTRVQoc3RyaW5nLCBpbmRleCwgbmV3KSAoU0RBVEEgKHN0cmluZylbaW5kZXhd ID0gKG5ldykpCi0jZGVmaW5lIFNDSEFSUyhzdHJpbmcpCQkoWFNUUklORyAoc3RyaW5nKS0+ c2l6ZSArIDApCi0jZGVmaW5lIFNCWVRFUyhzdHJpbmcpCQkoU1RSSU5HX0JZVEVTIChYU1RS SU5HIChzdHJpbmcpKSArIDApCi0KLS8qIEF2b2lkICJkaWZmZXIgaW4gc2lnbiIgd2Fybmlu Z3MuICAqLwotI2RlZmluZSBTU0RBVEEoeCkgICgoY2hhciAqKSBTREFUQSAoeCkpCi0KLSNk ZWZpbmUgU1RSSU5HX1NFVF9DSEFSUyhzdHJpbmcsIG5ld3NpemUpIFwKLSAgICAoWFNUUklO RyAoc3RyaW5nKS0+c2l6ZSA9IChuZXdzaXplKSkKLQotI2RlZmluZSBTVFJJTkdfQ09QWUlO KHN0cmluZywgaW5kZXgsIG5ldywgY291bnQpIFwKLSAgICBtZW1jcHkgKFNEQVRBIChzdHJp bmcpICsgaW5kZXgsIG5ldywgY291bnQpCi0KIC8qIFR5cGUgY2hlY2tpbmcuICAqLwogCi0j ZGVmaW5lIENIRUNLX1RZUEUob2ssIFF4eHhwLCB4KSBcCi0gIGRvIHsgaWYgKCEob2spKSB3 cm9uZ190eXBlX2FyZ3VtZW50IChReHh4cCwgKHgpKTsgfSB3aGlsZSAoMCkKK0xJU1BfTUFD Uk9fREVGVU5fVk9JRCAoQ0hFQ0tfVFlQRSwgKGludCBvaywgTGlzcF9PYmplY3QgUXh4eHAs IExpc3BfT2JqZWN0IHgpLAorCQkgICAgICAgKG9rLCBReHh4cCwgeCkpCiAKIC8qIERlcHJl Y2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLiAgKi8KIApAQCAtNjk0LDEwICs5MjAs NiBAQAogCiB0eXBlZGVmIHN0cnVjdCBpbnRlcnZhbCAqSU5URVJWQUw7CiAKLS8qIENvbXBs YWluIGlmIG9iamVjdCBpcyBub3Qgc3RyaW5nIG9yIGJ1ZmZlciB0eXBlLiAgKi8KLSNkZWZp bmUgQ0hFQ0tfU1RSSU5HX09SX0JVRkZFUih4KSBcCi0gIENIRUNLX1RZUEUgKFNUUklOR1Ag KHgpIHx8IEJVRkZFUlAgKHgpLCBRYnVmZmVyX29yX3N0cmluZ19wLCB4KQotCiBzdHJ1Y3Qg TGlzcF9Db25zCiAgIHsKICAgICAvKiBDYXIgb2YgdGhpcyBjb25zIGNlbGwuICAqLwpAQCAt NzE0LDY0ICs5MzYsODYgQEAKICAgfTsKIAogLyogVGFrZSB0aGUgY2FyIG9yIGNkciBvZiBz b21ldGhpbmcga25vd24gdG8gYmUgYSBjb25zIGNlbGwuICAqLwotLyogVGhlIF9BU19MVkFM VUUgbWFjcm9zIHNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlIG1pbmltYWwgc2V0 CisvKiBUaGUgX2FkZHIgZnVuY3Rpb25zIHNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2Yg dGhlIG1pbmltYWwgc2V0CiAgICBvZiBjb2RlIHRoYXQgaGFzIHRvIGtub3cgd2hhdCBhIGNv bnMgY2VsbCBsb29rcyBsaWtlLiAgT3RoZXIgY29kZSBub3QKICAgIHBhcnQgb2YgdGhlIGJh c2ljIGxpc3AgaW1wbGVtZW50YXRpb24gc2hvdWxkIGFzc3VtZSB0aGF0IHRoZSBjYXIgYW5k IGNkcgotICAgZmllbGRzIGFyZSBub3QgYWNjZXNzaWJsZSBhcyBsdmFsdWVzLiAgKFdoYXQg aWYgd2Ugd2FudCB0byBzd2l0Y2ggdG8KKyAgIGZpZWxkcyBhcmUgbm90IGFjY2Vzc2libGUu ICAoV2hhdCBpZiB3ZSB3YW50IHRvIHN3aXRjaCB0bwogICAgYSBjb3B5aW5nIGNvbGxlY3Rv ciBzb21lZGF5PyAgQ2FjaGVkIGNvbnMgY2VsbCBmaWVsZCBhZGRyZXNzZXMgbWF5IGJlCiAg ICBpbnZhbGlkYXRlZCBhdCBhcmJpdHJhcnkgcG9pbnRzLikgICovCi0jZGVmaW5lIFhDQVJf QVNfTFZBTFVFKGMpIChYQ09OUyAoYyktPmNhcikKLSNkZWZpbmUgWENEUl9BU19MVkFMVUUo YykgKFhDT05TIChjKS0+dS5jZHIpCitMSVNQX0lOTElORSBMaXNwX09iamVjdCAqCit4Y2Fy X2FkZHIgKExpc3BfT2JqZWN0IGMpCit7CisgIHJldHVybiAmWENPTlMgKGMpLT5jYXI7Cit9 CitMSVNQX0lOTElORSBMaXNwX09iamVjdCAqCit4Y2RyX2FkZHIgKExpc3BfT2JqZWN0IGMp Cit7CisgIHJldHVybiAmWENPTlMgKGMpLT51LmNkcjsKK30KIAogLyogVXNlIHRoZXNlIGZy b20gbm9ybWFsIGNvZGUuICAqLwotI2RlZmluZSBYQ0FSKGMpCUxJU1BfTUFLRV9SVkFMVUUg KFhDQVJfQVNfTFZBTFVFIChjKSkKLSNkZWZpbmUgWENEUihjKSBMSVNQX01BS0VfUlZBTFVF IChYQ0RSX0FTX0xWQUxVRSAoYykpCitMSVNQX01BQ1JPX0RFRlVOIChYQ0FSLCBMaXNwX09i amVjdCwgKExpc3BfT2JqZWN0IGMpLCAoYykpCitMSVNQX01BQ1JPX0RFRlVOIChYQ0RSLCBM aXNwX09iamVjdCwgKExpc3BfT2JqZWN0IGMpLCAoYykpCiAKIC8qIFVzZSB0aGVzZSB0byBz ZXQgdGhlIGZpZWxkcyBvZiBhIGNvbnMgY2VsbC4KIAogICAgTm90ZSB0aGF0IGJvdGggYXJn dW1lbnRzIG1heSByZWZlciB0byB0aGUgc2FtZSBvYmplY3QsIHNvICduJwotICAgc2hvdWxk IG5vdCBiZSByZWFkIGFmdGVyICdjJyBpcyBmaXJzdCBtb2RpZmllZC4gIEFsc28sIG5laXRo ZXIKLSAgIGFyZ3VtZW50IHNob3VsZCBiZSBldmFsdWF0ZWQgbW9yZSB0aGFuIG9uY2U7IHNp ZGUgZWZmZWN0cyBhcmUKLSAgIGVzcGVjaWFsbHkgY29tbW9uIGluIHRoZSBzZWNvbmQgYXJn dW1lbnQuICAqLwotI2RlZmluZSBYU0VUQ0FSKGMsbikgKFhDQVJfQVNfTFZBTFVFIChjKSA9 IChuKSkKLSNkZWZpbmUgWFNFVENEUihjLG4pIChYQ0RSX0FTX0xWQUxVRSAoYykgPSAobikp Ci0KLS8qIFRha2UgdGhlIGNhciBvciBjZHIgb2Ygc29tZXRoaW5nIHdob3NlIHR5cGUgaXMg bm90IGtub3duLiAgKi8KLSNkZWZpbmUgQ0FSKGMpCQkJCQlcCi0gKENPTlNQICgoYykpID8g WENBUiAoKGMpKQkJCVwKLSAgOiBOSUxQICgoYykpID8gUW5pbAkJCQlcCi0gIDogd3Jvbmdf dHlwZV9hcmd1bWVudCAoUWxpc3RwLCAoYykpKQotCi0jZGVmaW5lIENEUihjKQkJCQkJXAot IChDT05TUCAoKGMpKSA/IFhDRFIgKChjKSkJCQlcCi0gIDogTklMUCAoKGMpKSA/IFFuaWwJ CQkJXAotICA6IHdyb25nX3R5cGVfYXJndW1lbnQgKFFsaXN0cCwgKGMpKSkKLQotLyogVGFr ZSB0aGUgY2FyIG9yIGNkciBvZiBzb21ldGhpbmcgd2hvc2UgdHlwZSBpcyBub3Qga25vd24u ICAqLwotI2RlZmluZSBDQVJfU0FGRShjKQkJCQlcCi0gIChDT05TUCAoKGMpKSA/IFhDQVIg KChjKSkgOiBRbmlsKQotCi0jZGVmaW5lIENEUl9TQUZFKGMpCQkJCVwKLSAgKENPTlNQICgo YykpID8gWENEUiAoKGMpKSA6IFFuaWwpCisgICBzaG91bGQgbm90IGJlIHJlYWQgYWZ0ZXIg J2MnIGlzIGZpcnN0IG1vZGlmaWVkLiAgKi8KK0xJU1BfSU5MSU5FIHZvaWQKK1hTRVRDQVIg KExpc3BfT2JqZWN0IGMsIExpc3BfT2JqZWN0IG4pCit7CisgICp4Y2FyX2FkZHIgKGMpID0g bjsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK1hTRVRDRFIgKExpc3BfT2JqZWN0IGMsIExpc3Bf T2JqZWN0IG4pCit7CisgICp4Y2RyX2FkZHIgKGMpID0gbjsKK30KKworLyogVGFrZSB0aGUg Y2FyIG9yIGNkciBvZiBzb21ldGhpbmcgd2hvc2UgdHlwZSBpcyBub3Qga25vd24uICAqLwor TElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK0NBUiAoTGlzcF9PYmplY3QgYykKK3sKKyAgcmV0 dXJuIChDT05TUCAoYykgPyBYQ0FSIChjKQorCSAgOiBOSUxQIChjKSA/IFFuaWwKKwkgIDog d3JvbmdfdHlwZV9hcmd1bWVudCAoUWxpc3RwLCBjKSk7Cit9CitMSVNQX0lOTElORSBMaXNw X09iamVjdAorQ0RSIChMaXNwX09iamVjdCBjKQoreworICByZXR1cm4gKENPTlNQIChjKSA/ IFhDRFIgKGMpCisJICA6IE5JTFAgKGMpID8gUW5pbAorCSAgOiB3cm9uZ190eXBlX2FyZ3Vt ZW50IChRbGlzdHAsIGMpKTsKK30KKworLyogVGFrZSB0aGUgY2FyIG9yIGNkciBvZiBzb21l dGhpbmcgd2hvc2UgdHlwZSBpcyBub3Qga25vd24uICAqLworTElTUF9JTkxJTkUgTGlzcF9P YmplY3QKK0NBUl9TQUZFIChMaXNwX09iamVjdCBjKQoreworICByZXR1cm4gQ09OU1AgKGMp ID8gWENBUiAoYykgOiBRbmlsOworfQorTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK0NEUl9T QUZFIChMaXNwX09iamVjdCBjKQoreworICByZXR1cm4gQ09OU1AgKGMpID8gWENEUiAoYykg OiBRbmlsOworfQorCisvKiBJbiBhIHN0cmluZyBvciB2ZWN0b3IsIHRoZSBzaWduIGJpdCBv ZiB0aGUgYHNpemUnIGlzIHRoZSBnYyBtYXJrIGJpdC4gICovCisKK3N0cnVjdCBMaXNwX1N0 cmluZworICB7CisgICAgcHRyZGlmZl90IHNpemU7CisgICAgcHRyZGlmZl90IHNpemVfYnl0 ZTsKKyAgICBJTlRFUlZBTCBpbnRlcnZhbHM7CQkvKiBUZXh0IHByb3BlcnRpZXMgaW4gdGhp cyBzdHJpbmcuICAqLworICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CisgIH07CiAKIC8qIFRy dWUgaWYgU1RSIGlzIGEgbXVsdGlieXRlIHN0cmluZy4gICovCi0jZGVmaW5lIFNUUklOR19N VUxUSUJZVEUoU1RSKSAgXAotICAoWFNUUklORyAoU1RSKS0+c2l6ZV9ieXRlID49IDApCi0K LS8qIFJldHVybiB0aGUgbGVuZ3RoIGluIGJ5dGVzIG9mIFNUUi4gICovCi0KLSNpZmRlZiBH Q19DSEVDS19TVFJJTkdfQllURVMKLQotc3RydWN0IExpc3BfU3RyaW5nOwotZXh0ZXJuIHB0 cmRpZmZfdCBzdHJpbmdfYnl0ZXMgKHN0cnVjdCBMaXNwX1N0cmluZyAqKTsKLSNkZWZpbmUg U1RSSU5HX0JZVEVTKFMpIHN0cmluZ19ieXRlcyAoKFMpKQotCi0jZWxzZSAvKiBub3QgR0Nf Q0hFQ0tfU1RSSU5HX0JZVEVTICovCi0KLSNkZWZpbmUgU1RSSU5HX0JZVEVTKFNUUikgIFwK LSAgKChTVFIpLT5zaXplX2J5dGUgPCAwID8gKFNUUiktPnNpemUgOiAoU1RSKS0+c2l6ZV9i eXRlKQotCi0jZW5kaWYgLyogbm90IEdDX0NIRUNLX1NUUklOR19CWVRFUyAqLworTElTUF9J TkxJTkUgYm9vbAorU1RSSU5HX01VTFRJQllURSAoTGlzcF9PYmplY3Qgc3RyKQoreworICBy ZXR1cm4gMCA8PSBYU1RSSU5HIChzdHIpLT5zaXplX2J5dGU7Cit9CiAKIC8qIEFuIHVwcGVy IGJvdW5kIG9uIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBMaXNwIHN0cmluZywgbm90CiAg ICBjb3VudGluZyB0aGUgdGVybWluYXRpbmcgbnVsbC4gIFRoaXMgYSB0aWdodCBlbm91Z2gg Ym91bmQgdG8KQEAgLTgwMiwyMCArMTA0Niw2NSBAQAogICAgICAgKFNUUikgPSBlbXB0eV9t dWx0aWJ5dGVfc3RyaW5nOyAgXAogICAgIGVsc2UgWFNUUklORyAoU1RSKS0+c2l6ZV9ieXRl ID0gWFNUUklORyAoU1RSKS0+c2l6ZTsgfSB3aGlsZSAoMCkKIAotLyogSW4gYSBzdHJpbmcg b3IgdmVjdG9yLCB0aGUgc2lnbiBiaXQgb2YgdGhlIGBzaXplJyBpcyB0aGUgZ2MgbWFyayBi aXQuICAqLworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggTGlz cCBzdHJpbmdzLiAgKi8KIAotc3RydWN0IExpc3BfU3RyaW5nCi0gIHsKLSAgICBwdHJkaWZm X3Qgc2l6ZTsKLSAgICBwdHJkaWZmX3Qgc2l6ZV9ieXRlOwotICAgIElOVEVSVkFMIGludGVy dmFsczsJCS8qIFRleHQgcHJvcGVydGllcyBpbiB0aGlzIHN0cmluZy4gICovCi0gICAgdW5z aWduZWQgY2hhciAqZGF0YTsKLSAgfTsKK0xJU1BfSU5MSU5FIHVuc2lnbmVkIGNoYXIgKgor U0RBVEEgKExpc3BfT2JqZWN0IHN0cmluZykKK3sKKyAgcmV0dXJuIFhTVFJJTkcgKHN0cmlu ZyktPmRhdGE7Cit9CitMSVNQX0lOTElORSBjaGFyICoKK1NTREFUQSAoTGlzcF9PYmplY3Qg c3RyaW5nKQoreworICAvKiBBdm9pZCAiZGlmZmVyIGluIHNpZ24iIHdhcm5pbmdzLiAgKi8K KyAgcmV0dXJuIChjaGFyICopIFNEQVRBIChzdHJpbmcpOworfQorTElTUF9JTkxJTkUgdW5z aWduZWQgY2hhcgorU1JFRiAoTGlzcF9PYmplY3Qgc3RyaW5nLCBwdHJkaWZmX3QgaW5kZXgp Cit7CisgIHJldHVybiBTREFUQSAoc3RyaW5nKVtpbmRleF07Cit9CitMSVNQX0lOTElORSB2 b2lkCitTU0VUIChMaXNwX09iamVjdCBzdHJpbmcsIHB0cmRpZmZfdCBpbmRleCwgdW5zaWdu ZWQgY2hhciBuZXcpCit7CisgIFNEQVRBIChzdHJpbmcpW2luZGV4XSA9IG5ldzsKK30KK0xJ U1BfSU5MSU5FIHB0cmRpZmZfdAorU0NIQVJTIChMaXNwX09iamVjdCBzdHJpbmcpCit7Cisg IHJldHVybiBYU1RSSU5HIChzdHJpbmcpLT5zaXplOworfQorTElTUF9JTkxJTkUgcHRyZGlm Zl90CitTVFJJTkdfQllURVMgKHN0cnVjdCBMaXNwX1N0cmluZyAqcykKK3sKKyNpZmRlZiBH Q19DSEVDS19TVFJJTkdfQllURVMKKyAgZXh0ZXJuIHB0cmRpZmZfdCBzdHJpbmdfYnl0ZXMg KHN0cnVjdCBMaXNwX1N0cmluZyAqKTsKKyAgcmV0dXJuIHN0cmluZ19ieXRlcyAocyk7Cisj ZWxzZQorICByZXR1cm4gcy0+c2l6ZV9ieXRlIDwgMCA/IHMtPnNpemUgOiBzLT5zaXplX2J5 dGU7CisjZW5kaWYKK30KK0xJU1BfSU5MSU5FIHB0cmRpZmZfdAorU0JZVEVTIChMaXNwX09i amVjdCBzdHJpbmcpCit7CisgIHJldHVybiBTVFJJTkdfQllURVMgKFhTVFJJTkcgKHN0cmlu ZykpOworfQorTElTUF9JTkxJTkUgdm9pZAorU1RSSU5HX1NFVF9DSEFSUyAoTGlzcF9PYmpl Y3Qgc3RyaW5nLCBwdHJkaWZmX3QgbmV3c2l6ZSkKK3sKKyAgWFNUUklORyAoc3RyaW5nKS0+ c2l6ZSA9IG5ld3NpemU7Cit9CitMSVNQX0lOTElORSB2b2lkCitTVFJJTkdfQ09QWUlOIChM aXNwX09iamVjdCBzdHJpbmcsIHB0cmRpZmZfdCBpbmRleCwgY2hhciBjb25zdCAqbmV3LAor CSAgICAgICBwdHJkaWZmX3QgY291bnQpCit7CisgIG1lbWNweSAoU0RBVEEgKHN0cmluZykg KyBpbmRleCwgbmV3LCBjb3VudCk7Cit9CiAKIC8qIEhlYWRlciBvZiB2ZWN0b3ItbGlrZSBv YmplY3RzLiAgVGhpcyBkb2N1bWVudHMgdGhlIGxheW91dCBjb25zdHJhaW50cyBvbgogICAg dmVjdG9ycyBhbmQgcHNldWRvdmVjdG9ycyAob2JqZWN0cyBvZiBQVkVDX3h4eCBzdWJ0eXBl KS4gIEl0IGFsc28gcHJldmVudHMKLSAgIGNvbXBpbGVycyBmcm9tIGJlaW5nIGZvb2xlZCBi eSBFbWFjcydzIHR5cGUgcHVubmluZzogdGhlIFhTRVRQU0VVRE9WRUNUT1IKLSAgIGFuZCBQ U0VVRE9WRUNUT1JQIG1hY3JvcyBjYXN0IHRoZWlyIHBvaW50ZXJzIHRvIHN0cnVjdCB2ZWN0 b3JsaWtlX2hlYWRlciAqLAorICAgY29tcGlsZXJzIGZyb20gYmVpbmcgZm9vbGVkIGJ5IEVt YWNzJ3MgdHlwZSBwdW5uaW5nOiBYU0VUUFNFVURPVkVDVE9SCisgICBhbmQgUFNFVURPVkVD VE9SUCBjYXN0IHRoZWlyIHBvaW50ZXJzIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAq LAogICAgYmVjYXVzZSB3aGVuIHR3byBzdWNoIHBvaW50ZXJzIHBvdGVudGlhbGx5IGFsaWFz LCBhIGNvbXBpbGVyIHdvbid0CiAgICBpbmNvcnJlY3RseSByZW9yZGVyIGxvYWRzIGFuZCBz dG9yZXMgdG8gdGhlaXIgc2l6ZSBmaWVsZHMuICBTZWUKICAgIDxodHRwOi8vZGViYnVncy5n bnUub3JnL2NnaS9idWdyZXBvcnQuY2dpP2J1Zz04NTQ2Pi4gICovCkBAIC04NzQsNiArMTE2 Myw0MiBAQAogICAgIHdvcmRfc2l6ZSA9IHNpemVvZiAoTGlzcF9PYmplY3QpCiAgIH07CiAK Ky8qIENvbnZlbmllbmNlcyBmb3IgZGVhbGluZyB3aXRoIExpc3AgYXJyYXlzLiAgKi8KKwor TElTUF9JTkxJTkUgTGlzcF9PYmplY3QKK0FSRUYgKExpc3BfT2JqZWN0IGFycmF5LCBwdHJk aWZmX3QgaWR4KQoreworICByZXR1cm4gWFZFQ1RPUiAoYXJyYXkpLT5jb250ZW50c1tpZHhd OworfQorCitMSVNQX0lOTElORSBMaXNwX09iamVjdCAqCithcmVmX2FkZHIgKExpc3BfT2Jq ZWN0IGFycmF5LCBwdHJkaWZmX3QgaWR4KQoreworICByZXR1cm4gJiBYVkVDVE9SIChhcnJh eSktPmNvbnRlbnRzW2lkeF07Cit9CisKK0xJU1BfSU5MSU5FIHB0cmRpZmZfdAorQVNJWkUg KExpc3BfT2JqZWN0IGFycmF5KQoreworICByZXR1cm4gWFZFQ1RPUiAoYXJyYXkpLT5oZWFk ZXIuc2l6ZTsKK30KKworTElTUF9JTkxJTkUgdm9pZAorQVNFVCAoTGlzcF9PYmplY3QgYXJy YXksIHB0cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgZWFzc2VydCAoMCA8 PSBpZHggJiYgaWR4IDwgQVNJWkUgKGFycmF5KSk7CisgIFhWRUNUT1IgKGFycmF5KS0+Y29u dGVudHNbaWR4XSA9IHZhbDsKK30KKworTElTUF9JTkxJTkUgdm9pZAorZ2NfYXNldCAoTGlz cF9PYmplY3QgYXJyYXksIHB0cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAg LyogTGlrZSBBU0VULCBidXQgYWxzbyBjYW4gYmUgdXNlZCBpbiB0aGUgZ2FyYmFnZSBjb2xs ZWN0b3I6CisgICAgIHN3ZWVwX3dlYWtfdGFibGUgY2FsbHMgc2V0X2hhc2hfa2V5IGV0Yy4g d2hpbGUgdGhlIHRhYmxlIGlzIG1hcmtlZC4gICovCisgIGVhc3NlcnQgKDAgPD0gaWR4ICYm IGlkeCA8IChBU0laRSAoYXJyYXkpICYgfkFSUkFZX01BUktfRkxBRykpOworICBYVkVDVE9S IChhcnJheSktPmNvbnRlbnRzW2lkeF0gPSB2YWw7Cit9CisKIC8qIElmIGEgc3RydWN0IGlz IG1hZGUgdG8gbG9vayBsaWtlIGEgdmVjdG9yLCB0aGlzIG1hY3JvIHJldHVybnMgdGhlIGxl bmd0aAogICAgb2YgdGhlIHNob3J0ZXN0IHZlY3RvciB0aGF0IHdvdWxkIGhvbGQgdGhhdCBz dHJ1Y3QuICAqLwogCkBAIC04ODcsNDMgKzEyMTIsNiBAQAogI2RlZmluZSBQU0VVRE9WRUNT SVpFKHR5cGUsIG5vbmxpc3BmaWVsZCkJCQlcCiAgICgob2Zmc2V0b2YgKHR5cGUsIG5vbmxp c3BmaWVsZCkgLSBoZWFkZXJfc2l6ZSkgLyB3b3JkX3NpemUpCiAKLS8qIEEgY2hhci10YWJs ZSBpcyBhIGtpbmQgb2YgdmVjdG9ybGlrZSwgd2l0aCBjb250ZW50cyBhcmUgbGlrZSBhCi0g ICB2ZWN0b3IgYnV0IHdpdGggYSBmZXcgb3RoZXIgc2xvdHMuICBGb3Igc29tZSBwdXJwb3Nl cywgaXQgbWFrZXMKLSAgIHNlbnNlIHRvIGhhbmRsZSBhIGNoYXItdGFibGUgd2l0aCB0eXBl IHN0cnVjdCBMaXNwX1ZlY3Rvci4gIEFuCi0gICBlbGVtZW50IG9mIGEgY2hhciB0YWJsZSBj YW4gYmUgYW55IExpc3Agb2JqZWN0cywgYnV0IGlmIGl0IGlzIGEgc3ViCi0gICBjaGFyLXRh YmxlLCB3ZSB0cmVhdCBpdCBhIHRhYmxlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gb2Yg YQotICAgc3BlY2lmaWMgcmFuZ2Ugb2YgY2hhcmFjdGVycy4gIEEgc3ViIGNoYXItdGFibGUg aGFzIHRoZSBzYW1lCi0gICBzdHJ1Y3R1cmUgYXMgYSB2ZWN0b3IuICBBIHN1YiBjaGFyIHRh YmxlIGFwcGVhcnMgb25seSBpbiBhbiBlbGVtZW50Ci0gICBvZiBhIGNoYXItdGFibGUsIGFu ZCB0aGVyZSdzIG5vIHdheSB0byBhY2Nlc3MgaXQgZGlyZWN0bHkgZnJvbQotICAgRW1hY3Mg TGlzcCBwcm9ncmFtLiAgKi8KLQotI2lmZGVmIF9fR05VQ19fCi0KLSNkZWZpbmUgQ0hBUl9U QUJMRV9SRUZfQVNDSUkoQ1QsIElEWCkJCQkJCVwKLSAgKHtzdHJ1Y3QgTGlzcF9DaGFyX1Rh YmxlICpfdGJsID0gTlVMTDsJCQkJXAotICAgIExpc3BfT2JqZWN0IF92YWw7CQkJCQkJCVwK LSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICBfdGJsID0gX3RibCA/IFhDSEFSX1RBQkxFIChf dGJsLT5wYXJlbnQpIDogWENIQVJfVEFCTEUgKENUKTsJXAotICAgICAgX3ZhbCA9ICghIFNV Ql9DSEFSX1RBQkxFX1AgKF90YmwtPmFzY2lpKSA/IF90YmwtPmFzY2lpCQlcCi0JICAgICAg OiBYU1VCX0NIQVJfVEFCTEUgKF90YmwtPmFzY2lpKS0+Y29udGVudHNbSURYXSk7CQlcCi0g ICAgICBpZiAoTklMUCAoX3ZhbCkpCQkJCQkJCVwKLQlfdmFsID0gX3RibC0+ZGVmYWx0OwkJ CQkJCVwKLSAgICB9IHdoaWxlIChOSUxQIChfdmFsKSAmJiAhIE5JTFAgKF90YmwtPnBhcmVu dCkpOwkJCVwKLSAgICBfdmFsOyB9KQotCi0jZWxzZSAgLyogbm90IF9fR05VQ19fICovCi0K LSNkZWZpbmUgQ0hBUl9UQUJMRV9SRUZfQVNDSUkoQ1QsIElEWCkJCQkJCSAgXAotICAoISBO SUxQIChYQ0hBUl9UQUJMRSAoQ1QpLT5hc2NpaSkJCQkJCSAgXAotICAgPyAoISBTVUJfQ0hB Ul9UQUJMRV9QIChYQ0hBUl9UQUJMRSAoQ1QpLT5hc2NpaSkJCQkgIFwKLSAgICAgID8gWENI QVJfVEFCTEUgKENUKS0+YXNjaWkJCQkJCQkgIFwKLSAgICAgIDogISBOSUxQIChYU1VCX0NI QVJfVEFCTEUgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKS0+Y29udGVudHNbSURYXSkgXAot ICAgICAgPyBYU1VCX0NIQVJfVEFCTEUgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKS0+Y29u dGVudHNbSURYXQkgIFwKLSAgICAgIDogY2hhcl90YWJsZV9yZWYgKChDVCksIChJRFgpKSkJ CQkJCSAgXAotICAgOiAgY2hhcl90YWJsZV9yZWYgKChDVCksIChJRFgpKSkKLQotI2VuZGlm CS8qIG5vdCBfX0dOVUNfXyAqLwotCiAvKiBDb21wdXRlIEEgT1AgQiwgdXNpbmcgdGhlIHVu c2lnbmVkIGNvbXBhcmlzb24gb3BlcmF0b3IgT1AuICBBIGFuZCBCCiAgICBzaG91bGQgYmUg aW50ZWdlciBleHByZXNzaW9ucy4gIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzCiAgICBtYXRo ZW1hdGljYWwgY29tcGFyaXNvbjsgZm9yIGV4YW1wbGUsIFVOU0lHTkVEX0NNUCAoMCwgPCwg LTEpCkBAIC05MzcsMTggKzEyMjUsMTUgQEAKIC8qIE5vbnplcm8gaWZmIEMgaXMgYW4gQVND SUkgY2hhcmFjdGVyLiAgKi8KICNkZWZpbmUgQVNDSUlfQ0hBUl9QKGMpIFVOU0lHTkVEX0NN UCAoYywgPCwgMHg4MCkKIAotLyogQWxtb3N0IGVxdWl2YWxlbnQgdG8gRmFyZWYgKENULCBJ RFgpIHdpdGggb3B0aW1pemF0aW9uIGZvciBBU0NJSQotICAgY2hhcmFjdGVycy4gIERvIG5v dCBjaGVjayB2YWxpZGl0eSBvZiBDVC4gICovCi0jZGVmaW5lIENIQVJfVEFCTEVfUkVGKENU LCBJRFgpCQkJCQlcCi0gIChBU0NJSV9DSEFSX1AgKElEWCkgPyBDSEFSX1RBQkxFX1JFRl9B U0NJSSAoKENUKSwgKElEWCkpCVwKLSAgIDogY2hhcl90YWJsZV9yZWYgKChDVCksIChJRFgp KSkKLQotLyogRXF1aXZhbGVudCB0byBGYXNldCAoQ1QsIElEWCwgVkFMKSB3aXRoIG9wdGlt aXphdGlvbiBmb3IgQVNDSUkgYW5kCi0gICA4LWJpdCBFdXJvcGVhbiBjaGFyYWN0ZXJzLiAg RG8gbm90IGNoZWNrIHZhbGlkaXR5IG9mIENULiAgKi8KLSNkZWZpbmUgQ0hBUl9UQUJMRV9T RVQoQ1QsIElEWCwgVkFMKQkJCQkJXAotICAoQVNDSUlfQ0hBUl9QIChJRFgpICYmIFNVQl9D SEFSX1RBQkxFX1AgKFhDSEFSX1RBQkxFIChDVCktPmFzY2lpKQlcCi0gICA/IHNldF9zdWJf Y2hhcl90YWJsZV9jb250ZW50cyAoWENIQVJfVEFCTEUgKENUKS0+YXNjaWksIElEWCwgVkFM KQlcCi0gICA6IGNoYXJfdGFibGVfc2V0IChDVCwgSURYLCBWQUwpKQorLyogQSBjaGFyLXRh YmxlIGlzIGEga2luZCBvZiB2ZWN0b3JsaWtlLCB3aXRoIGNvbnRlbnRzIGFyZSBsaWtlIGEK KyAgIHZlY3RvciBidXQgd2l0aCBhIGZldyBvdGhlciBzbG90cy4gIEZvciBzb21lIHB1cnBv c2VzLCBpdCBtYWtlcworICAgc2Vuc2UgdG8gaGFuZGxlIGEgY2hhci10YWJsZSB3aXRoIHR5 cGUgc3RydWN0IExpc3BfVmVjdG9yLiAgQW4KKyAgIGVsZW1lbnQgb2YgYSBjaGFyIHRhYmxl IGNhbiBiZSBhbnkgTGlzcCBvYmplY3RzLCBidXQgaWYgaXQgaXMgYSBzdWIKKyAgIGNoYXIt dGFibGUsIHdlIHRyZWF0IGl0IGEgdGFibGUgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBv ZiBhCisgICBzcGVjaWZpYyByYW5nZSBvZiBjaGFyYWN0ZXJzLiAgQSBzdWIgY2hhci10YWJs ZSBoYXMgdGhlIHNhbWUKKyAgIHN0cnVjdHVyZSBhcyBhIHZlY3Rvci4gIEEgc3ViIGNoYXIg dGFibGUgYXBwZWFycyBvbmx5IGluIGFuIGVsZW1lbnQKKyAgIG9mIGEgY2hhci10YWJsZSwg YW5kIHRoZXJlJ3Mgbm8gd2F5IHRvIGFjY2VzcyBpdCBkaXJlY3RseSBmcm9tCisgICBFbWFj cyBMaXNwIHByb2dyYW0uICAqLwogCiBlbnVtIENIQVJUQUJfU0laRV9CSVRTCiAgIHsKQEAg LTEwMTIsNiArMTI5Nyw0NSBAQAogICAgIExpc3BfT2JqZWN0IGNvbnRlbnRzWzFdOwogICB9 OwogCitMSVNQX0lOTElORSBMaXNwX09iamVjdAorQ0hBUl9UQUJMRV9SRUZfQVNDSUkgKExp c3BfT2JqZWN0IGN0LCBwdHJkaWZmX3QgaWR4KQoreworICBzdHJ1Y3QgTGlzcF9DaGFyX1Rh YmxlICp0YmwgPSBOVUxMOworICBMaXNwX09iamVjdCB2YWw7CisgIGRvCisgICAgeworICAg ICAgdGJsID0gdGJsID8gWENIQVJfVEFCTEUgKHRibC0+cGFyZW50KSA6IFhDSEFSX1RBQkxF IChjdCk7CisgICAgICB2YWwgPSAoISBTVUJfQ0hBUl9UQUJMRV9QICh0YmwtPmFzY2lpKSA/ IHRibC0+YXNjaWkKKwkgICAgIDogWFNVQl9DSEFSX1RBQkxFICh0YmwtPmFzY2lpKS0+Y29u dGVudHNbaWR4XSk7CisgICAgICBpZiAoTklMUCAodmFsKSkKKwl2YWwgPSB0YmwtPmRlZmFs dDsKKyAgICB9CisgIHdoaWxlIChOSUxQICh2YWwpICYmICEgTklMUCAodGJsLT5wYXJlbnQp KTsKKworICByZXR1cm4gdmFsOworfQorCisvKiBBbG1vc3QgZXF1aXZhbGVudCB0byBGYXJl ZiAoQ1QsIElEWCkgd2l0aCBvcHRpbWl6YXRpb24gZm9yIEFTQ0lJCisgICBjaGFyYWN0ZXJz LiAgRG8gbm90IGNoZWNrIHZhbGlkaXR5IG9mIENULiAgKi8KK0xJU1BfSU5MSU5FIExpc3Bf T2JqZWN0CitDSEFSX1RBQkxFX1JFRiAoTGlzcF9PYmplY3QgY3QsIGludCBpZHgpCit7Cisg IHJldHVybiAoQVNDSUlfQ0hBUl9QIChpZHgpCisJICA/IENIQVJfVEFCTEVfUkVGX0FTQ0lJ IChjdCwgaWR4KQorCSAgOiBjaGFyX3RhYmxlX3JlZiAoY3QsIGlkeCkpOworfQorCisvKiBF cXVpdmFsZW50IHRvIEZhc2V0IChDVCwgSURYLCBWQUwpIHdpdGggb3B0aW1pemF0aW9uIGZv ciBBU0NJSSBhbmQKKyAgIDgtYml0IEV1cm9wZWFuIGNoYXJhY3RlcnMuICBEbyBub3QgY2hl Y2sgdmFsaWRpdHkgb2YgQ1QuICAqLworTElTUF9JTkxJTkUgdm9pZAorQ0hBUl9UQUJMRV9T RVQgKExpc3BfT2JqZWN0IGN0LCBpbnQgaWR4LCBMaXNwX09iamVjdCB2YWwpCit7CisgIGlm IChBU0NJSV9DSEFSX1AgKGlkeCkgJiYgU1VCX0NIQVJfVEFCTEVfUCAoWENIQVJfVEFCTEUg KGN0KS0+YXNjaWkpKQorICAgIHNldF9zdWJfY2hhcl90YWJsZV9jb250ZW50cyAoWENIQVJf VEFCTEUgKGN0KS0+YXNjaWksIGlkeCwgdmFsKTsKKyAgZWxzZQorICAgIGNoYXJfdGFibGVf c2V0IChjdCwgaWR4LCB2YWwpOworfQorCiAvKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMg YSBidWlsdC1pbiBmdW5jdGlvbi4KICAgIEl0IGlzIGdlbmVyYXRlZCBieSB0aGUgREVGVU4g bWFjcm8gb25seS4KICAgIGRlZnN1YnIgbWFrZXMgaXQgaW50byBhIExpc3Agb2JqZWN0LiAg Ki8KQEAgLTEwNDgsOCArMTM3MiwxMiBAQAogCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiAi ZXh0cmEiIHNsb3RzIGluIHRoZSBjaGFyIHRhYmxlIENULiAgKi8KIAotI2RlZmluZSBDSEFS X1RBQkxFX0VYVFJBX1NMT1RTKENUKQlcCi0gICgoKENUKS0+aGVhZGVyLnNpemUgJiBQU0VV RE9WRUNUT1JfU0laRV9NQVNLKSAtIENIQVJfVEFCTEVfU1RBTkRBUkRfU0xPVFMpCitMSVNQ X0lOTElORSBpbnQKK0NIQVJfVEFCTEVfRVhUUkFfU0xPVFMgKHN0cnVjdCBMaXNwX0NoYXJf VGFibGUgKmN0KQoreworICByZXR1cm4gKChjdC0+aGVhZGVyLnNpemUgJiBQU0VVRE9WRUNU T1JfU0laRV9NQVNLKQorCSAgLSBDSEFSX1RBQkxFX1NUQU5EQVJEX1NMT1RTKTsKK30KIAog DAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTIxLDQwICsxNDQ5LDc2IEBACiAKIC8qIFZh bHVlIGlzIG5hbWUgb2Ygc3ltYm9sLiAgKi8KIAotI2RlZmluZSBTWU1CT0xfVkFMKHN5bSkJ CQkJCQkJXAotICAoZWFzc2VydCAoKHN5bSktPnJlZGlyZWN0ID09IFNZTUJPTF9QTEFJTlZB TCksICBzeW0tPnZhbC52YWx1ZSkKLSNkZWZpbmUgU1lNQk9MX0FMSUFTKHN5bSkJCQkJCQlc Ci0gIChlYXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX1ZBUkFMSUFTKSwgIChz eW0pLT52YWwuYWxpYXMpCi0jZGVmaW5lIFNZTUJPTF9CTFYoc3ltKQkJCQkJCQlcCi0gIChl YXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX0xPQ0FMSVpFRCksIChzeW0pLT52 YWwuYmx2KQotI2RlZmluZSBTWU1CT0xfRldEKHN5bSkJCQkJCQkJXAotICAoZWFzc2VydCAo KHN5bSktPnJlZGlyZWN0ID09IFNZTUJPTF9GT1JXQVJERUQpLCAoc3ltKS0+dmFsLmZ3ZCkK LSNkZWZpbmUgU0VUX1NZTUJPTF9WQUwoc3ltLCB2KQkJCQkJCVwKLSAgKGVhc3NlcnQgKChz eW0pLT5yZWRpcmVjdCA9PSBTWU1CT0xfUExBSU5WQUwpLCAgKHN5bSktPnZhbC52YWx1ZSA9 ICh2KSkKLSNkZWZpbmUgU0VUX1NZTUJPTF9BTElBUyhzeW0sIHYpCQkJCQlcCi0gIChlYXNz ZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX1ZBUkFMSUFTKSwgIChzeW0pLT52YWwu YWxpYXMgPSAodikpCi0jZGVmaW5lIFNFVF9TWU1CT0xfQkxWKHN5bSwgdikJCQkJCQlcCi0g IChlYXNzZXJ0ICgoc3ltKS0+cmVkaXJlY3QgPT0gU1lNQk9MX0xPQ0FMSVpFRCksIChzeW0p LT52YWwuYmx2ID0gKHYpKQotI2RlZmluZSBTRVRfU1lNQk9MX0ZXRChzeW0sIHYpCQkJCQkJ XAotICAoZWFzc2VydCAoKHN5bSktPnJlZGlyZWN0ID09IFNZTUJPTF9GT1JXQVJERUQpLCAo c3ltKS0+dmFsLmZ3ZCA9ICh2KSkKLQotI2RlZmluZSBTWU1CT0xfTkFNRShzeW0pIFhTWU1C T0wgKHN5bSktPm5hbWUKLQotLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgU1lNIGlzIGFuIGlu dGVybmVkIHN5bWJvbC4gICovCi0KLSNkZWZpbmUgU1lNQk9MX0lOVEVSTkVEX1Aoc3ltKQkJ CQlcCi0gIChYU1lNQk9MIChzeW0pLT5pbnRlcm5lZCAhPSBTWU1CT0xfVU5JTlRFUk5FRCkK LQotLyogVmFsdWUgaXMgbm9uLXplcm8gaWYgU1lNIGlzIGludGVybmVkIGluIGluaXRpYWxf b2JhcnJheS4gICovCi0KLSNkZWZpbmUgU1lNQk9MX0lOVEVSTkVEX0lOX0lOSVRJQUxfT0JB UlJBWV9QKHN5bSkJCQlcCi0gIChYU1lNQk9MIChzeW0pLT5pbnRlcm5lZCA9PSBTWU1CT0xf SU5URVJORURfSU5fSU5JVElBTF9PQkFSUkFZKQorTElTUF9NQUNST19ERUZVTiAoU1lNQk9M X1ZBTCwgTGlzcF9PYmplY3QsIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSksIChzeW0pKQor CitMSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9TeW1ib2wgKgorU1lNQk9MX0FMSUFTIChzdHJ1 Y3QgTGlzcF9TeW1ib2wgKnN5bSkKK3sKKyAgZWFzc2VydCAoc3ltLT5yZWRpcmVjdCA9PSBT WU1CT0xfVkFSQUxJQVMpOworICByZXR1cm4gc3ltLT52YWwuYWxpYXM7Cit9CitMSVNQX0lO TElORSBzdHJ1Y3QgTGlzcF9CdWZmZXJfTG9jYWxfVmFsdWUgKgorU1lNQk9MX0JMViAoc3Ry dWN0IExpc3BfU3ltYm9sICpzeW0pCit7CisgIGVhc3NlcnQgKHN5bS0+cmVkaXJlY3QgPT0g U1lNQk9MX0xPQ0FMSVpFRCk7CisgIHJldHVybiBzeW0tPnZhbC5ibHY7Cit9CitMSVNQX0lO TElORSB1bmlvbiBMaXNwX0Z3ZCAqCitTWU1CT0xfRldEIChzdHJ1Y3QgTGlzcF9TeW1ib2wg KnN5bSkKK3sKKyAgZWFzc2VydCAoc3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xfRk9SV0FSREVE KTsKKyAgcmV0dXJuIHN5bS0+dmFsLmZ3ZDsKK30KKworTElTUF9NQUNST19ERUZVTl9WT0lE IChTRVRfU1lNQk9MX1ZBTCwKKwkJICAgICAgIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSwg TGlzcF9PYmplY3QgdiksIChzeW0sIHYpKQorCitMSVNQX0lOTElORSB2b2lkCitTRVRfU1lN Qk9MX0FMSUFTIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSwgc3RydWN0IExpc3BfU3ltYm9s ICp2KQoreworICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9WQVJBTElBUyk7 CisgIHN5bS0+dmFsLmFsaWFzID0gdjsKK30KK0xJU1BfSU5MSU5FIHZvaWQKK1NFVF9TWU1C T0xfQkxWIChzdHJ1Y3QgTGlzcF9TeW1ib2wgKnN5bSwgc3RydWN0IExpc3BfQnVmZmVyX0xv Y2FsX1ZhbHVlICp2KQoreworICBlYXNzZXJ0IChzeW0tPnJlZGlyZWN0ID09IFNZTUJPTF9M T0NBTElaRUQpOworICBzeW0tPnZhbC5ibHYgPSB2OworfQorTElTUF9JTkxJTkUgdm9pZAor U0VUX1NZTUJPTF9GV0QgKHN0cnVjdCBMaXNwX1N5bWJvbCAqc3ltLCB1bmlvbiBMaXNwX0Z3 ZCAqdikKK3sKKyAgZWFzc2VydCAoc3ltLT5yZWRpcmVjdCA9PSBTWU1CT0xfRk9SV0FSREVE KTsKKyAgc3ltLT52YWwuZndkID0gdjsKK30KKworTElTUF9JTkxJTkUgTGlzcF9PYmplY3QK K1NZTUJPTF9OQU1FIChMaXNwX09iamVjdCBzeW0pCit7CisgIHJldHVybiBYU1lNQk9MIChz eW0pLT5uYW1lOworfQorCisvKiBWYWx1ZSBpcyB0cnVlIGlmIFNZTSBpcyBhbiBpbnRlcm5l ZCBzeW1ib2wuICAqLworCitMSVNQX0lOTElORSBib29sCitTWU1CT0xfSU5URVJORURfUCAo TGlzcF9PYmplY3Qgc3ltKQoreworICByZXR1cm4gWFNZTUJPTCAoc3ltKS0+aW50ZXJuZWQg IT0gU1lNQk9MX1VOSU5URVJORUQ7Cit9CisKKy8qIFZhbHVlIGlzIHRydWUgaWYgU1lNIGlz IGludGVybmVkIGluIGluaXRpYWxfb2JhcnJheS4gICovCisKK0xJU1BfSU5MSU5FIGJvb2wK K1NZTUJPTF9JTlRFUk5FRF9JTl9JTklUSUFMX09CQVJSQVlfUCAoTGlzcF9PYmplY3Qgc3lt KQoreworICByZXR1cm4gWFNZTUJPTCAoc3ltKS0+aW50ZXJuZWQgPT0gU1lNQk9MX0lOVEVS TkVEX0lOX0lOSVRJQUxfT0JBUlJBWTsKK30KIAogLyogVmFsdWUgaXMgbm9uLXplcm8gaWYg c3ltYm9sIGlzIGNvbnNpZGVyZWQgYSBjb25zdGFudCwgaS5lLiBpdHMKICAgIHZhbHVlIGNh bm5vdCBiZSBjaGFuZ2VkICh0aGVyZSBpcyBhbiBleGNlcHRpb24gZm9yIGtleXdvcmQgc3lt Ym9scywKICAgIHdob3NlIHZhbHVlIGNhbiBiZSBzZXQgdG8gdGhlIGtleXdvcmQgc3ltYm9s IGl0c2VsZikuICAqLwogCi0jZGVmaW5lIFNZTUJPTF9DT05TVEFOVF9QKHN5bSkgWFNZTUJP TCAoc3ltKS0+Y29uc3RhbnQKK0xJU1BfTUFDUk9fREVGVU4gKFNZTUJPTF9DT05TVEFOVF9Q LCBpbnQsIChMaXNwX09iamVjdCBzeW0pLCAoc3ltKSkKIAogI2RlZmluZSBERUZTWU0oc3lt LCBuYW1lKQkJCQkJCVwKICAgZG8geyAoc3ltKSA9IGludGVybl9jX3N0cmluZyAoKG5hbWUp KTsgc3RhdGljcHJvICgmKHN5bSkpOyB9IHdoaWxlICgwKQpAQCAtMTI0MCw0MiArMTYwNCw2 NCBAQAogfTsKIAogCi0jZGVmaW5lIFhIQVNIX1RBQkxFKE9CSikgXAotICAgICAoKHN0cnVj dCBMaXNwX0hhc2hfVGFibGUgKikgWFVOVEFHIChPQkosIExpc3BfVmVjdG9ybGlrZSkpCitM SVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICoKK1hIQVNIX1RBQkxFIChMaXNw X09iamVjdCBhKQoreworICByZXR1cm4gWFVOVEFHIChhLCBMaXNwX1ZlY3Rvcmxpa2UpOwor fQogCiAjZGVmaW5lIFhTRVRfSEFTSF9UQUJMRShWQVIsIFBUUikgXAogICAgICAoWFNFVFBT RVVET1ZFQ1RPUiAoVkFSLCBQVFIsIFBWRUNfSEFTSF9UQUJMRSkpCiAKLSNkZWZpbmUgSEFT SF9UQUJMRV9QKE9CSikgIFBTRVVET1ZFQ1RPUlAgKE9CSiwgUFZFQ19IQVNIX1RBQkxFKQot Ci0jZGVmaW5lIENIRUNLX0hBU0hfVEFCTEUoeCkgXAotICBDSEVDS19UWVBFIChIQVNIX1RB QkxFX1AgKHgpLCBRaGFzaF90YWJsZV9wLCB4KQorTElTUF9JTkxJTkUgYm9vbAorSEFTSF9U QUJMRV9QIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwg UFZFQ19IQVNIX1RBQkxFKTsKK30KIAogLyogVmFsdWUgaXMgdGhlIGtleSBwYXJ0IG9mIGVu dHJ5IElEWCBpbiBoYXNoIHRhYmxlIEguICAqLwotCi0jZGVmaW5lIEhBU0hfS0VZKEgsIElE WCkgICBBUkVGICgoSCktPmtleV9hbmRfdmFsdWUsIDIgKiAoSURYKSkKK0xJU1BfSU5MSU5F IExpc3BfT2JqZWN0CitIQVNIX0tFWSAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgcHRy ZGlmZl90IGlkeCkKK3sKKyAgcmV0dXJuIEFSRUYgKGgtPmtleV9hbmRfdmFsdWUsIDIgKiBp ZHgpOworfQogCiAvKiBWYWx1ZSBpcyB0aGUgdmFsdWUgcGFydCBvZiBlbnRyeSBJRFggaW4g aGFzaCB0YWJsZSBILiAgKi8KLQotI2RlZmluZSBIQVNIX1ZBTFVFKEgsIElEWCkgQVJFRiAo KEgpLT5rZXlfYW5kX3ZhbHVlLCAyICogKElEWCkgKyAxKQorTElTUF9JTkxJTkUgTGlzcF9P YmplY3QKK0hBU0hfVkFMVUUgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIHB0cmRpZmZf dCBpZHgpCit7CisgIHJldHVybiBBUkVGIChoLT5rZXlfYW5kX3ZhbHVlLCAyICogaWR4ICsg MSk7Cit9CiAKIC8qIFZhbHVlIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBlbnRyeSBmb2xs b3dpbmcgdGhlIG9uZSBhdCBJRFgKICAgIGluIGhhc2ggdGFibGUgSC4gICovCi0KLSNkZWZp bmUgSEFTSF9ORVhUKEgsIElEWCkgIEFSRUYgKChIKS0+bmV4dCwgKElEWCkpCitMSVNQX0lO TElORSBMaXNwX09iamVjdAorSEFTSF9ORVhUIChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpo LCBwdHJkaWZmX3QgaWR4KQoreworICByZXR1cm4gQVJFRiAoaC0+bmV4dCwgaWR4KTsKK30K IAogLyogVmFsdWUgaXMgdGhlIGhhc2ggY29kZSBjb21wdXRlZCBmb3IgZW50cnkgSURYIGlu IGhhc2ggdGFibGUgSC4gICovCi0KLSNkZWZpbmUgSEFTSF9IQVNIKEgsIElEWCkgIEFSRUYg KChIKS0+aGFzaCwgKElEWCkpCitMSVNQX0lOTElORSBMaXNwX09iamVjdAorSEFTSF9IQVNI IChzdHJ1Y3QgTGlzcF9IYXNoX1RhYmxlICpoLCBwdHJkaWZmX3QgaWR4KQoreworICByZXR1 cm4gQVJFRiAoaC0+aGFzaCwgaWR4KTsKK30KIAogLyogVmFsdWUgaXMgdGhlIGluZGV4IG9m IHRoZSBlbGVtZW50IGluIGhhc2ggdGFibGUgSCB0aGF0IGlzIHRoZQogICAgc3RhcnQgb2Yg dGhlIGNvbGxpc2lvbiBsaXN0IGF0IGluZGV4IElEWCBpbiB0aGUgaW5kZXggdmVjdG9yIG9m IEguICAqLwotCi0jZGVmaW5lIEhBU0hfSU5ERVgoSCwgSURYKSAgQVJFRiAoKEgpLT5pbmRl eCwgKElEWCkpCitMSVNQX0lOTElORSBMaXNwX09iamVjdAorSEFTSF9JTkRFWCAoc3RydWN0 IExpc3BfSGFzaF9UYWJsZSAqaCwgcHRyZGlmZl90IGlkeCkKK3sKKyAgcmV0dXJuIEFSRUYg KGgtPmluZGV4LCBpZHgpOworfQogCiAvKiBWYWx1ZSBpcyB0aGUgc2l6ZSBvZiBoYXNoIHRh YmxlIEguICAqLwotCi0jZGVmaW5lIEhBU0hfVEFCTEVfU0laRShIKSBBU0laRSAoKEgpLT5u ZXh0KQorTElTUF9JTkxJTkUgcHRyZGlmZl90CitIQVNIX1RBQkxFX1NJWkUgKHN0cnVjdCBM aXNwX0hhc2hfVGFibGUgKmgpCit7CisgIHJldHVybiBBU0laRSAoaC0+bmV4dCk7Cit9CiAK IC8qIERlZmF1bHQgc2l6ZSBmb3IgaGFzaCB0YWJsZXMgaWYgbm90IHNwZWNpZmllZC4gICov CiAKQEAgLTE0ODUsNiArMTg3MSw1MyBAQAogICAgIH0gZGF0YVtTQVZFX1ZBTFVFX1NMT1RT XTsKICAgfTsKIAorLyogUmV0dXJuIHRoZSB0eXBlIG9mIFYncyBOdGggc2F2ZWQgdmFsdWUu ICAqLworTElTUF9JTkxJTkUgaW50CitzYXZlX3R5cGUgKHN0cnVjdCBMaXNwX1NhdmVfVmFs dWUgKnYsIGludCBuKQoreworICBlYXNzZXJ0ICgwIDw9IG4gJiYgbiA8IFNBVkVfVkFMVUVf U0xPVFMpOworICByZXR1cm4gKHYtPnNhdmVfdHlwZSA+PiAoU0FWRV9TTE9UX0JJVFMgKiBu KSAmICgoMSA8PCBTQVZFX1NMT1RfQklUUykgLSAxKSk7Cit9CisKKy8qIEdldCBhbmQgc2V0 IHRoZSBOdGggc2F2ZWQgcG9pbnRlci4gICovCisKK0xJU1BfSU5MSU5FIHZvaWQgKgorWFNB VkVfUE9JTlRFUiAoTGlzcF9PYmplY3Qgb2JqLCBpbnQgbikKK3sKKyAgZWFzc2VydCAoc2F2 ZV90eXBlIChYU0FWRV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9QT0lOVEVSKTsKKyAgcmV0 dXJuIFhTQVZFX1ZBTFVFIChvYmopLT5kYXRhW25dLnBvaW50ZXI7OworfQorTElTUF9JTkxJ TkUgdm9pZAorc2V0X3NhdmVfcG9pbnRlciAoTGlzcF9PYmplY3Qgb2JqLCBpbnQgbiwgdm9p ZCAqdmFsKQoreworICBlYXNzZXJ0IChzYXZlX3R5cGUgKFhTQVZFX1ZBTFVFIChvYmopLCBu KSA9PSBTQVZFX1BPSU5URVIpOworICBYU0FWRV9WQUxVRSAob2JqKS0+ZGF0YVtuXS5wb2lu dGVyID0gdmFsOworfQorCisvKiBMaWtld2lzZSBmb3IgdGhlIHNhdmVkIGludGVnZXIuICAq LworCitMSVNQX0lOTElORSBwdHJkaWZmX3QKK1hTQVZFX0lOVEVHRVIgKExpc3BfT2JqZWN0 IG9iaiwgaW50IG4pCit7CisgIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVfVkFMVUUgKG9i aiksIG4pID09IFNBVkVfSU5URUdFUik7CisgIHJldHVybiBYU0FWRV9WQUxVRSAob2JqKS0+ ZGF0YVtuXS5pbnRlZ2VyOworfQorTElTUF9JTkxJTkUgdm9pZAorc2V0X3NhdmVfaW50ZWdl ciAoTGlzcF9PYmplY3Qgb2JqLCBpbnQgbiwgcHRyZGlmZl90IHZhbCkKK3sKKyAgZWFzc2Vy dCAoc2F2ZV90eXBlIChYU0FWRV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9JTlRFR0VSKTsK KyAgWFNBVkVfVkFMVUUgKG9iaiktPmRhdGFbbl0uaW50ZWdlciA9IHZhbDsKK30KKworLyog RXh0cmFjdCBOdGggc2F2ZWQgb2JqZWN0LiAgKi8KKworTElTUF9JTkxJTkUgTGlzcF9PYmpl Y3QKK1hTQVZFX09CSkVDVCAoTGlzcF9PYmplY3Qgb2JqLCBpbnQgbikKK3sKKyAgZWFzc2Vy dCAoc2F2ZV90eXBlIChYU0FWRV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9PQkpFQ1QpOwor ICByZXR1cm4gWFNBVkVfVkFMVUUgKG9iaiktPmRhdGFbbl0ub2JqZWN0OworfQorCiAvKiBB IG1pc2NlbGxhbmVvdXMgb2JqZWN0LCB3aGVuIGl0J3Mgb24gdGhlIGZyZWUgbGlzdC4gICov CiBzdHJ1Y3QgTGlzcF9GcmVlCiAgIHsKQEAgLTE1MDYsNiArMTkzOSw0NiBAQAogICAgIHN0 cnVjdCBMaXNwX1NhdmVfVmFsdWUgdV9zYXZlX3ZhbHVlOwogICB9OwogCitMSVNQX0lOTElO RSB1bmlvbiBMaXNwX01pc2MgKgorWE1JU0MgKExpc3BfT2JqZWN0IGEpCit7CisgIHJldHVy biBYVU5UQUcgKGEsIExpc3BfTWlzYyk7Cit9CisKK0xJU1BfSU5MSU5FIHN0cnVjdCBMaXNw X01pc2NfQW55ICoKK1hNSVNDQU5ZIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChN SVNDUCAoYSkpOworICByZXR1cm4gJiBYTUlTQyAoYSktPnVfYW55OworfQorCitMSVNQX0lO TElORSBlbnVtIExpc3BfTWlzY19UeXBlCitYTUlTQ1RZUEUgKExpc3BfT2JqZWN0IGEpCit7 CisgIHJldHVybiBYTUlTQ0FOWSAoYSktPnR5cGU7Cit9CisKK0xJU1BfSU5MSU5FIHN0cnVj dCBMaXNwX01hcmtlciAqCitYTUFSS0VSIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0 IChNQVJLRVJQIChhKSk7CisgIHJldHVybiAmIFhNSVNDIChhKS0+dV9tYXJrZXI7Cit9CisK K0xJU1BfSU5MSU5FIHN0cnVjdCBMaXNwX092ZXJsYXkgKgorWE9WRVJMQVkgKExpc3BfT2Jq ZWN0IGEpCit7CisgIGVhc3NlcnQgKE9WRVJMQVlQIChhKSk7CisgIHJldHVybiAmIFhNSVND IChhKS0+dV9vdmVybGF5OworfQorCitMSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9TYXZlX1Zh bHVlICoKK1hTQVZFX1ZBTFVFIChMaXNwX09iamVjdCBhKQoreworICBlYXNzZXJ0IChTQVZF X1ZBTFVFUCAoYSkpOworICByZXR1cm4gJiBYTUlTQyAoYSktPnVfc2F2ZV92YWx1ZTsKK30K KwwKIC8qIEZvcndhcmRpbmcgcG9pbnRlciB0byBhbiBpbnQgdmFyaWFibGUuCiAgICBUaGlz IGlzIGFsbG93ZWQgb25seSBpbiB0aGUgdmFsdWUgY2VsbCBvZiBhIHN5bWJvbCwKICAgIGFu ZCBpdCBtZWFucyB0aGF0IHRoZSBzeW1ib2wncyB2YWx1ZSByZWFsbHkgbGl2ZXMgaW4gdGhl CkBAIC0xNjEyLDYgKzIwODUsMTkgQEAKICAgICBzdHJ1Y3QgTGlzcF9CdWZmZXJfT2JqZndk IHVfYnVmZmVyX29iamZ3ZDsKICAgICBzdHJ1Y3QgTGlzcF9LYm9hcmRfT2JqZndkIHVfa2Jv YXJkX29iamZ3ZDsKICAgfTsKKworTElTUF9JTkxJTkUgZW51bSBMaXNwX0Z3ZF9UeXBlCitY RldEVFlQRSAodW5pb24gTGlzcF9Gd2QgKmEpCit7CisgIHJldHVybiBhLT51X2ludGZ3ZC50 eXBlOworfQorCitMSVNQX0lOTElORSBzdHJ1Y3QgTGlzcF9CdWZmZXJfT2JqZndkICoKK1hC VUZGRVJfT0JKRldEICh1bmlvbiBMaXNwX0Z3ZCAqYSkKK3sKKyAgZWFzc2VydCAoQlVGRkVS X09CSkZXRFAgKGEpKTsKKyAgcmV0dXJuICZhLT51X2J1ZmZlcl9vYmpmd2Q7Cit9CiAMCiAv KiBMaXNwIGZsb2F0aW5nIHBvaW50IHR5cGUuICAqLwogc3RydWN0IExpc3BfRmxvYXQKQEAg LTE2MjMsOCArMjEwOSwxMSBAQAogICAgIH0gdTsKICAgfTsKIAotI2RlZmluZSBYRkxPQVRf REFUQShmKSAoMCA/IFhGTE9BVCAoZiktPnUuZGF0YSA6ICBYRkxPQVQgKGYpLT51LmRhdGEp Ci0jZGVmaW5lIFhGTE9BVF9JTklUKGYsIG4pIChYRkxPQVQgKGYpLT51LmRhdGEgPSAobikp CitMSVNQX0lOTElORSBkb3VibGUKK1hGTE9BVF9EQVRBIChMaXNwX09iamVjdCBmKQorewor ICByZXR1cm4gWEZMT0FUIChmKS0+dS5kYXRhOworfQogCiAvKiBNb3N0IGhvc3RzIG5vd2Fk YXlzIHVzZSBJRUVFIGZsb2F0aW5nIHBvaW50LCBzbyB0aGV5IHVzZSBJRUMgNjA1NTkKICAg IHJlcHJlc2VudGF0aW9ucywgaGF2ZSBpbmZpbml0aWVzIGFuZCBOYU5zLCBhbmQgZG8gbm90 IHRyYXAgb24KQEAgLTE2MzMsOCArMjEyMiwxMiBAQAogICAgd2FudGVkIGhlcmUsIGJ1dCBp cyBub3QgcXVpdGUgcmlnaHQgYmVjYXVzZSBFbWFjcyBkb2VzIG5vdCByZXF1aXJlCiAgICBh bGwgdGhlIGZlYXR1cmVzIG9mIEMxMSBBbm5leCBGIChhbmQgZG9lcyBub3QgcmVxdWlyZSBD MTEgYXQgYWxsLAogICAgZm9yIHRoYXQgbWF0dGVyKS4gICovCi0jZGVmaW5lIElFRUVfRkxP QVRJTkdfUE9JTlQgKEZMVF9SQURJWCA9PSAyICYmIEZMVF9NQU5UX0RJRyA9PSAyNCBcCi0J CQkgICAgICYmIEZMVF9NSU5fRVhQID09IC0xMjUgJiYgRkxUX01BWF9FWFAgPT0gMTI4KQor ZW51bQorICB7CisgICAgSUVFRV9GTE9BVElOR19QT0lOVAorICAgICAgPSAoRkxUX1JBRElY ID09IDIgJiYgRkxUX01BTlRfRElHID09IDI0CisJICYmIEZMVF9NSU5fRVhQID09IC0xMjUg JiYgRkxUX01BWF9FWFAgPT0gMTI4KQorICB9OwogCiAvKiBBIGNoYXJhY3RlciwgZGVjbGFy ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHR5cGVkZWYsIGlzIGEgbWVtYmVyCiAgICBvZiBzb21l IGNoYXJhY3RlciBzZXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGJ1ZmZlci4gICov CkBAIC0xNjc1LDY0ICsyMTY4LDYgQEAKICAgICAgICBpdHNlbGYuICAqLwogICAgIENIQVJB Q1RFUkJJVFMgPSAyMgogICB9OwotCi0KLQotDAotLyogVGhlIGdseXBoIGRhdGF0eXBlLCB1 c2VkIHRvIHJlcHJlc2VudCBjaGFyYWN0ZXJzIG9uIHRoZSBkaXNwbGF5LgotICAgSXQgY29u c2lzdHMgb2YgYSBjaGFyIGNvZGUgYW5kIGEgZmFjZSBpZC4gICovCi0KLXR5cGVkZWYgc3Ry dWN0IHsKLSAgaW50IGNoOwotICBpbnQgZmFjZV9pZDsKLX0gR0xZUEg7Ci0KLS8qIFJldHVy biBhIGdseXBoJ3MgY2hhcmFjdGVyIGNvZGUuICAqLwotI2RlZmluZSBHTFlQSF9DSEFSKGds eXBoKSAoKGdseXBoKS5jaCkKLQotLyogUmV0dXJuIGEgZ2x5cGgncyBmYWNlIElELiAgKi8K LSNkZWZpbmUgR0xZUEhfRkFDRShnbHlwaCkgKChnbHlwaCkuZmFjZV9pZCkKLQotI2RlZmlu ZSBTRVRfR0xZUEhfQ0hBUihnbHlwaCwgY2hhcikgKChnbHlwaCkuY2ggPSAoY2hhcikpCi0j ZGVmaW5lIFNFVF9HTFlQSF9GQUNFKGdseXBoLCBmYWNlKSAoKGdseXBoKS5mYWNlX2lkID0g KGZhY2UpKQotI2RlZmluZSBTRVRfR0xZUEgoZ2x5cGgsIGNoYXIsIGZhY2UpICgoZ2x5cGgp LmNoID0gKGNoYXIpLCAoZ2x5cGgpLmZhY2VfaWQgPSAoZmFjZSkpCi0KLS8qIFJldHVybiAx IGlmIEdMWVBIIGNvbnRhaW5zIHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgKi8KLSNkZWZpbmUg R0xZUEhfQ0hBUl9WQUxJRF9QKGdseXBoKSBDSEFSX1ZBTElEX1AgKEdMWVBIX0NIQVIgKGds eXBoKSkKLQotCi0vKiBHbHlwaCBDb2RlIGZyb20gYSBkaXNwbGF5IHZlY3RvciBtYXkgZWl0 aGVyIGJlIGFuIGludGVnZXIgd2hpY2gKLSAgIGVuY29kZXMgYSBjaGFyIGNvZGUgaW4gdGhl IGxvd2VyIENIQVJBQ1RFUkJJVFMgYml0cyBhbmQgYSAodmVyeSBzbWFsbCkKLSAgIGZhY2Ut aWQgaW4gdGhlIHVwcGVyIGJpdHMsIG9yIGl0IG1heSBiZSBhIGNvbnMgKENIQVIgLiBGQUNF LUlEKS4gICovCi0KLSNkZWZpbmUgR0xZUEhfQ09ERV9QKGdjKQkJCQkJCVwKLSAgKENPTlNQ IChnYykJCQkJCQkJCVwKLSAgID8gKENIQVJBQ1RFUlAgKFhDQVIgKGdjKSkJCQkJCQlcCi0g ICAgICAmJiBSQU5HRURfSU5URUdFUlAgKDAsIFhDRFIgKGdjKSwgTUFYX0ZBQ0VfSUQpKQkJ CVwKLSAgIDogKFJBTkdFRF9JTlRFR0VSUAkJCQkJCQlcCi0gICAgICAoMCwgZ2MsCQkJCQkJ CQlcCi0gICAgICAgKE1BWF9GQUNFX0lEIDwgVFlQRV9NQVhJTVVNIChFTUFDU19JTlQpID4+ IENIQVJBQ1RFUkJJVFMJCVwKLQk/ICgoRU1BQ1NfSU5UKSBNQVhfRkFDRV9JRCA8PCBDSEFS QUNURVJCSVRTKSB8IE1BWF9DSEFSCQlcCi0JOiBUWVBFX01BWElNVU0gKEVNQUNTX0lOVCkp KSkpCi0KLS8qIFRoZSBmb2xsb3dpbmcgYXJlIHZhbGlkIG9ubHkgaWYgR0xZUEhfQ09ERV9Q IChnYykuICAqLwotCi0jZGVmaW5lIEdMWVBIX0NPREVfQ0hBUihnYykgXAotICAoQ09OU1Ag KGdjKSA/IFhJTlQgKFhDQVIgKGdjKSkgOiBYSU5UIChnYykgJiAoKDEgPDwgQ0hBUkFDVEVS QklUUykgLSAxKSkKLQotI2RlZmluZSBHTFlQSF9DT0RFX0ZBQ0UoZ2MpIFwKLSAgKENPTlNQ IChnYykgPyBYSU5UIChYQ0RSIChnYykpIDogWElOVCAoZ2MpID4+IENIQVJBQ1RFUkJJVFMp Ci0KLSNkZWZpbmUgU0VUX0dMWVBIX0ZST01fR0xZUEhfQ09ERShnbHlwaCwgZ2MpCQkJCVwK LSAgZG8JCQkJCQkJCQlcCi0gICAgewkJCQkJCQkJCVwKLSAgICAgIGlmIChDT05TUCAoZ2Mp KQkJCQkJCQlcCi0JU0VUX0dMWVBIIChnbHlwaCwgWElOVCAoWENBUiAoZ2MpKSwgWElOVCAo WENEUiAoZ2MpKSk7CQlcCi0gICAgICBlbHNlCQkJCQkJCQlcCi0JU0VUX0dMWVBIIChnbHlw aCwgKFhJTlQgKGdjKSAmICgoMSA8PCBDSEFSQUNURVJCSVRTKS0xKSksCVwKLQkJICAgKFhJ TlQgKGdjKSA+PiBDSEFSQUNURVJCSVRTKSk7CQkJXAotICAgIH0JCQkJCQkJCQlcCi0gIHdo aWxlICgwKQogDAogLyogU3RydWN0dXJlIHRvIGhvbGQgbW91c2UgaGlnaGxpZ2h0IGRhdGEu ICBUaGlzIGlzIGhlcmUgYmVjYXVzZSBvdGhlcgogICAgaGVhZGVyIGZpbGVzIG5lZWQgaXQg Zm9yIGRlZmluaW5nIHN0cnVjdCB4X291dHB1dCBldGMuICAqLwpAQCAtMTc2OCwxOTAgKzIy MDMsMjM1IEBACiAMCiAvKiBEYXRhIHR5cGUgY2hlY2tpbmcuICAqLwogCi0jZGVmaW5lIE5J TFAoeCkgIEVRICh4LCBRbmlsKQotCi0jZGVmaW5lIE5VTUJFUlAoeCkgKElOVEVHRVJQICh4 KSB8fCBGTE9BVFAgKHgpKQotI2RlZmluZSBOQVROVU1QKHgpIChJTlRFR0VSUCAoeCkgJiYg WElOVCAoeCkgPj0gMCkKLQotI2RlZmluZSBSQU5HRURfSU5URUdFUlAobG8sIHgsIGhpKSBc Ci0gIChJTlRFR0VSUCAoeCkgJiYgKGxvKSA8PSBYSU5UICh4KSAmJiBYSU5UICh4KSA8PSAo aGkpKQorTElTUF9NQUNST19ERUZVTiAoTklMUCwgYm9vbCwgKExpc3BfT2JqZWN0IHgpLCAo eCkpCisKK0xJU1BfSU5MSU5FIGJvb2wKK05VTUJFUlAgKExpc3BfT2JqZWN0IHgpCit7Cisg IHJldHVybiBJTlRFR0VSUCAoeCkgfHwgRkxPQVRQICh4KTsKK30KK0xJU1BfSU5MSU5FIGJv b2wKK05BVE5VTVAgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBJTlRFR0VSUCAoeCkg JiYgMCA8PSBYSU5UICh4KTsKK30KKworTElTUF9JTkxJTkUgYm9vbAorUkFOR0VEX0lOVEVH RVJQIChpbnRtYXhfdCBsbywgTGlzcF9PYmplY3QgeCwgaW50bWF4X3QgaGkpCit7CisgIHJl dHVybiBJTlRFR0VSUCAoeCkgJiYgbG8gPD0gWElOVCAoeCkgJiYgWElOVCAoeCkgPD0gaGk7 Cit9CisKICNkZWZpbmUgVFlQRV9SQU5HRURfSU5URUdFUlAodHlwZSwgeCkgXAotICAoVFlQ RV9TSUdORUQgKHR5cGUpCQkJCQkJCVwKLSAgID8gUkFOR0VEX0lOVEVHRVJQIChUWVBFX01J TklNVU0gKHR5cGUpLCB4LCBUWVBFX01BWElNVU0gKHR5cGUpKQlcCi0gICA6IFJBTkdFRF9J TlRFR0VSUCAoMCwgeCwgVFlQRV9NQVhJTVVNICh0eXBlKSkpCi0KLSNkZWZpbmUgSU5URUdF UlAoeCkgKExJU1BfSU5UX1RBR19QIChYVFlQRSAoKHgpKSkpCi0jZGVmaW5lIFNZTUJPTFAo eCkgKFhUWVBFICgoeCkpID09IExpc3BfU3ltYm9sKQotI2RlZmluZSBNSVNDUCh4KSAoWFRZ UEUgKCh4KSkgPT0gTGlzcF9NaXNjKQotI2RlZmluZSBWRUNUT1JMSUtFUCh4KSAoWFRZUEUg KCh4KSkgPT0gTGlzcF9WZWN0b3JsaWtlKQotI2RlZmluZSBTVFJJTkdQKHgpIChYVFlQRSAo KHgpKSA9PSBMaXNwX1N0cmluZykKLSNkZWZpbmUgQ09OU1AoeCkgKFhUWVBFICgoeCkpID09 IExpc3BfQ29ucykKLQotI2RlZmluZSBGTE9BVFAoeCkgKFhUWVBFICgoeCkpID09IExpc3Bf RmxvYXQpCi0jZGVmaW5lIFZFQ1RPUlAoeCkgKFZFQ1RPUkxJS0VQICh4KSAmJiAhKEFTSVpF ICh4KSAmIFBTRVVET1ZFQ1RPUl9GTEFHKSkKLSNkZWZpbmUgT1ZFUkxBWVAoeCkgKE1JU0NQ ICh4KSAmJiBYTUlTQ1RZUEUgKHgpID09IExpc3BfTWlzY19PdmVybGF5KQotI2RlZmluZSBN QVJLRVJQKHgpIChNSVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfTWFy a2VyKQotCisgIChJTlRFR0VSUCAoeCkJCQkgICAgICBcCisgICAmJiAoVFlQRV9TSUdORUQg KHR5cGUpID8gVFlQRV9NSU5JTVVNICh0eXBlKSA8PSBYSU5UICh4KSA6IDAgPD0gWElOVCAo eCkpIFwKKyAgICYmIFhJTlQgKHgpIDw9IFRZUEVfTUFYSU1VTSAodHlwZSkpCisKK0xJU1Bf TUFDUk9fREVGVU4gKENPTlNQLCBib29sLCAoTGlzcF9PYmplY3QgeCksICh4KSkKK0xJU1Bf TUFDUk9fREVGVU4gKEZMT0FUUCwgYm9vbCwgKExpc3BfT2JqZWN0IHgpLCAoeCkpCitMSVNQ X01BQ1JPX0RFRlVOIChNSVNDUCwgYm9vbCwgKExpc3BfT2JqZWN0IHgpLCAoeCkpCitMSVNQ X01BQ1JPX0RFRlVOIChTWU1CT0xQLCBib29sLCAoTGlzcF9PYmplY3QgeCksICh4KSkKK0xJ U1BfTUFDUk9fREVGVU4gKElOVEVHRVJQLCBib29sLCAoTGlzcF9PYmplY3QgeCksICh4KSkK K0xJU1BfTUFDUk9fREVGVU4gKFZFQ1RPUkxJS0VQLCBib29sLCAoTGlzcF9PYmplY3QgeCks ICh4KSkKK0xJU1BfTUFDUk9fREVGVU4gKE1BUktFUlAsIGJvb2wsIChMaXNwX09iamVjdCB4 KSwgKHgpKQorCitMSVNQX0lOTElORSBib29sCitTVFJJTkdQIChMaXNwX09iamVjdCB4KQor eworICByZXR1cm4gWFRZUEUgKHgpID09IExpc3BfU3RyaW5nOworfQorTElTUF9JTkxJTkUg Ym9vbAorVkVDVE9SUCAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIFZFQ1RPUkxJS0VQ ICh4KSAmJiAhIChBU0laRSAoeCkgJiBQU0VVRE9WRUNUT1JfRkxBRyk7Cit9CitMSVNQX0lO TElORSBib29sCitPVkVSTEFZUCAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIE1JU0NQ ICh4KSAmJiBYTUlTQ1RZUEUgKHgpID09IExpc3BfTWlzY19PdmVybGF5OworfQogTElTUF9J TkxJTkUgYm9vbAogU0FWRV9WQUxVRVAgKExpc3BfT2JqZWN0IHgpCiB7CiAgIHJldHVybiBN SVNDUCAoeCkgJiYgWE1JU0NUWVBFICh4KSA9PSBMaXNwX01pc2NfU2F2ZV9WYWx1ZTsKIH0K IAotTElTUF9JTkxJTkUgc3RydWN0IExpc3BfU2F2ZV9WYWx1ZSAqCi1YU0FWRV9WQUxVRSAo TGlzcF9PYmplY3QgYSkKLXsKLSAgZWFzc2VydCAoU0FWRV9WQUxVRVAgKGEpKTsKLSAgcmV0 dXJuICYgWE1JU0MgKGEpLT51X3NhdmVfdmFsdWU7Ci19Ci0KLS8qIFJldHVybiB0aGUgdHlw ZSBvZiBWJ3MgTnRoIHNhdmVkIHZhbHVlLiAgKi8KLUxJU1BfSU5MSU5FIGludAotc2F2ZV90 eXBlIChzdHJ1Y3QgTGlzcF9TYXZlX1ZhbHVlICp2LCBpbnQgbikKLXsKLSAgZWFzc2VydCAo MCA8PSBuICYmIG4gPCBTQVZFX1ZBTFVFX1NMT1RTKTsKLSAgcmV0dXJuICh2LT5zYXZlX3R5 cGUgPj4gKFNBVkVfU0xPVF9CSVRTICogbikgJiAoKDEgPDwgU0FWRV9TTE9UX0JJVFMpIC0g MSkpOwotfQotCi0vKiBHZXQgYW5kIHNldCB0aGUgTnRoIHNhdmVkIHBvaW50ZXIuICAqLwot Ci1MSVNQX0lOTElORSB2b2lkICoKLVhTQVZFX1BPSU5URVIgKExpc3BfT2JqZWN0IG9iaiwg aW50IG4pCi17Ci0gIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVfVkFMVUUgKG9iaiksIG4p ID09IFNBVkVfUE9JTlRFUik7Ci0gIHJldHVybiBYU0FWRV9WQUxVRSAob2JqKS0+ZGF0YVtu XS5wb2ludGVyOzsKLX0KLUxJU1BfSU5MSU5FIHZvaWQKLXNldF9zYXZlX3BvaW50ZXIgKExp c3BfT2JqZWN0IG9iaiwgaW50IG4sIHZvaWQgKnZhbCkKLXsKLSAgZWFzc2VydCAoc2F2ZV90 eXBlIChYU0FWRV9WQUxVRSAob2JqKSwgbikgPT0gU0FWRV9QT0lOVEVSKTsKLSAgWFNBVkVf VkFMVUUgKG9iaiktPmRhdGFbbl0ucG9pbnRlciA9IHZhbDsKLX0KLQotLyogTGlrZXdpc2Ug Zm9yIHRoZSBzYXZlZCBpbnRlZ2VyLiAgKi8KLQotTElTUF9JTkxJTkUgcHRyZGlmZl90Ci1Y U0FWRV9JTlRFR0VSIChMaXNwX09iamVjdCBvYmosIGludCBuKQotewotICBlYXNzZXJ0IChz YXZlX3R5cGUgKFhTQVZFX1ZBTFVFIChvYmopLCBuKSA9PSBTQVZFX0lOVEVHRVIpOwotICBy ZXR1cm4gWFNBVkVfVkFMVUUgKG9iaiktPmRhdGFbbl0uaW50ZWdlcjsKLX0KLUxJU1BfSU5M SU5FIHZvaWQKLXNldF9zYXZlX2ludGVnZXIgKExpc3BfT2JqZWN0IG9iaiwgaW50IG4sIHB0 cmRpZmZfdCB2YWwpCi17Ci0gIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVfVkFMVUUgKG9i aiksIG4pID09IFNBVkVfSU5URUdFUik7Ci0gIFhTQVZFX1ZBTFVFIChvYmopLT5kYXRhW25d LmludGVnZXIgPSB2YWw7Ci19Ci0KLS8qIEV4dHJhY3QgTnRoIHNhdmVkIG9iamVjdC4gICov Ci0KLUxJU1BfSU5MSU5FIExpc3BfT2JqZWN0Ci1YU0FWRV9PQkpFQ1QgKExpc3BfT2JqZWN0 IG9iaiwgaW50IG4pCi17Ci0gIGVhc3NlcnQgKHNhdmVfdHlwZSAoWFNBVkVfVkFMVUUgKG9i aiksIG4pID09IFNBVkVfT0JKRUNUKTsKLSAgcmV0dXJuIFhTQVZFX1ZBTFVFIChvYmopLT5k YXRhW25dLm9iamVjdDsKLX0KLQotI2RlZmluZSBBVVRPTE9BRFAoeCkgKENPTlNQICh4KSAm JiBFUSAoUWF1dG9sb2FkLCBYQ0FSICh4KSkpCi0KLSNkZWZpbmUgSU5URldEUCh4KSAoWEZX RFRZUEUgKHgpID09IExpc3BfRndkX0ludCkKLSNkZWZpbmUgQk9PTEZXRFAoeCkgKFhGV0RU WVBFICh4KSA9PSBMaXNwX0Z3ZF9Cb29sKQotI2RlZmluZSBPQkpGV0RQKHgpIChYRldEVFlQ RSAoeCkgPT0gTGlzcF9Gd2RfT2JqKQotI2RlZmluZSBCVUZGRVJfT0JKRldEUCh4KSAoWEZX RFRZUEUgKHgpID09IExpc3BfRndkX0J1ZmZlcl9PYmopCi0jZGVmaW5lIEtCT0FSRF9PQkpG V0RQKHgpIChYRldEVFlQRSAoeCkgPT0gTGlzcF9Gd2RfS2JvYXJkX09iaikKLQotLyogVHJ1 ZSBpZiBvYmplY3QgWCBpcyBhIHBzZXVkb3ZlY3RvciB3aG9zZSBjb2RlIGlzIENPREUuICBU aGUgY2FzdCB0byBzdHJ1Y3QKLSAgIHZlY3Rvcmxpa2VfaGVhZGVyICogYXZvaWRzIGFsaWFz aW5nIGlzc3Vlcy4gICovCi0jZGVmaW5lIFBTRVVET1ZFQ1RPUlAoeCwgY29kZSkJCQkJCVwK LSAgVFlQRURfUFNFVURPVkVDVE9SUCAoeCwgdmVjdG9ybGlrZV9oZWFkZXIsIGNvZGUpCi0K LSNkZWZpbmUgUFNFVURPVkVDVE9SX1RZUEVQKHYsIGNvZGUpCQkJCQlcCi0gICgoKHYpLT5z aXplICYgKFBTRVVET1ZFQ1RPUl9GTEFHIHwgUFZFQ19UWVBFX01BU0spKQkJCVwKLSAgID09 IChQU0VVRE9WRUNUT1JfRkxBRyB8ICgoY29kZSkgPDwgUFNFVURPVkVDVE9SX0FSRUFfQklU UykpKQotCi0vKiBUcnVlIGlmIG9iamVjdCBYLCB3aXRoIGludGVybmFsIHR5cGUgc3RydWN0 IFQgKiwgaXMgYSBwc2V1ZG92ZWN0b3Igd2hvc2UKLSAgIGNvZGUgaXMgQ09ERS4gICovCi0j ZGVmaW5lIFRZUEVEX1BTRVVET1ZFQ1RPUlAoeCwgdCwgY29kZSkJCQkJXAotICAoVkVDVE9S TElLRVAgKHgpCQkJCQkJXAotICAgJiYgUFNFVURPVkVDVE9SX1RZUEVQICgoc3RydWN0IHQg KikgWFVOVEFHICh4LCBMaXNwX1ZlY3Rvcmxpa2UpLCBjb2RlKSkKK0xJU1BfSU5MSU5FIGJv b2wKK0FVVE9MT0FEUCAoTGlzcF9PYmplY3QgeCkKK3sKKyAgcmV0dXJuIENPTlNQICh4KSAm JiBFUSAoUWF1dG9sb2FkLCBYQ0FSICh4KSk7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wKK0JV RkZFUl9PQkpGV0RQICh1bmlvbiBMaXNwX0Z3ZCAqYSkKK3sKKyAgcmV0dXJuIFhGV0RUWVBF IChhKSA9PSBMaXNwX0Z3ZF9CdWZmZXJfT2JqOworfQorCitMSVNQX0lOTElORSBib29sCitQ U0VVRE9WRUNUT1JfVFlQRVAgKHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAqYSwgaW50IGNv ZGUpCit7CisgIHJldHVybiAoKGEtPnNpemUgJiAoUFNFVURPVkVDVE9SX0ZMQUcgfCBQVkVD X1RZUEVfTUFTSykpCisJICA9PSAoUFNFVURPVkVDVE9SX0ZMQUcgfCAoY29kZSA8PCBQU0VV RE9WRUNUT1JfQVJFQV9CSVRTKSkpOworfQorCisvKiBUcnVlIGlmIEEgaXMgYSBwc2V1ZG92 ZWN0b3Igd2hvc2UgY29kZSBpcyBDT0RFLiAgKi8KK0xJU1BfSU5MSU5FIGJvb2wKK1BTRVVE T1ZFQ1RPUlAgKExpc3BfT2JqZWN0IGEsIGludCBjb2RlKQoreworICBpZiAoISBWRUNUT1JM SUtFUCAoYSkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBDb252 ZXJ0aW5nIHRvIHN0cnVjdCB2ZWN0b3JsaWtlX2hlYWRlciAqIGF2b2lkcyBhbGlhc2luZyBp c3N1ZXMuICAqLworICAgICAgc3RydWN0IHZlY3Rvcmxpa2VfaGVhZGVyICpoID0gWFVOVEFH IChhLCBMaXNwX1ZlY3Rvcmxpa2UpOworICAgICAgcmV0dXJuIFBTRVVET1ZFQ1RPUl9UWVBF UCAoaCwgY29kZSk7CisgICAgfQorfQorCiAKIC8qIFRlc3QgZm9yIHNwZWNpZmljIHBzZXVk b3ZlY3RvciB0eXBlcy4gICovCi0jZGVmaW5lIFdJTkRPV19DT05GSUdVUkFUSU9OUCh4KSBQ U0VVRE9WRUNUT1JQICh4LCBQVkVDX1dJTkRPV19DT05GSUdVUkFUSU9OKQotI2RlZmluZSBQ Uk9DRVNTUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1BST0NFU1MpCi0jZGVmaW5lIFdJ TkRPV1AoeCkgUFNFVURPVkVDVE9SUCAoeCwgUFZFQ19XSU5ET1cpCi0jZGVmaW5lIFRFUk1J TkFMUCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1RFUk1JTkFMKQotI2RlZmluZSBTVUJS UCh4KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX1NVQlIpCi0jZGVmaW5lIENPTVBJTEVEUCh4 KSBQU0VVRE9WRUNUT1JQICh4LCBQVkVDX0NPTVBJTEVEKQotI2RlZmluZSBCVUZGRVJQKHgp IFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfQlVGRkVSKQotI2RlZmluZSBDSEFSX1RBQkxFX1Ao eCkgUFNFVURPVkVDVE9SUCAoeCwgUFZFQ19DSEFSX1RBQkxFKQotI2RlZmluZSBTVUJfQ0hB Ul9UQUJMRV9QKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfU1VCX0NIQVJfVEFCTEUpCi0j ZGVmaW5lIEJPT0xfVkVDVE9SX1AoeCkgUFNFVURPVkVDVE9SUCAoeCwgUFZFQ19CT09MX1ZF Q1RPUikKLSNkZWZpbmUgRlJBTUVQKHgpIFBTRVVET1ZFQ1RPUlAgKHgsIFBWRUNfRlJBTUUp CisKK0xJU1BfSU5MSU5FIGJvb2wKK1dJTkRPV19DT05GSUdVUkFUSU9OUCAoTGlzcF9PYmpl Y3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNfV0lORE9XX0NPTkZJ R1VSQVRJT04pOworfQorCitMSVNQX0lOTElORSBib29sCitQUk9DRVNTUCAoTGlzcF9PYmpl Y3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNfUFJPQ0VTUyk7Cit9 CisKK0xJU1BfSU5MSU5FIGJvb2wKK1dJTkRPV1AgKExpc3BfT2JqZWN0IGEpCit7CisgIHJl dHVybiBQU0VVRE9WRUNUT1JQIChhLCBQVkVDX1dJTkRPVyk7Cit9CisKK0xJU1BfSU5MSU5F IGJvb2wKK1RFUk1JTkFMUCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZF Q1RPUlAgKGEsIFBWRUNfVEVSTUlOQUwpOworfQorCitMSVNQX0lOTElORSBib29sCitTVUJS UCAoTGlzcF9PYmplY3QgYSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNf U1VCUik7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wKK0NPTVBJTEVEUCAoTGlzcF9PYmplY3Qg YSkKK3sKKyAgcmV0dXJuIFBTRVVET1ZFQ1RPUlAgKGEsIFBWRUNfQ09NUElMRUQpOworfQor CitMSVNQX0lOTElORSBib29sCitCVUZGRVJQIChMaXNwX09iamVjdCBhKQoreworICByZXR1 cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZFQ19CVUZGRVIpOworfQorCitMSVNQX0lOTElORSBi b29sCitDSEFSX1RBQkxFX1AgKExpc3BfT2JqZWN0IGEpCit7CisgIHJldHVybiBQU0VVRE9W RUNUT1JQIChhLCBQVkVDX0NIQVJfVEFCTEUpOworfQorCitMSVNQX0lOTElORSBib29sCitT VUJfQ0hBUl9UQUJMRV9QIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVD VE9SUCAoYSwgUFZFQ19TVUJfQ0hBUl9UQUJMRSk7Cit9CisKK0xJU1BfSU5MSU5FIGJvb2wK K0JPT0xfVkVDVE9SX1AgKExpc3BfT2JqZWN0IGEpCit7CisgIHJldHVybiBQU0VVRE9WRUNU T1JQIChhLCBQVkVDX0JPT0xfVkVDVE9SKTsKK30KKworTElTUF9JTkxJTkUgYm9vbAorRlJB TUVQIChMaXNwX09iamVjdCBhKQoreworICByZXR1cm4gUFNFVURPVkVDVE9SUCAoYSwgUFZF Q19GUkFNRSk7Cit9CiAKIC8qIFRlc3QgZm9yIGltYWdlIChpbWFnZSAuIHNwZWMpICAqLwot I2RlZmluZSBJTUFHRVAoeCkgKENPTlNQICh4KSAmJiBFUSAoWENBUiAoeCksIFFpbWFnZSkp CitMSVNQX0lOTElORSBib29sCitJTUFHRVAgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVy biBDT05TUCAoeCkgJiYgRVEgKFhDQVIgKHgpLCBRaW1hZ2UpOworfQogCiAvKiBBcnJheSB0 eXBlcy4gICovCi0KLSNkZWZpbmUgQVJSQVlQKHgpIFwKLSAgKFZFQ1RPUlAgKHgpIHx8IFNU UklOR1AgKHgpIHx8IENIQVJfVEFCTEVfUCAoeCkgfHwgQk9PTF9WRUNUT1JfUCAoeCkpCitM SVNQX0lOTElORSBib29sCitBUlJBWVAgKExpc3BfT2JqZWN0IHgpCit7CisgIHJldHVybiBW RUNUT1JQICh4KSB8fCBTVFJJTkdQICh4KSB8fCBDSEFSX1RBQkxFX1AgKHgpIHx8IEJPT0xf VkVDVE9SX1AgKHgpOworfQogDAotI2RlZmluZSBDSEVDS19MSVNUKHgpIFwKLSAgQ0hFQ0tf VFlQRSAoQ09OU1AgKHgpIHx8IE5JTFAgKHgpLCBRbGlzdHAsIHgpCi0KLSNkZWZpbmUgQ0hF Q0tfTElTVF9DT05TKHgsIHkpIFwKLSAgQ0hFQ0tfVFlQRSAoQ09OU1AgKHgpLCBRbGlzdHAs IHkpCi0KLSNkZWZpbmUgQ0hFQ0tfTElTVF9FTkQoeCwgeSkgXAotICBDSEVDS19UWVBFIChO SUxQICh4KSwgUWxpc3RwLCB5KQotCi0jZGVmaW5lIENIRUNLX1NUUklORyh4KSBcCi0gIENI RUNLX1RZUEUgKFNUUklOR1AgKHgpLCBRc3RyaW5ncCwgeCkKLQotI2RlZmluZSBDSEVDS19T VFJJTkdfQ0FSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoU1RSSU5HUCAoWENBUiAoeCkpLCBRc3Ry aW5ncCwgWENBUiAoeCkpCi0KLSNkZWZpbmUgQ0hFQ0tfQ09OUyh4KSBcCi0gIENIRUNLX1RZ UEUgKENPTlNQICh4KSwgUWNvbnNwLCB4KQotCi0jZGVmaW5lIENIRUNLX1NZTUJPTCh4KSBc Ci0gIENIRUNLX1RZUEUgKFNZTUJPTFAgKHgpLCBRc3ltYm9scCwgeCkKLQotI2RlZmluZSBD SEVDS19DSEFSX1RBQkxFKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoQ0hBUl9UQUJMRV9QICh4KSwg UWNoYXJfdGFibGVfcCwgeCkKLQotI2RlZmluZSBDSEVDS19WRUNUT1IoeCkgXAotICBDSEVD S19UWVBFIChWRUNUT1JQICh4KSwgUXZlY3RvcnAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfVkVD VE9SX09SX1NUUklORyh4KSBcCi0gIENIRUNLX1RZUEUgKFZFQ1RPUlAgKHgpIHx8IFNUUklO R1AgKHgpLCBRYXJyYXlwLCB4KQotCi0jZGVmaW5lIENIRUNLX0FSUkFZKHgsIFF4eHhwKSBc Ci0gIENIRUNLX1RZUEUgKEFSUkFZUCAoeCksIFF4eHhwLCB4KQotCi0jZGVmaW5lIENIRUNL X1ZFQ1RPUl9PUl9DSEFSX1RBQkxFKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoVkVDVE9SUCAoeCkg fHwgQ0hBUl9UQUJMRV9QICh4KSwgUXZlY3Rvcl9vcl9jaGFyX3RhYmxlX3AsIHgpCi0KLSNk ZWZpbmUgQ0hFQ0tfQlVGRkVSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoQlVGRkVSUCAoeCksIFFi dWZmZXJwLCB4KQotCi0jZGVmaW5lIENIRUNLX1dJTkRPVyh4KSBcCi0gIENIRUNLX1RZUEUg KFdJTkRPV1AgKHgpLCBRd2luZG93cCwgeCkKLQotI2RlZmluZSBDSEVDS19XSU5ET1dfQ09O RklHVVJBVElPTih4KSBcCi0gIENIRUNLX1RZUEUgKFdJTkRPV19DT05GSUdVUkFUSU9OUCAo eCksIFF3aW5kb3dfY29uZmlndXJhdGlvbl9wLCB4KQotCi0jZGVmaW5lIENIRUNLX1BST0NF U1MoeCkgXAotICBDSEVDS19UWVBFIChQUk9DRVNTUCAoeCksIFFwcm9jZXNzcCwgeCkKLQot I2RlZmluZSBDSEVDS19TVUJSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoU1VCUlAgKHgpLCBRc3Vi cnAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfTlVNQkVSKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoSU5U RUdFUlAgKHgpLCBRaW50ZWdlcnAsIHgpCi0KLSNkZWZpbmUgQ0hFQ0tfTkFUTlVNKHgpIFwK LSAgQ0hFQ0tfVFlQRSAoTkFUTlVNUCAoeCksIFF3aG9sZW51bXAsIHgpCitMSVNQX0lOTElO RSB2b2lkCitDSEVDS19MSVNUIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChD T05TUCAoeCkgfHwgTklMUCAoeCksIFFsaXN0cCwgeCk7Cit9CisKK0xJU1BfTUFDUk9fREVG VU5fVk9JRCAoQ0hFQ0tfTElTVF9DT05TLCAoTGlzcF9PYmplY3QgeCwgTGlzcF9PYmplY3Qg eSksICh4LCB5KSkKK0xJU1BfTUFDUk9fREVGVU5fVk9JRCAoQ0hFQ0tfU1lNQk9MLCAoTGlz cF9PYmplY3QgeCksICh4KSkKK0xJU1BfTUFDUk9fREVGVU5fVk9JRCAoQ0hFQ0tfTlVNQkVS LCAoTGlzcF9PYmplY3QgeCksICh4KSkKKworTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfU1RS SU5HIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChTVFJJTkdQICh4KSwgUXN0 cmluZ3AsIHgpOworfQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfU1RSSU5HX0NBUiAoTGlz cF9PYmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQRSAoU1RSSU5HUCAoWENBUiAoeCkpLCBRc3Ry aW5ncCwgWENBUiAoeCkpOworfQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfQ09OUyAoTGlz cF9PYmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQRSAoQ09OU1AgKHgpLCBRY29uc3AsIHgpOwor fQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfVkVDVE9SIChMaXNwX09iamVjdCB4KQorewor ICBDSEVDS19UWVBFIChWRUNUT1JQICh4KSwgUXZlY3RvcnAsIHgpOworfQorTElTUF9JTkxJ TkUgdm9pZAorQ0hFQ0tfVkVDVE9SX09SX1NUUklORyAoTGlzcF9PYmplY3QgeCkKK3sKKyAg Q0hFQ0tfVFlQRSAoVkVDVE9SUCAoeCkgfHwgU1RSSU5HUCAoeCksIFFhcnJheXAsIHgpOwor fQorTElTUF9JTkxJTkUgdm9pZAorQ0hFQ0tfQVJSQVkgKExpc3BfT2JqZWN0IHgsIExpc3Bf T2JqZWN0IFF4eHhwKQoreworICBDSEVDS19UWVBFIChBUlJBWVAgKHgpLCBReHh4cCwgeCk7 Cit9CitMSVNQX0lOTElORSB2b2lkCitDSEVDS19CVUZGRVIgKExpc3BfT2JqZWN0IHgpCit7 CisgIENIRUNLX1RZUEUgKEJVRkZFUlAgKHgpLCBRYnVmZmVycCwgeCk7Cit9CitMSVNQX0lO TElORSB2b2lkCitDSEVDS19XSU5ET1cgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZ UEUgKFdJTkRPV1AgKHgpLCBRd2luZG93cCwgeCk7Cit9CitMSVNQX0lOTElORSB2b2lkCitD SEVDS19QUk9DRVNTIChMaXNwX09iamVjdCB4KQoreworICBDSEVDS19UWVBFIChQUk9DRVNT UCAoeCksIFFwcm9jZXNzcCwgeCk7Cit9CitMSVNQX0lOTElORSB2b2lkCitDSEVDS19OQVRO VU0gKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKE5BVE5VTVAgKHgpLCBRd2hv bGVudW1wLCB4KTsKK30KIAogI2RlZmluZSBDSEVDS19SQU5HRURfSU5URUdFUih4LCBsbywg aGkpCQkJCQlcCiAgIGRvIHsJCQkJCQkJCQlcCkBAIC0xOTcyLDU3ICsyNDUyLDQzIEBACiAg ICAgICBDSEVDS19SQU5HRURfSU5URUdFUiAoeCwgMCwgVFlQRV9NQVhJTVVNICh0eXBlKSk7 CQkJXAogICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIENIRUNLX01BUktFUih4KSBcCi0gIENI RUNLX1RZUEUgKE1BUktFUlAgKHgpLCBRbWFya2VycCwgeCkKLQogI2RlZmluZSBDSEVDS19O VU1CRVJfQ09FUkNFX01BUktFUih4KSBcCiAgIGRvIHsgaWYgKE1BUktFUlAgKCh4KSkpIFhT RVRGQVNUSU5UICh4LCBtYXJrZXJfcG9zaXRpb24gKHgpKTsgXAogICAgIGVsc2UgQ0hFQ0tf VFlQRSAoSU5URUdFUlAgKHgpLCBRaW50ZWdlcl9vcl9tYXJrZXJfcCwgeCk7IH0gd2hpbGUg KDApCiAKLSNkZWZpbmUgWEZMT0FUSU5UKG4pIGV4dHJhY3RfZmxvYXQoKG4pKQotCi0jZGVm aW5lIENIRUNLX0ZMT0FUKHgpIFwKLSAgQ0hFQ0tfVFlQRSAoRkxPQVRQICh4KSwgUWZsb2F0 cCwgeCkKLQotI2RlZmluZSBDSEVDS19OVU1CRVJfT1JfRkxPQVQoeCkgXAotICBDSEVDS19U WVBFIChGTE9BVFAgKHgpIHx8IElOVEVHRVJQICh4KSwgUW51bWJlcnAsIHgpCitMSVNQX0lO TElORSBkb3VibGUKK1hGTE9BVElOVCAoTGlzcF9PYmplY3QgbikKK3sKKyAgcmV0dXJuIGV4 dHJhY3RfZmxvYXQgKG4pOworfQorCitMSVNQX0lOTElORSB2b2lkCitDSEVDS19OVU1CRVJf T1JfRkxPQVQgKExpc3BfT2JqZWN0IHgpCit7CisgIENIRUNLX1RZUEUgKEZMT0FUUCAoeCkg fHwgSU5URUdFUlAgKHgpLCBRbnVtYmVycCwgeCk7Cit9CiAKICNkZWZpbmUgQ0hFQ0tfTlVN QkVSX09SX0ZMT0FUX0NPRVJDRV9NQVJLRVIoeCkgXAogICBkbyB7IGlmIChNQVJLRVJQICh4 KSkgWFNFVEZBU1RJTlQgKHgsIG1hcmtlcl9wb3NpdGlvbiAoeCkpOyBcCiAgICAgZWxzZSBD SEVDS19UWVBFIChJTlRFR0VSUCAoeCkgfHwgRkxPQVRQICh4KSwgUW51bWJlcl9vcl9tYXJr ZXJfcCwgeCk7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgQ0hFQ0tfT1ZFUkxBWSh4KSBcCi0g IENIRUNLX1RZUEUgKE9WRVJMQVlQICh4KSwgUW92ZXJsYXlwLCB4KQotCiAvKiBTaW5jZSB3 ZSBjYW4ndCBhc3NpZ24gZGlyZWN0bHkgdG8gdGhlIENBUiBvciBDRFIgZmllbGRzIG9mIGEg Y29ucwogICAgY2VsbCwgdXNlIHRoZXNlIHdoZW4gY2hlY2tpbmcgdGhhdCB0aG9zZSBmaWVs ZHMgY29udGFpbiBudW1iZXJzLiAgKi8KLSNkZWZpbmUgQ0hFQ0tfTlVNQkVSX0NBUih4KSBc Ci0gIGRvIHsJCQkJCVwKLSAgICBMaXNwX09iamVjdCB0bXAgPSBYQ0FSICh4KTsJCVwKLSAg ICBDSEVDS19OVU1CRVIgKHRtcCk7CQkJXAotICAgIFhTRVRDQVIgKCh4KSwgdG1wKTsJCQlc Ci0gIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfTlVNQkVSX0NEUih4KSBcCi0gIGRv IHsJCQkJCVwKLSAgICBMaXNwX09iamVjdCB0bXAgPSBYQ0RSICh4KTsJCVwKLSAgICBDSEVD S19OVU1CRVIgKHRtcCk7CQkJXAotICAgIFhTRVRDRFIgKCh4KSwgdG1wKTsJCQlcCi0gIH0g d2hpbGUgKDApCi0KLSNkZWZpbmUgQ0hFQ0tfTkFUTlVNX0NBUih4KSBcCi0gIGRvIHsJCQkJ CVwKLSAgICBMaXNwX09iamVjdCB0bXAgPSBYQ0FSICh4KTsJCVwKLSAgICBDSEVDS19OQVRO VU0gKHRtcCk7CQkJXAotICAgIFhTRVRDQVIgKCh4KSwgdG1wKTsJCQlcCi0gIH0gd2hpbGUg KDApCi0KLSNkZWZpbmUgQ0hFQ0tfTkFUTlVNX0NEUih4KSBcCi0gIGRvIHsJCQkJCVwKLSAg ICBMaXNwX09iamVjdCB0bXAgPSBYQ0RSICh4KTsJCVwKLSAgICBDSEVDS19OQVROVU0gKHRt cCk7CQkJXAotICAgIFhTRVRDRFIgKCh4KSwgdG1wKTsJCQlcCi0gIH0gd2hpbGUgKDApCitM SVNQX0lOTElORSB2b2lkCitDSEVDS19OVU1CRVJfQ0FSIChMaXNwX09iamVjdCB4KQorewor ICBMaXNwX09iamVjdCB0bXAgPSBYQ0FSICh4KTsKKyAgQ0hFQ0tfTlVNQkVSICh0bXApOwor ICBYU0VUQ0FSICh4LCB0bXApOworfQorCitMSVNQX0lOTElORSB2b2lkCitDSEVDS19OVU1C RVJfQ0RSIChMaXNwX09iamVjdCB4KQoreworICBMaXNwX09iamVjdCB0bXAgPSBYQ0RSICh4 KTsKKyAgQ0hFQ0tfTlVNQkVSICh0bXApOworICBYU0VUQ0RSICh4LCB0bXApOworfQogDAog LyogRGVmaW5lIGEgYnVpbHQtaW4gZnVuY3Rpb24gZm9yIGNhbGxpbmcgZnJvbSBMaXNwLgog IGBsbmFtZScgc2hvdWxkIGJlIHRoZSBuYW1lIHRvIGdpdmUgdGhlIGZ1bmN0aW9uIGluIExp c3AsCkBAIC0yMDg4LDggKzI1NTQsMTIgQEAKICNkZWZpbmUgREVGVU5fQVJHU184CShMaXNw X09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgXAogCQkJ IExpc3BfT2JqZWN0LCBMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KQog Ci0vKiBOb24temVybyBpZiBPQkogaXMgYSBMaXNwIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUg RlVOQ1RJT05QKE9CSikgZnVuY3Rpb25wKE9CSikKKy8qIFRydWUgaWYgT0JKIGlzIGEgTGlz cCBmdW5jdGlvbi4gICovCitMSVNQX0lOTElORSBib29sCitGVU5DVElPTlAgKExpc3BfT2Jq ZWN0IG9iaikKK3sKKyAgcmV0dXJuIGZ1bmN0aW9ucCAob2JqKTsKK30KIAogLyogZGVmc3Vi ciAoU25hbWUpOwogICAgaXMgaG93IHdlIGRlZmluZSB0aGUgc3ltYm9sIGZvciBmdW5jdGlv biBgbmFtZScgYXQgc3RhcnQtdXAgdGltZS4gICovCkBAIC0yMjQ1LDM4ICsyNzE1LDE1IEBA CiAgICAgfSB2OwogICB9OwogCi1MSVNQX0lOTElORSBMaXNwX09iamVjdCBzcGVjcGRsX3N5 bWJvbCAoc3RydWN0IHNwZWNiaW5kaW5nICpwZGwpCi17IGVhc3NlcnQgKHBkbC0+a2luZCA+ PSBTUEVDUERMX0xFVCk7IHJldHVybiBwZGwtPnYubGV0LnN5bWJvbDsgfQotCi1MSVNQX0lO TElORSBMaXNwX09iamVjdCBzcGVjcGRsX29sZF92YWx1ZSAoc3RydWN0IHNwZWNiaW5kaW5n ICpwZGwpCi17IGVhc3NlcnQgKHBkbC0+a2luZCA+PSBTUEVDUERMX0xFVCk7IHJldHVybiBw ZGwtPnYubGV0Lm9sZF92YWx1ZTsgfQotCi1MSVNQX0lOTElORSBMaXNwX09iamVjdCBzcGVj cGRsX3doZXJlIChzdHJ1Y3Qgc3BlY2JpbmRpbmcgKnBkbCkKLXsgZWFzc2VydCAocGRsLT5r aW5kID4gU1BFQ1BETF9MRVQpOyByZXR1cm4gcGRsLT52LmxldC53aGVyZTsgfQotCi1MSVNQ X0lOTElORSBMaXNwX09iamVjdCBzcGVjcGRsX2FyZyAoc3RydWN0IHNwZWNiaW5kaW5nICpw ZGwpCi17IGVhc3NlcnQgKHBkbC0+a2luZCA9PSBTUEVDUERMX1VOV0lORCk7IHJldHVybiBw ZGwtPnYudW53aW5kLmFyZzsgfQotCi1MSVNQX0lOTElORSBzcGVjYmluZGluZ19mdW5jIHNw ZWNwZGxfZnVuYyAoc3RydWN0IHNwZWNiaW5kaW5nICpwZGwpCi17IGVhc3NlcnQgKHBkbC0+ a2luZCA9PSBTUEVDUERMX1VOV0lORCk7IHJldHVybiBwZGwtPnYudW53aW5kLmZ1bmM7IH0K LQotTElTUF9JTkxJTkUgTGlzcF9PYmplY3QgYmFja3RyYWNlX2Z1bmN0aW9uIChzdHJ1Y3Qg c3BlY2JpbmRpbmcgKnBkbCkKLXsgZWFzc2VydCAocGRsLT5raW5kID09IFNQRUNQRExfQkFD S1RSQUNFKTsgcmV0dXJuIHBkbC0+di5idC5mdW5jdGlvbjsgfQotCi1MSVNQX0lOTElORSBw dHJkaWZmX3QgYmFja3RyYWNlX25hcmdzIChzdHJ1Y3Qgc3BlY2JpbmRpbmcgKnBkbCkKLXsg ZWFzc2VydCAocGRsLT5raW5kID09IFNQRUNQRExfQkFDS1RSQUNFKTsgcmV0dXJuIHBkbC0+ di5idC5uYXJnczsgfQotCi1MSVNQX0lOTElORSBMaXNwX09iamVjdCAqYmFja3RyYWNlX2Fy Z3MgKHN0cnVjdCBzcGVjYmluZGluZyAqcGRsKQoteyBlYXNzZXJ0IChwZGwtPmtpbmQgPT0g U1BFQ1BETF9CQUNLVFJBQ0UpOyByZXR1cm4gcGRsLT52LmJ0LmFyZ3M7IH0KLQotTElTUF9J TkxJTkUgYm9vbCBiYWNrdHJhY2VfZGVidWdfb25fZXhpdCAoc3RydWN0IHNwZWNiaW5kaW5n ICpwZGwpCi17IGVhc3NlcnQgKHBkbC0+a2luZCA9PSBTUEVDUERMX0JBQ0tUUkFDRSk7IHJl dHVybiBwZGwtPnYuYnQuZGVidWdfb25fZXhpdDsgfQotCiBleHRlcm4gc3RydWN0IHNwZWNi aW5kaW5nICpzcGVjcGRsOwogZXh0ZXJuIHN0cnVjdCBzcGVjYmluZGluZyAqc3BlY3BkbF9w dHI7CiBleHRlcm4gcHRyZGlmZl90IHNwZWNwZGxfc2l6ZTsKIAotI2RlZmluZSBTUEVDUERM X0lOREVYKCkJKHNwZWNwZGxfcHRyIC0gc3BlY3BkbCkKK0xJU1BfSU5MSU5FIHB0cmRpZmZf dAorU1BFQ1BETF9JTkRFWCAodm9pZCkKK3sKKyAgcmV0dXJuIHNwZWNwZGxfcHRyIC0gc3Bl Y3BkbDsKK30KIAogLyogRXZlcnl0aGluZyBuZWVkZWQgdG8gZGVzY3JpYmUgYW4gYWN0aXZl IGNvbmRpdGlvbiBjYXNlLgogCkBAIC0yNTkyLDI3ICszMDM5LDEyIEBACiAjZGVmaW5lIEVY RlVOKGZubmFtZSwgbWF4YXJncykgXAogICBleHRlcm4gTGlzcF9PYmplY3QgZm5uYW1lIERF RlVOX0FSR1NfICMjIG1heGFyZ3MKIAorI2luY2x1ZGUgImdsb2JhbHMuaCIKKwogLyogRm9y d2FyZCBkZWNsYXJhdGlvbnMgZm9yIHByb3RvdHlwZXMuICAqLwogc3RydWN0IHdpbmRvdzsK IHN0cnVjdCBmcmFtZTsKIAotLyogU2ltcGxlIGFjY2VzcyBmdW5jdGlvbnMuICAqLwotCi1M SVNQX0lOTElORSBMaXNwX09iamVjdCAqCi1hcmVmX2FkZHIgKExpc3BfT2JqZWN0IGFycmF5 LCBwdHJkaWZmX3QgaWR4KQotewotICByZXR1cm4gJiBYVkVDVE9SIChhcnJheSktPmNvbnRl bnRzW2lkeF07Ci19Ci0KLUxJU1BfSU5MSU5FIHZvaWQKLWdjX2FzZXQgKExpc3BfT2JqZWN0 IGFycmF5LCBwdHJkaWZmX3QgaWR4LCBMaXNwX09iamVjdCB2YWwpCi17Ci0gIC8qIExpa2Ug QVNFVCwgYnV0IGFsc28gY2FuIGJlIHVzZWQgaW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yOgot ICAgICBzd2VlcF93ZWFrX3RhYmxlIGNhbGxzIHNldF9oYXNoX2tleSBldGMuIHdoaWxlIHRo ZSB0YWJsZSBpcyBtYXJrZWQuICAqLwotICBlYXNzZXJ0ICgwIDw9IGlkeCAmJiBpZHggPCAo QVNJWkUgKGFycmF5KSAmIH5BUlJBWV9NQVJLX0ZMQUcpKTsKLSAgWFZFQ1RPUiAoYXJyYXkp LT5jb250ZW50c1tpZHhdID0gdmFsOwotfQotCiAvKiBDb3B5IENPVU5UIExpc3BfT2JqZWN0 cyBmcm9tIEFSR1MgdG8gY29udGVudHMgb2YgViBzdGFydGluZyBmcm9tIE9GRlNFVC4gICov CiAKIExJU1BfSU5MSU5FIHZvaWQKQEAgLTI2MjUsMTIgKzMwNTcsNiBAQAogLyogRnVuY3Rp b25zIHRvIG1vZGlmeSBoYXNoIHRhYmxlcy4gICovCiAKIExJU1BfSU5MSU5FIHZvaWQKLXNl dF9oYXNoX2tleV9hbmRfdmFsdWUgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIExpc3Bf T2JqZWN0IGtleV9hbmRfdmFsdWUpCi17Ci0gIGgtPmtleV9hbmRfdmFsdWUgPSBrZXlfYW5k X3ZhbHVlOwotfQotCi1MSVNQX0lOTElORSB2b2lkCiBzZXRfaGFzaF9rZXlfc2xvdCAoc3Ry dWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgcHRyZGlmZl90IGlkeCwgTGlzcF9PYmplY3QgdmFs KQogewogICBnY19hc2V0IChoLT5rZXlfYW5kX3ZhbHVlLCAyICogaWR4LCB2YWwpOwpAQCAt MjY0Miw1MiArMzA2OCwxMCBAQAogICBnY19hc2V0IChoLT5rZXlfYW5kX3ZhbHVlLCAyICog aWR4ICsgMSwgdmFsKTsKIH0KIAotTElTUF9JTkxJTkUgdm9pZAotc2V0X2hhc2hfbmV4dCAo c3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgTGlzcF9PYmplY3QgbmV4dCkKLXsKLSAgaC0+ bmV4dCA9IG5leHQ7Ci19Ci0KLUxJU1BfSU5MSU5FIHZvaWQKLXNldF9oYXNoX25leHRfc2xv dCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgcHRyZGlmZl90IGlkeCwgTGlzcF9PYmpl Y3QgdmFsKQotewotICBnY19hc2V0IChoLT5uZXh0LCBpZHgsIHZhbCk7Ci19Ci0KLUxJU1Bf SU5MSU5FIHZvaWQKLXNldF9oYXNoX2hhc2ggKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgs IExpc3BfT2JqZWN0IGhhc2gpCi17Ci0gIGgtPmhhc2ggPSBoYXNoOwotfQotCi1MSVNQX0lO TElORSB2b2lkCi1zZXRfaGFzaF9oYXNoX3Nsb3QgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUg KmgsIHB0cmRpZmZfdCBpZHgsIExpc3BfT2JqZWN0IHZhbCkKLXsKLSAgZ2NfYXNldCAoaC0+ aGFzaCwgaWR4LCB2YWwpOwotfQotCi1MSVNQX0lOTElORSB2b2lkCi1zZXRfaGFzaF9pbmRl eCAoc3RydWN0IExpc3BfSGFzaF9UYWJsZSAqaCwgTGlzcF9PYmplY3QgaW5kZXgpCi17Ci0g IGgtPmluZGV4ID0gaW5kZXg7Ci19Ci0KLUxJU1BfSU5MSU5FIHZvaWQKLXNldF9oYXNoX2lu ZGV4X3Nsb3QgKHN0cnVjdCBMaXNwX0hhc2hfVGFibGUgKmgsIHB0cmRpZmZfdCBpZHgsIExp c3BfT2JqZWN0IHZhbCkKLXsKLSAgZ2NfYXNldCAoaC0+aW5kZXgsIGlkeCwgdmFsKTsKLX0K LQogLyogVXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBzZXQgTGlzcF9PYmplY3QKICAgIG9yIHBv aW50ZXIgc2xvdHMgb2Ygc3RydWN0IExpc3BfU3ltYm9sLiAgKi8KIAogTElTUF9JTkxJTkUg dm9pZAotc2V0X3N5bWJvbF9uYW1lIChMaXNwX09iamVjdCBzeW0sIExpc3BfT2JqZWN0IG5h bWUpCi17Ci0gIFhTWU1CT0wgKHN5bSktPm5hbWUgPSBuYW1lOwotfQotCi1MSVNQX0lOTElO RSB2b2lkCiBzZXRfc3ltYm9sX2Z1bmN0aW9uIChMaXNwX09iamVjdCBzeW0sIExpc3BfT2Jq ZWN0IGZ1bmN0aW9uKQogewogICBYU1lNQk9MIChzeW0pLT5mdW5jdGlvbiA9IGZ1bmN0aW9u OwpAQCAtMjcxNCw0MyArMzA5OCw2IEBACiAgIHJldHVybiBibHYtPmZvdW5kOwogfQogCi1M SVNQX0lOTElORSB2b2lkCi1zZXRfYmx2X2ZvdW5kIChzdHJ1Y3QgTGlzcF9CdWZmZXJfTG9j YWxfVmFsdWUgKmJsdiwgaW50IGZvdW5kKQotewotICBlYXNzZXJ0IChmb3VuZCA9PSAhRVEg KGJsdi0+ZGVmY2VsbCwgYmx2LT52YWxjZWxsKSk7Ci0gIGJsdi0+Zm91bmQgPSBmb3VuZDsK LX0KLQotTElTUF9JTkxJTkUgTGlzcF9PYmplY3QKLWJsdl92YWx1ZSAoc3RydWN0IExpc3Bf QnVmZmVyX0xvY2FsX1ZhbHVlICpibHYpCi17Ci0gIHJldHVybiBYQ0RSIChibHYtPnZhbGNl bGwpOwotfQotCi1MSVNQX0lOTElORSB2b2lkCi1zZXRfYmx2X3ZhbHVlIChzdHJ1Y3QgTGlz cF9CdWZmZXJfTG9jYWxfVmFsdWUgKmJsdiwgTGlzcF9PYmplY3QgdmFsKQotewotICBYU0VU Q0RSIChibHYtPnZhbGNlbGwsIHZhbCk7Ci19Ci0KLUxJU1BfSU5MSU5FIHZvaWQKLXNldF9i bHZfd2hlcmUgKHN0cnVjdCBMaXNwX0J1ZmZlcl9Mb2NhbF9WYWx1ZSAqYmx2LCBMaXNwX09i amVjdCB2YWwpCi17Ci0gIGJsdi0+d2hlcmUgPSB2YWw7Ci19Ci0KLUxJU1BfSU5MSU5FIHZv aWQKLXNldF9ibHZfZGVmY2VsbCAoc3RydWN0IExpc3BfQnVmZmVyX0xvY2FsX1ZhbHVlICpi bHYsIExpc3BfT2JqZWN0IHZhbCkKLXsKLSAgYmx2LT5kZWZjZWxsID0gdmFsOwotfQotCi1M SVNQX0lOTElORSB2b2lkCi1zZXRfYmx2X3ZhbGNlbGwgKHN0cnVjdCBMaXNwX0J1ZmZlcl9M b2NhbF9WYWx1ZSAqYmx2LCBMaXNwX09iamVjdCB2YWwpCi17Ci0gIGJsdi0+dmFsY2VsbCA9 IHZhbDsKLX0KLQogLyogU2V0IG92ZXJsYXkncyBwcm9wZXJ0eSBsaXN0LiAgKi8KIAogTElT UF9JTkxJTkUgdm9pZApAQCAtMjc3OSwyMSArMzEyNiwxMSBAQAogICAgb2Ygc2V0dGluZyBz bG90cyBkaXJlY3RseS4gICovCiAKIExJU1BfSU5MSU5FIHZvaWQKLXNldF9jaGFyX3RhYmxl X2FzY2lpIChMaXNwX09iamVjdCB0YWJsZSwgTGlzcF9PYmplY3QgdmFsKQotewotICBYQ0hB Ul9UQUJMRSAodGFibGUpLT5hc2NpaSA9IHZhbDsKLX0KLUxJU1BfSU5MSU5FIHZvaWQKIHNl dF9jaGFyX3RhYmxlX2RlZmFsdCAoTGlzcF9PYmplY3QgdGFibGUsIExpc3BfT2JqZWN0IHZh bCkKIHsKICAgWENIQVJfVEFCTEUgKHRhYmxlKS0+ZGVmYWx0ID0gdmFsOwogfQogTElTUF9J TkxJTkUgdm9pZAotc2V0X2NoYXJfdGFibGVfcGFyZW50IChMaXNwX09iamVjdCB0YWJsZSwg TGlzcF9PYmplY3QgdmFsKQotewotICBYQ0hBUl9UQUJMRSAodGFibGUpLT5wYXJlbnQgPSB2 YWw7Ci19Ci1MSVNQX0lOTElORSB2b2lkCiBzZXRfY2hhcl90YWJsZV9wdXJwb3NlIChMaXNw X09iamVjdCB0YWJsZSwgTGlzcF9PYmplY3QgdmFsKQogewogICBYQ0hBUl9UQUJMRSAodGFi bGUpLT5wdXJwb3NlID0gdmFsOwpAQCAtMzIzNyw3ICszNTc0LDcgQEAKICNpZmRlZiBHQ19D SEVDS19DT05TX0xJU1QKIGV4dGVybiB2b2lkIGNoZWNrX2NvbnNfbGlzdCAodm9pZCk7CiAj ZWxzZQotI2RlZmluZSBjaGVja19jb25zX2xpc3QoKSAoKHZvaWQpIDApCitMSVNQX0lOTElO RSB2b2lkIChjaGVja19jb25zX2xpc3QpICh2b2lkKSB7IGxpc3BfaF9jaGVja19jb25zX2xp c3QgKCk7IH0KICNlbmRpZgogCiAjaWZkZWYgUkVMX0FMTE9DCkBAIC0zMzA1LDEwICszNjQy LDEyIEBACiBleHRlcm4gTGlzcF9PYmplY3QgaW50ZXJuXzEgKGNvbnN0IGNoYXIgKiwgcHRy ZGlmZl90KTsKIGV4dGVybiBMaXNwX09iamVjdCBpbnRlcm5fY19zdHJpbmdfMSAoY29uc3Qg Y2hhciAqLCBwdHJkaWZmX3QpOwogZXh0ZXJuIExpc3BfT2JqZWN0IG9ibG9va3VwIChMaXNw X09iamVjdCwgY29uc3QgY2hhciAqLCBwdHJkaWZmX3QsIHB0cmRpZmZfdCk7Ci0jZGVmaW5l IExPQURISVNUX0FUVEFDSCh4KSBcCi0gIGRvIHsJCQkJCQkJCQlcCi0gICAgaWYgKGluaXRp YWxpemVkKSBWY3VycmVudF9sb2FkX2xpc3QgPSBGY29ucyAoeCwgVmN1cnJlbnRfbG9hZF9s aXN0KTsgXAotICB9IHdoaWxlICgwKQorTElTUF9JTkxJTkUgdm9pZAorTE9BREhJU1RfQVRU QUNIIChMaXNwX09iamVjdCB4KQoreworICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgVmN1cnJl bnRfbG9hZF9saXN0ID0gRmNvbnMgKHgsIFZjdXJyZW50X2xvYWRfbGlzdCk7Cit9CiBleHRl cm4gaW50IG9wZW5wIChMaXNwX09iamVjdCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0LAog ICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgKiwgTGlzcF9PYmplY3QpOwogZXh0ZXJu IExpc3BfT2JqZWN0IHN0cmluZ190b19udW1iZXIgKGNoYXIgY29uc3QgKiwgaW50LCBib29s KTsKQEAgLTM1OTQsMTAgKzM5MzMsOSBAQAogdm9pZCBzeW5jaHJvbml6ZV9zeXN0ZW1fbWVz c2FnZXNfbG9jYWxlICh2b2lkKTsKIHZvaWQgc3luY2hyb25pemVfc3lzdGVtX3RpbWVfbG9j YWxlICh2b2lkKTsKICNlbHNlCi0jZGVmaW5lIHNldGxvY2FsZShjYXRlZ29yeSwgbG9jYWxl KQotI2RlZmluZSBmaXh1cF9sb2NhbGUoKQotI2RlZmluZSBzeW5jaHJvbml6ZV9zeXN0ZW1f bWVzc2FnZXNfbG9jYWxlKCkKLSNkZWZpbmUgc3luY2hyb25pemVfc3lzdGVtX3RpbWVfbG9j YWxlKCkKK0xJU1BfSU5MSU5FIHZvaWQgZml4dXBfbG9jYWxlICh2b2lkKSB7fQorTElTUF9J TkxJTkUgdm9pZCBzeW5jaHJvbml6ZV9zeXN0ZW1fbWVzc2FnZXNfbG9jYWxlICh2b2lkKSB7 fQorTElTUF9JTkxJTkUgdm9pZCBzeW5jaHJvbml6ZV9zeXN0ZW1fdGltZV9sb2NhbGUgKHZv aWQpIHt9CiAjZW5kaWYKIGV4dGVybiB2b2lkIHNodXRfZG93bl9lbWFjcyAoaW50LCBMaXNw X09iamVjdCk7CiAKQEAgLTM5NTYsOCArNDI5NCw2IEBACiAgIH0gd2hpbGUgKDApCiAKIAot I2luY2x1ZGUgImdsb2JhbHMuaCIKLQogLyogQ2hlY2sgd2hldGhlciBpdCdzIHRpbWUgZm9y IEdDLCBhbmQgcnVuIGl0IGlmIHNvLiAgKi8KIAogTElTUF9JTkxJTkUgdm9pZApAQCAtMzk3 MCw3ICs0MzA2LDcgQEAKICAgICBGZ2FyYmFnZV9jb2xsZWN0ICgpOwogfQogCi1MSVNQX0lO TElORSBpbnQKK0xJU1BfSU5MSU5FIGJvb2wKIGZ1bmN0aW9ucCAoTGlzcF9PYmplY3Qgb2Jq ZWN0KQogewogICBpZiAoU1lNQk9MUCAob2JqZWN0KSAmJiAhTklMUCAoRmZib3VuZHAgKG9i amVjdCkpKQoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy9tYXJrZXIuYycKLS0tIHNyYy9tYXJr ZXIuYwkyMDEzLTAyLTE5IDE0OjQ0OjAzICswMDAwCisrKyBzcmMvbWFya2VyLmMJMjAxMy0w Ni0xMyAxNTozODoxNiArMDAwMApAQCAtMTI3LDYgKzEyNywxMiBAQAogICAgIH0JCQkJCQkJ CQlcCiB9CiAKK3N0YXRpYyB2b2lkCitDSEVDS19NQVJLRVIgKExpc3BfT2JqZWN0IHgpCit7 CisgIENIRUNLX1RZUEUgKE1BUktFUlAgKHgpLCBRbWFya2VycCwgeCk7Cit9CisKIC8qIFJl dHVybiB0aGUgYnl0ZSBwb3NpdGlvbiBjb3JyZXNwb25kaW5nIHRvIENIQVJQT1MgaW4gQi4g ICovCiAKIHB0cmRpZmZfdAoKPT09IG1vZGlmaWVkIGZpbGUgJ3NyYy90ZXh0cHJvcC5jJwot LS0gc3JjL3RleHRwcm9wLmMJMjAxMy0wMy0yOCAxNDowNDo0OSArMDAwMAorKysgc3JjL3Rl eHRwcm9wLmMJMjAxMy0wNi0xMyAxNTozODoxNiArMDAwMApAQCAtOTgsNiArOTgsMTQgQEAK ICAgc2V0X2J1ZmZlcl9pbnRlcm5hbCAob2xkKTsKIH0KIAorLyogQ29tcGxhaW4gaWYgb2Jq ZWN0IGlzIG5vdCBzdHJpbmcgb3IgYnVmZmVyIHR5cGUuICAqLworCitzdGF0aWMgdm9pZAor Q0hFQ0tfU1RSSU5HX09SX0JVRkZFUiAoTGlzcF9PYmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQ RSAoU1RSSU5HUCAoeCkgfHwgQlVGRkVSUCAoeCksIFFidWZmZXJfb3Jfc3RyaW5nX3AsIHgp OworfQorCiAvKiBFeHRyYWN0IHRoZSBpbnRlcnZhbCBhdCB0aGUgcG9zaXRpb24gcG9pbnRl ZCB0byBieSBCRUdJTiBmcm9tCiAgICBPQkpFQ1QsIGEgc3RyaW5nIG9yIGJ1ZmZlci4gIEFk ZGl0aW9uYWxseSwgY2hlY2sgdGhhdCB0aGUgcG9zaXRpb25zCiAgICBwb2ludGVkIHRvIGJ5 IEJFR0lOIGFuZCBFTkQgYXJlIHdpdGhpbiB0aGUgYm91bmRzIG9mIE9CSkVDVCwgYW5kCgo9 PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3dpbmRvdy5jJwotLS0gc3JjL3dpbmRvdy5jCTIwMTMt MDYtMDQgMTY6MzM6NDYgKzAwMDAKKysrIHNyYy93aW5kb3cuYwkyMDEzLTA2LTEzIDE2OjAy OjI0ICswMDAwCkBAIC01NSw3ICs1NSw4IEBACiAKIExpc3BfT2JqZWN0IFF3aW5kb3dwLCBR d2luZG93X2xpdmVfcDsKIHN0YXRpYyBMaXNwX09iamVjdCBRd2luZG93X3ZhbGlkX3A7Ci1z dGF0aWMgTGlzcF9PYmplY3QgUXdpbmRvd19jb25maWd1cmF0aW9uX3AsIFFyZWNvcmRfd2lu ZG93X2J1ZmZlcjsKK3N0YXRpYyBMaXNwX09iamVjdCBRd2luZG93X2NvbmZpZ3VyYXRpb25f cDsKK3N0YXRpYyBMaXNwX09iamVjdCBRcmVjb3JkX3dpbmRvd19idWZmZXI7CiBzdGF0aWMg TGlzcF9PYmplY3QgUXdpbmRvd19kZWxldGFibGVfcCwgUWRlbGV0ZV93aW5kb3csIFFkaXNw bGF5X2J1ZmZlcjsKIHN0YXRpYyBMaXNwX09iamVjdCBRcmVwbGFjZV9idWZmZXJfaW5fd2lu ZG93cywgUWdldF9tcnVfd2luZG93Owogc3RhdGljIExpc3BfT2JqZWN0IFF3aW5kb3dfcmVz aXplX3Jvb3Rfd2luZG93LCBRd2luZG93X3Jlc2l6ZV9yb290X3dpbmRvd192ZXJ0aWNhbGx5 OwpAQCAtMTMwLDYgKzEzMSwxMiBAQAogc3RhdGljIEVNQUNTX0lOVCB3aW5kb3dfc2Nyb2xs X3ByZXNlcnZlX2hwb3M7CiBzdGF0aWMgRU1BQ1NfSU5UIHdpbmRvd19zY3JvbGxfcHJlc2Vy dmVfdnBvczsKIAwKK3N0YXRpYyB2b2lkCitDSEVDS19XSU5ET1dfQ09ORklHVVJBVElPTiAo TGlzcF9PYmplY3QgeCkKK3sKKyAgQ0hFQ0tfVFlQRSAoV0lORE9XX0NPTkZJR1VSQVRJT05Q ICh4KSwgUXdpbmRvd19jb25maWd1cmF0aW9uX3AsIHgpOworfQorCiAvKiBUaGVzZSBzZXR0 ZXJzIGFyZSB1c2VkIG9ubHkgaW4gdGhpcyBmaWxlLCBzbyB0aGV5IGNhbiBiZSBwcml2YXRl LiAgKi8KIHN0YXRpYyB2b2lkCiB3c2V0X2NvbWJpbmF0aW9uX2xpbWl0IChzdHJ1Y3Qgd2lu ZG93ICp3LCBMaXNwX09iamVjdCB2YWwpCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3JjL3dpbmRv dy5oJwotLS0gc3JjL3dpbmRvdy5oCTIwMTMtMDMtMjggMTQ6MDQ6NDkgKzAwMDAKKysrIHNy Yy93aW5kb3cuaAkyMDEzLTA2LTEzIDE1OjM4OjAzICswMDAwCkBAIC05NTgsNyArOTU4LDcg QEAKIAogLyogVGhlc2UgdXNlZCB0byBiZSBpbiBsaXNwLmguICAqLwogCi1leHRlcm4gTGlz cF9PYmplY3QgUXdpbmRvd3AsIFF3aW5kb3dfbGl2ZV9wOworZXh0ZXJuIExpc3BfT2JqZWN0 IFF3aW5kb3dfbGl2ZV9wOwogZXh0ZXJuIExpc3BfT2JqZWN0IFZ3aW5kb3dfbGlzdDsKIAog ZXh0ZXJuIHN0cnVjdCB3aW5kb3cgKmRlY29kZV9saXZlX3dpbmRvdyAoTGlzcF9PYmplY3Qp OwoK --------------070603050203080502010407--