Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r8U6i-00A5tK-Nx for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Nov 2023 23:36:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r8U6g-00DYrF-Ek for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Nov 2023 23:36:38 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r8U6f-00DYr7-Sf for pgsql-hackers@lists.postgresql.org; Wed, 29 Nov 2023 23:36:38 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r8U6Z-009FVW-SP for pgsql-hackers@postgresql.org; Wed, 29 Nov 2023 23:36:37 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4SgbLj3WbCz49PwY; Thu, 30 Nov 2023 01:36:26 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1701300989; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=mu1vAK8/kAHulh5KqNGLCMXlJ6wdo9y1xen6qoKfrNQ=; b=ve2AKM9ZaBNF0hk4KTPZ3aoiheT88Osd+Sw1ljYqoB1oGyouVNcdfx0TcuX2u3+s1VLvyd lWSIA4Zvjwk6pSwWsDqITNp6qamR5q2vNQVPw2a1kZ7aEqRuwVKKwRPFldqe2JS7E4aHo6 LHY2H1iDPuOzf/keqA7uhuTxY1b81OA0abpka9wIltYp11Eqn4ZGwrYQw7WGKT2vviTwgp cbF9Kv5NayVdfuDcr3FpDzTiglNIm4YAhw/Yk/jQPHz7FTkatpM/UXGuD1PsVUl8xYzKbl DVDL2Wo8Em8hGV/54BT7bK3U6PpoyBp6oHt2AE9GGxBvPzZlg8xUhzqtEGCy/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1701300989; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=mu1vAK8/kAHulh5KqNGLCMXlJ6wdo9y1xen6qoKfrNQ=; b=L3QDNYpZNp6/uAQ09ks25NaLnwIeIOpJy7lMR2ON30PiyaiGsN58QxydiyFrggXq994n3b LZVmxsEvUyE1IDFgXjlJj8jAFcVqj8KADrpoKQiO9XVBd54cHpTBPnKnv+D7U2scSv/V98 Og0CWk2QdzdCHo+KkXI2SrNW6japFyUYKiZGBMkHgl7Wwy2W/ehiG+U5D8xBute5eVo2Ad vA6izow2Q55fDMZ+i0ljmdE3NROJqL17e3PpsrvkHNpHpWOupwHOsoLXMo9b7VRpP+3a0i R6cuyD44fSJ0/RaNqvHn1GbQNbwiR6NQVuH1m34d6r6YOaasePl/mQuJWX9RlQ== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1701300989; a=rsa-sha256; cv=none; b=Leuj22ejfdHt+40MYjwjrp5DIBDiF8Zkfkq1GQ7sO0nG+77YeVLGrjydmKV/G7aArl2W/j lS1dM/XElqfooNgh7wL7UjSN5RMmsdWdaX7HRxyzCvT5C6VBun2Nc8GhxWUt4CbDLCt9Hi UUv8caVsUNYb1IalHoFIwC+Gz1z0qMPjuIXCxW10tLvBtN396l6QguUSuo+oAud9giVUYb XUhleexK118zqYO9O1frvfIi8k8LvBlg4aBEAYJWvpRqSwy8GlIbMEkHSZD520se8Nou/x a52kSwjYmmxqaL8rE2cV2YsOBBVot95YE0ycRhaZuzzYCh/dRXD4ydi0XTw+Wg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------XHa7Rv0KAibWokVMBeQBHaZj" Message-ID: Date: Thu, 30 Nov 2023 01:36:25 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Refactoring backend fork+exec code Content-Language: en-US From: Heikki Linnakangas To: Andres Freund , Tristan Partin Cc: pgsql-hackers , Thomas Munro References: <7a59b073-5b5b-151e-7ed3-8b01ff7ce9ef@iki.fi> <20230710225043.svl7fqxecwshwc7a@awork3.anarazel.de> <119551e6-60f6-49b2-ae04-a382a89f900c@iki.fi> In-Reply-To: <119551e6-60f6-49b2-ae04-a382a89f900c@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 11/10/2023 14:12, Heikki Linnakangas wrote: > On 11/07/2023 01:50, Andres Freund wrote: >>> Subject: [PATCH 3/9] Refactor CreateSharedMemoryAndSemaphores. >>> >>> Moves InitProcess calls a little later in EXEC_BACKEND case. >> >> What's the reason for this part? > > The point is that with this commit, InitProcess() is called at same > place in EXEC_BACKEND mode and !EXEC_BACKEND. It feels more consistent > that way. > >> ISTM that we'd really want to get away from plastering duplicated >> InitProcess() etc everywhere. > > Sure, we could do more to reduce the duplication. I think this is a step > in the right direction, though. Here's another rebased patch set. Compared to previous version, I did a little more refactoring around CreateSharedMemoryAndSemaphores and InitProcess: - patch 1 splits CreateSharedMemoryAndSemaphores into two functions: CreateSharedMemoryAndSemaphores is now only called at postmaster startup, and a new function called AttachSharedMemoryStructs() is called in backends in EXEC_BACKEND mode. I extracted the common parts of those functions to a new static function. (Some of this refactoring used to be part of the 3rd patch in the series, but it seems useful on its own, so I split it out.) - patch 3 moves the call to AttachSharedMemoryStructs() to InitProcess(), reducing the boilerplate code a little. The patches are incrementally useful, so if you don't have time to review all of them, a review on a subset would be useful too. -- Heikki Linnakangas Neon (https://neon.tech) --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Refactor-CreateSharedMemoryAndSemaphores.patch" Content-Disposition: attachment; filename="v3-0001-Refactor-CreateSharedMemoryAndSemaphores.patch" Content-Transfer-Encoding: base64 RnJvbSBhOTZiNmU5MmZkZWFhOTQ3YmYzMjc3NGM0MjU0MTliOGY5ODdiOGUyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMDA6MDE6MjUgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDEvN10gUmVmYWN0b3IgQ3JlYXRlU2hhcmVkTWVtb3J5QW5k U2VtYXBob3JlcwoKRm9yIGNsYXJpdHksIGhhdmUgc2VwYXJhdGUgZnVuY3Rpb25zIGZvciAq Y3JlYXRpbmcqIHRoZSBzaGFyZWQgbWVtb3J5CmFuZCBzZW1hcGhvcmVzIGF0IHBvc3RtYXN0 ZXIgb3Igc2luZ2xlLXVzZXIgYmFja2VuZCBzdGFydHVwLCBhbmQKZm9yICphdHRhY2hpbmcq IHRvIGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgc3RydWN0dXJlcyBpbiBFWEVDX0JBQ0tFTkQK Y2FzZS4gQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcygpIGlzIG5vdyBjYWxsZWQg b25seSBhdApwb3N0bWFzdGVyIHN0YXJ0dXAsIGFuZCBhIG5ldyBBdHRhY2hTaGFyZWRNZW1v cnlTdHJ1Y3RzKCkgZnVuY3Rpb24gaXMKY2FsbGVkIGF0IGJhY2tlbmQgc3RhcnR1cCBpbiBF WEVDX0JBQ0tFTkQgbW9kZS4KClJldmlld2VkLWJ5OiBUcmlzdGFuIFBhcnRpbiwgQW5kcmVz IEZyZXVuZApEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdl LWlkLzdhNTliMDczLTViNWItMTUxZS03ZWQzLThiMDFmZjdjZTllZkBpa2kuZmkKLS0tCiBz cmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyAgIHwgIDIwICstLQogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyB8ICAgMyArLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICB8IDE3OCArKysrKysrKysrKysrKystLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAgICAgICB8ICAgMiArLQog c3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaCAgICAgICAgICAgICB8ICAgMyArCiA1IGZpbGVz IGNoYW5nZWQsIDExNyBpbnNlcnRpb25zKCspLCA4OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCmluZGV4IDdhNWNkMDZjNWM5Li5iMDNlODhlNjcw MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTQ5MDksMTEgKzQ5 MDksMTEgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ LyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1l bUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1 biBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzICovCisJCS8qIE5lZWQgYSBQR1BS T0MgdG8gcnVuIEF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHMgKi8KIAkJSW5pdFByb2Nlc3Mo KTsKIAogCQkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICov Ci0JCUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKKwkJQXR0YWNoU2hhcmVk TWVtb3J5U3RydWN0cygpOwogCiAJCS8qIEFuZCBydW4gdGhlIGJhY2tlbmQgKi8KIAkJQmFj a2VuZFJ1bigmcG9ydCk7CQkvKiBkb2VzIG5vdCByZXR1cm4gKi8KQEAgLTQ5MjcsMTEgKzQ5 MjcsMTEgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ LyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1l bUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1 biBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzICovCisJCS8qIE5lZWQgYSBQR1BS T0MgdG8gcnVuIEF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHMgKi8KIAkJSW5pdEF1eGlsaWFy eVByb2Nlc3MoKTsKIAogCQkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1 Y3R1cmVzICovCi0JCUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKKwkJQXR0 YWNoU2hhcmVkTWVtb3J5U3RydWN0cygpOwogCiAJCWF1eHR5cGUgPSBhdG9pKGFyZ3ZbM10p OwogCQlBdXhpbGlhcnlQcm9jZXNzTWFpbihhdXh0eXBlKTsJLyogZG9lcyBub3QgcmV0dXJu ICovCkBAIC00OTQxLDExICs0OTQxLDExIEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdj LCBjaGFyICphcmd2W10pCiAJCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2lu dGVycyAqLwogCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7CiAKLQkJLyog TmVlZCBhIFBHUFJPQyB0byBydW4gQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3JlcyAq LworCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1biBBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1Y3Rz ICovCiAJCUluaXRQcm9jZXNzKCk7CiAKIAkJLyogQXR0YWNoIHByb2Nlc3MgdG8gc2hhcmVk IGRhdGEgc3RydWN0dXJlcyAqLwotCQlDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz KCk7CisJCUF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHMoKTsKIAogCQlBdXRvVmFjTGF1bmNo ZXJNYWluKGFyZ2MgLSAyLCBhcmd2ICsgMik7CS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0K QEAgLTQ5NTQsMTEgKzQ5NTQsMTEgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJz ICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVk IGEgUEdQUk9DIHRvIHJ1biBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzICovCisJ CS8qIE5lZWQgYSBQR1BST0MgdG8gcnVuIEF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHMgKi8K IAkJSW5pdFByb2Nlc3MoKTsKIAogCQkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0 YSBzdHJ1Y3R1cmVzICovCi0JCUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsK KwkJQXR0YWNoU2hhcmVkTWVtb3J5U3RydWN0cygpOwogCiAJCUF1dG9WYWNXb3JrZXJNYWlu KGFyZ2MgLSAyLCBhcmd2ICsgMik7CS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0KQEAgLTQ5 NzIsMTEgKzQ5NzIsMTEgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKIAkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJ CUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVkIGEgUEdQ Uk9DIHRvIHJ1biBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzICovCisJCS8qIE5l ZWQgYSBQR1BST0MgdG8gcnVuIEF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHMgKi8KIAkJSW5p dFByb2Nlc3MoKTsKIAogCQkvKiBBdHRhY2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1 Y3R1cmVzICovCi0JCUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXMoKTsKKwkJQXR0 YWNoU2hhcmVkTWVtb3J5U3RydWN0cygpOwogCiAJCS8qIEZldGNoIE15Qmd3b3JrZXJFbnRy eSBmcm9tIHNoYXJlZCBtZW1vcnkgKi8KIAkJc2htZW1fc2xvdCA9IGF0b2koYXJndlsxXSAr IDE1KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCmluZGV4IDIzOTgx NjdmNDk1Li4yNmRlZDkyOGE3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5jCkBAIC0xOTMsNyArMTkzLDcgQEAgV2FsUmVjZWl2ZXJNYWluKHZvaWQpCiAJVGlt ZUxpbmVJRAlzdGFydHBvaW50VExJOwogCVRpbWVMaW5lSUQJcHJpbWFyeVRMSTsKIAlib29s CQlmaXJzdF9zdHJlYW07Ci0JV2FsUmN2RGF0YSAqd2FscmN2ID0gV2FsUmN2OworCVdhbFJj dkRhdGEgKndhbHJjdjsKIAlUaW1lc3RhbXBUeiBub3c7CiAJY2hhcgkgICAqZXJyOwogCWNo YXIJICAgKnNlbmRlcl9ob3N0ID0gTlVMTDsKQEAgLTIwMyw2ICsyMDMsNyBAQCBXYWxSZWNl aXZlck1haW4odm9pZCkKIAkgKiBXYWxSY3Ygc2hvdWxkIGJlIHNldCB1cCBhbHJlYWR5IChp ZiB3ZSBhcmUgYSBiYWNrZW5kLCB3ZSBpbmhlcml0IHRoaXMKIAkgKiBieSBmb3JrKCkgb3Ig RVhFQ19CQUNLRU5EIG1lY2hhbmlzbSBmcm9tIHRoZSBwb3N0bWFzdGVyKS4KIAkgKi8KKwl3 YWxyY3YgPSBXYWxSY3Y7CiAJQXNzZXJ0KHdhbHJjdiAhPSBOVUxMKTsKIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggYTNkOGVhY2I4ZGMuLjIyMjVhNGE2ZTYwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC01OCw2ICs1OCw4IEBAIHNobWVtX3N0YXJ0dXBf aG9va190eXBlIHNobWVtX3N0YXJ0dXBfaG9vayA9IE5VTEw7CiAKIHN0YXRpYyBTaXplIHRv dGFsX2FkZGluX3JlcXVlc3QgPSAwOwogCitzdGF0aWMgdm9pZCBDcmVhdGVPckF0dGFjaFNo bWVtU3RydWN0cyh2b2lkKTsKKwogLyoKICAqIFJlcXVlc3RBZGRpblNobWVtU3BhY2UKICAq CQlSZXF1ZXN0IHRoYXQgZXh0cmEgc2htZW0gc3BhY2UgYmUgYWxsb2NhdGVkIGZvciB1c2Ug YnkKQEAgLTE1Niw5ICsxNTgsMTA2IEBAIENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9z ZW1hcGhvcmVzKQogCXJldHVybiBzaXplOwogfQogCisjaWZkZWYgRVhFQ19CQUNLRU5ECisv KgorICogQXR0YWNoU2hhcmVkTWVtb3J5U3RydWN0cworICoJCUluaXRpYWxpemUgYSBwb3N0 bWFzdGVyIGNoaWxkIHByb2Nlc3MncyBhY2Nlc3MgdG8gc2hhcmVkIG1lbW9yeQorICogICAg ICBzdHJ1Y3R1cmVzLgorICoKKyAqIEluICFFWEVDX0JBQ0tFTkQgbW9kZSwgd2UgaW5oZXJp dCBldmVyeXRoaW5nIHRocm91Z2ggdGhlIGZvcmssIGFuZCB0aGlzCisgKiBpc24ndCBuZWVk ZWQuCisgKi8KK3ZvaWQKK0F0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHModm9pZCkKK3sKKwkv KiBJbml0UHJvY2VzcyBtdXN0J3ZlIGJlZW4gY2FsbGVkIGFscmVhZHkgKi8KKwlBc3NlcnQo TXlQcm9jICE9IE5VTEwpOworCUFzc2VydChJc1VuZGVyUG9zdG1hc3Rlcik7CisKKwlDcmVh dGVPckF0dGFjaFNobWVtU3RydWN0cygpOworCisJLyoKKwkgKiBOb3cgZ2l2ZSBsb2FkYWJs ZSBtb2R1bGVzIGEgY2hhbmNlIHRvIHNldCB1cCB0aGVpciBzaG1lbSBhbGxvY2F0aW9ucwor CSAqLworCWlmIChzaG1lbV9zdGFydHVwX2hvb2spCisJCXNobWVtX3N0YXJ0dXBfaG9vaygp OworfQorI2VuZGlmCisKIC8qCiAgKiBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVz CiAgKgkJQ3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgc2hhcmVkIG1lbW9yeSBhbmQgc2VtYXBo b3Jlcy4KKyAqLwordm9pZAorQ3JlYXRlU2hhcmVkTWVtb3J5QW5kU2VtYXBob3Jlcyh2b2lk KQoreworCVBHU2htZW1IZWFkZXIgKnNoaW07CisJUEdTaG1lbUhlYWRlciAqc2VnaGRyOwor CVNpemUJCXNpemU7CisJaW50CQkJbnVtU2VtYXM7CisKKwlBc3NlcnQoIUlzVW5kZXJQb3N0 bWFzdGVyKTsKKworCS8qIENvbXB1dGUgdGhlIHNpemUgb2YgdGhlIHNoYXJlZC1tZW1vcnkg YmxvY2sgKi8KKwlzaXplID0gQ2FsY3VsYXRlU2htZW1TaXplKCZudW1TZW1hcyk7CisJZWxv ZyhERUJVRzMsICJpbnZva2luZyBJcGNNZW1vcnlDcmVhdGUoc2l6ZT0lenUpIiwgc2l6ZSk7 CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgc2htZW0gc2VnbWVudAorCSAqLworCXNlZ2hkciA9 IFBHU2hhcmVkTWVtb3J5Q3JlYXRlKHNpemUsICZzaGltKTsKKworCS8qCisJICogTWFrZSBz dXJlIHRoYXQgaHVnZSBwYWdlcyBhcmUgbmV2ZXIgcmVwb3J0ZWQgYXMgInVua25vd24iIHdo aWxlIHRoZQorCSAqIHNlcnZlciBpcyBydW5uaW5nLgorCSAqLworCUFzc2VydChzdHJjbXAo InVua25vd24iLAorCQkJCSAgR2V0Q29uZmlnT3B0aW9uKCJodWdlX3BhZ2VzX3N0YXR1cyIs IGZhbHNlLCBmYWxzZSkpICE9IDApOworCisJSW5pdFNobWVtQWNjZXNzKHNlZ2hkcik7CisK KwkvKgorCSAqIENyZWF0ZSBzZW1hcGhvcmVzCisJICovCisJUEdSZXNlcnZlU2VtYXBob3Jl cyhudW1TZW1hcyk7CisKKwkvKgorCSAqIElmIHNwaW5sb2NrcyBhcmUgZGlzYWJsZWQsIGlu aXRpYWxpemUgZW11bGF0aW9uIGxheWVyICh3aGljaCBkZXBlbmRzIG9uCisJICogc2VtYXBo b3Jlcywgc28gdGhlIG9yZGVyIGlzIGltcG9ydGFudCBoZXJlKS4KKwkgKi8KKyNpZm5kZWYg SEFWRV9TUElOTE9DS1MKKwlTcGlubG9ja1NlbWFJbml0KCk7CisjZW5kaWYKKworCS8qCisJ ICogU2V0IHVwIHNoYXJlZCBtZW1vcnkgYWxsb2NhdGlvbiBtZWNoYW5pc20KKwkgKi8KKwlJ bml0U2htZW1BbGxvY2F0aW9uKCk7CisKKwkvKiBJbml0aWFsaXplIHN1YnN5c3RlbXMgKi8K KwlDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cygpOworCisjaWZkZWYgRVhFQ19CQUNLRU5E CisKKwkvKgorCSAqIEFsbG9jIHRoZSB3aW4zMiBzaGFyZWQgYmFja2VuZCBhcnJheQorCSAq LworCVNobWVtQmFja2VuZEFycmF5QWxsb2NhdGlvbigpOworI2VuZGlmCisKKwkvKiBJbml0 aWFsaXplIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBmYWNpbGl0aWVzLiAqLworCWRzbV9wb3N0 bWFzdGVyX3N0YXJ0dXAoc2hpbSk7CisKKwkvKgorCSAqIE5vdyBnaXZlIGxvYWRhYmxlIG1v ZHVsZXMgYSBjaGFuY2UgdG8gc2V0IHVwIHRoZWlyIHNobWVtIGFsbG9jYXRpb25zCisJICov CisJaWYgKHNobWVtX3N0YXJ0dXBfaG9vaykKKwkJc2htZW1fc3RhcnR1cF9ob29rKCk7Cit9 CisKKy8qCisgKiBJbml0aWFsaXplIHZhcmlvdXMgc3Vic3lzdGVtcywgc2V0dGluZyB1cCB0 aGVpciBkYXRhIHN0cnVjdHVyZXMgaW4KKyAqIHNoYXJlZCBtZW1vcnkuCiAgKgogICogVGhp cyBpcyBjYWxsZWQgYnkgdGhlIHBvc3RtYXN0ZXIgb3IgYnkgYSBzdGFuZGFsb25lIGJhY2tl bmQuCiAgKiBJdCBpcyBhbHNvIGNhbGxlZCBieSBhIGJhY2tlbmQgZm9ya2VkIGZyb20gdGhl IHBvc3RtYXN0ZXIgaW4gdGhlCkBAIC0xNzEsNjUgKzI3MCw5IEBAIENhbGN1bGF0ZVNobWVt U2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKQogICogY2hlY2sgSXNVbmRlclBvc3RtYXN0ZXIs IHJhdGhlciB0aGFuIEVYRUNfQkFDS0VORCwgdG8gZGV0ZWN0IHRoaXMgY2FzZS4KICAqIFRo aXMgaXMgYSBiaXQgY29kZS13YXN0ZWZ1bCBhbmQgY291bGQgYmUgY2xlYW5lZCB1cC4pCiAg Ki8KLXZvaWQKLUNyZWF0ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCkKK3N0YXRp YyB2b2lkCitDcmVhdGVPckF0dGFjaFNobWVtU3RydWN0cyh2b2lkKQogewotCVBHU2htZW1I ZWFkZXIgKnNoaW0gPSBOVUxMOwotCi0JaWYgKCFJc1VuZGVyUG9zdG1hc3RlcikKLQl7Ci0J CVBHU2htZW1IZWFkZXIgKnNlZ2hkcjsKLQkJU2l6ZQkJc2l6ZTsKLQkJaW50CQkJbnVtU2Vt YXM7Ci0KLQkJLyogQ29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgc2hhcmVkLW1lbW9yeSBibG9j ayAqLwotCQlzaXplID0gQ2FsY3VsYXRlU2htZW1TaXplKCZudW1TZW1hcyk7Ci0JCWVsb2co REVCVUczLCAiaW52b2tpbmcgSXBjTWVtb3J5Q3JlYXRlKHNpemU9JXp1KSIsIHNpemUpOwot Ci0JCS8qCi0JCSAqIENyZWF0ZSB0aGUgc2htZW0gc2VnbWVudAotCQkgKi8KLQkJc2VnaGRy ID0gUEdTaGFyZWRNZW1vcnlDcmVhdGUoc2l6ZSwgJnNoaW0pOwotCi0JCS8qCi0JCSAqIE1h a2Ugc3VyZSB0aGF0IGh1Z2UgcGFnZXMgYXJlIG5ldmVyIHJlcG9ydGVkIGFzICJ1bmtub3du IiB3aGlsZSB0aGUKLQkJICogc2VydmVyIGlzIHJ1bm5pbmcuCi0JCSAqLwotCQlBc3NlcnQo c3RyY21wKCJ1bmtub3duIiwKLQkJCQkJICBHZXRDb25maWdPcHRpb24oImh1Z2VfcGFnZXNf c3RhdHVzIiwgZmFsc2UsIGZhbHNlKSkgIT0gMCk7Ci0KLQkJSW5pdFNobWVtQWNjZXNzKHNl Z2hkcik7Ci0KLQkJLyoKLQkJICogQ3JlYXRlIHNlbWFwaG9yZXMKLQkJICovCi0JCVBHUmVz ZXJ2ZVNlbWFwaG9yZXMobnVtU2VtYXMpOwotCi0JCS8qCi0JCSAqIElmIHNwaW5sb2NrcyBh cmUgZGlzYWJsZWQsIGluaXRpYWxpemUgZW11bGF0aW9uIGxheWVyICh3aGljaAotCQkgKiBk ZXBlbmRzIG9uIHNlbWFwaG9yZXMsIHNvIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQgaGVyZSku Ci0JCSAqLwotI2lmbmRlZiBIQVZFX1NQSU5MT0NLUwotCQlTcGlubG9ja1NlbWFJbml0KCk7 Ci0jZW5kaWYKLQl9Ci0JZWxzZQotCXsKLQkJLyoKLQkJICogV2UgYXJlIHJlYXR0YWNoaW5n IHRvIGFuIGV4aXN0aW5nIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gVGhpcwotCQkgKiBzaG91 bGQgb25seSBiZSByZWFjaGVkIGluIHRoZSBFWEVDX0JBQ0tFTkQgY2FzZS4KLQkJICovCi0j aWZuZGVmIEVYRUNfQkFDS0VORAotCQllbG9nKFBBTklDLCAic2hvdWxkIGJlIGF0dGFjaGVk IHRvIHNoYXJlZCBtZW1vcnkgYWxyZWFkeSIpOwotI2VuZGlmCi0JfQotCi0JLyoKLQkgKiBT ZXQgdXAgc2hhcmVkIG1lbW9yeSBhbGxvY2F0aW9uIG1lY2hhbmlzbQotCSAqLwotCWlmICgh SXNVbmRlclBvc3RtYXN0ZXIpCi0JCUluaXRTaG1lbUFsbG9jYXRpb24oKTsKLQogCS8qCiAJ ICogTm93IGluaXRpYWxpemUgTFdMb2Nrcywgd2hpY2ggZG8gc2hhcmVkIG1lbW9yeSBhbGxv Y2F0aW9uIGFuZCBhcmUKIAkgKiBuZWVkZWQgZm9yIEluaXRTaG1lbUluZGV4LgpAQCAtMzAy LDI1ICszNDUsNiBAQCBDcmVhdGVTaGFyZWRNZW1vcnlBbmRTZW1hcGhvcmVzKHZvaWQpCiAJ QXN5bmNTaG1lbUluaXQoKTsKIAlTdGF0c1NobWVtSW5pdCgpOwogCVdhaXRFdmVudEV4dGVu c2lvblNobWVtSW5pdCgpOwotCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0KLQkvKgotCSAqIEFs bG9jIHRoZSB3aW4zMiBzaGFyZWQgYmFja2VuZCBhcnJheQotCSAqLwotCWlmICghSXNVbmRl clBvc3RtYXN0ZXIpCi0JCVNobWVtQmFja2VuZEFycmF5QWxsb2NhdGlvbigpOwotI2VuZGlm Ci0KLQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBmYWNpbGl0aWVzLiAq LwotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0JCWRzbV9wb3N0bWFzdGVyX3N0YXJ0dXAo c2hpbSk7Ci0KLQkvKgotCSAqIE5vdyBnaXZlIGxvYWRhYmxlIG1vZHVsZXMgYSBjaGFuY2Ug dG8gc2V0IHVwIHRoZWlyIHNobWVtIGFsbG9jYXRpb25zCi0JICovCi0JaWYgKHNobWVtX3N0 YXJ0dXBfaG9vaykKLQkJc2htZW1fc3RhcnR1cF9ob29rKCk7CiB9CiAKIC8qCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9sbWdyL3Byb2MuYwppbmRleCBlOWU0NDViYjIxNi4uY2RmZGQ2ZmJlMWQgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKKysrIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL3Byb2MuYwpAQCAtNDY4LDcgKzQ2OCw3IEBAIEluaXRQcm9jZXNz KHZvaWQpCiAgKgogICogVGhpcyBpcyBzZXBhcmF0ZSBmcm9tIEluaXRQcm9jZXNzIGJlY2F1 c2Ugd2UgY2FuJ3QgYWNxdWlyZSBMV0xvY2tzIHVudGlsCiAgKiB3ZSd2ZSBjcmVhdGVkIGEg UEdQUk9DLCBidXQgaW4gdGhlIEVYRUNfQkFDS0VORCBjYXNlIFByb2NBcnJheUFkZCB3b24n dAotICogd29yayB1bnRpbCBhZnRlciB3ZSd2ZSBkb25lIENyZWF0ZVNoYXJlZE1lbW9yeUFu ZFNlbWFwaG9yZXMuCisgKiB3b3JrIHVudGlsIGFmdGVyIHdlJ3ZlIGRvbmUgQXR0YWNoU2hh cmVkTWVtb3J5U3RydWN0cy4KICAqLwogdm9pZAogSW5pdFByb2Nlc3NQaGFzZTIodm9pZCkK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvaXBjLmggYi9zcmMvaW5jbHVkZS9z dG9yYWdlL2lwYy5oCmluZGV4IDg4OGMwOGIzMDY3Li5lMjgyZGNhZDk2MiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9pcGMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdl L2lwYy5oCkBAIC03OSw2ICs3OSw5IEBAIGV4dGVybiBQR0RMTElNUE9SVCBzaG1lbV9zdGFy dHVwX2hvb2tfdHlwZSBzaG1lbV9zdGFydHVwX2hvb2s7CiAKIGV4dGVybiBTaXplIENhbGN1 bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKTsKIGV4dGVybiB2b2lkIENyZWF0 ZVNoYXJlZE1lbW9yeUFuZFNlbWFwaG9yZXModm9pZCk7CisjaWZkZWYgRVhFQ19CQUNLRU5E CitleHRlcm4gdm9pZCBBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1Y3RzKHZvaWQpOworI2VuZGlm CiBleHRlcm4gdm9pZCBJbml0aWFsaXplU2htZW1HVUNzKHZvaWQpOwogCiAjZW5kaWYJCQkJ CQkJLyogSVBDX0ggKi8KLS0gCjIuMzkuMgoK --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0002-Pass-BackgroundWorker-entry-in-the-parameter-file.patch" Content-Disposition: attachment; filename*0="v3-0002-Pass-BackgroundWorker-entry-in-the-parameter-file.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzNDc4Y2FmY2Y3NGE1YzhkNjQ5ZTAyODdlNmM3MjY2OWEyOWMwZTcwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMDA6MDI6MDMgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDIvN10gUGFzcyBCYWNrZ3JvdW5kV29ya2VyIGVudHJ5IGlu IHRoZSBwYXJhbWV0ZXIgZmlsZSBpbgogRVhFQ19CQUNLRU5EIG1vZGUKClRoaXMgbWFrZXMg aXQgcG9zc2libGUgdG8gbW92ZSBJbml0UHJvY2VzcyBsYXRlciBpbiBTdWJQb3N0bWFzdGVy TWFpbgooaW4gbmV4dCBjb21taXQpLCBhcyB3ZSBubyBsb25nZXIgbmVlZCB0byBhY2Nlc3Mg c2hhcmVkIG1lbW9yeSB0byByZWFkCmJhY2tncm91bmQgd29ya2VyIGVudHJ5LgoKUmV2aWV3 ZWQtYnk6IFRyaXN0YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdl ZDMtOGIwMWZmN2NlOWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3 b3JrZXIuYyAgICAgICAgICAgfCAyMSAtLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAgfCAzNyArKysrKysrKysrKysrKy0tLS0tLS0K IHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmggfCAgNCAtLS0K IDMgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IDQ4YTk5MjQ1MjdlLi5iM2MyZTY1 YmE5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisr KyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtNjMxLDI3ICs2MzEs NiBAQCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFzaFRpbWVzKHZvaWQpCiAJfQogfQogCi0j aWZkZWYgRVhFQ19CQUNLRU5ECi0vKgotICogSW4gRVhFQ19CQUNLRU5EIG1vZGUsIHdvcmtl cnMgdXNlIHRoaXMgdG8gcmV0cmlldmUgdGhlaXIgZGV0YWlscyBmcm9tCi0gKiBzaGFyZWQg bWVtb3J5LgotICovCi1CYWNrZ3JvdW5kV29ya2VyICoKLUJhY2tncm91bmRXb3JrZXJFbnRy eShpbnQgc2xvdG5vKQotewotCXN0YXRpYyBCYWNrZ3JvdW5kV29ya2VyIG15RW50cnk7Ci0J QmFja2dyb3VuZFdvcmtlclNsb3QgKnNsb3Q7Ci0KLQlBc3NlcnQoc2xvdG5vIDwgQmFja2dy b3VuZFdvcmtlckRhdGEtPnRvdGFsX3Nsb3RzKTsKLQlzbG90ID0gJkJhY2tncm91bmRXb3Jr ZXJEYXRhLT5zbG90W3Nsb3Rub107Ci0JQXNzZXJ0KHNsb3QtPmluX3VzZSk7Ci0KLQkvKiBt dXN0IGNvcHkgdGhpcyBpbiBjYXNlIHdlIGRvbid0IGludGVuZCB0byByZXRhaW4gc2htZW0g YWNjZXNzICovCi0JbWVtY3B5KCZteUVudHJ5LCAmc2xvdC0+d29ya2VyLCBzaXplb2YgbXlF bnRyeSk7Ci0JcmV0dXJuICZteUVudHJ5OwotfQotI2VuZGlmCi0KIC8qCiAgKiBDb21wbGFp biBhYm91dCB0aGUgQmFja2dyb3VuZFdvcmtlciBkZWZpbml0aW9uIHVzaW5nIGVycm9yIGxl dmVsIGVsZXZlbC4KICAqIFJldHVybiB0cnVlIGlmIGl0IGxvb2tzIG9rLCBmYWxzZSBpZiBu b3QgKHVubGVzcyBlbGV2ZWwgPj0gRVJST1IsIGluCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9z dG1hc3Rlci5jCmluZGV4IGIwM2U4OGU2NzAyLi5hYzBlMmMwYTM1YiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMKQEAgLTU0MCw2ICs1NDAsOCBAQCB0eXBlZGVmIHN0 cnVjdAogI2VuZGlmCiAJY2hhcgkJbXlfZXhlY19wYXRoW01BWFBHUEFUSF07CiAJY2hhcgkJ cGtnbGliX3BhdGhbTUFYUEdQQVRIXTsKKworCUJhY2tncm91bmRXb3JrZXIgTXlCZ3dvcmtl ckVudHJ5OwogfSBCYWNrZW5kUGFyYW1ldGVyczsKIAogc3RhdGljIHZvaWQgcmVhZF9iYWNr ZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgUG9ydCAqcG9ydCk7CkBAIC00ODMxLDcgKzQ4MzMs NyBAQCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQlzdHJj bXAoYXJndlsxXSwgIi0tZm9ya2F2bGF1bmNoZXIiKSA9PSAwIHx8CiAJCXN0cmNtcChhcmd2 WzFdLCAiLS1mb3JrYXZ3b3JrZXIiKSA9PSAwIHx8CiAJCXN0cmNtcChhcmd2WzFdLCAiLS1m b3JrYXV4IikgPT0gMCB8fAotCQlzdHJuY21wKGFyZ3ZbMV0sICItLWZvcmtiZ3dvcmtlcj0i LCAxNSkgPT0gMCkKKwkJc3RybmNtcChhcmd2WzFdLCAiLS1mb3JrYmd3b3JrZXIiLCAxNCkg PT0gMCkKIAkJUEdTaGFyZWRNZW1vcnlSZUF0dGFjaCgpOwogCWVsc2UKIAkJUEdTaGFyZWRN ZW1vcnlOb1JlQXR0YWNoKCk7CkBAIC00OTYyLDEwICs0OTY0LDggQEAgU3ViUG9zdG1hc3Rl ck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAogCQlBdXRvVmFjV29ya2VyTWFpbihh cmdjIC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9Ci0JaWYgKHN0 cm5jbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29ya2VyPSIsIDE1KSA9PSAwKQorCWlmIChzdHJu Y21wKGFyZ3ZbMV0sICItLWZvcmtiZ3dvcmtlciIsIDE0KSA9PSAwKQogCXsKLQkJaW50CQkJ c2htZW1fc2xvdDsKLQogCQkvKiBkbyB0aGlzIGFzIGVhcmx5IGFzIHBvc3NpYmxlOyBpbiBw YXJ0aWN1bGFyLCBiZWZvcmUgSW5pdFByb2Nlc3MoKSAqLwogCQlJc0JhY2tncm91bmRXb3Jr ZXIgPSB0cnVlOwogCkBAIC00OTc4LDEwICs0OTc4LDYgQEAgU3ViUG9zdG1hc3Rlck1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogQXR0YWNoIHByb2Nlc3MgdG8gc2hhcmVk IGRhdGEgc3RydWN0dXJlcyAqLwogCQlBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1Y3RzKCk7CiAK LQkJLyogRmV0Y2ggTXlCZ3dvcmtlckVudHJ5IGZyb20gc2hhcmVkIG1lbW9yeSAqLwotCQlz aG1lbV9zbG90ID0gYXRvaShhcmd2WzFdICsgMTUpOwotCQlNeUJnd29ya2VyRW50cnkgPSBC YWNrZ3JvdW5kV29ya2VyRW50cnkoc2htZW1fc2xvdCk7Ci0KIAkJQmFja2dyb3VuZFdvcmtl ck1haW4oKTsKIAl9CiAJaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrbG9nIikgPT0gMCkK QEAgLTU2NDAsMTMgKzU2MzYsMTQgQEAgQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxz KHZvaWQpCiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIHN0YXRpYyBwaWRfdAotYmd3b3JrZXJf Zm9ya2V4ZWMoaW50IHNobWVtX3Nsb3QpCitiZ3dvcmtlcl9mb3JrZXhlYyhCYWNrZ3JvdW5k V29ya2VyICp3b3JrZXIpCiB7CiAJY2hhcgkgICAqYXZbMTBdOwogCWludAkJCWFjID0gMDsK IAljaGFyCQlmb3JrYXZbTUFYUEdQQVRIXTsKKwlwaWRfdAkJcmVzdWx0OwogCi0Jc25wcmlu dGYoZm9ya2F2LCBNQVhQR1BBVEgsICItLWZvcmtiZ3dvcmtlcj0lZCIsIHNobWVtX3Nsb3Qp OworCXNucHJpbnRmKGZvcmthdiwgTUFYUEdQQVRILCAiLS1mb3JrYmd3b3JrZXIiKTsKIAog CWF2W2FjKytdID0gInBvc3RncmVzIjsKIAlhdlthYysrXSA9IGZvcmthdjsKQEAgLTU2NTUs NyArNTY1MiwxMSBAQCBiZ3dvcmtlcl9mb3JrZXhlYyhpbnQgc2htZW1fc2xvdCkKIAogCUFz c2VydChhYyA8IGxlbmd0aG9mKGF2KSk7CiAKLQlyZXR1cm4gcG9zdG1hc3Rlcl9mb3JrZXhl YyhhYywgYXYpOworCU15Qmd3b3JrZXJFbnRyeSA9IHdvcmtlcjsKKwlyZXN1bHQgPSBwb3N0 bWFzdGVyX2ZvcmtleGVjKGFjLCBhdik7CisJTXlCZ3dvcmtlckVudHJ5ID0gTlVMTDsKKwor CXJldHVybiByZXN1bHQ7CiB9CiAjZW5kaWYKIApAQCAtNTY5Niw3ICs1Njk3LDcgQEAgZG9f c3RhcnRfYmd3b3JrZXIoUmVnaXN0ZXJlZEJnV29ya2VyICpydykKIAkJCQkJCQkgcnctPnJ3 X3dvcmtlci5iZ3dfbmFtZSkpKTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAotCXN3aXRjaCAo KHdvcmtlcl9waWQgPSBiZ3dvcmtlcl9mb3JrZXhlYyhydy0+cndfc2htZW1fc2xvdCkpKQor CXN3aXRjaCAoKHdvcmtlcl9waWQgPSBiZ3dvcmtlcl9mb3JrZXhlYygmcnctPnJ3X3dvcmtl cikpKQogI2Vsc2UKIAlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gZm9ya19wcm9jZXNzKCkpKQog I2VuZGlmCkBAIC02MDk2LDYgKzYwOTcsMTEgQEAgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhC YWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIFBvcnQgKnBvcnQsCiAKIAlzdHJsY3B5KHBhcmFt LT5wa2dsaWJfcGF0aCwgcGtnbGliX3BhdGgsIE1BWFBHUEFUSCk7CiAKKwlpZiAoTXlCZ3dv cmtlckVudHJ5KQorCQltZW1jcHkoJnBhcmFtLT5NeUJnd29ya2VyRW50cnksIE15Qmd3b3Jr ZXJFbnRyeSwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwllbHNlCisJCW1lbXNldCgm cGFyYW0tPk15Qmd3b3JrZXJFbnRyeSwgMCwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsK KwogCXJldHVybiB0cnVlOwogfQogCkBAIC02MzI0LDYgKzYzMzAsMTMgQEAgcmVzdG9yZV9i YWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIFBvcnQgKnBvcnQp CiAKIAlzdHJsY3B5KHBrZ2xpYl9wYXRoLCBwYXJhbS0+cGtnbGliX3BhdGgsIE1BWFBHUEFU SCk7CiAKKwlpZiAocGFyYW0tPk15Qmd3b3JrZXJFbnRyeS5iZ3dfbmFtZVswXSAhPSAnXDAn KQorCXsKKwkJTXlCZ3dvcmtlckVudHJ5ID0gKEJhY2tncm91bmRXb3JrZXIgKikKKwkJCU1l bW9yeUNvbnRleHRBbGxvYyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YoQmFja2dyb3VuZFdv cmtlcikpOworCQltZW1jcHkoTXlCZ3dvcmtlckVudHJ5LCAmcGFyYW0tPk15Qmd3b3JrZXJF bnRyeSwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwl9CisKIAkvKgogCSAqIFdlIG5l ZWQgdG8gcmVzdG9yZSBmZC5jJ3MgY291bnRzIG9mIGV4dGVybmFsbHktb3BlbmVkIEZEczsg dG8gYXZvaWQKIAkgKiBjb25mdXNpb24sIGJlIHN1cmUgdG8gZG8gdGhpcyBhZnRlciByZXN0 b3JpbmcgbWF4X3NhZmVfZmRzLiAgKE5vdGU6CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9w b3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9iZ3dvcmtlcl9pbnRlcm5hbHMuaAppbmRleCAwOWRmMDU0ZmNjZS4uMzIzZjFlMDcyOTEg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxz LmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaApA QCAtNTcsOCArNTcsNCBAQCBleHRlcm4gdm9pZCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFz aFRpbWVzKHZvaWQpOwogLyogRW50cnkgcG9pbnQgZm9yIGJhY2tncm91bmQgd29ya2VyIHBy b2Nlc3NlcyAqLwogZXh0ZXJuIHZvaWQgQmFja2dyb3VuZFdvcmtlck1haW4odm9pZCkgcGdf YXR0cmlidXRlX25vcmV0dXJuKCk7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLWV4dGVybiBC YWNrZ3JvdW5kV29ya2VyICpCYWNrZ3JvdW5kV29ya2VyRW50cnkoaW50IHNsb3Rubyk7Ci0j ZW5kaWYKLQogI2VuZGlmCQkJCQkJCS8qIEJHV09SS0VSX0lOVEVSTkFMU19IICovCi0tIAoy LjM5LjIKCg== --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0003-Refactor-how-InitProcess-is-called.patch" Content-Disposition: attachment; filename="v3-0003-Refactor-how-InitProcess-is-called.patch" Content-Transfer-Encoding: base64 RnJvbSAwZDA3MTQ3NGUxMmE3MGZmODExM2M3YjA3MzFjNWI5N2ZlYzQ1MDA3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMjkgTm92IDIwMjMgMjM6NDc6MjUgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDMvN10gUmVmYWN0b3IgaG93IEluaXRQcm9jZXNzIGlzIGNh bGxlZAoKVGhlIG9yZGVyIG9mIHByb2Nlc3MgaW5pdGlhbGl6YXRpb24gc3RlcHMgaXMgbm93 IG1vcmUgY29uc2lzdGVudApiZXR3ZWVuICFFWEVDX0JBQ0tFTkQgYW5kIEVYRUNfQkFDS0VO RCBtb2Rlcy4gSW5pdFByb2Nlc3MoKSBpcyBjYWxsZWQKYXQgdGhlIHNhbWUgcGxhY2UgaW4g ZWl0aGVyIG1vZGUuIFdlIGNhbiBub3cgYWxzbyBtb3ZlIHRoZQpBdHRhY2hTaGFyZWRNZW1v cnlTdHJ1Y3RzKCkgY2FsbCBpbnRvIEluaXRQcm9jZXNzKCkgaXRzZWxmLiBUaGlzCnJlZHVj ZXMgdGhlIG51bWJlciBvZiAiI2lmZGVmIEVYRUNfQkFDS0VORCIgYmxvY2tzLgoKUmV2aWV3 ZWQtYnk6IFRyaXN0YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdl ZDMtOGIwMWZmN2NlOWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0 b3ZhY3V1bS5jIHwgMTYgKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhw cm9jZXNzLmMgfCAgNSArLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMg ICB8ICA4ICsrLS0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYyB8IDQ1 ICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jICAgICB8IDEyICsrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDI1IGluc2Vy dGlvbnMoKyksIDYxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFj dXVtLmMKaW5kZXggODZhM2IzZDhiZTIuLjJmNTQ0ODVjMjE3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtNDc2LDE0ICs0NzYsMTAgQEAgQXV0b1ZhY0xhdW5j aGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCXBxc2lnbmFsKFNJR0NITEQsIFNJ R19ERkwpOwogCiAJLyoKLQkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0 IGluIHNoYXJlZCBtZW1vcnksIGV4Y2VwdCBpbiB0aGUKLQkgKiBFWEVDX0JBQ0tFTkQgY2Fz ZSB3aGVyZSB0aGlzIHdhcyBkb25lIGluIFN1YlBvc3RtYXN0ZXJNYWluLiBXZSBtdXN0IGRv Ci0JICogdGhpcyBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzIChhbmQgaW4gdGhlIEVYRUNf QkFDS0VORCBjYXNlIHdlIGFscmVhZHkKLQkgKiBoYWQgdG8gZG8gc29tZSBzdHVmZiB3aXRo IExXTG9ja3MpLgorCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4g c2hhcmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcworCSAqIGJlZm9yZSB3ZSBjYW4gdXNl IExXTG9ja3Mgb3IgYWNjZXNzIGFueSBzaGFyZWQgbWVtb3J5LgogCSAqLwotI2lmbmRlZiBF WEVDX0JBQ0tFTkQKIAlJbml0UHJvY2VzcygpOwotI2VuZGlmCiAKIAkvKiBFYXJseSBpbml0 aWFsaXphdGlvbiAqLwogCUJhc2VJbml0KCk7CkBAIC0xNTQ4LDE0ICsxNTQ0LDEwIEBAIEF1 dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcHFzaWduYWwoU0lH Q0hMRCwgU0lHX0RGTCk7CiAKIAkvKgotCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJP QyBzdHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeSwgZXhjZXB0IGluIHRoZQotCSAqIEVYRUNfQkFD S0VORCBjYXNlIHdoZXJlIHRoaXMgd2FzIGRvbmUgaW4gU3ViUG9zdG1hc3Rlck1haW4uIFdl IG11c3QgZG8KLQkgKiB0aGlzIGJlZm9yZSB3ZSBjYW4gdXNlIExXTG9ja3MgKGFuZCBpbiB0 aGUgRVhFQ19CQUNLRU5EIGNhc2Ugd2UgYWxyZWFkeQotCSAqIGhhZCB0byBkbyBzb21lIHN0 dWZmIHdpdGggTFdMb2NrcykuCisJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0 cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCisJICogYmVmb3JlIHdl IGNhbiB1c2UgTFdMb2NrcyBvciBhY2Nlc3MgYW55IHNoYXJlZCBtZW1vcnkuCiAJICovCi0j aWZuZGVmIEVYRUNfQkFDS0VORAogCUluaXRQcm9jZXNzKCk7Ci0jZW5kaWYKIAogCS8qIEVh cmx5IGluaXRpYWxpemF0aW9uICovCiAJQmFzZUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXhwcm9jZXNzLmMKaW5kZXggY2FlNmZlYjM1NjIuLmJhZTZmNjhjNDAyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYworKysgYi9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYwpAQCAtOTcsMTIgKzk3LDkgQEAgQXV4aWxp YXJ5UHJvY2Vzc01haW4oQXV4UHJvY1R5cGUgYXV4dHlwZSkKIAkgKi8KIAogCS8qCi0JICog Q3JlYXRlIGEgUEdQUk9DIHNvIHdlIGNhbiB1c2UgTFdMb2Nrcy4gIEluIHRoZSBFWEVDX0JB Q0tFTkQgY2FzZSwgdGhpcwotCSAqIHdhcyBhbHJlYWR5IGRvbmUgYnkgU3ViUG9zdG1hc3Rl ck1haW4oKS4KKwkgKiBDcmVhdGUgYSBQR1BST0Mgc28gd2UgY2FuIHVzZSBMV0xvY2tzIGFu ZCBhY2Nlc3Mgc2hhcmVkIG1lbW9yeS4KIAkgKi8KLSNpZm5kZWYgRVhFQ19CQUNLRU5ECiAJ SW5pdEF1eGlsaWFyeVByb2Nlc3MoKTsKLSNlbmRpZgogCiAJQmFzZUluaXQoKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCmluZGV4IGIzYzJlNjViYTlmLi4zZmJjOGY1MDNj YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBi L3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtODEwLDE0ICs4MTAsMTAg QEAgQmFja2dyb3VuZFdvcmtlck1haW4odm9pZCkKIAlQR19leGNlcHRpb25fc3RhY2sgPSAm bG9jYWxfc2lnam1wX2J1ZjsKIAogCS8qCi0JICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQ Uk9DIHN0cnVjdCBpbiBzaGFyZWQgbWVtb3J5LCBleGNlcHQgaW4gdGhlCi0JICogRVhFQ19C QUNLRU5EIGNhc2Ugd2hlcmUgdGhpcyB3YXMgZG9uZSBpbiBTdWJQb3N0bWFzdGVyTWFpbi4g V2UgbXVzdCBkbwotCSAqIHRoaXMgYmVmb3JlIHdlIGNhbiB1c2UgTFdMb2NrcyAoYW5kIGlu IHRoZSBFWEVDX0JBQ0tFTkQgY2FzZSB3ZSBhbHJlYWR5Ci0JICogaGFkIHRvIGRvIHNvbWUg c3R1ZmYgd2l0aCBMV0xvY2tzKS4KKwkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mg c3RydWN0IGluIHNoYXJlZCBtZW1vcnkuICBXZSBtdXN0IGRvIHRoaXMKKwkgKiBiZWZvcmUg d2UgY2FuIHVzZSBMV0xvY2tzIG9yIGFjY2VzcyBhbnkgc2hhcmVkIG1lbW9yeS4KIAkgKi8K LSNpZm5kZWYgRVhFQ19CQUNLRU5ECiAJSW5pdFByb2Nlc3MoKTsKLSNlbmRpZgogCiAJLyoK IAkgKiBFYXJseSBpbml0aWFsaXphdGlvbi4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFz dGVyLmMKaW5kZXggYWMwZTJjMGEzNWIuLmRkMjkwZDA2ZTNkIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYwpAQCAtNDA5NywxNSArNDA5Nyw2IEBAIEJhY2tlbmRTdGFy dHVwKFBvcnQgKnBvcnQpCiAJCS8qIFBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFsaXphdGlv biBhbmQgY29sbGVjdCBzdGFydHVwIHBhY2tldCAqLwogCQlCYWNrZW5kSW5pdGlhbGl6ZShw b3J0KTsKIAotCQkvKgotCQkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0 IGluIHNoYXJlZCBtZW1vcnkuIFdlIG11c3QgZG8KLQkJICogdGhpcyBiZWZvcmUgd2UgY2Fu IHVzZSBMV0xvY2tzLiBJbiB0aGUgIUVYRUNfQkFDS0VORCBjYXNlIChoZXJlKQotCQkgKiB0 aGlzIGNvdWxkIGJlIGRlbGF5ZWQgYSBiaXQgZnVydGhlciwgYnV0IEVYRUNfQkFDS0VORCBu ZWVkcyB0byBkbwotCQkgKiBzdHVmZiB3aXRoIExXTG9ja3MgYmVmb3JlIFBvc3RncmVzTWFp bigpLCBzbyB3ZSBkbyBpdCBoZXJlIGFzIHdlbGwKLQkJICogZm9yIHN5bW1ldHJ5LgotCQkg Ki8KLQkJSW5pdFByb2Nlc3MoKTsKLQogCQkvKiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCiAJ CUJhY2tlbmRSdW4ocG9ydCk7CiAJfQpAQCAtNDQxNiw2ICs0NDA3LDEyIEBAIEJhY2tlbmRJ bml0aWFsaXplKFBvcnQgKnBvcnQpCiBzdGF0aWMgdm9pZAogQmFja2VuZFJ1bihQb3J0ICpw b3J0KQogeworCS8qCisJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBp biBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCisJICogYmVmb3JlIHdlIGNhbiB1 c2UgTFdMb2NrcyBvciBhY2Nlc3MgYW55IHNoYXJlZCBtZW1vcnkuCisJICovCisJSW5pdFBy b2Nlc3MoKTsKKwogCS8qCiAJICogTWFrZSBzdXJlIHdlIGFyZW4ndCBpbiBQb3N0bWFzdGVy Q29udGV4dCBhbnltb3JlLiAgKFdlIGNhbid0IGRlbGV0ZSBpdAogCSAqIGp1c3QgeWV0LCB0 aG91Z2gsIGJlY2F1c2UgSW5pdFBvc3RncmVzIHdpbGwgbmVlZCB0aGUgSEJBIGRhdGEuKQpA QCAtNDkxMSwxMiArNDkwOCw2IEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAq LwogCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7CiAKLQkJLyogTmVlZCBh IFBHUFJPQyB0byBydW4gQXR0YWNoU2hhcmVkTWVtb3J5U3RydWN0cyAqLwotCQlJbml0UHJv Y2VzcygpOwotCi0JCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVy ZXMgKi8KLQkJQXR0YWNoU2hhcmVkTWVtb3J5U3RydWN0cygpOwotCiAJCS8qIEFuZCBydW4g dGhlIGJhY2tlbmQgKi8KIAkJQmFja2VuZFJ1bigmcG9ydCk7CQkvKiBkb2VzIG5vdCByZXR1 cm4gKi8KIAl9CkBAIC00OTI5LDEyICs0OTIwLDYgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5 IHBvaW50ZXJzICovCiAJCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAot CQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1biBBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1Y3RzICov Ci0JCUluaXRBdXhpbGlhcnlQcm9jZXNzKCk7Ci0KLQkJLyogQXR0YWNoIHByb2Nlc3MgdG8g c2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwotCQlBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1Y3Rz KCk7Ci0KIAkJYXV4dHlwZSA9IGF0b2koYXJndlszXSk7CiAJCUF1eGlsaWFyeVByb2Nlc3NN YWluKGF1eHR5cGUpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9CkBAIC00OTQzLDEyICs0 OTI4LDYgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJ LyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCiAJCUluaXRTaG1l bUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKIAotCQkvKiBOZWVkIGEgUEdQUk9DIHRvIHJ1 biBBdHRhY2hTaGFyZWRNZW1vcnlTdHJ1Y3RzICovCi0JCUluaXRQcm9jZXNzKCk7Ci0KLQkJ LyogQXR0YWNoIHByb2Nlc3MgdG8gc2hhcmVkIGRhdGEgc3RydWN0dXJlcyAqLwotCQlBdHRh Y2hTaGFyZWRNZW1vcnlTdHJ1Y3RzKCk7Ci0KIAkJQXV0b1ZhY0xhdW5jaGVyTWFpbihhcmdj IC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1cm4gKi8KIAl9CiAJaWYgKHN0cmNt cChhcmd2WzFdLCAiLS1mb3JrYXZ3b3JrZXIiKSA9PSAwKQpAQCAtNDk1NiwxMiArNDkzNSw2 IEBAIFN1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCS8qIFJl c3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAqLwogCQlJbml0U2htZW1BY2Nl c3MoVXNlZFNobWVtU2VnQWRkcik7CiAKLQkJLyogTmVlZCBhIFBHUFJPQyB0byBydW4gQXR0 YWNoU2hhcmVkTWVtb3J5U3RydWN0cyAqLwotCQlJbml0UHJvY2VzcygpOwotCi0JCS8qIEF0 dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KLQkJQXR0YWNoU2hh cmVkTWVtb3J5U3RydWN0cygpOwotCiAJCUF1dG9WYWNXb3JrZXJNYWluKGFyZ2MgLSAyLCBh cmd2ICsgMik7CS8qIGRvZXMgbm90IHJldHVybiAqLwogCX0KIAlpZiAoc3RybmNtcChhcmd2 WzFdLCAiLS1mb3JrYmd3b3JrZXIiLCAxNCkgPT0gMCkKQEAgLTQ5NzIsMTIgKzQ5NDUsNiBA QCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkvKiBSZXN0 b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5pdFNobWVtQWNjZXNz KFVzZWRTaG1lbVNlZ0FkZHIpOwogCi0JCS8qIE5lZWQgYSBQR1BST0MgdG8gcnVuIEF0dGFj aFNoYXJlZE1lbW9yeVN0cnVjdHMgKi8KLQkJSW5pdFByb2Nlc3MoKTsKLQotCQkvKiBBdHRh Y2ggcHJvY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzICovCi0JCUF0dGFjaFNoYXJl ZE1lbW9yeVN0cnVjdHMoKTsKLQogCQlCYWNrZ3JvdW5kV29ya2VyTWFpbigpOwogCX0KIAlp ZiAoc3RyY21wKGFyZ3ZbMV0sICItLWZvcmtsb2ciKSA9PSAwKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcm9jLmMKaW5kZXggY2RmZGQ2ZmJlMWQuLjZjNzA4Nzc3ZGRlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9wcm9jLmMKQEAgLTQ2MSw2ICs0NjEsMTIgQEAgSW5pdFByb2Nlc3Modm9pZCkK IAkgKi8KIAlJbml0TFdMb2NrQWNjZXNzKCk7CiAJSW5pdERlYWRMb2NrQ2hlY2tpbmcoKTsK KworI2lmZGVmIEVYRUNfQkFDS0VORAorCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBk YXRhIHN0cnVjdHVyZXMgKi8KKwlpZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCUF0dGFjaFNo YXJlZE1lbW9yeVN0cnVjdHMoKTsKKyNlbmRpZgogfQogCiAvKgpAQCAtNjE0LDYgKzYyMCwx MiBAQCBJbml0QXV4aWxpYXJ5UHJvY2Vzcyh2b2lkKQogCSAqIEFycmFuZ2UgdG8gY2xlYW4g dXAgYXQgcHJvY2VzcyBleGl0LgogCSAqLwogCW9uX3NobWVtX2V4aXQoQXV4aWxpYXJ5UHJv Y0tpbGwsIEludDMyR2V0RGF0dW0ocHJvY3R5cGUpKTsKKworI2lmZGVmIEVYRUNfQkFDS0VO RAorCS8qIEF0dGFjaCBwcm9jZXNzIHRvIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMgKi8KKwlp ZiAoSXNVbmRlclBvc3RtYXN0ZXIpCisJCUF0dGFjaFNoYXJlZE1lbW9yeVN0cnVjdHMoKTsK KyNlbmRpZgogfQogCiAvKgotLSAKMi4zOS4yCgo= --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0004-Pass-CAC-as-argument-to-backend-process.patch" Content-Disposition: attachment; filename="v3-0004-Pass-CAC-as-argument-to-backend-process.patch" Content-Transfer-Encoding: base64 RnJvbSA4ODg2ZGIxZWQ2YmFlMjFiZjZkNzdjOWJiMTIzMGVkYmI1NWUyNGY5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMDA6MDQ6MjIgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDQvN10gUGFzcyBDQUMgYXMgYXJndW1lbnQgdG8gYmFja2Vu ZCBwcm9jZXNzCgpXZSB1c2VkIHRvIHNtdWdnbGUgaXQgdG8gdGhlIGNoaWxkIHByb2Nlc3Mg aW4gdGhlIFBvcnQgc3RydWN0LCBidXQgaXQgc2VlbXMKYmV0dGVyIHRvIHBhc3MgaXQgZG93 biBhcyBhIHNlcGFyYXRlIGFyZ3VtZW50LgoKUmV2aWV3ZWQtYnk6IFRyaXN0YW4gUGFydGlu LCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdlZDMtOGIwMWZmN2NlOWVmQGlraS5m aQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jIHwgNDMgKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgg ICAgICAgIHwgMTIgLS0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygr KSwgMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwpp bmRleCBkZDI5MGQwNmUzZC4uMWE3MmI1MjI5OTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv cG9zdG1hc3Rlci5jCkBAIC00MTgsNyArNDE4LDE4IEBAIHN0YXRpYyB2b2lkIEhhbmRsZUNo aWxkQ3Jhc2goaW50IHBpZCwgaW50IGV4aXRzdGF0dXMsIGNvbnN0IGNoYXIgKnByb2NuYW1l KTsKIHN0YXRpYyB2b2lkIExvZ0NoaWxkRXhpdChpbnQgbGV2LCBjb25zdCBjaGFyICpwcm9j bmFtZSwKIAkJCQkJCSBpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cyk7CiBzdGF0aWMgdm9pZCBQ b3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpOwotc3RhdGljIHZvaWQgQmFja2VuZEluaXRp YWxpemUoUG9ydCAqcG9ydCk7CisKK3R5cGVkZWYgZW51bSBDQUNfc3RhdGUKK3sKKwlDQUNf T0ssCisJQ0FDX1NUQVJUVVAsCisJQ0FDX1NIVVRET1dOLAorCUNBQ19SRUNPVkVSWSwKKwlD QUNfTk9UQ09OU0lTVEVOVCwKKwlDQUNfVE9PTUFOWSwKK30gQ0FDX3N0YXRlOworCitzdGF0 aWMgdm9pZCBCYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsK IHN0YXRpYyB2b2lkIEJhY2tlbmRSdW4oUG9ydCAqcG9ydCkgcGdfYXR0cmlidXRlX25vcmV0 dXJuKCk7CiBzdGF0aWMgdm9pZCBFeGl0UG9zdG1hc3RlcihpbnQgc3RhdHVzKSBwZ19hdHRy aWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyBpbnQJU2VydmVyTG9vcCh2b2lkKTsKQEAgLTQ3 NSw3ICs0ODYsNyBAQCB0eXBlZGVmIHN0cnVjdAogfSB3aW4zMl9kZWFkY2hpbGRfd2FpdGlu Zm87CiAjZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KIAotc3RhdGljIHBpZF90IGJhY2tlbmRf Zm9ya2V4ZWMoUG9ydCAqcG9ydCk7CitzdGF0aWMgcGlkX3QgYmFja2VuZF9mb3JrZXhlYyhQ b3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsKIHN0YXRpYyBwaWRfdCBpbnRlcm5hbF9mb3Jr ZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBQb3J0ICpwb3J0KTsKIAogLyogVHlwZSBm b3IgYSBzb2NrZXQgdGhhdCBjYW4gYmUgaW5oZXJpdGVkIHRvIGEgY2xpZW50IHByb2Nlc3Mg Ki8KQEAgLTQwMzcsNiArNDA0OCw3IEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiB7 CiAJQmFja2VuZCAgICAqYm47CQkJCS8qIGZvciBiYWNrZW5kIGNsZWFudXAgKi8KIAlwaWRf dAkJcGlkOworCUNBQ19zdGF0ZQljYWM7CiAKIAkvKgogCSAqIENyZWF0ZSBiYWNrZW5kIGRh dGEgc3RydWN0dXJlLiAgQmV0dGVyIGJlZm9yZSB0aGUgZm9yaygpIHNvIHdlIGNhbgpAQCAt NDA2OCw4ICs0MDgwLDggQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAlibi0+Y2Fu Y2VsX2tleSA9IE15Q2FuY2VsS2V5OwogCiAJLyogUGFzcyBkb3duIGNhbkFjY2VwdENvbm5l Y3Rpb25zIHN0YXRlICovCi0JcG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMgPSBjYW5BY2Nl cHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFMKTsKLQlibi0+ZGVhZF9lbmQgPSAo cG9ydC0+Y2FuQWNjZXB0Q29ubmVjdGlvbnMgIT0gQ0FDX09LKTsKKwljYWMgPSBjYW5BY2Nl cHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFMKTsKKwlibi0+ZGVhZF9lbmQgPSAo Y2FjICE9IENBQ19PSyk7CiAKIAkvKgogCSAqIFVubGVzcyBpdCdzIGEgZGVhZF9lbmQgY2hp bGQsIGFzc2lnbiBpdCBhIGNoaWxkIHNsb3QgbnVtYmVyCkBAIC00MDgzLDcgKzQwOTUsNyBA QCBCYWNrZW5kU3RhcnR1cChQb3J0ICpwb3J0KQogCWJuLT5iZ3dvcmtlcl9ub3RpZnkgPSBm YWxzZTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAotCXBpZCA9IGJhY2tlbmRfZm9ya2V4ZWMo cG9ydCk7CisJcGlkID0gYmFja2VuZF9mb3JrZXhlYyhwb3J0LCBjYWMpOwogI2Vsc2UJCQkJ CQkJLyogIUVYRUNfQkFDS0VORCAqLwogCXBpZCA9IGZvcmtfcHJvY2VzcygpOwogCWlmIChw aWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KQEAgLTQwOTUsNyArNDEwNyw3IEBAIEJhY2tlbmRT dGFydHVwKFBvcnQgKnBvcnQpCiAJCUNsb3NlUG9zdG1hc3RlclBvcnRzKGZhbHNlKTsKIAog CQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gYW5kIGNvbGxlY3Qgc3Rh cnR1cCBwYWNrZXQgKi8KLQkJQmFja2VuZEluaXRpYWxpemUocG9ydCk7CisJCUJhY2tlbmRJ bml0aWFsaXplKHBvcnQsIGNhYyk7CiAKIAkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwog CQlCYWNrZW5kUnVuKHBvcnQpOwpAQCAtNDE4Miw3ICs0MTk0LDcgQEAgcmVwb3J0X2Zvcmtf ZmFpbHVyZV90b19jbGllbnQoUG9ydCAqcG9ydCwgaW50IGVycm51bSkKICAqIGJ1dCBoYXZl IG5vdCB5ZXQgc2V0IHVwIG1vc3Qgb2Ygb3VyIGxvY2FsIHBvaW50ZXJzIHRvIHNobWVtIHN0 cnVjdHVyZXMuCiAgKi8KIHN0YXRpYyB2b2lkCi1CYWNrZW5kSW5pdGlhbGl6ZShQb3J0ICpw b3J0KQorQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIHsK IAlpbnQJCQlzdGF0dXM7CiAJaW50CQkJcmV0OwpAQCAtNDMxNSw3ICs0MzI3LDcgQEAgQmFj a2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCkKIAkgKiBub3cgaW5zdGVhZCBvZiB3YXN0aW5n IGN5Y2xlcyBvbiBhbiBhdXRoZW50aWNhdGlvbiBleGNoYW5nZS4gKFRoaXMgYWxzbwogCSAq IGFsbG93cyBhIHBnX3BpbmcgdXRpbGl0eSB0byBiZSB3cml0dGVuLikKIAkgKi8KLQlzd2l0 Y2ggKHBvcnQtPmNhbkFjY2VwdENvbm5lY3Rpb25zKQorCXN3aXRjaCAoY2FjKQogCXsKIAkJ Y2FzZSBDQUNfU1RBUlRVUDoKIAkJCWVyZXBvcnQoRkFUQUwsCkBAIC00NDU3LDE1ICs0NDY5 LDE5IEBAIHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAq IHJldHVybnMgdGhlIHBpZCBvZiB0aGUgZm9yay9leGVjJ2QgcHJvY2Vzcywgb3IgLTEgb24g ZmFpbHVyZQogICovCiBzdGF0aWMgcGlkX3QKLWJhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9y dCkKK2JhY2tlbmRfZm9ya2V4ZWMoUG9ydCAqcG9ydCwgQ0FDX3N0YXRlIGNhYykKIHsKLQlj aGFyCSAgICphdls0XTsKKwljaGFyCSAgICphdls1XTsKIAlpbnQJCQlhYyA9IDA7CisJY2hh cgkJY2FjYnVmWzEwXTsKIAogCWF2W2FjKytdID0gInBvc3RncmVzIjsKIAlhdlthYysrXSA9 ICItLWZvcmtiYWNrZW5kIjsKIAlhdlthYysrXSA9IE5VTEw7CQkJLyogZmlsbGVkIGluIGJ5 IGludGVybmFsX2ZvcmtleGVjICovCiAKKwlzbnByaW50ZihjYWNidWYsIHNpemVvZihjYWNi dWYpLCAiJWQiLCAoaW50KSBjYWMpOworCWF2W2FjKytdID0gY2FjYnVmOworCiAJYXZbYWNd ID0gTlVMTDsKIAlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwogCkBAIC00ODY5LDcgKzQ4 ODUsMTAgQEAgU3ViUG9zdG1hc3Rlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkv KiBSdW4gYmFja2VuZCBvciBhcHByb3ByaWF0ZSBjaGlsZCAqLwogCWlmIChzdHJjbXAoYXJn dlsxXSwgIi0tZm9ya2JhY2tlbmQiKSA9PSAwKQogCXsKLQkJQXNzZXJ0KGFyZ2MgPT0gMyk7 CQkvKiBzaG91bGRuJ3QgYmUgYW55IG1vcmUgYXJncyAqLworCQlDQUNfc3RhdGUJY2FjOwor CisJCUFzc2VydChhcmdjID09IDQpOworCQljYWMgPSAoQ0FDX3N0YXRlKSBhdG9pKGFyZ3Zb M10pOwogCiAJCS8qCiAJCSAqIE5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBTU0wgbGlicmFy eSBpbiB0aGUgYmFja2VuZCwgc2luY2UgdGhlCkBAIC00OTAzLDcgKzQ5MjIsNyBAQCBTdWJQ b3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkgKiBQR1BST0Mgc2xv dHMsIHdlIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZCBsaWJwcSBhbmQgYXJlIGFibGUgdG8K IAkJICogcmVwb3J0IHRoZSBlcnJvciB0byB0aGUgY2xpZW50LgogCQkgKi8KLQkJQmFja2Vu ZEluaXRpYWxpemUoJnBvcnQpOworCQlCYWNrZW5kSW5pdGlhbGl6ZSgmcG9ydCwgY2FjKTsK IAogCQkvKiBSZXN0b3JlIGJhc2ljIHNoYXJlZCBtZW1vcnkgcG9pbnRlcnMgKi8KIAkJSW5p dFNobWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0FkZHIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKaW5k ZXggYzU3ZWQxMmZiNmQuLjMzNWNiMmRlNDRhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9s aWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgKQEAg LTU4LDE3ICs1OCw2IEBAIHR5cGVkZWYgc3RydWN0CiAjaW5jbHVkZSAibGlicHEvcHFjb21t LmgiCiAKIAotdHlwZWRlZiBlbnVtIENBQ19zdGF0ZQotewotCUNBQ19PSywKLQlDQUNfU1RB UlRVUCwKLQlDQUNfU0hVVERPV04sCi0JQ0FDX1JFQ09WRVJZLAotCUNBQ19OT1RDT05TSVNU RU5ULAotCUNBQ19UT09NQU5ZLAotfSBDQUNfc3RhdGU7Ci0KLQogLyoKICAqIEdTU0FQSSBz cGVjaWZpYyBzdGF0ZSBpbmZvcm1hdGlvbgogICovCkBAIC0xNTYsNyArMTQ1LDYgQEAgdHlw ZWRlZiBzdHJ1Y3QgUG9ydAogCWludAkJCXJlbW90ZV9ob3N0bmFtZV9yZXNvbHY7IC8qIHNl ZSBhYm92ZSAqLwogCWludAkJCXJlbW90ZV9ob3N0bmFtZV9lcnJjb2RlOwkvKiBzZWUgYWJv dmUgKi8KIAljaGFyCSAgICpyZW1vdGVfcG9ydDsJLyogdGV4dCByZXAgb2YgcmVtb3RlIHBv cnQgKi8KLQlDQUNfc3RhdGUJY2FuQWNjZXB0Q29ubmVjdGlvbnM7CS8qIHBvc3RtYXN0ZXIg Y29ubmVjdGlvbiBzdGF0dXMgKi8KIAogCS8qCiAJICogSW5mb3JtYXRpb24gdGhhdCBuZWVk cyB0byBiZSBzYXZlZCBmcm9tIHRoZSBzdGFydHVwIHBhY2tldCBhbmQgcGFzc2VkCi0tIAoy LjM5LjIKCg== --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0005-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.patch" Content-Disposition: attachment; filename*0="v3-0005-Remove-ConnCreate-and-ConnFree-and-allocate-Port-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA5OGY4Mzk3YjMyYTBiMzZlMjIxNDc1YjMyNjk3YzljNWJiY2E4NmEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6Mzg6MDYgKzAzMDAK U3ViamVjdDogW1BBVENIIHYzIDUvN10gUmVtb3ZlIENvbm5DcmVhdGUgYW5kIENvbm5GcmVl LCBhbmQgYWxsb2NhdGUgUG9ydCBpbgogc3RhY2sKCkJ5IGFsbG9jYXRpbmcgUG9ydCBpbiBz dGFjaywgd2UgZG9uJ3QgbmVlZCB0byBkZWFsIHdpdGggb3V0LW9mLW1lbW9yeQplcnJvcnMs IHdoaWNoIG1ha2VzIHRoZSBjb2RlIGEgbGl0dGxlIGxlc3MgdmVyYm9zZS4KClhYWDogVGhp cyBzaG91bGQgcGVyaGFwcyBiZSBzcXVhc2hlZCB3aXRoIHRoZSBuZXh0IGNvbW1pdC4gSXQg Y2hhbmdlcwpob3cgdGhlIFBvcnQgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBhZ2Fpbi4gQnV0 IG1heWJlIGl0J3MgZWFzaWVyIHRvCnJldmlldyBzZXBhcmF0ZWx5LgoKUmV2aWV3ZWQtYnk6 IFRyaXN0YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3 LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdlZDMtOGIw MWZmN2NlOWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jIHwgNjggKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL3Rj b3AvcG9zdGdyZXMuYyAgICAgICAgIHwgIDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5z ZXJ0aW9ucygrKSwgNTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuYwppbmRleCAxYTcyYjUyMjk5Ny4uZGNlYzk4M2U3ZDkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0zOTksOCArMzk5LDYgQEAgc3RhdGljIHZvaWQg Q2xvc2VTZXJ2ZXJQb3J0cyhpbnQgc3RhdHVzLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQg dW5saW5rX2V4dGVybmFsX3BpZF9maWxlKGludCBzdGF0dXMsIERhdHVtIGFyZyk7CiBzdGF0 aWMgdm9pZCBnZXRJbnN0YWxsYXRpb25QYXRocyhjb25zdCBjaGFyICphcmd2MCk7CiBzdGF0 aWMgdm9pZCBjaGVja0NvbnRyb2xGaWxlKHZvaWQpOwotc3RhdGljIFBvcnQgKkNvbm5DcmVh dGUoaW50IHNlcnZlckZkKTsKLXN0YXRpYyB2b2lkIENvbm5GcmVlKFBvcnQgKnBvcnQpOwog c3RhdGljIHZvaWQgaGFuZGxlX3BtX3Btc2lnbmFsX3NpZ25hbChTSUdOQUxfQVJHUyk7CiBz dGF0aWMgdm9pZCBoYW5kbGVfcG1fY2hpbGRfZXhpdF9zaWduYWwoU0lHTkFMX0FSR1MpOwog c3RhdGljIHZvaWQgaGFuZGxlX3BtX3JlbG9hZF9yZXF1ZXN0X3NpZ25hbChTSUdOQUxfQVJH Uyk7CkBAIC0xNzcyLDIwICsxNzcwLDE4IEBAIFNlcnZlckxvb3Aodm9pZCkKIAogCQkJaWYg KGV2ZW50c1tpXS5ldmVudHMgJiBXTF9TT0NLRVRfQUNDRVBUKQogCQkJewotCQkJCVBvcnQJ ICAgKnBvcnQ7CisJCQkJUG9ydAkJcG9ydDsKIAotCQkJCXBvcnQgPSBDb25uQ3JlYXRlKGV2 ZW50c1tpXS5mZCk7Ci0JCQkJaWYgKHBvcnQpCi0JCQkJewotCQkJCQlCYWNrZW5kU3RhcnR1 cChwb3J0KTsKKwkJCQltZW1zZXQoJnBvcnQsIDAsIHNpemVvZihwb3J0KSk7CisJCQkJaWYg KFN0cmVhbUNvbm5lY3Rpb24oZXZlbnRzW2ldLmZkLCAmcG9ydCkgPT0gU1RBVFVTX09LKQor CQkJCQlCYWNrZW5kU3RhcnR1cCgmcG9ydCk7CiAKLQkJCQkJLyoKLQkJCQkJICogV2Ugbm8g bG9uZ2VyIG5lZWQgdGhlIG9wZW4gc29ja2V0IG9yIHBvcnQgc3RydWN0dXJlIGluCi0JCQkJ CSAqIHRoaXMgcHJvY2VzcwotCQkJCQkgKi8KLQkJCQkJU3RyZWFtQ2xvc2UocG9ydC0+c29j ayk7Ci0JCQkJCUNvbm5GcmVlKHBvcnQpOwotCQkJCX0KKwkJCQkvKgorCQkJCSAqIFdlIG5v IGxvbmdlciBuZWVkIHRoZSBvcGVuIHNvY2tldCBvciBwb3J0IHN0cnVjdHVyZSBpbiB0aGlz CisJCQkJICogcHJvY2VzcworCQkJCSAqLworCQkJCWlmIChwb3J0LnNvY2sgIT0gUEdJTlZB TElEX1NPQ0tFVCkKKwkJCQkJU3RyZWFtQ2xvc2UocG9ydC5zb2NrKTsKIAkJCX0KIAkJfQog CkBAIC0yNDQ3LDUwICsyNDQzLDYgQEAgY2FuQWNjZXB0Q29ubmVjdGlvbnMoaW50IGJhY2tl bmRfdHlwZSkKIAlyZXR1cm4gcmVzdWx0OwogfQogCi0KLS8qCi0gKiBDb25uQ3JlYXRlIC0t IGNyZWF0ZSBhIGxvY2FsIGNvbm5lY3Rpb24gZGF0YSBzdHJ1Y3R1cmUKLSAqCi0gKiBSZXR1 cm5zIE5VTEwgb24gZmFpbHVyZSwgb3RoZXIgdGhhbiBvdXQtb2YtbWVtb3J5IHdoaWNoIGlz IGZhdGFsLgotICovCi1zdGF0aWMgUG9ydCAqCi1Db25uQ3JlYXRlKGludCBzZXJ2ZXJGZCkK LXsKLQlQb3J0CSAgICpwb3J0OwotCi0JaWYgKCEocG9ydCA9IChQb3J0ICopIGNhbGxvYygx LCBzaXplb2YoUG9ydCkpKSkKLQl7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlKEVS UkNPREVfT1VUX09GX01FTU9SWSksCi0JCQkJIGVycm1zZygib3V0IG9mIG1lbW9yeSIpKSk7 Ci0JCUV4aXRQb3N0bWFzdGVyKDEpOwotCX0KLQotCWlmIChTdHJlYW1Db25uZWN0aW9uKHNl cnZlckZkLCBwb3J0KSAhPSBTVEFUVVNfT0spCi0JewotCQlpZiAocG9ydC0+c29jayAhPSBQ R0lOVkFMSURfU09DS0VUKQotCQkJU3RyZWFtQ2xvc2UocG9ydC0+c29jayk7Ci0JCUNvbm5G cmVlKHBvcnQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gcG9ydDsKLX0KLQot Ci0vKgotICogQ29ubkZyZWUgLS0gZnJlZSBhIGxvY2FsIGNvbm5lY3Rpb24gZGF0YSBzdHJ1 Y3R1cmUKLSAqCi0gKiBDYWxsZXIgaGFzIGFscmVhZHkgY2xvc2VkIHRoZSBzb2NrZXQgaWYg YW55LCBzbyB0aGVyZSdzIG5vdCBtdWNoCi0gKiB0byBkbyBoZXJlLgotICovCi1zdGF0aWMg dm9pZAotQ29ubkZyZWUoUG9ydCAqcG9ydCkKLXsKLQlmcmVlKHBvcnQpOwotfQotCi0KIC8q CiAgKiBDbG9zZVBvc3RtYXN0ZXJQb3J0cyAtLSBjbG9zZSBhbGwgdGhlIHBvc3RtYXN0ZXIn cyBvcGVuIHNvY2tldHMKICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC90Y29wL3Bvc3Rn cmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXggZTQxNWNmMWYzNGEu LmZkZjUxY2UyODFhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMK KysrIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCkBAIC00MjE0LDcgKzQyMTQsNyBA QCBQb3N0Z3Jlc01haW4oY29uc3QgY2hhciAqZGJuYW1lLCBjb25zdCBjaGFyICp1c2VybmFt ZSkKIAkvKgogCSAqIElmIHRoZSBQb3N0bWFzdGVyQ29udGV4dCBpcyBzdGlsbCBhcm91bmQs IHJlY3ljbGUgdGhlIHNwYWNlOyB3ZSBkb24ndAogCSAqIG5lZWQgaXQgYW55bW9yZSBhZnRl ciBJbml0UG9zdGdyZXMgY29tcGxldGVzLiAgTm90ZSB0aGlzIGRvZXMgbm90IHRyYXNoCi0J ICogKk15UHJvY1BvcnQsIGJlY2F1c2UgQ29ubkNyZWF0ZSgpIGFsbG9jYXRlZCB0aGF0IHNw YWNlIHdpdGggbWFsbG9jKCkKKwkgKiAqTXlQcm9jUG9ydCwgYmVjYXVzZSB0aGF0IHNwYWNl IGlzIGFsbG9jYXRlZCBpbiBzdGFjawogCSAqIC4uLiBlbHNlIHdlJ2QgbmVlZCB0byBjb3B5 IHRoZSBQb3J0IGRhdGEgZmlyc3QuICBBbHNvLCBzdWJzaWRpYXJ5IGRhdGEKIAkgKiBzdWNo IGFzIHRoZSB1c2VybmFtZSBpc24ndCBsb3N0IGVpdGhlcjsgc2VlIFByb2Nlc3NTdGFydHVw UGFja2V0KCkuCiAJICovCi0tIAoyLjM5LjIKCg== --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0006-Introduce-ClientSocket-rename-some-funcs.patch" Content-Disposition: attachment; filename="v3-0006-Introduce-ClientSocket-rename-some-funcs.patch" Content-Transfer-Encoding: base64 RnJvbSA3OWFhYjQyNzA1YThjYjBlMTZlNjFjMzMwNTJmYzU2ZmRkNGZjYTc2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTEgT2N0IDIwMjMgMTM6Mzg6MTAgKzAzMDAK U3ViamVjdDogW1BBVENIIHYzIDYvN10gSW50cm9kdWNlIENsaWVudFNvY2tldCwgcmVuYW1l IHNvbWUgZnVuY3MKCi0gTW92ZSBtb3JlIG9mIHRoZSB3b3JrIG9uIGEgY2xpZW50IHNvY2tl dCB0byB0aGUgY2hpbGQgcHJvY2Vzcy4KCi0gUmVkdWNlIHRoZSBhbW91bnQgb2YgZGF0YSB0 aGF0IG5lZWRzIHRvIGJlIHBhc3NlZCBmcm9tIHBvc3RtYXN0ZXIgdG8KICBjaGlsZC4gKFVz ZWQgdG8gcGFzcyBhIGZ1bGwgUG9ydCBzdHJ1Y3QsIGFsdGhvdWdoIG1vc3Qgb2YgdGhlIGZp ZWxkcyB3ZXJlCiAgZW1wdHkuIE5vdyB3ZSBwYXNzIHRoZSBtdWNoIHNsaW1tZXIgQ2xpZW50 U29ja2V0LikKClJldmlld2VkLWJ5OiBUcmlzdGFuIFBhcnRpbiwgQW5kcmVzIEZyZXVuZApE aXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzdhNTli MDczLTViNWItMTUxZS03ZWQzLThiMDFmZjdjZTllZkBpa2kuZmkKLS0tCiBzcmMvYmFja2Vu ZC9saWJwcS9wcWNvbW0uYyAgICAgICAgICB8ICA5MyArKysrKysrKystLS0tLS0tLQogc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgfCAxNDkgKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jICAgICAgICAgfCAg IDUgKy0KIHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmggICAgICAgIHwgIDE5ICsrLS0K IHNyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmggICAgICAgICAgIHwgICA2ICstCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICB8ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQs IDE0OSBpbnNlcnRpb25zKCspLCAxMjQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbGlicHEvcHFjb21tLmMgYi9zcmMvYmFja2VuZC9saWJwcS9wcWNvbW0uYwpp bmRleCAyODAyZWZjNjNmYy4uY2NkZjFkMjE0MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2xpYnBxL3BxY29tbS5jCisrKyBiL3NyYy9iYWNrZW5kL2xpYnBxL3BxY29tbS5jCkBAIC0y OSw5ICsyOSw5IEBACiAgKiBJTlRFUkZBQ0UgUk9VVElORVMKICAqCiAgKiBzZXR1cC90ZWFy ZG93bjoKLSAqCQlTdHJlYW1TZXJ2ZXJQb3J0CS0gT3BlbiBwb3N0bWFzdGVyJ3Mgc2VydmVy IHBvcnQKLSAqCQlTdHJlYW1Db25uZWN0aW9uCS0gQ3JlYXRlIG5ldyBjb25uZWN0aW9uIHdp dGggY2xpZW50Ci0gKgkJU3RyZWFtQ2xvc2UJCQktIENsb3NlIGEgY2xpZW50L2JhY2tlbmQg Y29ubmVjdGlvbgorICoJCUxpc3RlblNlcnZlclBvcnQJLSBPcGVuIHBvc3RtYXN0ZXIncyBz ZXJ2ZXIgcG9ydAorICoJCUFjY2VwdENsaWVudENvbm5lY3Rpb24gLSBDcmVhdGUgbmV3IGNv bm5lY3Rpb24gd2l0aCBjbGllbnQKKyAqCQlTdHJlYW1Db25uZWN0aW9uCS0gSW5pdGlhbGl6 ZSBhIGNsaWVudCBjb25uZWN0aW9uCiAgKgkJVG91Y2hTb2NrZXRGaWxlcwktIFByb3RlY3Qg c29ja2V0IGZpbGVzIGFnYWluc3QgL3RtcCBjbGVhbmVycwogICoJCXBxX2luaXQJCQktIGlu aXRpYWxpemUgbGlicHEgYXQgYmFja2VuZCBzdGFydHVwCiAgKgkJc29ja2V0X2NvbW1fcmVz ZXQJLSByZXNldCBsaWJwcSBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkKQEAgLTMwNCw3ICszMDQs NyBAQCBzb2NrZXRfY2xvc2UoaW50IGNvZGUsIERhdHVtIGFyZykKIAogCiAvKgotICogU3Ry ZWFtU2VydmVyUG9ydCAtLSBvcGVuIGEgImxpc3RlbmluZyIgcG9ydCB0byBhY2NlcHQgY29u bmVjdGlvbnMuCisgKiBMaXN0ZW5TZXJ2ZXJQb3J0IC0tIG9wZW4gYSAibGlzdGVuaW5nIiBw b3J0IHRvIGFjY2VwdCBjb25uZWN0aW9ucy4KICAqCiAgKiBmYW1pbHkgc2hvdWxkIGJlIEFG X1VOSVggb3IgQUZfVU5TUEVDOyBwb3J0TnVtYmVyIGlzIHRoZSBwb3J0IG51bWJlci4KICAq IEZvciBBRl9VTklYIHBvcnRzLCBob3N0TmFtZSBzaG91bGQgYmUgTlVMTCBhbmQgdW5peFNv Y2tldERpciBtdXN0IGJlCkBAIC0zMTksNyArMzE5LDcgQEAgc29ja2V0X2Nsb3NlKGludCBj b2RlLCBEYXR1bSBhcmcpCiAgKiBSRVRVUk5TOiBTVEFUVVNfT0sgb3IgU1RBVFVTX0VSUk9S CiAgKi8KIGludAotU3RyZWFtU2VydmVyUG9ydChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpo b3N0TmFtZSwgdW5zaWduZWQgc2hvcnQgcG9ydE51bWJlciwKK0xpc3RlblNlcnZlclBvcnQo aW50IGZhbWlseSwgY29uc3QgY2hhciAqaG9zdE5hbWUsIHVuc2lnbmVkIHNob3J0IHBvcnRO dW1iZXIsCiAJCQkJIGNvbnN0IGNoYXIgKnVuaXhTb2NrZXREaXIsCiAJCQkJIHBnc29ja2V0 IExpc3RlblNvY2tldHNbXSwgaW50ICpOdW1MaXN0ZW5Tb2NrZXRzLCBpbnQgTWF4TGlzdGVu KQogewpAQCAtNjg1LDggKzY4NSw5IEBAIFNldHVwX0FGX1VOSVgoY29uc3QgY2hhciAqc29j a19wYXRoKQogCiAKIC8qCi0gKiBTdHJlYW1Db25uZWN0aW9uIC0tIGNyZWF0ZSBhIG5ldyBj b25uZWN0aW9uIHdpdGggY2xpZW50IHVzaW5nCi0gKgkJc2VydmVyIHBvcnQuICBTZXQgcG9y dC0+c29jayB0byB0aGUgRkQgb2YgdGhlIG5ldyBjb25uZWN0aW9uLgorICogQWNjZXB0Q2xp ZW50Q29ubmVjdGlvbiAtLSBhY2NlcHQgYSBuZXcgY29ubmVjdGlvbiB3aXRoIGNsaWVudCB1 c2luZworICoJCXNlcnZlciBwb3J0LiAgRmlsbHMgKmNsaWVudF9zb2NrIHdpdGggdGhlIEZE IGFuZCBlbmRwb2ludCBpbmZvCisgKgkJb2YgdGhlIG5ldyBjb25uZWN0aW9uLgogICoKICAq IEFTU1VNRTogdGhhdCB0aGlzIGRvZXNuJ3QgbmVlZCB0byBiZSBub24tYmxvY2tpbmcgYmVj YXVzZQogICoJCXRoZSBQb3N0bWFzdGVyIHdhaXRzIGZvciB0aGUgc29ja2V0IHRvIGJlIHJl YWR5IHRvIGFjY2VwdCgpLgpAQCAtNjk0LDEzICs2OTUsMTMgQEAgU2V0dXBfQUZfVU5JWChj b25zdCBjaGFyICpzb2NrX3BhdGgpCiAgKiBSRVRVUk5TOiBTVEFUVVNfT0sgb3IgU1RBVFVT X0VSUk9SCiAgKi8KIGludAotU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQs IFBvcnQgKnBvcnQpCitBY2NlcHRDbGllbnRDb25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9m ZCwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAkvKiBhY2NlcHQgY29ubmVjdGlv biBhbmQgZmlsbCBpbiB0aGUgY2xpZW50IChyZW1vdGUpIGFkZHJlc3MgKi8KLQlwb3J0LT5y YWRkci5zYWxlbiA9IHNpemVvZihwb3J0LT5yYWRkci5hZGRyKTsKLQlpZiAoKHBvcnQtPnNv Y2sgPSBhY2NlcHQoc2VydmVyX2ZkLAotCQkJCQkJCSAoc3RydWN0IHNvY2thZGRyICopICZw b3J0LT5yYWRkci5hZGRyLAotCQkJCQkJCSAmcG9ydC0+cmFkZHIuc2FsZW4pKSA9PSBQR0lO VkFMSURfU09DS0VUKQorCWNsaWVudF9zb2NrLT5yYWRkci5zYWxlbiA9IHNpemVvZihjbGll bnRfc29jay0+cmFkZHIuYWRkcik7CisJaWYgKChjbGllbnRfc29jay0+c29jayA9IGFjY2Vw dChzZXJ2ZXJfZmQsCisJCQkJCQkJCQkoc3RydWN0IHNvY2thZGRyICopICZjbGllbnRfc29j ay0+cmFkZHIuYWRkciwKKwkJCQkJCQkJCSZjbGllbnRfc29jay0+cmFkZHIuc2FsZW4pKSA9 PSBQR0lOVkFMSURfU09DS0VUKQogCXsKIAkJZXJlcG9ydChMT0csCiAJCQkJKGVycmNvZGVf Zm9yX3NvY2tldF9hY2Nlc3MoKSwKQEAgLTcxOCwxMCArNzE5LDEwIEBAIFN0cmVhbUNvbm5l Y3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCX0KIAogCS8qIGZpbGwg aW4gdGhlIHNlcnZlciAobG9jYWwpIGFkZHJlc3MgKi8KLQlwb3J0LT5sYWRkci5zYWxlbiA9 IHNpemVvZihwb3J0LT5sYWRkci5hZGRyKTsKLQlpZiAoZ2V0c29ja25hbWUocG9ydC0+c29j aywKLQkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSAmcG9ydC0+bGFkZHIuYWRkciwKLQkJCQkJ JnBvcnQtPmxhZGRyLnNhbGVuKSA8IDApCisJY2xpZW50X3NvY2stPmxhZGRyLnNhbGVuID0g c2l6ZW9mKGNsaWVudF9zb2NrLT5sYWRkci5hZGRyKTsKKwlpZiAoZ2V0c29ja25hbWUoY2xp ZW50X3NvY2stPnNvY2ssCisJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikgJmNsaWVudF9zb2Nr LT5sYWRkci5hZGRyLAorCQkJCQkmY2xpZW50X3NvY2stPmxhZGRyLnNhbGVuKSA8IDApCiAJ ewogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCIlcygpIGZhaWxlZDogJW0iLCAiZ2V0 c29ja25hbWUiKSkpOwpAQCAtNzI5LDcgKzczMCw3IEBAIFN0cmVhbUNvbm5lY3Rpb24ocGdz b2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCX0KIAogCS8qIHNlbGVjdCBOT0RFTEFZ IGFuZCBLRUVQQUxJVkUgb3B0aW9ucyBpZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24gKi8KLQlp ZiAocG9ydC0+bGFkZHIuYWRkci5zc19mYW1pbHkgIT0gQUZfVU5JWCkKKwlpZiAoY2xpZW50 X3NvY2stPmxhZGRyLmFkZHIuc3NfZmFtaWx5ICE9IEFGX1VOSVgpCiAJewogCQlpbnQJCQlv bjsKICNpZmRlZiBXSU4zMgpAQCAtNzQwLDcgKzc0MSw3IEBAIFN0cmVhbUNvbm5lY3Rpb24o cGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0ICpwb3J0KQogCiAjaWZkZWYJVENQX05PREVMQVkK IAkJb24gPSAxOwotCQlpZiAoc2V0c29ja29wdChwb3J0LT5zb2NrLCBJUFBST1RPX1RDUCwg VENQX05PREVMQVksCisJCWlmIChzZXRzb2Nrb3B0KGNsaWVudF9zb2NrLT5zb2NrLCBJUFBS T1RPX1RDUCwgVENQX05PREVMQVksCiAJCQkJCSAgIChjaGFyICopICZvbiwgc2l6ZW9mKG9u KSkgPCAwKQogCQl7CiAJCQllcmVwb3J0KExPRywKQEAgLTc0OSw3ICs3NTAsNyBAQCBTdHJl YW1Db25uZWN0aW9uKHBnc29ja2V0IHNlcnZlcl9mZCwgUG9ydCAqcG9ydCkKIAkJfQogI2Vu ZGlmCiAJCW9uID0gMTsKLQkJaWYgKHNldHNvY2tvcHQocG9ydC0+c29jaywgU09MX1NPQ0tF VCwgU09fS0VFUEFMSVZFLAorCQlpZiAoc2V0c29ja29wdChjbGllbnRfc29jay0+c29jaywg U09MX1NPQ0tFVCwgU09fS0VFUEFMSVZFLAogCQkJCQkgICAoY2hhciAqKSAmb24sIHNpemVv ZihvbikpIDwgMCkKIAkJewogCQkJZXJlcG9ydChMT0csCkBAIC03ODEsNyArNzgyLDcgQEAg U3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJCSAq IGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYmI3MzY1NDklMjh2 PXZzLjg1JTI5LmFzcHgKIAkJICovCiAJCW9wdGxlbiA9IHNpemVvZihvbGRvcHQpOwotCQlp ZiAoZ2V0c29ja29wdChwb3J0LT5zb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYsIChjaGFy ICopICZvbGRvcHQsCisJCWlmIChnZXRzb2Nrb3B0KGNsaWVudF9zb2NrLT5zb2NrLCBTT0xf U09DS0VULCBTT19TTkRCVUYsIChjaGFyICopICZvbGRvcHQsCiAJCQkJCSAgICZvcHRsZW4p IDwgMCkKIAkJewogCQkJZXJlcG9ydChMT0csCkBAIC03OTEsNyArNzkyLDcgQEAgU3RyZWFt Q29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQgKnBvcnQpCiAJCW5ld29wdCA9 IFBRX1NFTkRfQlVGRkVSX1NJWkUgKiA0OwogCQlpZiAob2xkb3B0IDwgbmV3b3B0KQogCQl7 Ci0JCQlpZiAoc2V0c29ja29wdChwb3J0LT5zb2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYs IChjaGFyICopICZuZXdvcHQsCisJCQlpZiAoc2V0c29ja29wdChjbGllbnRfc29jay0+c29j aywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAoY2hhciAqKSAmbmV3b3B0LAogCQkJCQkJICAg c2l6ZW9mKG5ld29wdCkpIDwgMCkKIAkJCXsKIAkJCQllcmVwb3J0KExPRywKQEAgLTgwMCwx MyArODAxLDM0IEBAIFN0cmVhbUNvbm5lY3Rpb24ocGdzb2NrZXQgc2VydmVyX2ZkLCBQb3J0 ICpwb3J0KQogCQkJfQogCQl9CiAjZW5kaWYKKwl9CisJcmV0dXJuIFNUQVRVU19PSzsKK30K KworLyoKKyAqIFN0cmVhbUNvbm5lY3Rpb24gLS0gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24g ZnJvbSB0aGUgZ2l2ZW4gc29ja2V0LgorICoKKyAqIFRoaXMgcnVucyBpbiB0aGUgYmFja2Vu ZCBwcm9jZXNzLgorICovCitQb3J0ICoKK1N0cmVhbUNvbm5lY3Rpb24oQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jaykKK3sKKwlQb3J0CSAgICpwb3J0OworCisJcG9ydCA9IHBhbGxvYzAo c2l6ZW9mKFBvcnQpKTsKKwlwb3J0LT5zb2NrID0gY2xpZW50X3NvY2stPnNvY2s7CisJcG9y dC0+bGFkZHIgPSBjbGllbnRfc29jay0+bGFkZHI7CisJcG9ydC0+cmFkZHIgPSBjbGllbnRf c29jay0+cmFkZHI7CiAKKwkvKiBBcHBseSB0aGUgY3VycmVudCBrZWVwYWxpdmUgcGFyYW1l dGVycyBpZiBpdCdzIGEgVENQIGNvbm5lY3Rpb24gKi8KKwlpZiAocG9ydC0+bGFkZHIuYWRk ci5zc19mYW1pbHkgIT0gQUZfVU5JWCkKKwl7CiAJCS8qCi0JCSAqIEFsc28gYXBwbHkgdGhl IGN1cnJlbnQga2VlcGFsaXZlIHBhcmFtZXRlcnMuICBJZiB3ZSBmYWlsIHRvIHNldCBhCi0J CSAqIHBhcmFtZXRlciwgZG9uJ3QgZXJyb3Igb3V0LCBiZWNhdXNlIHRoZXNlIGFyZW4ndCB1 bml2ZXJzYWxseQotCQkgKiBzdXBwb3J0ZWQuICAoTm90ZTogeW91IG1pZ2h0IHRoaW5rIHdl IG5lZWQgdG8gcmVzZXQgdGhlIEdVQwotCQkgKiB2YXJpYWJsZXMgdG8gMCBpbiBzdWNoIGEg Y2FzZSwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeSBiZWNhdXNlIHRoZQotCQkgKiBzaG93IGhv b2tzIGZvciB0aGVzZSB2YXJpYWJsZXMgcmVwb3J0IHRoZSB0cnV0aCBhbnl3YXkuKQorCQkg KiBJZiB3ZSBmYWlsIHRvIHNldCBhIHBhcmFtZXRlciwgZG9uJ3QgZXJyb3Igb3V0LCBiZWNh dXNlIHRoZXNlCisJCSAqIGFyZW4ndCB1bml2ZXJzYWxseSBzdXBwb3J0ZWQuICAoTm90ZTog eW91IG1pZ2h0IHRoaW5rIHdlIG5lZWQgdG8KKwkJICogcmVzZXQgdGhlIEdVQyB2YXJpYWJs ZXMgdG8gMCBpbiBzdWNoIGEgY2FzZSwgYnV0IGl0J3Mgbm90IG5lY2Vzc2FyeQorCQkgKiBi ZWNhdXNlIHRoZSBzaG93IGhvb2tzIGZvciB0aGVzZSB2YXJpYWJsZXMgcmVwb3J0IHRoZSB0 cnV0aAorCQkgKiBhbnl3YXkuKQogCQkgKi8KIAkJKHZvaWQpIHBxX3NldGtlZXBhbGl2ZXNp ZGxlKHRjcF9rZWVwYWxpdmVzX2lkbGUsIHBvcnQpOwogCQkodm9pZCkgcHFfc2V0a2VlcGFs aXZlc2ludGVydmFsKHRjcF9rZWVwYWxpdmVzX2ludGVydmFsLCBwb3J0KTsKQEAgLTgxNCwy NCArODM2LDcgQEAgU3RyZWFtQ29ubmVjdGlvbihwZ3NvY2tldCBzZXJ2ZXJfZmQsIFBvcnQg KnBvcnQpCiAJCSh2b2lkKSBwcV9zZXR0Y3B1c2VydGltZW91dCh0Y3BfdXNlcl90aW1lb3V0 LCBwb3J0KTsKIAl9CiAKLQlyZXR1cm4gU1RBVFVTX09LOwotfQotCi0vKgotICogU3RyZWFt Q2xvc2UgLS0gY2xvc2UgYSBjbGllbnQvYmFja2VuZCBjb25uZWN0aW9uCi0gKgotICogTk9U RTogdGhpcyBpcyBOT1QgdXNlZCB0byB0ZXJtaW5hdGUgYSBzZXNzaW9uOyBpdCBpcyBqdXN0 IHVzZWQgdG8gcmVsZWFzZQotICogdGhlIGZpbGUgZGVzY3JpcHRvciBpbiBhIHByb2Nlc3Mg dGhhdCBzaG91bGQgbm8gbG9uZ2VyIGhhdmUgdGhlIHNvY2tldAotICogb3Blbi4gIChGb3Ig ZXhhbXBsZSwgdGhlIHBvc3RtYXN0ZXIgY2FsbHMgdGhpcyBhZnRlciBwYXNzaW5nIG93bmVy c2hpcAotICogb2YgdGhlIGNvbm5lY3Rpb24gdG8gYSBjaGlsZCBwcm9jZXNzLikgIEl0IGlz IGV4cGVjdGVkIHRoYXQgc29tZW9uZSBlbHNlCi0gKiBzdGlsbCBoYXMgdGhlIHNvY2tldCBv cGVuLiAgU28sIHdlIG9ubHkgd2FudCB0byBjbG9zZSB0aGUgZGVzY3JpcHRvciwKLSAqIHdl IGRvIE5PVCB3YW50IHRvIHNlbmQgYW55dGhpbmcgdG8gdGhlIGZhciBlbmQuCi0gKi8KLXZv aWQKLVN0cmVhbUNsb3NlKHBnc29ja2V0IHNvY2spCi17Ci0JaWYgKGNsb3Nlc29ja2V0KHNv Y2spICE9IDApCi0JCWVsb2coTE9HLCAiY291bGQgbm90IGNsb3NlIGNsaWVudCBvciBsaXN0 ZW4gc29ja2V0OiAlbSIpOworCXJldHVybiBwb3J0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCBkY2VjOTgzZTdkOS4uNTUwMTM2MDA5YTggMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC00MjcsMTUgKzQyNywxNSBA QCB0eXBlZGVmIGVudW0gQ0FDX3N0YXRlCiAJQ0FDX1RPT01BTlksCiB9IENBQ19zdGF0ZTsK IAotc3RhdGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoUG9ydCAqcG9ydCwgQ0FDX3N0YXRl IGNhYyk7Ci1zdGF0aWMgdm9pZCBCYWNrZW5kUnVuKFBvcnQgKnBvcnQpIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOworc3RhdGljIHZvaWQgQmFja2VuZEluaXRpYWxpemUoQ2xpZW50U29j a2V0ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYyk7CitzdGF0aWMgdm9pZCBCYWNrZW5k UnVuKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGljIHZvaWQgRXhpdFBv c3RtYXN0ZXIoaW50IHN0YXR1cykgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBzdGF0aWMg aW50CVNlcnZlckxvb3Aodm9pZCk7Ci1zdGF0aWMgaW50CUJhY2tlbmRTdGFydHVwKFBvcnQg KnBvcnQpOworc3RhdGljIGludAlCYWNrZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKnBvcnQp Owogc3RhdGljIGludAlQcm9jZXNzU3RhcnR1cFBhY2tldChQb3J0ICpwb3J0LCBib29sIHNz bF9kb25lLCBib29sIGdzc19kb25lKTsKIHN0YXRpYyB2b2lkIFNlbmROZWdvdGlhdGVQcm90 b2NvbFZlcnNpb24oTGlzdCAqdW5yZWNvZ25pemVkX3Byb3RvY29sX29wdGlvbnMpOwogc3Rh dGljIHZvaWQgcHJvY2Vzc0NhbmNlbFJlcXVlc3QoUG9ydCAqcG9ydCwgdm9pZCAqcGt0KTsK LXN0YXRpYyB2b2lkIHJlcG9ydF9mb3JrX2ZhaWx1cmVfdG9fY2xpZW50KFBvcnQgKnBvcnQs IGludCBlcnJudW0pOworc3RhdGljIHZvaWQgcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGll bnQoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywgaW50IGVycm51bSk7CiBzdGF0aWMgQ0FD X3N0YXRlIGNhbkFjY2VwdENvbm5lY3Rpb25zKGludCBiYWNrZW5kX3R5cGUpOwogc3RhdGlj IGJvb2wgUmFuZG9tQ2FuY2VsS2V5KGludDMyICpjYW5jZWxfa2V5KTsKIHN0YXRpYyB2b2lk IHNpZ25hbF9jaGlsZChwaWRfdCBwaWQsIGludCBzaWduYWwpOwpAQCAtNDg0LDggKzQ4NCw4 IEBAIHR5cGVkZWYgc3RydWN0CiB9IHdpbjMyX2RlYWRjaGlsZF93YWl0aW5mbzsKICNlbmRp ZgkJCQkJCQkvKiBXSU4zMiAqLwogCi1zdGF0aWMgcGlkX3QgYmFja2VuZF9mb3JrZXhlYyhQ b3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKTsKLXN0YXRpYyBwaWRfdCBpbnRlcm5hbF9mb3Jr ZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBQb3J0ICpwb3J0KTsKK3N0YXRpYyBwaWRf dCBiYWNrZW5kX2ZvcmtleGVjKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0 ZSBjYWMpOworc3RhdGljIHBpZF90IGludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFy ICphcmd2W10sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOwogCiAvKiBUeXBlIGZvciBh IHNvY2tldCB0aGF0IGNhbiBiZSBpbmhlcml0ZWQgdG8gYSBjbGllbnQgcHJvY2VzcyAqLwog I2lmZGVmIFdJTjMyCkBAIC01MDQsOCArNTA0LDggQEAgdHlwZWRlZiBpbnQgSW5oZXJpdGFi bGVTb2NrZXQ7CiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7Ci0JUG9ydAkJcG9ydDsKLQlJbmhl cml0YWJsZVNvY2tldCBwb3J0c29ja2V0OworCUNsaWVudFNvY2tldCBjbGllbnRfc29jazsK KwlJbmhlcml0YWJsZVNvY2tldCBzZXJpYWxpemVkX3NvY2s7CiAJY2hhcgkJRGF0YURpcltN QVhQR1BBVEhdOwogCWludDMyCQlNeUNhbmNlbEtleTsKIAlpbnQJCQlNeVBNQ2hpbGRTbG90 OwpAQCAtNTUzLDEzICs1NTMsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlCYWNrZ3JvdW5kV29y a2VyIE15Qmd3b3JrZXJFbnRyeTsKIH0gQmFja2VuZFBhcmFtZXRlcnM7CiAKLXN0YXRpYyB2 b2lkIHJlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQsIFBvcnQgKnBvcnQpOwotc3Rh dGljIHZvaWQgcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAq cGFyYW0sIFBvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxl cyhjaGFyICppZCwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7CitzdGF0aWMgdm9pZCBy ZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xp ZW50U29ja2V0ICpjbGllbnRfc29jayk7CiAKICNpZm5kZWYgV0lOMzIKLXN0YXRpYyBib29s IHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBQb3J0 ICpwb3J0KTsKK3N0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBh cmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKICNlbHNlCi1z dGF0aWMgYm9vbCBzYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpw YXJhbSwgUG9ydCAqcG9ydCwKK3N0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMo QmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLAog CQkJCQkJCQkgICBIQU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCk7CiAjZW5k aWYKIApAQCAtMTIxOSwxNCArMTIxOSwxNCBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCQkJY2hhcgkgICAqY3VyaG9zdCA9IChjaGFyICopIGxmaXJzdChs KTsKIAogCQkJaWYgKHN0cmNtcChjdXJob3N0LCAiKiIpID09IDApCi0JCQkJc3RhdHVzID0g U3RyZWFtU2VydmVyUG9ydChBRl9VTlNQRUMsIE5VTEwsCisJCQkJc3RhdHVzID0gTGlzdGVu U2VydmVyUG9ydChBRl9VTlNQRUMsIE5VTEwsCiAJCQkJCQkJCQkJICAodW5zaWduZWQgc2hv cnQpIFBvc3RQb3J0TnVtYmVyLAogCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkgIExp c3RlblNvY2tldHMsCiAJCQkJCQkJCQkJICAmTnVtTGlzdGVuU29ja2V0cywKIAkJCQkJCQkJ CQkgIE1BWExJU1RFTik7CiAJCQllbHNlCi0JCQkJc3RhdHVzID0gU3RyZWFtU2VydmVyUG9y dChBRl9VTlNQRUMsIGN1cmhvc3QsCisJCQkJc3RhdHVzID0gTGlzdGVuU2VydmVyUG9ydChB Rl9VTlNQRUMsIGN1cmhvc3QsCiAJCQkJCQkJCQkJICAodW5zaWduZWQgc2hvcnQpIFBvc3RQ b3J0TnVtYmVyLAogCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkgIExpc3RlblNvY2tl dHMsCkBAIC0xMzIwLDcgKzEzMjAsNyBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKQogCQl7CiAJCQljaGFyCSAgICpzb2NrZXRkaXIgPSAoY2hhciAqKSBsZmly c3QobCk7CiAKLQkJCXN0YXR1cyA9IFN0cmVhbVNlcnZlclBvcnQoQUZfVU5JWCwgTlVMTCwK KwkJCXN0YXR1cyA9IExpc3RlblNlcnZlclBvcnQoQUZfVU5JWCwgTlVMTCwKIAkJCQkJCQkJ CSAgKHVuc2lnbmVkIHNob3J0KSBQb3N0UG9ydE51bWJlciwKIAkJCQkJCQkJCSAgc29ja2V0 ZGlyLAogCQkJCQkJCQkJICBMaXN0ZW5Tb2NrZXRzLApAQCAtMTUwMCw3ICsxNTAwLDcgQEAg Q2xvc2VTZXJ2ZXJQb3J0cyhpbnQgc3RhdHVzLCBEYXR1bSBhcmcpCiAJICogY29uZGl0aW9u IGlmIGEgbmV3IHBvc3RtYXN0ZXIgd2FudHMgdG8gcmUtdXNlIHRoZSBUQ1AgcG9ydCBudW1i ZXIuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IE51bUxpc3RlblNvY2tldHM7IGkrKykKLQkJ U3RyZWFtQ2xvc2UoTGlzdGVuU29ja2V0c1tpXSk7CisJCWNsb3Nlc29ja2V0KExpc3RlblNv Y2tldHNbaV0pOwogCU51bUxpc3RlblNvY2tldHMgPSAwOwogCiAJLyoKQEAgLTE3NzAsMTgg KzE3NzAsMjAgQEAgU2VydmVyTG9vcCh2b2lkKQogCiAJCQlpZiAoZXZlbnRzW2ldLmV2ZW50 cyAmIFdMX1NPQ0tFVF9BQ0NFUFQpCiAJCQl7Ci0JCQkJUG9ydAkJcG9ydDsKKwkJCQlDbGll bnRTb2NrZXQgczsKIAotCQkJCW1lbXNldCgmcG9ydCwgMCwgc2l6ZW9mKHBvcnQpKTsKLQkJ CQlpZiAoU3RyZWFtQ29ubmVjdGlvbihldmVudHNbaV0uZmQsICZwb3J0KSA9PSBTVEFUVVNf T0spCi0JCQkJCUJhY2tlbmRTdGFydHVwKCZwb3J0KTsKKwkJCQlpZiAoQWNjZXB0Q2xpZW50 Q29ubmVjdGlvbihldmVudHNbaV0uZmQsICZzKSA9PSBTVEFUVVNfT0spCisJCQkJCUJhY2tl bmRTdGFydHVwKCZzKTsKIAogCQkJCS8qCiAJCQkJICogV2Ugbm8gbG9uZ2VyIG5lZWQgdGhl IG9wZW4gc29ja2V0IG9yIHBvcnQgc3RydWN0dXJlIGluIHRoaXMKIAkJCQkgKiBwcm9jZXNz CiAJCQkJICovCi0JCQkJaWYgKHBvcnQuc29jayAhPSBQR0lOVkFMSURfU09DS0VUKQotCQkJ CQlTdHJlYW1DbG9zZShwb3J0LnNvY2spOworCQkJCWlmIChzLnNvY2sgIT0gUEdJTlZBTElE X1NPQ0tFVCkKKwkJCQl7CisJCQkJCWlmIChjbG9zZXNvY2tldChzLnNvY2spICE9IDApCisJ CQkJCQllbG9nKExPRywgImNvdWxkIG5vdCBjbG9zZSBjbGllbnQgc29ja2V0OiAlbSIpOwor CQkJCX0KIAkJCX0KIAkJfQogCkBAIC0yMTQ2LDExICsyMTQ4LDcgQEAgcmV0cnkxOgogCiAJ LyoKIAkgKiBOb3cgZmV0Y2ggcGFyYW1ldGVycyBvdXQgb2Ygc3RhcnR1cCBwYWNrZXQgYW5k IHNhdmUgdGhlbSBpbnRvIHRoZSBQb3J0Ci0JICogc3RydWN0dXJlLiAgQWxsIGRhdGEgc3Ry dWN0dXJlcyBhdHRhY2hlZCB0byB0aGUgUG9ydCBzdHJ1Y3QgbXVzdCBiZQotCSAqIGFsbG9j YXRlZCBpbiBUb3BNZW1vcnlDb250ZXh0IHNvIHRoYXQgdGhleSB3aWxsIHJlbWFpbiBhdmFp bGFibGUgaW4gYQotCSAqIHJ1bm5pbmcgYmFja2VuZCAoZXZlbiBhZnRlciBQb3N0bWFzdGVy Q29udGV4dCBpcyBkZXN0cm95ZWQpLiAgV2UgbmVlZAotCSAqIG5vdCB3b3JyeSBhYm91dCBs ZWFraW5nIHRoaXMgc3RvcmFnZSBvbiBmYWlsdXJlLCBzaW5jZSB3ZSBhcmVuJ3QgaW4gdGhl Ci0JICogcG9zdG1hc3RlciBwcm9jZXNzIGFueW1vcmUuCisJICogc3RydWN0dXJlLgogCSAq LwogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4 dCk7CiAKQEAgLTIyODYsNyArMjI4NCw3IEBAIHJldHJ5MToKIAkJcG9ydC0+ZGF0YWJhc2Vf bmFtZVswXSA9ICdcMCc7CiAKIAkvKgotCSAqIERvbmUgcHV0dGluZyBzdHVmZiBpbiBUb3BN ZW1vcnlDb250ZXh0LgorCSAqIERvbmUgZmlsbGluZyB0aGUgUG9ydCBzdHJ1Y3R1cmUKIAkg Ki8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKQEAgLTI0OTAsNyAr MjQ4OCwxMCBAQCBDbG9zZVBvc3RtYXN0ZXJQb3J0cyhib29sIGFtX3N5c2xvZ2dlcikKIAlp ZiAoTGlzdGVuU29ja2V0cykKIAl7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTnVtTGlzdGVu U29ja2V0czsgaSsrKQotCQkJU3RyZWFtQ2xvc2UoTGlzdGVuU29ja2V0c1tpXSk7CisJCXsK KwkJCWlmIChjbG9zZXNvY2tldChMaXN0ZW5Tb2NrZXRzW2ldKSAhPSAwKQorCQkJCWVsb2co TE9HLCAiY291bGQgbm90IGNsb3NlIGxpc3RlbiBzb2NrZXQ6ICVtIik7CisJCX0KIAkJcGZy ZWUoTGlzdGVuU29ja2V0cyk7CiAJfQogCU51bUxpc3RlblNvY2tldHMgPSAwOwpAQCAtMzk5 Niw3ICszOTk3LDcgQEAgVGVybWluYXRlQ2hpbGRyZW4oaW50IHNpZ25hbCkKICAqIE5vdGU6 IGlmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBhbHNvIGNvbnNpZGVyIFN0YXJ0QXV0b3ZhY3V1 bVdvcmtlci4KICAqLwogc3RhdGljIGludAotQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkK K0JhY2tlbmRTdGFydHVwKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCiB7CiAJQmFja2Vu ZCAgICAqYm47CQkJCS8qIGZvciBiYWNrZW5kIGNsZWFudXAgKi8KIAlwaWRfdAkJcGlkOwpA QCAtNDA0Nyw3ICs0MDQ4LDcgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKIAlibi0+ Ymd3b3JrZXJfbm90aWZ5ID0gZmFsc2U7CiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlwaWQg PSBiYWNrZW5kX2ZvcmtleGVjKHBvcnQsIGNhYyk7CisJcGlkID0gYmFja2VuZF9mb3JrZXhl YyhjbGllbnRfc29jaywgY2FjKTsKICNlbHNlCQkJCQkJCS8qICFFWEVDX0JBQ0tFTkQgKi8K IAlwaWQgPSBmb3JrX3Byb2Nlc3MoKTsKIAlpZiAocGlkID09IDApCQkJCS8qIGNoaWxkICov CkBAIC00MDU5LDEwICs0MDYwLDEwIEBAIEJhY2tlbmRTdGFydHVwKFBvcnQgKnBvcnQpCiAJ CUNsb3NlUG9zdG1hc3RlclBvcnRzKGZhbHNlKTsKIAogCQkvKiBQZXJmb3JtIGFkZGl0aW9u YWwgaW5pdGlhbGl6YXRpb24gYW5kIGNvbGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KLQkJQmFj a2VuZEluaXRpYWxpemUocG9ydCwgY2FjKTsKKwkJQmFja2VuZEluaXRpYWxpemUoY2xpZW50 X3NvY2ssIGNhYyk7CiAKIAkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNrZW5k UnVuKHBvcnQpOworCQlCYWNrZW5kUnVuKCk7CiAJfQogI2VuZGlmCQkJCQkJCS8qIEVYRUNf QkFDS0VORCAqLwogCkBAIC00MDc3LDE0ICs0MDc4LDE0IEBAIEJhY2tlbmRTdGFydHVwKFBv cnQgKnBvcnQpCiAJCWVycm5vID0gc2F2ZV9lcnJubzsKIAkJZXJlcG9ydChMT0csCiAJCQkJ KGVycm1zZygiY291bGQgbm90IGZvcmsgbmV3IHByb2Nlc3MgZm9yIGNvbm5lY3Rpb246ICVt IikpKTsKLQkJcmVwb3J0X2ZvcmtfZmFpbHVyZV90b19jbGllbnQocG9ydCwgc2F2ZV9lcnJu byk7CisJCXJlcG9ydF9mb3JrX2ZhaWx1cmVfdG9fY2xpZW50KGNsaWVudF9zb2NrLCBzYXZl X2Vycm5vKTsKIAkJcmV0dXJuIFNUQVRVU19FUlJPUjsKIAl9CiAKIAkvKiBpbiBwYXJlbnQs IHN1Y2Nlc3NmdWwgZm9yayAqLwogCWVyZXBvcnQoREVCVUcyLAogCQkJKGVycm1zZ19pbnRl cm5hbCgiZm9ya2VkIG5ldyBiYWNrZW5kLCBwaWQ9JWQgc29ja2V0PSVkIiwKLQkJCQkJCQkg KGludCkgcGlkLCAoaW50KSBwb3J0LT5zb2NrKSkpOworCQkJCQkJCSAoaW50KSBwaWQsIChp bnQpIGNsaWVudF9zb2NrLT5zb2NrKSkpOwogCiAJLyoKIAkgKiBFdmVyeXRoaW5nJ3MgYmVl biBzdWNjZXNzZnVsLCBpdCdzIHNhZmUgdG8gYWRkIHRoaXMgYmFja2VuZCB0byBvdXIgbGlz dApAQCAtNDExMSw3ICs0MTEyLDcgQEAgQmFja2VuZFN0YXJ0dXAoUG9ydCAqcG9ydCkKICAq IGl0J3Mgbm90IHVwIGFuZCBydW5uaW5nLgogICovCiBzdGF0aWMgdm9pZAotcmVwb3J0X2Zv cmtfZmFpbHVyZV90b19jbGllbnQoUG9ydCAqcG9ydCwgaW50IGVycm51bSkKK3JlcG9ydF9m b3JrX2ZhaWx1cmVfdG9fY2xpZW50KENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIGludCBl cnJudW0pCiB7CiAJY2hhcgkJYnVmZmVyWzEwMDBdOwogCWludAkJCXJjOwpAQCAtNDEyMiwx MyArNDEyMywxMyBAQCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChQb3J0ICpwb3J0 LCBpbnQgZXJybnVtKQogCQkJIHN0cmVycm9yKGVycm51bSkpOwogCiAJLyogU2V0IHBvcnQg dG8gbm9uLWJsb2NraW5nLiAgRG9uJ3QgZG8gc2VuZCgpIGlmIHRoaXMgZmFpbHMgKi8KLQlp ZiAoIXBnX3NldF9ub2Jsb2NrKHBvcnQtPnNvY2spKQorCWlmICghcGdfc2V0X25vYmxvY2so Y2xpZW50X3NvY2stPnNvY2spKQogCQlyZXR1cm47CiAKIAkvKiBXZSdsbCByZXRyeSBhZnRl ciBFSU5UUiwgYnV0IGlnbm9yZSBhbGwgb3RoZXIgZmFpbHVyZXMgKi8KIAlkbwogCXsKLQkJ cmMgPSBzZW5kKHBvcnQtPnNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikgKyAxLCAwKTsK KwkJcmMgPSBzZW5kKGNsaWVudF9zb2NrLT5zb2NrLCBidWZmZXIsIHN0cmxlbihidWZmZXIp ICsgMSwgMCk7CiAJfSB3aGlsZSAocmMgPCAwICYmIGVycm5vID09IEVJTlRSKTsKIH0KIApA QCAtNDE0NiwxNiArNDE0NywyOCBAQCByZXBvcnRfZm9ya19mYWlsdXJlX3RvX2NsaWVudChQ b3J0ICpwb3J0LCBpbnQgZXJybnVtKQogICogYnV0IGhhdmUgbm90IHlldCBzZXQgdXAgbW9z dCBvZiBvdXIgbG9jYWwgcG9pbnRlcnMgdG8gc2htZW0gc3RydWN0dXJlcy4KICAqLwogc3Rh dGljIHZvaWQKLUJhY2tlbmRJbml0aWFsaXplKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMp CitCYWNrZW5kSW5pdGlhbGl6ZShDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3Rh dGUgY2FjKQogewogCWludAkJCXN0YXR1czsKIAlpbnQJCQlyZXQ7CisJUG9ydAkgICAqcG9y dDsKIAljaGFyCQlyZW1vdGVfaG9zdFtOSV9NQVhIT1NUXTsKIAljaGFyCQlyZW1vdGVfcG9y dFtOSV9NQVhTRVJWXTsKIAlTdHJpbmdJbmZvRGF0YSBwc19kYXRhOworCU1lbW9yeUNvbnRl eHQgb2xkY29udGV4dDsKIAotCS8qIFNhdmUgcG9ydCBldGMuIGZvciBwcyBzdGF0dXMgKi8K KwkvKgorCSAqIENyZWF0ZSB0aGUgUG9ydCBzdHJ1Y3R1cmUuCisJICoKKwkgKiBUaGUgUG9y dCBzdHJ1Y3R1cmUgYW5kIGFsbCBkYXRhIHN0cnVjdHVyZXMgYXR0YWNoZWQgdG8gaXQgYXJl IGFsbG9jYXRlZAorCSAqIGluIFRvcE1lbW9yeUNvbnRleHQsIHNvIHRoYXQgdGhleSBzdXJ2 aXZlIGludG8gUG9zdGdyZXNNYWluIGV4ZWN1dGlvbi4KKwkgKiBXZSBuZWVkIG5vdCB3b3Jy eSBhYm91dCBsZWFraW5nIHRoaXMgc3RvcmFnZSBvbiBmYWlsdXJlLCBzaW5jZSB3ZQorCSAq IGFyZW4ndCBpbiB0aGUgcG9zdG1hc3RlciBwcm9jZXNzIGFueW1vcmUuCisJICovCisJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKKwlw b3J0ID0gU3RyZWFtQ29ubmVjdGlvbihjbGllbnRfc29jayk7CiAJTXlQcm9jUG9ydCA9IHBv cnQ7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOwogCiAJLyogVGVsbCBm ZC5jIGFib3V0IHRoZSBsb25nLWxpdmVkIEZEIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9ydCAq LwogCVJlc2VydmVFeHRlcm5hbEZEKCk7CkBAIC00MjE2LDggKzQyMjksOSBAQCBCYWNrZW5k SW5pdGlhbGl6ZShQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2FjKQogCSAqIFNhdmUgcmVtb3Rl X2hvc3QgYW5kIHJlbW90ZV9wb3J0IGluIHBvcnQgc3RydWN0dXJlIChhZnRlciB0aGlzLCB0 aGV5CiAJICogd2lsbCBhcHBlYXIgaW4gbG9nX2xpbmVfcHJlZml4IGRhdGEgZm9yIGxvZyBt ZXNzYWdlcykuCiAJICovCi0JcG9ydC0+cmVtb3RlX2hvc3QgPSBzdHJkdXAocmVtb3RlX2hv c3QpOwotCXBvcnQtPnJlbW90ZV9wb3J0ID0gc3RyZHVwKHJlbW90ZV9wb3J0KTsKKwlvbGRj b250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCXBv cnQtPnJlbW90ZV9ob3N0ID0gcHN0cmR1cChyZW1vdGVfaG9zdCk7CisJcG9ydC0+cmVtb3Rl X3BvcnQgPSBwc3RyZHVwKHJlbW90ZV9wb3J0KTsKIAogCS8qIEFuZCBub3cgd2UgY2FuIGlz c3VlIHRoZSBMb2dfY29ubmVjdGlvbnMgbWVzc2FnZSwgaWYgd2FudGVkICovCiAJaWYgKExv Z19jb25uZWN0aW9ucykKQEAgLTQyNDgsNyArNDI2Miw4IEBAIEJhY2tlbmRJbml0aWFsaXpl KFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAJCXJldCA9PSAwICYmCiAJCXN0cnNwbihy ZW1vdGVfaG9zdCwgIjAxMjM0NTY3ODkuIikgPCBzdHJsZW4ocmVtb3RlX2hvc3QpICYmCiAJ CXN0cnNwbihyZW1vdGVfaG9zdCwgIjAxMjM0NTY3ODlBQkNERUZhYmNkZWY6IikgPCBzdHJs ZW4ocmVtb3RlX2hvc3QpKQotCQlwb3J0LT5yZW1vdGVfaG9zdG5hbWUgPSBzdHJkdXAocmVt b3RlX2hvc3QpOworCQlwb3J0LT5yZW1vdGVfaG9zdG5hbWUgPSBwc3RyZHVwKHJlbW90ZV9o b3N0KTsKKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAKIAkvKgogCSAq IFJlYWR5IHRvIGJlZ2luIGNsaWVudCBpbnRlcmFjdGlvbi4gIFdlIHdpbGwgZ2l2ZSB1cCBh bmQgX2V4aXQoMSkgYWZ0ZXIKQEAgLTQzNjksNyArNDM4NCw3IEBAIEJhY2tlbmRJbml0aWFs aXplKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMpCiAgKgkJRG9lc24ndCByZXR1cm4gYXQg YWxsLgogICovCiBzdGF0aWMgdm9pZAotQmFja2VuZFJ1bihQb3J0ICpwb3J0KQorQmFja2Vu ZFJ1bih2b2lkKQogewogCS8qCiAJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0 cnVjdCBpbiBzaGFyZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCkBAIC00MzgzLDcgKzQz OTgsNyBAQCBCYWNrZW5kUnVuKFBvcnQgKnBvcnQpCiAJICovCiAJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOwogCi0JUG9zdGdyZXNNYWluKHBvcnQtPmRhdGFi YXNlX25hbWUsIHBvcnQtPnVzZXJfbmFtZSk7CisJUG9zdGdyZXNNYWluKE15UHJvY1BvcnQt PmRhdGFiYXNlX25hbWUsIE15UHJvY1BvcnQtPnVzZXJfbmFtZSk7CiB9CiAKIApAQCAtNDQw NCwxMSArNDQxOSwxMSBAQCBCYWNrZW5kUnVuKFBvcnQgKnBvcnQpCiBwaWRfdAogcG9zdG1h c3Rlcl9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdKQogewotCVBvcnQJCXBvcnQ7 CisJQ2xpZW50U29ja2V0IGNsaWVudF9zb2NrOwogCi0JLyogVGhpcyBlbnRyeSBwb2ludCBw YXNzZXMgZHVtbXkgdmFsdWVzIGZvciB0aGUgUG9ydCB2YXJpYWJsZXMgKi8KLQltZW1zZXQo JnBvcnQsIDAsIHNpemVvZihwb3J0KSk7Ci0JcmV0dXJuIGludGVybmFsX2ZvcmtleGVjKGFy Z2MsIGFyZ3YsICZwb3J0KTsKKwkvKiBUaGlzIGVudHJ5IHBvaW50IGRvZXNuJ3QgcGFzcyBh IGNsaWVudCBzb2NrZXQgKi8KKwltZW1zZXQoJmNsaWVudF9zb2NrLCAwLCBzaXplb2YoQ2xp ZW50U29ja2V0KSk7CisJcmV0dXJuIGludGVybmFsX2ZvcmtleGVjKGFyZ2MsIGFyZ3YsICZj bGllbnRfc29jayk7CiB9CiAKIC8qCkBAIC00NDIxLDcgKzQ0MzYsNyBAQCBwb3N0bWFzdGVy X2ZvcmtleGVjKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgKiByZXR1cm5zIHRoZSBwaWQg b2YgdGhlIGZvcmsvZXhlYydkIHByb2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUKICAqLwogc3Rh dGljIHBpZF90Ci1iYWNrZW5kX2ZvcmtleGVjKFBvcnQgKnBvcnQsIENBQ19zdGF0ZSBjYWMp CitiYWNrZW5kX2ZvcmtleGVjKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssIENBQ19zdGF0 ZSBjYWMpCiB7CiAJY2hhcgkgICAqYXZbNV07CiAJaW50CQkJYWMgPSAwOwpAQCAtNDQzNyw3 ICs0NDUyLDcgQEAgYmFja2VuZF9mb3JrZXhlYyhQb3J0ICpwb3J0LCBDQUNfc3RhdGUgY2Fj KQogCWF2W2FjXSA9IE5VTEw7CiAJQXNzZXJ0KGFjIDwgbGVuZ3Rob2YoYXYpKTsKIAotCXJl dHVybiBpbnRlcm5hbF9mb3JrZXhlYyhhYywgYXYsIHBvcnQpOworCXJldHVybiBpbnRlcm5h bF9mb3JrZXhlYyhhYywgYXYsIGNsaWVudF9zb2NrKTsKIH0KIAogI2lmbmRlZiBXSU4zMgpA QCAtNDQ0OSw3ICs0NDY0LDcgQEAgYmFja2VuZF9mb3JrZXhlYyhQb3J0ICpwb3J0LCBDQUNf c3RhdGUgY2FjKQogICogLSBmb3JrKCk6cywgYW5kIHRoZW4gZXhlYygpOnMgdGhlIGNoaWxk IHByb2Nlc3MKICAqLwogc3RhdGljIHBpZF90Ci1pbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJn YywgY2hhciAqYXJndltdLCBQb3J0ICpwb3J0KQoraW50ZXJuYWxfZm9ya2V4ZWMoaW50IGFy Z2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykKIHsKIAlzdGF0 aWMgdW5zaWduZWQgbG9uZyB0bXBCYWNrZW5kRmlsZU51bSA9IDA7CiAJcGlkX3QJCXBpZDsK QEAgLTQ0NTcsNyArNDQ3Miw3IEBAIGludGVybmFsX2ZvcmtleGVjKGludCBhcmdjLCBjaGFy ICphcmd2W10sIFBvcnQgKnBvcnQpCiAJQmFja2VuZFBhcmFtZXRlcnMgcGFyYW07CiAJRklM RQkgICAqZnA7CiAKLQlpZiAoIXNhdmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBwb3J0 KSkKKwlpZiAoIXNhdmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRfc29jaykp CiAJCXJldHVybiAtMTsJCQkJLyogbG9nIG1hZGUgYnkgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxl cyAqLwogCiAJLyogQ2FsY3VsYXRlIG5hbWUgZm9yIHRlbXAgZmlsZSAqLwpAQCAtNDc1NSw3 ICs0NzcwLDcgQEAgcmV0cnk6CiB2b2lkCiBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogewotCVBvcnQJCXBvcnQ7CisJQ2xpZW50U29ja2V0IGNsaWVudF9z b2NrOwogCiAJLyogSW4gRVhFQ19CQUNLRU5EIGNhc2Ugd2Ugd2lsbCBub3QgaGF2ZSBpbmhl cml0ZWQgdGhlc2Ugc2V0dGluZ3MgKi8KIAlJc1Bvc3RtYXN0ZXJFbnZpcm9ubWVudCA9IHRy dWU7CkBAIC00NzY5LDggKzQ3ODQsOCBAQCBTdWJQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywg Y2hhciAqYXJndltdKQogCQllbG9nKEZBVEFMLCAiaW52YWxpZCBzdWJwb3N0bWFzdGVyIGlu dm9jYXRpb24iKTsKIAogCS8qIFJlYWQgaW4gdGhlIHZhcmlhYmxlcyBmaWxlICovCi0JbWVt c2V0KCZwb3J0LCAwLCBzaXplb2YoUG9ydCkpOwotCXJlYWRfYmFja2VuZF92YXJpYWJsZXMo YXJndlsyXSwgJnBvcnQpOworCW1lbXNldCgmY2xpZW50X3NvY2ssIDAsIHNpemVvZihDbGll bnRTb2NrZXQpKTsKKwlyZWFkX2JhY2tlbmRfdmFyaWFibGVzKGFyZ3ZbMl0sICZjbGllbnRf c29jayk7CiAKIAkvKiBDbG9zZSB0aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKGFzIHNvb24g YXMgd2Uga25vdyB0aGVtKSAqLwogCUNsb3NlUG9zdG1hc3RlclBvcnRzKHN0cmNtcChhcmd2 WzFdLCAiLS1mb3JrbG9nIikgPT0gMCk7CkBAIC00ODc0LDEzICs0ODg5LDEzIEBAIFN1YlBv c3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCSAqIFBHUFJPQyBzbG90 cywgd2UgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIGxpYnBxIGFuZCBhcmUgYWJsZSB0bwog CQkgKiByZXBvcnQgdGhlIGVycm9yIHRvIHRoZSBjbGllbnQuCiAJCSAqLwotCQlCYWNrZW5k SW5pdGlhbGl6ZSgmcG9ydCwgY2FjKTsKKwkJQmFja2VuZEluaXRpYWxpemUoJmNsaWVudF9z b2NrLCBjYWMpOwogCiAJCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVy cyAqLwogCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7CiAKIAkJLyogQW5k IHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNrZW5kUnVuKCZwb3J0KTsJCS8qIGRvZXMgbm90 IHJldHVybiAqLworCQlCYWNrZW5kUnVuKCk7CQkJLyogZG9lcyBub3QgcmV0dXJuICovCiAJ fQogCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F1eCIpID09IDApCiAJewpAQCAtNTk2 OCwxNSArNTk4MywxNSBAQCBzdGF0aWMgdm9pZCByZWFkX2luaGVyaXRhYmxlX3NvY2tldChT T0NLRVQgKmRlc3QsIEluaGVyaXRhYmxlU29ja2V0ICpzcmMpOwogLyogU2F2ZSBjcml0aWNh bCBiYWNrZW5kIHZhcmlhYmxlcyBpbnRvIHRoZSBCYWNrZW5kUGFyYW1ldGVycyBzdHJ1Y3Qg Ki8KICNpZm5kZWYgV0lOMzIKIHN0YXRpYyBib29sCi1zYXZlX2JhY2tlbmRfdmFyaWFibGVz KEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgUG9ydCAqcG9ydCkKK3NhdmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVu dF9zb2NrKQogI2Vsc2UKIHN0YXRpYyBib29sCi1zYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJh Y2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgUG9ydCAqcG9ydCwKK3NhdmVfYmFja2VuZF92YXJp YWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9z b2NrLAogCQkJCQkgICBIQU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCkKICNl bmRpZgogewotCW1lbWNweSgmcGFyYW0tPnBvcnQsIHBvcnQsIHNpemVvZihQb3J0KSk7Ci0J aWYgKCF3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQoJnBhcmFtLT5wb3J0c29ja2V0LCBwb3J0 LT5zb2NrLCBjaGlsZFBpZCkpCisJbWVtY3B5KCZwYXJhbS0+Y2xpZW50X3NvY2ssIGNsaWVu dF9zb2NrLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJaWYgKCF3cml0ZV9pbmhlcml0YWJs ZV9zb2NrZXQoJnBhcmFtLT5zZXJpYWxpemVkX3NvY2ssIGNsaWVudF9zb2NrLT5zb2NrLCBj aGlsZFBpZCkpCiAJCXJldHVybiBmYWxzZTsKIAogCXN0cmxjcHkocGFyYW0tPkRhdGFEaXIs IERhdGFEaXIsIE1BWFBHUEFUSCk7CkBAIC02MTM4LDcgKzYxNTMsNyBAQCByZWFkX2luaGVy aXRhYmxlX3NvY2tldChTT0NLRVQgKmRlc3QsIEluaGVyaXRhYmxlU29ja2V0ICpzcmMpCiAj ZW5kaWYKIAogc3RhdGljIHZvaWQKLXJlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQs IFBvcnQgKnBvcnQpCityZWFkX2JhY2tlbmRfdmFyaWFibGVzKGNoYXIgKmlkLCBDbGllbnRT b2NrZXQgKmNsaWVudF9zb2NrKQogewogCUJhY2tlbmRQYXJhbWV0ZXJzIHBhcmFtOwogCkBA IC02MjA1LDE1ICs2MjIwLDE1IEBAIHJlYWRfYmFja2VuZF92YXJpYWJsZXMoY2hhciAqaWQs IFBvcnQgKnBvcnQpCiAJfQogI2VuZGlmCiAKLQlyZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVz KCZwYXJhbSwgcG9ydCk7CisJcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcygmcGFyYW0sIGNs aWVudF9zb2NrKTsKIH0KIAogLyogUmVzdG9yZSBjcml0aWNhbCBiYWNrZW5kIHZhcmlhYmxl cyBmcm9tIHRoZSBCYWNrZW5kUGFyYW1ldGVycyBzdHJ1Y3QgKi8KIHN0YXRpYyB2b2lkCi1y ZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgUG9y dCAqcG9ydCkKK3Jlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMg KnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQogewotCW1lbWNweShwb3J0LCAm cGFyYW0tPnBvcnQsIHNpemVvZihQb3J0KSk7Ci0JcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQo JnBvcnQtPnNvY2ssICZwYXJhbS0+cG9ydHNvY2tldCk7CisJbWVtY3B5KGNsaWVudF9zb2Nr LCAmcGFyYW0tPmNsaWVudF9zb2NrLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7CisJcmVhZF9p bmhlcml0YWJsZV9zb2NrZXQoJmNsaWVudF9zb2NrLT5zb2NrLCAmcGFyYW0tPnNlcmlhbGl6 ZWRfc29jayk7CiAKIAlTZXREYXRhRGlyKHBhcmFtLT5EYXRhRGlyKTsKIApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCmluZGV4IGZkZjUxY2UyODFhLi45YTlhMWU3MDAzOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdy ZXMuYwpAQCAtNDIxMywxMCArNDIxMyw3IEBAIFBvc3RncmVzTWFpbihjb25zdCBjaGFyICpk Ym5hbWUsIGNvbnN0IGNoYXIgKnVzZXJuYW1lKQogCiAJLyoKIAkgKiBJZiB0aGUgUG9zdG1h c3RlckNvbnRleHQgaXMgc3RpbGwgYXJvdW5kLCByZWN5Y2xlIHRoZSBzcGFjZTsgd2UgZG9u J3QKLQkgKiBuZWVkIGl0IGFueW1vcmUgYWZ0ZXIgSW5pdFBvc3RncmVzIGNvbXBsZXRlcy4g IE5vdGUgdGhpcyBkb2VzIG5vdCB0cmFzaAotCSAqICpNeVByb2NQb3J0LCBiZWNhdXNlIHRo YXQgc3BhY2UgaXMgYWxsb2NhdGVkIGluIHN0YWNrCi0JICogLi4uIGVsc2Ugd2UnZCBuZWVk IHRvIGNvcHkgdGhlIFBvcnQgZGF0YSBmaXJzdC4gIEFsc28sIHN1YnNpZGlhcnkgZGF0YQot CSAqIHN1Y2ggYXMgdGhlIHVzZXJuYW1lIGlzbid0IGxvc3QgZWl0aGVyOyBzZWUgUHJvY2Vz c1N0YXJ0dXBQYWNrZXQoKS4KKwkgKiBuZWVkIGl0IGFueW1vcmUgYWZ0ZXIgSW5pdFBvc3Rn cmVzIGNvbXBsZXRlcy4KIAkgKi8KIAlpZiAoUG9zdG1hc3RlckNvbnRleHQpCiAJewpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaCBiL3NyYy9pbmNsdWRlL2xp YnBxL2xpYnBxLWJlLmgKaW5kZXggMzM1Y2IyZGU0NGEuLjliNmQ4ZmM1NTcxIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCisrKyBiL3NyYy9pbmNsdWRlL2xp YnBxL2xpYnBxLWJlLmgKQEAgLTExMCwxMiArMTEwLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2xp ZW50Q29ubmVjdGlvbkluZm8KIH0gQ2xpZW50Q29ubmVjdGlvbkluZm87CiAKIC8qCi0gKiBU aGlzIGlzIHVzZWQgYnkgdGhlIHBvc3RtYXN0ZXIgaW4gaXRzIGNvbW11bmljYXRpb24gd2l0 aCBmcm9udGVuZHMuICBJdAotICogY29udGFpbnMgYWxsIHN0YXRlIGluZm9ybWF0aW9uIG5l ZWRlZCBkdXJpbmcgdGhpcyBjb21tdW5pY2F0aW9uIGJlZm9yZSB0aGUKLSAqIGJhY2tlbmQg aXMgcnVuLiAgVGhlIFBvcnQgc3RydWN0dXJlIGlzIGtlcHQgaW4gbWFsbG9jJ2QgbWVtb3J5 IGFuZCBpcwotICogc3RpbGwgYXZhaWxhYmxlIHdoZW4gYSBiYWNrZW5kIGlzIHJ1bm5pbmcg KHNlZSBNeVByb2NQb3J0KS4gIFRoZSBkYXRhCi0gKiBpdCBwb2ludHMgdG8gbXVzdCBhbHNv IGJlIG1hbGxvYydkLCBvciBlbHNlIHBhbGxvYydkIGluIFRvcE1lbW9yeUNvbnRleHQsCi0g KiBzbyB0aGF0IGl0IHN1cnZpdmVzIGludG8gUG9zdGdyZXNNYWluIGV4ZWN1dGlvbiEKKyAq IFRoZSBQb3J0IHN0cnVjdHVyZSBob2xkcyBzdGF0ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNs aWVudCBjb25uZWN0aW9uIGluIGEKKyAqIGJhY2tlbmQgcHJvY2Vzcy4gIEl0IGlzIGF2YWls YWJsZSBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlIE15UHJvY1BvcnQuICBUaGUKKyAqIHN0cnVj dCBhbmQgYWxsIHRoZSBkYXRhIGl0IHBvaW50cyBhcmUga2VwdCBpbiBUb3BNZW1vcnlDb250 ZXh0LgogICoKICAqIHJlbW90ZV9ob3N0bmFtZSBpcyBzZXQgaWYgd2UgZGlkIGEgc3VjY2Vz c2Z1bCByZXZlcnNlIGxvb2t1cCBvZiB0aGUKICAqIGNsaWVudCdzIElQIGFkZHJlc3MgZHVy aW5nIGNvbm5lY3Rpb24gc2V0dXAuCkBAIC0yMTcsNiArMjE0LDE2IEBAIHR5cGVkZWYgc3Ry dWN0IFBvcnQKICNlbmRpZgogfSBQb3J0OwogCisvKgorICogQ2xpZW50U29ja2V0IGhvbGRz IGEgc29ja2V0IGZvciBhbiBhY2NlcHRlZCBjb25uZWN0aW9uLCBhbG9uZyB3aXRoIHRoZQor ICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVuZHBvaW50cy4KKyAqLwordHlwZWRlZiBzdHJ1 Y3QgQ2xpZW50U29ja2V0IHsKKwlwZ3NvY2tldAlzb2NrOwkJCS8qIEZpbGUgZGVzY3JpcHRv ciAqLworCVNvY2tBZGRyCWxhZGRyOwkJCS8qIGxvY2FsIGFkZHIgKHBvc3RtYXN0ZXIpICov CisJU29ja0FkZHIJcmFkZHI7CQkJLyogcmVtb3RlIGFkZHIgKGNsaWVudCkgKi8KK30gQ2xp ZW50U29ja2V0OworCiAjaWZkZWYgVVNFX1NTTAogLyoKICAqCUhhcmRjb2RlZCBESCBwYXJh bWV0ZXJzLCB1c2VkIGluIGVwaGVtZXJhbCBESCBrZXlpbmcuICAoU2VlIGFsc28KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLmggYi9zcmMvaW5jbHVkZS9saWJwcS9s aWJwcS5oCmluZGV4IGE2MTA0ZDhjZDAyLi44ODllODZhN2Y2MSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvbGlicHEvbGlicHEuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS5o CkBAIC02NCwxMSArNjQsMTEgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFdhaXRFdmVudFNldCAq RmVCZVdhaXRTZXQ7CiAjZGVmaW5lIEZlQmVXYWl0U2V0TGF0Y2hQb3MgMQogI2RlZmluZSBG ZUJlV2FpdFNldE5FdmVudHMgMwogCi1leHRlcm4gaW50CVN0cmVhbVNlcnZlclBvcnQoaW50 IGZhbWlseSwgY29uc3QgY2hhciAqaG9zdE5hbWUsCitleHRlcm4gaW50CUxpc3RlblNlcnZl clBvcnQoaW50IGZhbWlseSwgY29uc3QgY2hhciAqaG9zdE5hbWUsCiAJCQkJCQkJIHVuc2ln bmVkIHNob3J0IHBvcnROdW1iZXIsIGNvbnN0IGNoYXIgKnVuaXhTb2NrZXREaXIsCiAJCQkJ CQkJIHBnc29ja2V0IExpc3RlblNvY2tldFtdLCBpbnQgKk51bUxpc3RlblNvY2tldHMsIGlu dCBNYXhMaXN0ZW4pOwotZXh0ZXJuIGludAlTdHJlYW1Db25uZWN0aW9uKHBnc29ja2V0IHNl cnZlcl9mZCwgUG9ydCAqcG9ydCk7Ci1leHRlcm4gdm9pZCBTdHJlYW1DbG9zZShwZ3NvY2tl dCBzb2NrKTsKK2V4dGVybiBpbnQJQWNjZXB0Q2xpZW50Q29ubmVjdGlvbihwZ3NvY2tldCBz ZXJ2ZXJfZmQsIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spOworZXh0ZXJuIFBvcnQgKlN0 cmVhbUNvbm5lY3Rpb24oQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7CiBleHRlcm4gdm9p ZCBUb3VjaFNvY2tldEZpbGVzKHZvaWQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlU29ja2V0Rmls ZXModm9pZCk7CiBleHRlcm4gdm9pZCBwcV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCBkNjU5YWRiZmQ2Yy4uMDA2NDk2MDhlNDYgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0CkBAIC0zODIsNiArMzgyLDcgQEAgQ2xpZW50Q2VydE1vZGUK IENsaWVudENlcnROYW1lCiBDbGllbnRDb25uZWN0aW9uSW5mbwogQ2xpZW50RGF0YQorQ2xp ZW50U29ja2V0CiBDbG9uZVB0clR5cGUKIENsb3NlUG9ydGFsU3RtdAogQ2xvc2VQdHJUeXBl Ci0tIAoyLjM5LjIKCg== --------------XHa7Rv0KAibWokVMBeQBHaZj Content-Type: text/x-patch; charset=UTF-8; name="v3-0007-Refactor-postmaster-child-process-launching.patch" Content-Disposition: attachment; filename*0="v3-0007-Refactor-postmaster-child-process-launching.patch" Content-Transfer-Encoding: base64 RnJvbSBjZTUxODc2Zjg3ZjFlNDMxN2UyNWJhZjY0MTg0NzQ5NDQ4ZmNkMDMzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMzAgTm92IDIwMjMgMDA6MDc6MzQgKzAyMDAK U3ViamVjdDogW1BBVENIIHYzIDcvN10gUmVmYWN0b3IgcG9zdG1hc3RlciBjaGlsZCBwcm9j ZXNzIGxhdW5jaGluZwoKLSBNb3ZlIGNvZGUgcmVsYXRlZCB0byBsYXVuY2hpbmcgYmFja2Vu ZCBwcm9jZXNzZXMgdG8gbmV3IHNvdXJjZSBmaWxlLAogIGxhdW5jaF9iYWNrZW5kLmMKCi0g SW50cm9kdWNlIG5ldyBwb3N0bWFzdGVyX2NoaWxkX2xhdW5jaCgpIGZ1bmN0aW9uIHRoYXQg ZGVhbHMgd2l0aCB0aGUKICBkaWZmZXJlbmNlcyBiZXR3ZWVuIEVYRUNfQkFDS0VORCBhbmQg Zm9yayBtb2RlLgoKLSBSZWZhY3RvciB0aGUgbWVjaGFuaXNtIG9mIHBhc3NpbmcgaW5mb3Jt YXRpb24gZnJvbSB0aGUgcGFyZW50IHRvCiAgY2hpbGQgcHJvY2Vzcy4gSW5zdGVhZCBvZiB1 c2luZyBkaWZmZXJlbnQgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB3aGVuCiAgbGF1bmNoaW5n IHRoZSBjaGlsZCBwcm9jZXNzIGluIEVYRUNfQkFDS0VORCBtb2RlLCBwYXNzIGEKICB2YXJp YWJsZS1sZW5ndGggYmxvYiBvZiBkYXRhIGFsb25nIHdpdGggYWxsIHRoZSBnbG9iYWwgdmFy aWFibGVzLiBUaGUKICBjb250ZW50cyBvZiB0aGF0IGJsb2IgZGVwZW5kIG9uIHRoZSBraW5k IG9mIGNoaWxkIHByb2Nlc3MgYmVpbmcKICBsYXVuY2hlZC4gSW4gIUVYRUNfQkFDS0VORCBt b2RlLCB3ZSB1c2UgdGhlIHNhbWUgYmxvYiwgYnV0IGl0J3Mgc2ltcGx5CiAgaW5oZXJpdGVk IGZyb20gdGhlIHBhcmVudCB0byBjaGlsZCBwcm9jZXNzLgoKUmV2aWV3ZWQtYnk6IFRyaXN0 YW4gUGFydGluLCBBbmRyZXMgRnJldW5kCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBvc3Rn cmVzcWwub3JnL21lc3NhZ2UtaWQvN2E1OWIwNzMtNWI1Yi0xNTFlLTdlZDMtOGIwMWZmN2Nl OWVmQGlraS5maQotLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYyAg ICAgICAgIHwgIDE3MyArLS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5j ICAgICAgICAgfCAgIDcyICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMg ICAgICAgICAgIHwgICAxNCArLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5j ICAgICAgICAgICB8ICAgIDkgKy0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2lu dGVyLmMgICAgICAgfCAgICA5ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ZvcmtfcHJv Y2Vzcy5jICAgICAgIHwgIDEyNiAtLQogc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hf YmFja2VuZC5jICAgICB8IDEyNzIgKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL21lc29uLmJ1aWxkICAgICAgICAgIHwgICAgMiArLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9wZ2FyY2guYyAgICAgICAgICAgICB8ICAgIDkgKy0KIHNyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcG9zdG1hc3Rlci5jICAgICAgICAgfCAxNTUzICsrKy0tLS0tLS0tLS0tLS0t LS0KIHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jICAgICAgICAgICAgfCAgICA5 ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jICAgICAgICAgIHwgIDI3 NSArKy0tCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHdyaXRlci5jICAgICAgICAgIHwg ICAgOSArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jICB8 ICAgIDEgLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyAgICAgICB8 ICAgIDkgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3NobWVtLmMgICAgICAgICAgICAg fCAgICAyICsKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAg fCAgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyAgICAgICAgICAg fCAgMTMzIC0tCiBzcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oICAgICAgICAgICAgICAg IHwgICAxMSArLQogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmggICAgICAg ICB8ICAgMTIgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oICAgICAg ICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFs cy5oIHwgICAgMiArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9iZ3dyaXRlci5oICAgICAg ICAgICB8ICAgIDQgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmgg ICAgICAgfCAgIDE3IC0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcGdhcmNoLmggICAgICAg ICAgICAgfCAgICAyICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCAg ICAgICAgIHwgICA0NCArLQogc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9zdGFydHVwLmggICAg ICAgICAgICB8ICAgIDIgKy0KIHNyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgg ICAgICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3dhbHdyaXRlci5o ICAgICAgICAgIHwgICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2 ZXIuaCAgICAgICB8ICAgIDIgKy0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0 ICAgICAgICAgICAgfCAgICAyICsKIDMzIGZpbGVzIGNoYW5nZWQsIDE3ODcgaW5zZXJ0aW9u cygrKSwgMjAwMiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jh Y2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCiBkZWxldGUgbW9kZSAxMDA2NDQg c3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaAoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3Bvc3RtYXN0ZXIvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L01ha2VmaWxlCmluZGV4IDA0NzQ0OGIzNGViLi5mYzg4ZjViYWUwYiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL01ha2VmaWxlCkBAIC0xOCw4ICsxOCw4IEBAIE9CSlMgPSBcCiAJYmd3b3JrZXIu byBcCiAJYmd3cml0ZXIubyBcCiAJY2hlY2twb2ludGVyLm8gXAotCWZvcmtfcHJvY2Vzcy5v IFwKIAlpbnRlcnJ1cHQubyBcCisJbGF1bmNoX2JhY2tlbmQubyBcCiAJcGdhcmNoLm8gXAog CXBvc3RtYXN0ZXIubyBcCiAJc3RhcnR1cC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRv dmFjdXVtLmMKaW5kZXggMmY1NDQ4NWMyMTcuLjBkZGE0N2JhMzAwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYworKysgYi9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2F1dG92YWN1dW0uYwpAQCAtODQsNyArODQsNiBAQAogI2luY2x1ZGUgIm5v ZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5oIgotI2luY2x1ZGUgInBvc3RtYXN0ZXIvZm9ya19wcm9jZXNz LmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0 bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgpAQCAt MzE1LDEzICszMTQsNiBAQCBzdGF0aWMgV29ya2VySW5mbyBNeVdvcmtlckluZm8gPSBOVUxM OwogLyogUElEIG9mIGxhdW5jaGVyLCB2YWxpZCBvbmx5IGluIHdvcmtlciB3aGlsZSBzaHV0 dGluZyBkb3duICovCiBpbnQJCQlBdXRvdmFjdXVtTGF1bmNoZXJQaWQgPSAwOwogCi0jaWZk ZWYgRVhFQ19CQUNLRU5ECi1zdGF0aWMgcGlkX3QgYXZsYXVuY2hlcl9mb3JrZXhlYyh2b2lk KTsKLXN0YXRpYyBwaWRfdCBhdndvcmtlcl9mb3JrZXhlYyh2b2lkKTsKLSNlbmRpZgotTk9O X0VYRUNfU1RBVElDIHZvaWQgQXV0b1ZhY1dvcmtlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7Ci1OT05fRVhFQ19TVEFUSUMgdm9pZCBB dXRvVmFjTGF1bmNoZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOwotCiBzdGF0aWMgT2lkCWRvX3N0YXJ0X3dvcmtlcih2b2lkKTsKIHN0 YXRpYyB2b2lkIEhhbmRsZUF1dG9WYWNMYXVuY2hlckludGVycnVwdHModm9pZCk7CiBzdGF0 aWMgdm9pZCBBdXRvVmFjTGF1bmNoZXJTaHV0ZG93bih2b2lkKSBwZ19hdHRyaWJ1dGVfbm9y ZXR1cm4oKTsKQEAgLTM2NSw4NSArMzU3LDIxIEBAIHN0YXRpYyB2b2lkIGF2bF9zaWd1c3Iy X2hhbmRsZXIoU0lHTkFMX0FSR1MpOwogICoJCQkJCSAgQVVUT1ZBQ1VVTSBMQVVOQ0hFUiBD T0RFCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKIC8qCi0gKiBm b3JrZXhlYyByb3V0aW5lIGZvciB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciBwcm9jZXNzLgot ICoKLSAqIEZvcm1hdCB1cCB0aGUgYXJnbGlzdCwgdGhlbiBmb3JrIGFuZCBleGVjLgotICov Ci1zdGF0aWMgcGlkX3QKLWF2bGF1bmNoZXJfZm9ya2V4ZWModm9pZCkKLXsKLQljaGFyCSAg ICphdlsxMF07Ci0JaW50CQkJYWMgPSAwOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwot CWF2W2FjKytdID0gIi0tZm9ya2F2bGF1bmNoZXIiOwotCWF2W2FjKytdID0gTlVMTDsJCQkv KiBmaWxsZWQgaW4gYnkgcG9zdG1hc3Rlcl9mb3JrZXhlYyAqLwotCWF2W2FjXSA9IE5VTEw7 Ci0KLQlBc3NlcnQoYWMgPCBsZW5ndGhvZihhdikpOwotCi0JcmV0dXJuIHBvc3RtYXN0ZXJf Zm9ya2V4ZWMoYWMsIGF2KTsKLX0KLQotLyoKLSAqIFdlIG5lZWQgdGhpcyBzZXQgZnJvbSB0 aGUgb3V0c2lkZSwgYmVmb3JlIEluaXRQcm9jZXNzIGlzIGNhbGxlZAorICogTWFpbiBsb29w IGZvciB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hlciBwcm9jZXNzLgogICovCiB2b2lkCi1BdXRv dmFjdXVtTGF1bmNoZXJJQW0odm9pZCkKLXsKLQlhbV9hdXRvdmFjdXVtX2xhdW5jaGVyID0g dHJ1ZTsKLX0KLSNlbmRpZgotCi0vKgotICogTWFpbiBlbnRyeSBwb2ludCBmb3IgYXV0b3Zh Y3V1bSBsYXVuY2hlciBwcm9jZXNzLCB0byBiZSBjYWxsZWQgZnJvbSB0aGUKLSAqIHBvc3Rt YXN0ZXIuCi0gKi8KLWludAotU3RhcnRBdXRvVmFjTGF1bmNoZXIodm9pZCkKK0F1dG9WYWNM YXVuY2hlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xl bikKIHsKLQlwaWRfdAkJQXV0b1ZhY1BJRDsKKwlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9i dWY7CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLQlzd2l0Y2ggKChBdXRvVmFjUElEID0gYXZs YXVuY2hlcl9mb3JrZXhlYygpKSkKLSNlbHNlCi0Jc3dpdGNoICgoQXV0b1ZhY1BJRCA9IGZv cmtfcHJvY2VzcygpKSkKLSNlbmRpZgorCS8qIFJlbGVhc2UgcG9zdG1hc3RlcidzIHdvcmtp bmcgbWVtb3J5IGNvbnRleHQgKi8KKwlpZiAoUG9zdG1hc3RlckNvbnRleHQpCiAJewotCQlj YXNlIC0xOgotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3Jr IGF1dG92YWN1dW0gbGF1bmNoZXIgcHJvY2VzczogJW0iKSkpOwotCQkJcmV0dXJuIDA7Ci0K LSNpZm5kZWYgRVhFQ19CQUNLRU5ECi0JCWNhc2UgMDoKLQkJCS8qIGluIHBvc3RtYXN0ZXIg Y2hpbGQgLi4uICovCi0JCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJCS8qIENsb3Nl IHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwotCQkJQ2xvc2VQb3N0bWFzdGVyUG9ydHMo ZmFsc2UpOwotCi0JCQlBdXRvVmFjTGF1bmNoZXJNYWluKDAsIE5VTEwpOwotCQkJYnJlYWs7 Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoaW50KSBBdXRvVmFjUElEOworCQlN ZW1vcnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1hc3RlckNv bnRleHQgPSBOVUxMOwogCX0KIAotCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwotCXJldHVy biAwOwotfQotCi0vKgotICogTWFpbiBsb29wIGZvciB0aGUgYXV0b3ZhY3V1bSBsYXVuY2hl ciBwcm9jZXNzLgotICovCi1OT05fRVhFQ19TVEFUSUMgdm9pZAotQXV0b1ZhY0xhdW5jaGVy TWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXNpZ2ptcF9idWYJbG9jYWxfc2ln am1wX2J1ZjsKLQogCWFtX2F1dG92YWN1dW1fbGF1bmNoZXIgPSB0cnVlOwogCiAJTXlCYWNr ZW5kVHlwZSA9IEJfQVVUT1ZBQ19MQVVOQ0hFUjsKQEAgLTQ3NSw2ICs0MDMsOSBAQCBBdXRv VmFjTGF1bmNoZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcHFzaWduYWwoU0lH RlBFLCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwogCXBxc2lnbmFsKFNJR0NITEQsIFNJR19E RkwpOwogCisJLyogYXV0b3ZhY3V1bSBuZWVkcyB0aGlzIHNldCBiZWZvcmUgY2FsbGluZyBJ bml0UHJvY2VzcyAqLworCWFtX2F1dG92YWN1dW1fbGF1bmNoZXIgPSB0cnVlOworCiAJLyoK IAkgKiBDcmVhdGUgYSBwZXItYmFja2VuZCBQR1BST0Mgc3RydWN0IGluIHNoYXJlZCBtZW1v cnkuICBXZSBtdXN0IGRvIHRoaXMKIAkgKiBiZWZvcmUgd2UgY2FuIHVzZSBMV0xvY2tzIG9y IGFjY2VzcyBhbnkgc2hhcmVkIG1lbW9yeS4KQEAgLTE0MzIsODcgKzEzNjMsMjIgQEAgYXZs X3NpZ3VzcjJfaGFuZGxlcihTSUdOQUxfQVJHUykKICAqCQkJCQkgIEFVVE9WQUNVVU0gV09S S0VSIENPREUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2lmZGVmIEVYRUNfQkFDS0VORAotLyoK LSAqIGZvcmtleGVjIHJvdXRpbmVzIGZvciB0aGUgYXV0b3ZhY3V1bSB3b3JrZXIuCi0gKgot ICogRm9ybWF0IHVwIHRoZSBhcmdsaXN0LCB0aGVuIGZvcmsgYW5kIGV4ZWMuCi0gKi8KLXN0 YXRpYyBwaWRfdAotYXZ3b3JrZXJfZm9ya2V4ZWModm9pZCkKLXsKLQljaGFyCSAgICphdlsx MF07Ci0JaW50CQkJYWMgPSAwOwotCi0JYXZbYWMrK10gPSAicG9zdGdyZXMiOwotCWF2W2Fj KytdID0gIi0tZm9ya2F2d29ya2VyIjsKLQlhdlthYysrXSA9IE5VTEw7CQkJLyogZmlsbGVk IGluIGJ5IHBvc3RtYXN0ZXJfZm9ya2V4ZWMgKi8KLQlhdlthY10gPSBOVUxMOwotCi0JQXNz ZXJ0KGFjIDwgbGVuZ3Rob2YoYXYpKTsKLQotCXJldHVybiBwb3N0bWFzdGVyX2ZvcmtleGVj KGFjLCBhdik7Ci19Ci0KIC8qCi0gKiBXZSBuZWVkIHRoaXMgc2V0IGZyb20gdGhlIG91dHNp ZGUsIGJlZm9yZSBJbml0UHJvY2VzcyBpcyBjYWxsZWQKKyAqIEF1dG9WYWNXb3JrZXJNYWlu CiAgKi8KIHZvaWQKLUF1dG92YWN1dW1Xb3JrZXJJQW0odm9pZCkKK0F1dG9WYWNXb3JrZXJN YWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pCiB7Ci0J YW1fYXV0b3ZhY3V1bV93b3JrZXIgPSB0cnVlOwotfQotI2VuZGlmCi0KLS8qCi0gKiBNYWlu IGVudHJ5IHBvaW50IGZvciBhdXRvdmFjdXVtIHdvcmtlciBwcm9jZXNzLgotICoKLSAqIFRo aXMgY29kZSBpcyBoZWF2aWx5IGJhc2VkIG9uIHBnYXJjaC5jLCBxLnYuCi0gKi8KLWludAot U3RhcnRBdXRvVmFjV29ya2VyKHZvaWQpCi17Ci0JcGlkX3QJCXdvcmtlcl9waWQ7CisJc2ln am1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOworCU9pZAkJCWRiaWQ7CiAKLSNpZmRlZiBFWEVD X0JBQ0tFTkQKLQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gYXZ3b3JrZXJfZm9ya2V4ZWMoKSkp Ci0jZWxzZQotCXN3aXRjaCAoKHdvcmtlcl9waWQgPSBmb3JrX3Byb2Nlc3MoKSkpCi0jZW5k aWYKKwkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIncyB3b3JraW5nIG1lbW9yeSBjb250ZXh0ICov CisJaWYgKFBvc3RtYXN0ZXJDb250ZXh0KQogCXsKLQkJY2FzZSAtMToKLQkJCWVyZXBvcnQo TE9HLAotCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBhdXRvdmFjdXVtIHdvcmtlciBw cm9jZXNzOiAlbSIpKSk7Ci0JCQlyZXR1cm4gMDsKLQotI2lmbmRlZiBFWEVDX0JBQ0tFTkQK LQkJY2FzZSAwOgotCQkJLyogaW4gcG9zdG1hc3RlciBjaGlsZCAuLi4gKi8KLQkJCUluaXRQ b3N0bWFzdGVyQ2hpbGQoKTsKLQotCQkJLyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2Nr ZXRzICovCi0JCQlDbG9zZVBvc3RtYXN0ZXJQb3J0cyhmYWxzZSk7Ci0KLQkJCUF1dG9WYWNX b3JrZXJNYWluKDAsIE5VTEwpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJ CXJldHVybiAoaW50KSB3b3JrZXJfcGlkOworCQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3Rt YXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1hc3RlckNvbnRleHQgPSBOVUxMOwogCX0KIAotCS8q IHNob3VsZG4ndCBnZXQgaGVyZSAqLwotCXJldHVybiAwOwotfQotCi0vKgotICogQXV0b1Zh Y1dvcmtlck1haW4KLSAqLwotTk9OX0VYRUNfU1RBVElDIHZvaWQKLUF1dG9WYWNXb3JrZXJN YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0Jc2lnam1wX2J1Zglsb2NhbF9zaWdq bXBfYnVmOwotCU9pZAkJCWRiaWQ7Ci0KIAlhbV9hdXRvdmFjdXVtX3dvcmtlciA9IHRydWU7 CiAKIAlNeUJhY2tlbmRUeXBlID0gQl9BVVRPVkFDX1dPUktFUjsKQEAgLTE1NDMsNiArMTQw OSw5IEBAIEF1dG9WYWNXb3JrZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcHFz aWduYWwoU0lHRlBFLCBGbG9hdEV4Y2VwdGlvbkhhbmRsZXIpOwogCXBxc2lnbmFsKFNJR0NI TEQsIFNJR19ERkwpOwogCisJLyogYXV0b3ZhY3V1bSBuZWVkcyB0aGlzIHNldCBiZWZvcmUg Y2FsbGluZyBJbml0UHJvY2VzcyAqLworCWFtX2F1dG92YWN1dW1fd29ya2VyID0gdHJ1ZTsK KwogCS8qCiAJICogQ3JlYXRlIGEgcGVyLWJhY2tlbmQgUEdQUk9DIHN0cnVjdCBpbiBzaGFy ZWQgbWVtb3J5LiAgV2UgbXVzdCBkbyB0aGlzCiAJICogYmVmb3JlIHdlIGNhbiB1c2UgTFdM b2NrcyBvciBhY2Nlc3MgYW55IHNoYXJlZCBtZW1vcnkuCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIv YXV4cHJvY2Vzcy5jCmluZGV4IGJhZTZmNjhjNDAyLi5kNGFjZDUxNDZmNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKKysrIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmMKQEAgLTQ2LDQ1ICs0NiwyMyBAQCBBdXhQcm9j VHlwZSBNeUF1eFByb2NUeXBlID0gTm90QW5BdXhQcm9jZXNzOwkvKiBkZWNsYXJlZCBpbiBt aXNjYWRtaW4uaCAqLwogCiAKIC8qCi0gKgkgQXV4aWxpYXJ5UHJvY2Vzc01haW4KKyAqCSBB dXhpbGlhcnlQcm9jZXNzSW5pdAogICoKLSAqCSBUaGUgbWFpbiBlbnRyeSBwb2ludCBmb3Ig YXV4aWxpYXJ5IHByb2Nlc3Nlcywgc3VjaCBhcyB0aGUgYmd3cml0ZXIsCisgKgkgQ29tbW9u IGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIGF1eGlsaWFyeSBwcm9jZXNzZXMsIHN1Y2ggYXMg dGhlIGJnd3JpdGVyLAogICoJIHdhbHdyaXRlciwgd2FscmVjZWl2ZXIsIGJvb3RzdHJhcHBl ciBhbmQgdGhlIHNoYXJlZCBtZW1vcnkgY2hlY2tlciBjb2RlLgotICoKLSAqCSBUaGlzIGNv ZGUgaXMgaGVyZSBqdXN0IGJlY2F1c2Ugb2YgaGlzdG9yaWNhbCByZWFzb25zLgogICovCiB2 b2lkCi1BdXhpbGlhcnlQcm9jZXNzTWFpbihBdXhQcm9jVHlwZSBhdXh0eXBlKQorQXV4aWxp YXJ5UHJvY2Vzc0luaXQodm9pZCkKIHsKLQlBc3NlcnQoSXNVbmRlclBvc3RtYXN0ZXIpOwot Ci0JTXlBdXhQcm9jVHlwZSA9IGF1eHR5cGU7Ci0KLQlzd2l0Y2ggKE15QXV4UHJvY1R5cGUp CisJLyogUmVsZWFzZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLwor CWlmIChQb3N0bWFzdGVyQ29udGV4dCkKIAl7Ci0JCWNhc2UgU3RhcnR1cFByb2Nlc3M6Ci0J CQlNeUJhY2tlbmRUeXBlID0gQl9TVEFSVFVQOwotCQkJYnJlYWs7Ci0JCWNhc2UgQXJjaGl2 ZXJQcm9jZXNzOgotCQkJTXlCYWNrZW5kVHlwZSA9IEJfQVJDSElWRVI7Ci0JCQlicmVhazsK LQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6Ci0JCQlNeUJhY2tlbmRUeXBlID0gQl9CR19XUklU RVI7Ci0JCQlicmVhazsKLQkJY2FzZSBDaGVja3BvaW50ZXJQcm9jZXNzOgotCQkJTXlCYWNr ZW5kVHlwZSA9IEJfQ0hFQ0tQT0lOVEVSOwotCQkJYnJlYWs7Ci0JCWNhc2UgV2FsV3JpdGVy UHJvY2VzczoKLQkJCU15QmFja2VuZFR5cGUgPSBCX1dBTF9XUklURVI7Ci0JCQlicmVhazsK LQkJY2FzZSBXYWxSZWNlaXZlclByb2Nlc3M6Ci0JCQlNeUJhY2tlbmRUeXBlID0gQl9XQUxf UkVDRUlWRVI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVsb2coUEFOSUMsICJ1bnJl Y29nbml6ZWQgcHJvY2VzcyB0eXBlOiAlZCIsIChpbnQpIE15QXV4UHJvY1R5cGUpOwotCQkJ TXlCYWNrZW5kVHlwZSA9IEJfSU5WQUxJRDsKKwkJTWVtb3J5Q29udGV4dERlbGV0ZShQb3N0 bWFzdGVyQ29udGV4dCk7CisJCVBvc3RtYXN0ZXJDb250ZXh0ID0gTlVMTDsKIAl9CiAKKwlB c3NlcnQoSXNVbmRlclBvc3RtYXN0ZXIpOworCiAJaW5pdF9wc19kaXNwbGF5KE5VTEwpOwog CiAJU2V0UHJvY2Vzc2luZ01vZGUoQm9vdHN0cmFwUHJvY2Vzc2luZyk7CkBAIC0xMjIsNyAr MTAwLDYgQEAgQXV4aWxpYXJ5UHJvY2Vzc01haW4oQXV4UHJvY1R5cGUgYXV4dHlwZSkKIAkg Ki8KIAlDcmVhdGVBdXhQcm9jZXNzUmVzb3VyY2VPd25lcigpOwogCi0KIAkvKiBJbml0aWFs aXplIGJhY2tlbmQgc3RhdHVzIGluZm9ybWF0aW9uICovCiAJcGdzdGF0X2JlaW5pdCgpOwog CXBnc3RhdF9iZXN0YXJ0KCk7CkBAIC0xMzEsMzcgKzEwOCw2IEBAIEF1eGlsaWFyeVByb2Nl c3NNYWluKEF1eFByb2NUeXBlIGF1eHR5cGUpCiAJYmVmb3JlX3NobWVtX2V4aXQoU2h1dGRv d25BdXhpbGlhcnlQcm9jZXNzLCAwKTsKIAogCVNldFByb2Nlc3NpbmdNb2RlKE5vcm1hbFBy b2Nlc3NpbmcpOwotCi0Jc3dpdGNoIChNeUF1eFByb2NUeXBlKQotCXsKLQkJY2FzZSBTdGFy dHVwUHJvY2VzczoKLQkJCVN0YXJ0dXBQcm9jZXNzTWFpbigpOwotCQkJcHJvY19leGl0KDEp OwotCi0JCWNhc2UgQXJjaGl2ZXJQcm9jZXNzOgotCQkJUGdBcmNoaXZlck1haW4oKTsKLQkJ CXByb2NfZXhpdCgxKTsKLQotCQljYXNlIEJnV3JpdGVyUHJvY2VzczoKLQkJCUJhY2tncm91 bmRXcml0ZXJNYWluKCk7Ci0JCQlwcm9jX2V4aXQoMSk7Ci0KLQkJY2FzZSBDaGVja3BvaW50 ZXJQcm9jZXNzOgotCQkJQ2hlY2twb2ludGVyTWFpbigpOwotCQkJcHJvY19leGl0KDEpOwot Ci0JCWNhc2UgV2FsV3JpdGVyUHJvY2VzczoKLQkJCVdhbFdyaXRlck1haW4oKTsKLQkJCXBy b2NfZXhpdCgxKTsKLQotCQljYXNlIFdhbFJlY2VpdmVyUHJvY2VzczoKLQkJCVdhbFJlY2Vp dmVyTWFpbigpOwotCQkJcHJvY19leGl0KDEpOwotCi0JCWRlZmF1bHQ6Ci0JCQllbG9nKFBB TklDLCAidW5yZWNvZ25pemVkIHByb2Nlc3MgdHlwZTogJWQiLCAoaW50KSBNeUF1eFByb2NU eXBlKTsKLQkJCXByb2NfZXhpdCgxKTsKLQl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2Jnd29ya2VyLmMKaW5kZXggM2ZiYzhmNTAzY2IuLmEyN2E2NThjMDI1IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dvcmtlci5jCkBAIC03MjMsMTcgKzcyMywyNyBAQCBiZ3dvcmtlcl9k aWUoU0lHTkFMX0FSR1MpCiAgKiBNYWluIGVudHJ5IHBvaW50IGZvciBiYWNrZ3JvdW5kIHdv cmtlciBwcm9jZXNzZXMuCiAgKi8KIHZvaWQKLUJhY2tncm91bmRXb3JrZXJNYWluKHZvaWQp CitCYWNrZ3JvdW5kV29ya2VyTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFy dHVwX2RhdGFfbGVuKQogewogCXNpZ2ptcF9idWYJbG9jYWxfc2lnam1wX2J1ZjsKLQlCYWNr Z3JvdW5kV29ya2VyICp3b3JrZXIgPSBNeUJnd29ya2VyRW50cnk7CisJQmFja2dyb3VuZFdv cmtlciAqd29ya2VyOwogCWJnd29ya2VyX21haW5fdHlwZSBlbnRyeXB0OwogCisJLyogUmVs ZWFzZSBwb3N0bWFzdGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLworCWlmIChQb3N0 bWFzdGVyQ29udGV4dCkKKwl7CisJCU1lbW9yeUNvbnRleHREZWxldGUoUG9zdG1hc3RlckNv bnRleHQpOworCQlQb3N0bWFzdGVyQ29udGV4dCA9IE5VTEw7CisJfQorCisJQXNzZXJ0KHN0 YXJ0dXBfZGF0YV9sZW4gPT0gc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKKwl3b3JrZXIg PSAoQmFja2dyb3VuZFdvcmtlciAqKSBzdGFydHVwX2RhdGE7CiAJaWYgKHdvcmtlciA9PSBO VUxMKQogCQllbG9nKEZBVEFMLCAidW5hYmxlIHRvIGZpbmQgYmd3b3JrZXIgZW50cnkiKTsK IAogCUlzQmFja2dyb3VuZFdvcmtlciA9IHRydWU7CiAKKwlNeUJnd29ya2VyRW50cnkgPSB3 b3JrZXI7CiAJTXlCYWNrZW5kVHlwZSA9IEJfQkdfV09SS0VSOwogCWluaXRfcHNfZGlzcGxh eSh3b3JrZXItPmJnd19uYW1lKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1h c3Rlci9iZ3dyaXRlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dyaXRlci5jCmlu ZGV4IGQwMmRjMTdiOWMxLi4wMjc1OTBmODI0YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9iZ3dyaXRlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYmd3 cml0ZXIuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVk ZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dy aXRlci5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWZfaW50ZXJuYWxzLmgiCkBAIC04OCwxMyArODksMTkgQEAgc3RhdGljIFhM b2dSZWNQdHIgbGFzdF9zbmFwc2hvdF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKICAqIGJh c2ljIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCwgYnV0IG5vdCBlbmFibGVkIHNpZ25hbHMgeWV0 LgogICovCiB2b2lkCi1CYWNrZ3JvdW5kV3JpdGVyTWFpbih2b2lkKQorQmFja2dyb3VuZFdy aXRlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikK IHsKIAlzaWdqbXBfYnVmCWxvY2FsX3NpZ2ptcF9idWY7CiAJTWVtb3J5Q29udGV4dCBiZ3dy aXRlcl9jb250ZXh0OwogCWJvb2wJCXByZXZfaGliZXJuYXRlOwogCVdyaXRlYmFja0NvbnRl eHQgd2JfY29udGV4dDsKIAorCUFzc2VydChzdGFydHVwX2RhdGFfbGVuID09IDApOworCisJ TXlBdXhQcm9jVHlwZSA9IEJnV3JpdGVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9C R19XUklURVI7CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCS8qCiAJICogUHJvcGVy bHkgYWNjZXB0IG9yIGlnbm9yZSBzaWduYWxzIHRoYXQgbWlnaHQgYmUgc2VudCB0byB1cy4K IAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvY2hlY2twb2ludGVy LmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9pbnRlci5jCmluZGV4IDQyYzgw N2QzNTI4Li4zNjNjMTA1Y2VlNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9jaGVja3BvaW50ZXIuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2NoZWNrcG9p bnRlci5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIK ICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKKyNpbmNsdWRl ICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2Jnd3Jp dGVyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJy ZXBsaWNhdGlvbi9zeW5jcmVwLmgiCkBAIC0xNjksMTEgKzE3MCwxNyBAQCBzdGF0aWMgdm9p ZCBSZXFDaGVja3BvaW50SGFuZGxlcihTSUdOQUxfQVJHUyk7CiAgKiBiYXNpYyBleGVjdXRp b24gZW52aXJvbm1lbnQsIGJ1dCBub3QgZW5hYmxlZCBzaWduYWxzIHlldC4KICAqLwogdm9p ZAotQ2hlY2twb2ludGVyTWFpbih2b2lkKQorQ2hlY2twb2ludGVyTWFpbihjaGFyICpzdGFy dHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogewogCXNpZ2ptcF9idWYJbG9j YWxfc2lnam1wX2J1ZjsKIAlNZW1vcnlDb250ZXh0IGNoZWNrcG9pbnRlcl9jb250ZXh0Owog CisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisKKwlNeUF1eFByb2NUeXBlID0g Q2hlY2twb2ludGVyUHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9DSEVDS1BPSU5URVI7 CisJQXV4aWxpYXJ5UHJvY2Vzc0luaXQoKTsKKwogCUNoZWNrcG9pbnRlclNobWVtLT5jaGVj a3BvaW50ZXJfcGlkID0gTXlQcm9jUGlkOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvZm9ya19wcm9jZXNzLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L2ZvcmtfcHJvY2Vzcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjljMjc2 NWQ2OC4uMDAwMDAwMDAwMDAKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9mb3JrX3By b2Nlc3MuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogZm9ya19w cm9jZXNzLmMKLSAqCSBBIHNpbXBsZSB3cmFwcGVyIG9uIHRvcCBvZiBmb3JrKCkuIFRoaXMg ZG9lcyBub3QgaGFuZGxlIHRoZQotICoJIEVYRUNfQkFDS0VORCBjYXNlOyBpdCBtaWdodCBi ZSBleHRlbmRlZCB0byBkbyBzbywgYnV0IGl0IHdvdWxkIGJlCi0gKgkgY29uc2lkZXJhYmx5 IG1vcmUgY29tcGxleC4KLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyMywgUG9zdGdy ZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAqCi0gKiBJREVOVElGSUNBVElPTgot ICoJICBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5jCi0gKi8KLSNpbmNs dWRlICJwb3N0Z3Jlcy5oIgotCi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzaWdu YWwuaD4KLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNs dWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAibGli cHEvcHFzaWduYWwuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5oIgot Ci0jaWZuZGVmIFdJTjMyCi0vKgotICogV3JhcHBlciBmb3IgZm9yaygpLiBSZXR1cm4gdmFs dWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgZm9yaygpOgotICogLTEgaWYgdGhlIGZv cmsgZmFpbGVkLCAwIGluIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgdGhlIFBJRCBvZiB0aGUK LSAqIGNoaWxkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFNpZ25hbHMgYXJlIGJsb2NrZWQg d2hpbGUgZm9ya2luZywgc28KLSAqIHRoZSBjaGlsZCBtdXN0IHVuYmxvY2suCi0gKi8KLXBp ZF90Ci1mb3JrX3Byb2Nlc3Modm9pZCkKLXsKLQlwaWRfdAkJcmVzdWx0OwotCWNvbnN0IGNo YXIgKm9vbWZpbGVuYW1lOwotCXNpZ3NldF90CXNhdmVfbWFzazsKLQotI2lmZGVmIExJTlVY X1BST0ZJTEUKLQlzdHJ1Y3QgaXRpbWVydmFsIHByb2ZfaXRpbWVyOwotI2VuZGlmCi0KLQkv KgotCSAqIEZsdXNoIHN0ZGlvIGNoYW5uZWxzIGp1c3QgYmVmb3JlIGZvcmssIHRvIGF2b2lk IGRvdWJsZS1vdXRwdXQgcHJvYmxlbXMuCi0JICovCi0JZmZsdXNoKE5VTEwpOwotCi0jaWZk ZWYgTElOVVhfUFJPRklMRQotCi0JLyoKLQkgKiBMaW51eCdzIGZvcmsoKSByZXNldHMgdGhl IHByb2ZpbGluZyB0aW1lciBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4gSWYgd2UKLQkgKiB3YW50 IHRvIHByb2ZpbGUgY2hpbGQgcHJvY2Vzc2VzIHRoZW4gd2UgbmVlZCB0byBzYXZlIGFuZCBy ZXN0b3JlIHRoZQotCSAqIHRpbWVyIHNldHRpbmcuICBUaGlzIGlzIGEgd2FzdGUgb2YgdGlt ZSBpZiBub3QgcHJvZmlsaW5nLCBob3dldmVyLCBzbwotCSAqIG9ubHkgZG8gaXQgaWYgY29t bWFuZGVkIGJ5IHNwZWNpZmljIC1ETElOVVhfUFJPRklMRSBzd2l0Y2guCi0JICovCi0JZ2V0 aXRpbWVyKElUSU1FUl9QUk9GLCAmcHJvZl9pdGltZXIpOwotI2VuZGlmCi0KLQkvKgotCSAq IFdlIHN0YXJ0IHBvc3RtYXN0ZXIgY2hpbGRyZW4gd2l0aCBzaWduYWxzIGJsb2NrZWQuICBU aGlzIGFsbG93cyB0aGVtIHRvCi0JICogaW5zdGFsbCB0aGVpciBvd24gaGFuZGxlcnMgYmVm b3JlIHVuYmxvY2tpbmcsIHRvIGF2b2lkIHJhY2VzIHdoZXJlIHRoZXkKLQkgKiBtaWdodCBy dW4gdGhlIHBvc3RtYXN0ZXIncyBoYW5kbGVyIGFuZCBtaXNzIGFuIGltcG9ydGFudCBjb250 cm9sCi0JICogc2lnbmFsLiBXaXRoIG1vcmUgYW5hbHlzaXMgdGhpcyBjb3VsZCBwb3RlbnRp YWxseSBiZSByZWxheGVkLgotCSAqLwotCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxv Y2tTaWcsICZzYXZlX21hc2spOwotCXJlc3VsdCA9IGZvcmsoKTsKLQlpZiAocmVzdWx0ID09 IDApCi0JewotCQkvKiBmb3JrIHN1Y2NlZWRlZCwgaW4gY2hpbGQgKi8KLSNpZmRlZiBMSU5V WF9QUk9GSUxFCi0JCXNldGl0aW1lcihJVElNRVJfUFJPRiwgJnByb2ZfaXRpbWVyLCBOVUxM KTsKLSNlbmRpZgotCi0JCS8qCi0JCSAqIEJ5IGRlZmF1bHQsIExpbnV4IHRlbmRzIHRvIGtp bGwgdGhlIHBvc3RtYXN0ZXIgaW4gb3V0LW9mLW1lbW9yeQotCQkgKiBzaXR1YXRpb25zLCBi ZWNhdXNlIGl0IGJsYW1lcyB0aGUgcG9zdG1hc3RlciBmb3IgdGhlIHN1bSBvZiBjaGlsZAot CQkgKiBwcm9jZXNzIHNpemVzICppbmNsdWRpbmcgc2hhcmVkIG1lbW9yeSouICAoVGhpcyBp cyB1bmJlbGlldmFibHkKLQkJICogc3R1cGlkLCBidXQgdGhlIGtlcm5lbCBoYWNrZXJzIHNl ZW0gdW5pbnRlcmVzdGVkIGluIGltcHJvdmluZyBpdC4pCi0JCSAqIFRoZXJlZm9yZSBpdCdz IG9mdGVuIGEgZ29vZCBpZGVhIHRvIHByb3RlY3QgdGhlIHBvc3RtYXN0ZXIgYnkKLQkJICog c2V0dGluZyBpdHMgT09NIHNjb3JlIGFkanVzdG1lbnQgbmVnYXRpdmUgKHdoaWNoIGhhcyB0 byBiZSBkb25lIGluCi0JCSAqIGEgcm9vdC1vd25lZCBzdGFydHVwIHNjcmlwdCkuICBTaW5j ZSB0aGUgYWRqdXN0bWVudCBpcyBpbmhlcml0ZWQgYnkKLQkJICogY2hpbGQgcHJvY2Vzc2Vz LCB0aGlzIHdvdWxkIG9yZGluYXJpbHkgbWVhbiB0aGF0IGFsbCB0aGUKLQkJICogcG9zdG1h c3RlcidzIGNoaWxkcmVuIGFyZSBlcXVhbGx5IHByb3RlY3RlZCBhZ2FpbnN0IE9PTSBraWxs LCB3aGljaAotCQkgKiBpcyBub3Qgc3VjaCBhIGdvb2QgaWRlYS4gIFNvIHdlIHByb3ZpZGUg dGhpcyBjb2RlIHRvIGFsbG93IHRoZQotCQkgKiBjaGlsZHJlbiB0byBjaGFuZ2UgdGhlaXIg T09NIHNjb3JlIGFkanVzdG1lbnRzIGFnYWluLiAgQm90aCB0aGUKLQkJICogZmlsZSBuYW1l IHRvIHdyaXRlIHRvIGFuZCB0aGUgdmFsdWUgdG8gd3JpdGUgYXJlIGNvbnRyb2xsZWQgYnkK LQkJICogZW52aXJvbm1lbnQgdmFyaWFibGVzLCB3aGljaCBjYW4gYmUgc2V0IGJ5IHRoZSBz YW1lIHN0YXJ0dXAgc2NyaXB0Ci0JCSAqIHRoYXQgZGlkIHRoZSBvcmlnaW5hbCBhZGp1c3Rt ZW50LgotCQkgKi8KLQkJb29tZmlsZW5hbWUgPSBnZXRlbnYoIlBHX09PTV9BREpVU1RfRklM RSIpOwotCi0JCWlmIChvb21maWxlbmFtZSAhPSBOVUxMKQotCQl7Ci0JCQkvKgotCQkJICog VXNlIG9wZW4oKSBub3Qgc3RkaW8sIHRvIGVuc3VyZSB3ZSBjb250cm9sIHRoZSBvcGVuIGZs YWdzLiBTb21lCi0JCQkgKiBMaW51eCBzZWN1cml0eSBlbnZpcm9ubWVudHMgcmVqZWN0IGFu eXRoaW5nIGJ1dCBPX1dST05MWS4KLQkJCSAqLwotCQkJaW50CQkJZmQgPSBvcGVuKG9vbWZp bGVuYW1lLCBPX1dST05MWSwgMCk7Ci0KLQkJCS8qIFdlIGlnbm9yZSBhbGwgZXJyb3JzICov Ci0JCQlpZiAoZmQgPj0gMCkKLQkJCXsKLQkJCQljb25zdCBjaGFyICpvb212YWx1ZSA9IGdl dGVudigiUEdfT09NX0FESlVTVF9WQUxVRSIpOwotCQkJCWludAkJCXJjOwotCi0JCQkJaWYg KG9vbXZhbHVlID09IE5VTEwpCS8qIHN1cHBseSBhIHVzZWZ1bCBkZWZhdWx0ICovCi0JCQkJ CW9vbXZhbHVlID0gIjAiOwotCi0JCQkJcmMgPSB3cml0ZShmZCwgb29tdmFsdWUsIHN0cmxl bihvb212YWx1ZSkpOwotCQkJCSh2b2lkKSByYzsKLQkJCQljbG9zZShmZCk7Ci0JCQl9Ci0J CX0KLQotCQkvKiBkbyBwb3N0LWZvcmsgaW5pdGlhbGl6YXRpb24gZm9yIHJhbmRvbSBudW1i ZXIgZ2VuZXJhdGlvbiAqLwotCQlwZ19zdHJvbmdfcmFuZG9tX2luaXQoKTsKLQl9Ci0JZWxz ZQotCXsKLQkJLyogaW4gcGFyZW50LCByZXN0b3JlIHNpZ25hbCBtYXNrICovCi0JCXNpZ3By b2NtYXNrKFNJR19TRVRNQVNLLCAmc2F2ZV9tYXNrLCBOVUxMKTsKLQl9Ci0KLQlyZXR1cm4g cmVzdWx0OwotfQotCi0jZW5kaWYJCQkJCQkJLyogISBXSU4zMiAqLwpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jIGIvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci9sYXVuY2hfYmFja2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5mYWM2NThiYTY4NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvbGF1bmNoX2JhY2tlbmQuYwpAQCAtMCwwICsxLDEyNzIgQEAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxhdW5jaF9iYWNrZW5kLmMKKyAqCSAgRnVu Y3Rpb25zIGZvciBsYXVuY2hpbmcgYmFja2VuZHMgYW5kIG90aGVyIHBvc3RtYXN0ZXIgY2hp bGQKKyAqCSAgcHJvY2Vzc2VzLgorICoKKyAqIE9uIFVuaXggc3lzdGVtcywgYSBuZXcgY2hp bGQgcHJvY2VzcyBpcyBsYXVuY2hlZCB3aXRoIGZvcmsoKS4gIEl0IGluaGVyaXRzCisgKiBh bGwgdGhlIGdsb2JhbCB2YXJpYWJsZXMgYW5kIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhZCBi ZWVuIGluaXRpYWxpemVkIGluCisgKiB0aGUgcG9zdG1hc3Rlci4gIEFmdGVyIGZvcmtpbmcs IHRoZSBjaGlsZCBwcm9jZXNzIGNsb3NlcyB0aGUgZmlsZQorICogZGVzY3JpcHRvcnMgdGhh dCBhcmUgbm90IG5lZWRlZCBpbiB0aGUgY2hpbGQgcHJvY2VzcywgYW5kIHNldHMgdXAgdGhl CisgKiBtZWNoYW5pc20gdG8gZGV0ZWN0IGRlYXRoIG9mIHRoZSBwYXJlbnQgcG9zdG1hc3Rl ciBwcm9jZXNzLCBldGMuICBBZnRlcgorICogdGhhdCwgaXQgY2FsbHMgdGhlIHJpZ2h0IE1h aW4gZnVuY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIGNoaWxkCisgKiBwcm9jZXNz LgorICoKKyAqIEluIEVYRUNfQkFDS0VORCBtb2RlLCB3aGljaCBpcyB1c2VkIG9uIFdpbmRv d3MgYnV0IGNhbiBiZSBlbmFibGVkIG9uIG90aGVyCisgKiBwbGF0Zm9ybXMgZm9yIHRlc3Rp bmcsIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGxhdW5jaGVkIGJ5IGZvcmsoKSArIGV4ZWMoKSAo b3IKKyAqIENyZWF0ZVByb2Nlc3MoKSBvbiBXaW5kb3dzKS4gIEl0IGRvZXMgbm90IGluaGVy aXQgdGhlIHN0YXRlIGZyb20gdGhlCisgKiBwb3N0bWFzdGVyLCBzbyBpdCBuZWVkcyB0byBy ZS1hdHRhY2ggdG8gdGhlIHNoYXJlZCBtZW1vcnksIHJlLWluaXRpYWxpemUKKyAqIGdsb2Jh bCB2YXJpYWJsZXMsIHJlLWxvYWQgdGhlIGNvbmZpZyBmaWxlIGV0Yy4KKyAqCisgKgorICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjMsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2Vu dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqCisgKiBJREVOVElG SUNBVElPTgorICoJICBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2xhdW5jaF9iYWNrZW5kLmMK KyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMu aCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1 ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5j bHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxsaW1p dHMuaD4KKworI2luY2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCisjaW5jbHVkZSAiYWNjZXNz L3hsb2cuaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgorI2luY2x1ZGUgImxp YnBxL2xpYnBxLWJlLmgiCisjaW5jbHVkZSAibGlicHEvcHFzaWduYWwuaCIKKyNpbmNsdWRl ICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJub2Rlcy9xdWVyeWp1bWJsZS5oIgorI2luY2x1 ZGUgInBvcnQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92YWN1dW0uaCIKKyNpbmNs dWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2Jn d29ya2VyX2ludGVybmFscy5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3cml0ZXIuaCIK KyNpbmNsdWRlICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0 ZXIvcGdhcmNoLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgiCisjaW5j bHVkZSAicG9zdG1hc3Rlci9zdGFydHVwLmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNs b2dnZXIuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgor I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5o IgorI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3By b2MuaCIKKyNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCisjaW5jbHVkZSAidXRpbHMvYnVp bHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5oIgorI2luY2x1ZGUgInV0aWxz L2d1Yy5oIgorI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCisjaW5jbHVkZSAidXRpbHMv cHNfc3RhdHVzLmgiCisjaW5jbHVkZSAidXRpbHMvdGltZW91dC5oIgorI2luY2x1ZGUgInV0 aWxzL3RpbWVzdGFtcC5oIgorCisjaWZkZWYgRVhFQ19CQUNLRU5ECisjaW5jbHVkZSAic3Rv cmFnZS9zcGluLmgiCisjZW5kaWYKKworCisvKiBUeXBlIGZvciBhIHNvY2tldCB0aGF0IGNh biBiZSBpbmhlcml0ZWQgdG8gYSBjbGllbnQgcHJvY2VzcyAqLworI2lmZGVmIFdJTjMyCit0 eXBlZGVmIHN0cnVjdAoreworCVNPQ0tFVAkJb3JpZ3NvY2tldDsJCS8qIE9yaWdpbmFsIHNv Y2tldCB2YWx1ZSwgb3IgUEdJTlZBTElEX1NPQ0tFVAorCQkJCQkJCQkgKiBpZiBub3QgYSBz b2NrZXQgKi8KKwlXU0FQUk9UT0NPTF9JTkZPIHdzYWluZm87Cit9IEluaGVyaXRhYmxlU29j a2V0OworI2Vsc2UKK3R5cGVkZWYgaW50IEluaGVyaXRhYmxlU29ja2V0OworI2VuZGlmCisK KyNpZmRlZiBFWEVDX0JBQ0tFTkQKKworLyoKKyAqIFN0cnVjdHVyZSBjb250YWlucyBhbGwg Z2xvYmFsIHZhcmlhYmxlcyBwYXNzZWQgdG8gZXhlYzplZCBiYWNrZW5kcworICovCit0eXBl ZGVmIHN0cnVjdAoreworCWNoYXIJCURhdGFEaXJbTUFYUEdQQVRIXTsKKwlpbnQzMgkJTXlD YW5jZWxLZXk7CisJaW50CQkJTXlQTUNoaWxkU2xvdDsKKyNpZm5kZWYgV0lOMzIKKwl1bnNp Z25lZCBsb25nIFVzZWRTaG1lbVNlZ0lEOworI2Vsc2UKKwl2b2lkCSAgICpTaG1lbVByb3Rl Y3RpdmVSZWdpb247CisJSEFORExFCQlVc2VkU2htZW1TZWdJRDsKKyNlbmRpZgorCXZvaWQJ ICAgKlVzZWRTaG1lbVNlZ0FkZHI7CisJc2xvY2tfdCAgICAqU2htZW1Mb2NrOworCVZhcmlh YmxlQ2FjaGUgU2htZW1WYXJpYWJsZUNhY2hlOworCXN0cnVjdCBia2VuZCAqU2htZW1CYWNr ZW5kQXJyYXk7CisjaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCisJUEdTZW1hcGhvcmUgKlNwaW5s b2NrU2VtYUFycmF5OworI2VuZGlmCisJaW50CQkJTmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVz dHM7CisJTmFtZWRMV0xvY2tUcmFuY2hlICpOYW1lZExXTG9ja1RyYW5jaGVBcnJheTsKKwlM V0xvY2tQYWRkZWQgKk1haW5MV0xvY2tBcnJheTsKKwlzbG9ja190ICAgICpQcm9jU3RydWN0 TG9jazsKKwlQUk9DX0hEUiAgICpQcm9jR2xvYmFsOworCVBHUFJPQwkgICAqQXV4aWxpYXJ5 UHJvY3M7CisJUEdQUk9DCSAgICpQcmVwYXJlZFhhY3RQcm9jczsKKwlQTVNpZ25hbERhdGEg KlBNU2lnbmFsU3RhdGU7CisJcGlkX3QJCVBvc3RtYXN0ZXJQaWQ7CisJVGltZXN0YW1wVHog UGdTdGFydFRpbWU7CisJVGltZXN0YW1wVHogUGdSZWxvYWRUaW1lOworCXBnX3RpbWVfdAlm aXJzdF9zeXNsb2dnZXJfZmlsZV90aW1lOworCWJvb2wJCXJlZGlyZWN0aW9uX2RvbmU7CisJ Ym9vbAkJSXNCaW5hcnlVcGdyYWRlOworCWJvb2wJCXF1ZXJ5X2lkX2VuYWJsZWQ7CisJaW50 CQkJbWF4X3NhZmVfZmRzOworCWludAkJCU1heEJhY2tlbmRzOworI2lmZGVmIFdJTjMyCisJ SEFORExFCQlQb3N0bWFzdGVySGFuZGxlOworCUhBTkRMRQkJaW5pdGlhbF9zaWduYWxfcGlw ZTsKKwlIQU5ETEUJCXN5c2xvZ1BpcGVbMl07CisjZWxzZQorCWludAkJCXBvc3RtYXN0ZXJf YWxpdmVfZmRzWzJdOworCWludAkJCXN5c2xvZ1BpcGVbMl07CisjZW5kaWYKKwljaGFyCQlt eV9leGVjX3BhdGhbTUFYUEdQQVRIXTsKKwljaGFyCQlwa2dsaWJfcGF0aFtNQVhQR1BBVEhd OworCisJLyoKKwkgKiBUaGVzZSBhcmUgb25seSB1c2VkIGJ5IGJhY2tlbmQgcHJvY2Vzc2Vz LCBidXQgaXQncyBoZXJlIGJlY2F1c2UgcGFzc2luZworCSAqIGEgc29ja2V0IG5lZWRzIHNv bWUgc3BlY2lhbCBoYW5kbGluZyBvbiBXaW5kb3dzLiAnY2xpZW50X3NvY2snIGlzIGFuCisJ ICogZXhwbGljaXQgYXJndW1lbnQgdG8gcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2gsIGJ1dCBp cyBzdG9yZWQgaW4KKwkgKiBNeUNsaWVudFNvY2tldCBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4K KwkgKi8KKwlDbGllbnRTb2NrZXQgY2xpZW50X3NvY2s7CisJSW5oZXJpdGFibGVTb2NrZXQg aW5oX3NvY2s7CisKKwlzaXplX3QJCXN0YXJ0dXBfZGF0YV9sZW47CisJLyogc3RhcnR1cCBk YXRhIGZvbGxvd3MgKi8KKwljaGFyCQlzdGFydHVwX2RhdGFbRkxFWElCTEVfQVJSQVlfTUVN QkVSXTsKK30gQmFja2VuZFBhcmFtZXRlcnM7CisKKyNkZWZpbmUgU2l6ZU9mQmFja2VuZFBh cmFtZXRlcnMoc3RhcnR1cF9kYXRhX2xlbikgKG9mZnNldG9mKEJhY2tlbmRQYXJhbWV0ZXJz LCBzdGFydHVwX2RhdGEpICsgc3RhcnR1cF9kYXRhX2xlbikKKworc3RhdGljIHZvaWQgcmVh ZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgY2hhciAqKnN0YXJ0dXBfZGF0YSwgc2l6 ZV90ICpzdGFydHVwX2RhdGFfbGVuKTsKK3N0YXRpYyB2b2lkIHJlc3RvcmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtKTsKKworc3RhdGljIGJvb2wgc2F2 ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2ssCisjaWZkZWYgV0lOMzIKKwkJCQkJCQkJICAgSEFORExFIGNo aWxkUHJvY2VzcywgcGlkX3QgY2hpbGRQaWQsCisjZW5kaWYKKwkJCQkJCQkJICAgY2hhciAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CisKKyNlbmRpZgkJCQkJ CQkvKiBFWEVDX0JBQ0tFTkQgKi8KKworc3RhdGljIHZvaWQgSW5pdFBvc3RtYXN0ZXJDaGls ZChib29sIGFtX3N5c2xvZ2dlcik7CisKKworI2lmZGVmIEVYRUNfQkFDS0VORAorc3RhdGlj IHBpZF90IGludGVybmFsX2ZvcmtleGVjKGNvbnN0IGNoYXIgKm1haW5fZm5fbmFtZSwgY2hh ciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbiwgQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jayk7CisjZW5kaWYJCQkJCQkJLyogRVhFQ19CQUNLRU5EICovCisKKyNp Zm5kZWYgV0lOMzIKK3N0YXRpYyBwaWRfdCBmb3JrX3Byb2Nlc3Modm9pZCk7CisjZW5kaWYK KworLyoKKyAqIEluZm9ybWF0aW9uIG5lZWRlZCB0byBsYXVuY2ggZGlmZmVyZW50IGtpbmRz IG9mIGNoaWxkIHByb2Nlc3Nlcy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdAoreworCWNv bnN0IGNoYXIgKm5hbWU7CisJdm9pZAkJKCptYWluX2ZuKSAoY2hhciAqc3RhcnR1cF9kYXRh LCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbik7CisJYm9vbAkJc2htZW1fYXR0YWNoOworfQkJ CWVudHJ5X2tpbmRzW10gPSB7CisJW1BNQ19CQUNLRU5EXSA9IHsiYmFja2VuZCIsIEJhY2tl bmRNYWluLCB0cnVlfSwKKworCVtQTUNfQVZfTEFVTkNIRVJdID0geyJhdXRvdmFjdXVtIGxh dW5jaGVyIiwgQXV0b1ZhY0xhdW5jaGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19BVl9XT1JLRVJd ID0geyJhdXRvdmFjdXVtIHdvcmtlciIsIEF1dG9WYWNXb3JrZXJNYWluLCB0cnVlfSwKKwlb UE1DX0JHV09SS0VSXSA9IHsiYmd3b3JrZXIiLCBCYWNrZ3JvdW5kV29ya2VyTWFpbiwgdHJ1 ZX0sCisJW1BNQ19TWVNMT0dHRVJdID0geyJzeXNsb2dnZXIiLCBTeXNMb2dnZXJNYWluLCBm YWxzZX0sCisKKwlbUE1DX1NUQVJUVVBdID0geyJzdGFydHVwIiwgU3RhcnR1cFByb2Nlc3NN YWluLCB0cnVlfSwKKwlbUE1DX0JHV1JJVEVSXSA9IHsiYmd3cml0ZXIiLCBCYWNrZ3JvdW5k V3JpdGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19BUkNISVZFUl0gPSB7ImFyY2hpdmVyIiwgUGdB cmNoaXZlck1haW4sIHRydWV9LAorCVtQTUNfQ0hFQ0tQT0lOVEVSXSA9IHsiY2hlY2twb2lu dGVyIiwgQ2hlY2twb2ludGVyTWFpbiwgdHJ1ZX0sCisJW1BNQ19XQUxfV1JJVEVSXSA9IHsi d2FsX3dyaXRlciIsIFdhbFdyaXRlck1haW4sIHRydWV9LAorCVtQTUNfV0FMX1JFQ0VJVkVS XSA9IHsid2FsX3JlY2VpdmVyIiwgV2FsUmVjZWl2ZXJNYWluLCB0cnVlfSwKK307CisKK2Nv bnN0IGNoYXIgKgorUG9zdG1hc3RlckNoaWxkTmFtZShQb3N0bWFzdGVyQ2hpbGRUeXBlIGNo aWxkX3R5cGUpCit7CisJQXNzZXJ0KGNoaWxkX3R5cGUgPj0gMCAmJiBjaGlsZF90eXBlIDwg bGVuZ3Rob2YoZW50cnlfa2luZHMpKTsKKwlyZXR1cm4gZW50cnlfa2luZHNbY2hpbGRfdHlw ZV0ubmFtZTsKK30KKworLyoKKyAqIFN0YXJ0IGEgbmV3IHBvc3RtYXN0ZXIgY2hpbGQgcHJv Y2Vzcy4KKyAqCisgKiBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJlIHJlc3RvcmVkIHRvIHJv dWdobHkgdGhlIHNhbWUgc3RhdGUsIHdoZXRoZXIKKyAqIEVYRUNfQkFDS0VORCBpcyB1c2Vk IG9yIG5vdDogaXQgd2lsbCBiZSBhdHRhY2hlZCB0byBzaGFyZWQgbWVtb3J5LCBhbmQgZmRz CisgKiBhbmQgb3RoZXIgcmVzb3VyY2VzIHRoYXQgd2UndmUgaW5oZXJpdGVkIGZyb20gcG9z dG1hc3RlciB0aGF0IGFyZSBub3QKKyAqIG5lZWRlZCBpbiBhIGNoaWxkIHByb2Nlc3MgaGF2 ZSBiZWVuIGNsb3NlZC4KKyAqCisgKiAnc3RhcnR1cF9kYXRhJyBpcyBhbiBvcHRpb25hbCBj b250aWd1b3VzIGNodW5rIG9mIGRhdGEgdGhhdCBpcyBwYXNzZWQgdG8KKyAqIHRoZSBjaGls ZCBwcm9jZXNzLgorICovCitwaWRfdAorcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2goUG9zdG1h c3RlckNoaWxkVHlwZSBjaGlsZF90eXBlLCBjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBz dGFydHVwX2RhdGFfbGVuLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQoreworCXBpZF90 CQlwaWQ7CisKKwlBc3NlcnQoY2hpbGRfdHlwZSA+PSAwICYmIGNoaWxkX3R5cGUgPCBsZW5n dGhvZihlbnRyeV9raW5kcykpOworCUFzc2VydChJc1Bvc3RtYXN0ZXJFbnZpcm9ubWVudCAm JiAhSXNVbmRlclBvc3RtYXN0ZXIpOworCisjaWZkZWYgRVhFQ19CQUNLRU5ECisJcGlkID0g aW50ZXJuYWxfZm9ya2V4ZWMoZW50cnlfa2luZHNbY2hpbGRfdHlwZV0ubmFtZSwgc3RhcnR1 cF9kYXRhLCBzdGFydHVwX2RhdGFfbGVuLCBjbGllbnRfc29jayk7CisJLyogdGhlIGNoaWxk IHByb2Nlc3Mgd2lsbCBhcnJpdmUgaW4gU3ViUG9zdG1hc3Rlck1haW4gKi8KKyNlbHNlCQkJ CQkJCS8qICFFWEVDX0JBQ0tFTkQgKi8KKwlwaWQgPSBmb3JrX3Byb2Nlc3MoKTsKKwlpZiAo cGlkID09IDApCQkJCS8qIGNoaWxkICovCisJeworCQkvKiBEZXRhbmdsZSBmcm9tIHBvc3Rt YXN0ZXIgKi8KKwkJSW5pdFBvc3RtYXN0ZXJDaGlsZChjaGlsZF90eXBlID09IFBNQ19TWVNM T0dHRVIpOworCisJCS8qCisJCSAqIEJlZm9yZSBibG93aW5nIGF3YXkgUG9zdG1hc3RlckNv bnRleHQgKGluIHRoZSBNYWluIGZ1bmN0aW9uKSwgc2F2ZQorCQkgKiB0aGUgc3RhcnR1cCBk YXRhLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQp OworCQlpZiAoc3RhcnR1cF9kYXRhICE9IE5VTEwpCisJCXsKKwkJCWNoYXIJICAgKmNwID0g cGFsbG9jKHN0YXJ0dXBfZGF0YV9sZW4pOworCisJCQltZW1jcHkoY3AsIHN0YXJ0dXBfZGF0 YSwgc3RhcnR1cF9kYXRhX2xlbik7CisJCQlzdGFydHVwX2RhdGEgPSBjcDsKKwkJfQorCisJ CWlmIChjbGllbnRfc29jaykKKwkJeworCQkJTXlDbGllbnRTb2NrZXQgPSBwYWxsb2Moc2l6 ZW9mKENsaWVudFNvY2tldCkpOworCQkJbWVtY3B5KE15Q2xpZW50U29ja2V0LCBjbGllbnRf c29jaywgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCQl9CisKKwkJZW50cnlfa2luZHNbY2hp bGRfdHlwZV0ubWFpbl9mbihzdGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0YV9sZW4pOworCQlB c3NlcnQoZmFsc2UpOworCX0KKyNlbmRpZgkJCQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KKwly ZXR1cm4gcGlkOworfQorCisjaWZuZGVmIFdJTjMyCisvKgorICogV3JhcHBlciBmb3IgZm9y aygpLiAgUGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gc3RlcHMgdGhhdCBhcmUgdGhlIHNhbWUg aW4KKyAqICFFWEVDX0JBQ0tFTkQgYW5kIEVYRUNfQkFDS0VORCBtb2Rlcy4KKyAqCisgKiBS ZXR1cm4gdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgZm9yaygpOiAtMSBpZiB0 aGUgZm9yayBmYWlsZWQsIDAgaW4KKyAqIHRoZSBjaGlsZCBwcm9jZXNzLCBhbmQgdGhlIFBJ RCBvZiB0aGUgY2hpbGQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgU2lnbmFscworICogYXJl IGJsb2NrZWQgd2hpbGUgZm9ya2luZywgc28gdGhlIGNoaWxkIG11c3QgdW5ibG9jay4KKyAq Lworc3RhdGljIHBpZF90Citmb3JrX3Byb2Nlc3Modm9pZCkKK3sKKwlwaWRfdAkJcmVzdWx0 OworCWNvbnN0IGNoYXIgKm9vbWZpbGVuYW1lOworCXNpZ3NldF90CXNhdmVfbWFzazsKKwor I2lmZGVmIExJTlVYX1BST0ZJTEUKKwlzdHJ1Y3QgaXRpbWVydmFsIHByb2ZfaXRpbWVyOwor I2VuZGlmCisKKwkvKgorCSAqIEZsdXNoIHN0ZGlvIGNoYW5uZWxzIGp1c3QgYmVmb3JlIGZv cmssIHRvIGF2b2lkIGRvdWJsZS1vdXRwdXQgcHJvYmxlbXMuCisJICovCisJZmZsdXNoKE5V TEwpOworCisjaWZkZWYgTElOVVhfUFJPRklMRQorCisJLyoKKwkgKiBMaW51eCdzIGZvcmso KSByZXNldHMgdGhlIHByb2ZpbGluZyB0aW1lciBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4gSWYg d2UKKwkgKiB3YW50IHRvIHByb2ZpbGUgY2hpbGQgcHJvY2Vzc2VzIHRoZW4gd2UgbmVlZCB0 byBzYXZlIGFuZCByZXN0b3JlIHRoZQorCSAqIHRpbWVyIHNldHRpbmcuICBUaGlzIGlzIGEg d2FzdGUgb2YgdGltZSBpZiBub3QgcHJvZmlsaW5nLCBob3dldmVyLCBzbworCSAqIG9ubHkg ZG8gaXQgaWYgY29tbWFuZGVkIGJ5IHNwZWNpZmljIC1ETElOVVhfUFJPRklMRSBzd2l0Y2gu CisJICovCisJZ2V0aXRpbWVyKElUSU1FUl9QUk9GLCAmcHJvZl9pdGltZXIpOworI2VuZGlm CisKKwkvKgorCSAqIFdlIHN0YXJ0IHBvc3RtYXN0ZXIgY2hpbGRyZW4gd2l0aCBzaWduYWxz IGJsb2NrZWQuICBUaGlzIGFsbG93cyB0aGVtIHRvCisJICogaW5zdGFsbCB0aGVpciBvd24g aGFuZGxlcnMgYmVmb3JlIHVuYmxvY2tpbmcsIHRvIGF2b2lkIHJhY2VzIHdoZXJlIHRoZXkK KwkgKiBtaWdodCBydW4gdGhlIHBvc3RtYXN0ZXIncyBoYW5kbGVyIGFuZCBtaXNzIGFuIGlt cG9ydGFudCBjb250cm9sCisJICogc2lnbmFsLiBXaXRoIG1vcmUgYW5hbHlzaXMgdGhpcyBj b3VsZCBwb3RlbnRpYWxseSBiZSByZWxheGVkLgorCSAqLworCXNpZ3Byb2NtYXNrKFNJR19T RVRNQVNLLCAmQmxvY2tTaWcsICZzYXZlX21hc2spOworCXJlc3VsdCA9IGZvcmsoKTsKKwlp ZiAocmVzdWx0ID09IDApCisJeworCQkvKiBmb3JrIHN1Y2NlZWRlZCwgaW4gY2hpbGQgKi8K KyNpZmRlZiBMSU5VWF9QUk9GSUxFCisJCXNldGl0aW1lcihJVElNRVJfUFJPRiwgJnByb2Zf aXRpbWVyLCBOVUxMKTsKKyNlbmRpZgorCisJCS8qCisJCSAqIEJ5IGRlZmF1bHQsIExpbnV4 IHRlbmRzIHRvIGtpbGwgdGhlIHBvc3RtYXN0ZXIgaW4gb3V0LW9mLW1lbW9yeQorCQkgKiBz aXR1YXRpb25zLCBiZWNhdXNlIGl0IGJsYW1lcyB0aGUgcG9zdG1hc3RlciBmb3IgdGhlIHN1 bSBvZiBjaGlsZAorCQkgKiBwcm9jZXNzIHNpemVzICppbmNsdWRpbmcgc2hhcmVkIG1lbW9y eSouICAoVGhpcyBpcyB1bmJlbGlldmFibHkKKwkJICogc3R1cGlkLCBidXQgdGhlIGtlcm5l bCBoYWNrZXJzIHNlZW0gdW5pbnRlcmVzdGVkIGluIGltcHJvdmluZyBpdC4pCisJCSAqIFRo ZXJlZm9yZSBpdCdzIG9mdGVuIGEgZ29vZCBpZGVhIHRvIHByb3RlY3QgdGhlIHBvc3RtYXN0 ZXIgYnkKKwkJICogc2V0dGluZyBpdHMgT09NIHNjb3JlIGFkanVzdG1lbnQgbmVnYXRpdmUg KHdoaWNoIGhhcyB0byBiZSBkb25lIGluCisJCSAqIGEgcm9vdC1vd25lZCBzdGFydHVwIHNj cmlwdCkuICBTaW5jZSB0aGUgYWRqdXN0bWVudCBpcyBpbmhlcml0ZWQgYnkKKwkJICogY2hp bGQgcHJvY2Vzc2VzLCB0aGlzIHdvdWxkIG9yZGluYXJpbHkgbWVhbiB0aGF0IGFsbCB0aGUK KwkJICogcG9zdG1hc3RlcidzIGNoaWxkcmVuIGFyZSBlcXVhbGx5IHByb3RlY3RlZCBhZ2Fp bnN0IE9PTSBraWxsLCB3aGljaAorCQkgKiBpcyBub3Qgc3VjaCBhIGdvb2QgaWRlYS4gIFNv IHdlIHByb3ZpZGUgdGhpcyBjb2RlIHRvIGFsbG93IHRoZQorCQkgKiBjaGlsZHJlbiB0byBj aGFuZ2UgdGhlaXIgT09NIHNjb3JlIGFkanVzdG1lbnRzIGFnYWluLiAgQm90aCB0aGUKKwkJ ICogZmlsZSBuYW1lIHRvIHdyaXRlIHRvIGFuZCB0aGUgdmFsdWUgdG8gd3JpdGUgYXJlIGNv bnRyb2xsZWQgYnkKKwkJICogZW52aXJvbm1lbnQgdmFyaWFibGVzLCB3aGljaCBjYW4gYmUg c2V0IGJ5IHRoZSBzYW1lIHN0YXJ0dXAgc2NyaXB0CisJCSAqIHRoYXQgZGlkIHRoZSBvcmln aW5hbCBhZGp1c3RtZW50LgorCQkgKi8KKwkJb29tZmlsZW5hbWUgPSBnZXRlbnYoIlBHX09P TV9BREpVU1RfRklMRSIpOworCisJCWlmIChvb21maWxlbmFtZSAhPSBOVUxMKQorCQl7CisJ CQkvKgorCQkJICogVXNlIG9wZW4oKSBub3Qgc3RkaW8sIHRvIGVuc3VyZSB3ZSBjb250cm9s IHRoZSBvcGVuIGZsYWdzLiBTb21lCisJCQkgKiBMaW51eCBzZWN1cml0eSBlbnZpcm9ubWVu dHMgcmVqZWN0IGFueXRoaW5nIGJ1dCBPX1dST05MWS4KKwkJCSAqLworCQkJaW50CQkJZmQg PSBvcGVuKG9vbWZpbGVuYW1lLCBPX1dST05MWSwgMCk7CisKKwkJCS8qIFdlIGlnbm9yZSBh bGwgZXJyb3JzICovCisJCQlpZiAoZmQgPj0gMCkKKwkJCXsKKwkJCQljb25zdCBjaGFyICpv b212YWx1ZSA9IGdldGVudigiUEdfT09NX0FESlVTVF9WQUxVRSIpOworCQkJCWludAkJCXJj OworCisJCQkJaWYgKG9vbXZhbHVlID09IE5VTEwpCS8qIHN1cHBseSBhIHVzZWZ1bCBkZWZh dWx0ICovCisJCQkJCW9vbXZhbHVlID0gIjAiOworCisJCQkJcmMgPSB3cml0ZShmZCwgb29t dmFsdWUsIHN0cmxlbihvb212YWx1ZSkpOworCQkJCSh2b2lkKSByYzsKKwkJCQljbG9zZShm ZCk7CisJCQl9CisJCX0KKworCQkvKiBkbyBwb3N0LWZvcmsgaW5pdGlhbGl6YXRpb24gZm9y IHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiAqLworCQlwZ19zdHJvbmdfcmFuZG9tX2luaXQo KTsKKwl9CisJZWxzZQorCXsKKwkJLyogaW4gcGFyZW50LCByZXN0b3JlIHNpZ25hbCBtYXNr ICovCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2F2ZV9tYXNrLCBOVUxMKTsKKwl9 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYJCQkJCQkJLyogIVdJTjMyICovCisK KyNpZmRlZiBFWEVDX0JBQ0tFTkQKKyNpZm5kZWYgV0lOMzIKKworLyoKKyAqIGludGVybmFs X2ZvcmtleGVjIG5vbi13aW4zMiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIC0gd3JpdGVzIG91 dCBiYWNrZW5kIHZhcmlhYmxlcyB0byB0aGUgcGFyYW1ldGVyIGZpbGUKKyAqIC0gZm9yaygp OnMsIGFuZCB0aGVuIGV4ZWMoKTpzIHRoZSBjaGlsZCBwcm9jZXNzCisgKi8KK3N0YXRpYyBw aWRfdAoraW50ZXJuYWxfZm9ya2V4ZWMoY29uc3QgY2hhciAqZW50cnlfbmFtZSwgY2hhciAq c3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbiwgQ2xpZW50U29ja2V0ICpj bGllbnRfc29jaykKK3sKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyB0bXBCYWNrZW5kRmlsZU51 bSA9IDA7CisJcGlkX3QJCXBpZDsKKwljaGFyCQl0bXBmaWxlbmFtZVtNQVhQR1BBVEhdOwor CXNpemVfdAkJcGFyYW1zejsKKwlCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW07CisJRklMRQkg ICAqZnA7CisJY2hhcgkgICAqYXJndls0XTsKKwljaGFyCQlmb3JrYXZbTUFYUEdQQVRIXTsK KworCXBhcmFtc3ogPSBTaXplT2ZCYWNrZW5kUGFyYW1ldGVycyhzdGFydHVwX2RhdGFfbGVu KTsKKwlwYXJhbSA9IHBhbGxvYyhwYXJhbXN6KTsKKwlpZiAoIXNhdmVfYmFja2VuZF92YXJp YWJsZXMocGFyYW0sIGNsaWVudF9zb2NrLCBzdGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0YV9s ZW4pKQorCXsKKwkJcGZyZWUocGFyYW0pOworCQlyZXR1cm4gLTE7CQkJCS8qIGxvZyBtYWRl IGJ5IHNhdmVfYmFja2VuZF92YXJpYWJsZXMgKi8KKwl9CisKKwkvKiBDYWxjdWxhdGUgbmFt ZSBmb3IgdGVtcCBmaWxlICovCisJc25wcmludGYodG1wZmlsZW5hbWUsIE1BWFBHUEFUSCwg IiVzLyVzLmJhY2tlbmRfdmFyLiVkLiVsdSIsCisJCQkgUEdfVEVNUF9GSUxFU19ESVIsIFBH X1RFTVBfRklMRV9QUkVGSVgsCisJCQkgTXlQcm9jUGlkLCArK3RtcEJhY2tlbmRGaWxlTnVt KTsKKworCS8qIE9wZW4gZmlsZSAqLworCWZwID0gQWxsb2NhdGVGaWxlKHRtcGZpbGVuYW1l LCBQR19CSU5BUllfVyk7CisJaWYgKCFmcCkKKwl7CisJCS8qCisJCSAqIEFzIGluIE9wZW5U ZW1wb3JhcnlGaWxlSW5UYWJsZXNwYWNlLCB0cnkgdG8gbWFrZSB0aGUgdGVtcC1maWxlCisJ CSAqIGRpcmVjdG9yeSwgaWdub3JpbmcgZXJyb3JzLgorCQkgKi8KKwkJKHZvaWQpIE1ha2VQ R0RpcmVjdG9yeShQR19URU1QX0ZJTEVTX0RJUik7CisKKwkJZnAgPSBBbGxvY2F0ZUZpbGUo dG1wZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKKwkJaWYgKCFmcCkKKwkJeworCQkJZXJlcG9y dChMT0csCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNn KCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgXCIlc1wiOiAlbSIsCisJCQkJCQkJdG1wZmlsZW5h bWUpKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlpZiAoZndyaXRlKHBhcmFtLCBw YXJhbXN6LCAxLCBmcCkgIT0gMSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBm aWxlIFwiJXNcIjogJW0iLCB0bXBmaWxlbmFtZSkpKTsKKwkJRnJlZUZpbGUoZnApOworCQly ZXR1cm4gLTE7CisJfQorCisJLyogUmVsZWFzZSBmaWxlICovCisJaWYgKEZyZWVGaWxlKGZw KSkKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIjogJW0iLCB0 bXBmaWxlbmFtZSkpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHNldCB1cCBhcmd2IHBy b3Blcmx5ICovCisJYXJndlswXSA9ICJwb3N0Z3JlcyI7CisJc25wcmludGYoZm9ya2F2LCBN QVhQR1BBVEgsICItLWZvcmtjaGlsZD0lcyIsIGVudHJ5X25hbWUpOworCWFyZ3ZbMV0gPSBm b3JrYXY7CisJLyogSW5zZXJ0IHRlbXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9ya2NoaWxkIGFy Z3VtZW50ICovCisJYXJndlsyXSA9IHRtcGZpbGVuYW1lOworCWFyZ3ZbM10gPSBOVUxMOwor CisJLyogRmlyZSBvZmYgZXhlY3YgaW4gY2hpbGQgKi8KKwlpZiAoKHBpZCA9IGZvcmtfcHJv Y2VzcygpKSA9PSAwKQorCXsKKwkJaWYgKGV4ZWN2KHBvc3RncmVzX2V4ZWNfcGF0aCwgYXJn dikgPCAwKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVycm1zZygiY291bGQgbm90 IGV4ZWN1dGUgc2VydmVyIHByb2Nlc3MgXCIlc1wiOiAlbSIsCisJCQkJCQkJcG9zdGdyZXNf ZXhlY19wYXRoKSkpOworCQkJLyogV2UncmUgYWxyZWFkeSBpbiB0aGUgY2hpbGQgcHJvY2Vz cyBoZXJlLCBjYW4ndCByZXR1cm4gKi8KKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlyZXR1 cm4gcGlkOwkJCQkJLyogUGFyZW50IHJldHVybnMgcGlkLCBvciAtMSBvbiBmb3JrIGZhaWx1 cmUgKi8KK30KKyNlbHNlCQkJCQkJCS8qIFdJTjMyICovCisKKy8qCisgKiBpbnRlcm5hbF9m b3JrZXhlYyB3aW4zMiBpbXBsZW1lbnRhdGlvbgorICoKKyAqIC0gc3RhcnRzIGJhY2tlbmQg dXNpbmcgQ3JlYXRlUHJvY2VzcygpLCBpbiBzdXNwZW5kZWQgc3RhdGUKKyAqIC0gd3JpdGVz IG91dCBiYWNrZW5kIHZhcmlhYmxlcyB0byB0aGUgcGFyYW1ldGVyIGZpbGUKKyAqCS0gZHVy aW5nIHRoaXMsIGR1cGxpY2F0ZXMgaGFuZGxlcyBhbmQgc29ja2V0cyByZXF1aXJlZCBmb3IK KyAqCSAgaW5oZXJpdGFuY2UgaW50byB0aGUgbmV3IHByb2Nlc3MKKyAqIC0gcmVzdW1lcyBl eGVjdXRpb24gb2YgdGhlIG5ldyBwcm9jZXNzIG9uY2UgdGhlIGJhY2tlbmQgcGFyYW1ldGVy CisgKgkgZmlsZSBpcyBjb21wbGV0ZS4KKyAqLworc3RhdGljIHBpZF90CitpbnRlcm5hbF9m b3JrZXhlYyhjb25zdCBjaGFyICplbnRyeV9uYW1lLCBjaGFyICpzdGFydHVwX2RhdGEsIHNp emVfdCBzdGFydHVwX2RhdGFfbGVuLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQorewor CWludAkJCXJldHJ5X2NvdW50ID0gMDsKKwlTVEFSVFVQSU5GTyBzaTsKKwlQUk9DRVNTX0lO Rk9STUFUSU9OIHBpOworCWNoYXIJCWNtZExpbmVbTUFYUEdQQVRIICogMl07CisJSEFORExF CQlwYXJhbUhhbmRsZTsKKwlCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW07CisJU0VDVVJJVFlf QVRUUklCVVRFUyBzYTsKKwlzaXplX3QJCXBhcmFtc3o7CisJY2hhcgkJcGFyYW1IYW5kbGVT dHJbMzJdOworCWludAkJCWw7CisKKwlwYXJhbXN6ID0gU2l6ZU9mQmFja2VuZFBhcmFtZXRl cnMoc3RhcnR1cF9kYXRhX2xlbik7CisKKwkvKiBSZXN1bWUgaGVyZSBpZiB3ZSBuZWVkIHRv IHJldHJ5ICovCityZXRyeToKKworCS8qIFNldCB1cCBzaGFyZWQgbWVtb3J5IGZvciBwYXJh bWV0ZXIgcGFzc2luZyAqLworCVplcm9NZW1vcnkoJnNhLCBzaXplb2Yoc2EpKTsKKwlzYS5u TGVuZ3RoID0gc2l6ZW9mKHNhKTsKKwlzYS5iSW5oZXJpdEhhbmRsZSA9IFRSVUU7CisJcGFy YW1IYW5kbGUgPSBDcmVhdGVGaWxlTWFwcGluZyhJTlZBTElEX0hBTkRMRV9WQUxVRSwKKwkJ CQkJCQkJCSZzYSwKKwkJCQkJCQkJCVBBR0VfUkVBRFdSSVRFLAorCQkJCQkJCQkJMCwKKwkJ CQkJCQkJCXBhcmFtc3osCisJCQkJCQkJCQlOVUxMKTsKKwlpZiAocGFyYW1IYW5kbGUgPT0g SU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJeworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNn KCJjb3VsZCBub3QgY3JlYXRlIGJhY2tlbmQgcGFyYW1ldGVyIGZpbGUgbWFwcGluZzogZXJy b3IgY29kZSAlbHUiLAorCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7CisJCXJldHVybiAtMTsK Kwl9CisJcGFyYW0gPSBNYXBWaWV3T2ZGaWxlKHBhcmFtSGFuZGxlLCBGSUxFX01BUF9XUklU RSwgMCwgMCwgcGFyYW1zeik7CisJaWYgKCFwYXJhbSkKKwl7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJtc2coImNvdWxkIG5vdCBtYXAgYmFja2VuZCBwYXJhbWV0ZXIgbWVtb3J5OiBl cnJvciBjb2RlICVsdSIsCisJCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKKwkJQ2xvc2VIYW5k bGUocGFyYW1IYW5kbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogRm9ybWF0IHRoZSBj bWQgbGluZSAqLworI2lmZGVmIF9XSU42NAorCXNwcmludGYocGFyYW1IYW5kbGVTdHIsICIl bGx1IiwgKExPTkdfUFRSKSBwYXJhbUhhbmRsZSk7CisjZWxzZQorCXNwcmludGYocGFyYW1I YW5kbGVTdHIsICIlbHUiLCAoRFdPUkQpIHBhcmFtSGFuZGxlKTsKKyNlbmRpZgorCWwgPSBz bnByaW50ZihjbWRMaW5lLCBzaXplb2YoY21kTGluZSkgLSAxLCAiXCIlc1wiIC0tZm9ya2No aWxkPVwiJXNcIiAlcyIsCisJCQkJIHBvc3RncmVzX2V4ZWNfcGF0aCwgZW50cnlfbmFtZSwg cGFyYW1IYW5kbGVTdHIpOworCWlmIChsID49IHNpemVvZihjbWRMaW5lKSkKKwl7CisJCWVy ZXBvcnQoTE9HLAorCQkJCShlcnJtc2coInN1YnByb2Nlc3MgY29tbWFuZCBsaW5lIHRvbyBs b25nIikpKTsKKwkJVW5tYXBWaWV3T2ZGaWxlKHBhcmFtKTsKKwkJQ2xvc2VIYW5kbGUocGFy YW1IYW5kbGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtc2V0KCZwaSwgMCwgc2l6ZW9m KHBpKSk7CisJbWVtc2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CisJc2kuY2IgPSBzaXplb2Yo c2kpOworCisJLyoKKwkgKiBDcmVhdGUgdGhlIHN1YnByb2Nlc3MgaW4gYSBzdXNwZW5kZWQg c3RhdGUuIFRoaXMgd2lsbCBiZSByZXN1bWVkIGxhdGVyLAorCSAqIG9uY2Ugd2UgaGF2ZSB3 cml0dGVuIG91dCB0aGUgcGFyYW1ldGVyIGZpbGUuCisJICovCisJaWYgKCFDcmVhdGVQcm9j ZXNzKE5VTEwsIGNtZExpbmUsIE5VTEwsIE5VTEwsIFRSVUUsIENSRUFURV9TVVNQRU5ERUQs CisJCQkJCSAgIE5VTEwsIE5VTEwsICZzaSwgJnBpKSkKKwl7CisJCWVyZXBvcnQoTE9HLAor CQkJCShlcnJtc2coIkNyZWF0ZVByb2Nlc3MoKSBjYWxsIGZhaWxlZDogJW0gKGVycm9yIGNv ZGUgJWx1KSIsCisJCQkJCQlHZXRMYXN0RXJyb3IoKSkpKTsKKwkJVW5tYXBWaWV3T2ZGaWxl KHBhcmFtKTsKKwkJQ2xvc2VIYW5kbGUocGFyYW1IYW5kbGUpOworCQlyZXR1cm4gLTE7CisJ fQorCisJaWYgKCFzYXZlX2JhY2tlbmRfdmFyaWFibGVzKHBhcmFtLCBjbGllbnRfc29jaywg cGkuaFByb2Nlc3MsIHBpLmR3UHJvY2Vzc0lkLCBzdGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0 YV9sZW4pKQorCXsKKwkJLyoKKwkJICogbG9nIG1hZGUgYnkgc2F2ZV9iYWNrZW5kX3Zhcmlh YmxlcywgYnV0IHdlIGhhdmUgdG8gY2xlYW4gdXAgdGhlCisJCSAqIG1lc3Mgd2l0aCB0aGUg aGFsZi1zdGFydGVkIHByb2Nlc3MKKwkJICovCisJCWlmICghVGVybWluYXRlUHJvY2Vzcyhw aS5oUHJvY2VzcywgMjU1KSkKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnX2ludGVy bmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHVuc3RhcnRlZCBwcm9jZXNzOiBlcnJvciBjb2Rl ICVsdSIsCisJCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7CisJCUNsb3NlSGFuZGxlKHBp LmhQcm9jZXNzKTsKKwkJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisJCVVubWFwVmlld09m RmlsZShwYXJhbSk7CisJCUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxlKTsKKwkJcmV0dXJuIC0x OwkJCQkvKiBsb2cgbWFkZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFibGVzICovCisJfQorCisJ LyogRHJvcCB0aGUgcGFyYW1ldGVyIHNoYXJlZCBtZW1vcnkgdGhhdCBpcyBub3cgaW5oZXJp dGVkIHRvIHRoZSBiYWNrZW5kICovCisJaWYgKCFVbm1hcFZpZXdPZkZpbGUocGFyYW0pKQor CQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgdW5tYXAgdmlldyBvZiBi YWNrZW5kIHBhcmFtZXRlciBmaWxlOiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQlHZXRMYXN0 RXJyb3IoKSkpKTsKKwlpZiAoIUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxlKSkKKwkJZXJlcG9y dChMT0csCisJCQkJKGVycm1zZygiY291bGQgbm90IGNsb3NlIGhhbmRsZSB0byBiYWNrZW5k IHBhcmFtZXRlciBmaWxlOiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQlHZXRMYXN0RXJyb3Io KSkpKTsKKworCS8qCisJICogUmVzZXJ2ZSB0aGUgbWVtb3J5IHJlZ2lvbiB1c2VkIGJ5IG91 ciBtYWluIHNoYXJlZCBtZW1vcnkgc2VnbWVudCBiZWZvcmUKKwkgKiB3ZSByZXN1bWUgdGhl IGNoaWxkIHByb2Nlc3MuICBOb3JtYWxseSB0aGlzIHNob3VsZCBzdWNjZWVkLCBidXQgaWYg QVNMUgorCSAqIGlzIGFjdGl2ZSB0aGVuIGl0IG1pZ2h0IHNvbWV0aW1lcyBmYWlsIGR1ZSB0 byB0aGUgc3RhY2sgb3IgaGVhcCBoYXZpbmcKKwkgKiBnb3R0ZW4gbWFwcGVkIGludG8gdGhh dCByYW5nZS4gIEluIHRoYXQgY2FzZSwganVzdCB0ZXJtaW5hdGUgdGhlCisJICogcHJvY2Vz cyBhbmQgcmV0cnkuCisJICovCisJaWYgKCFwZ3dpbjMyX1Jlc2VydmVTaGFyZWRNZW1vcnlS ZWdpb24ocGkuaFByb2Nlc3MpKQorCXsKKwkJLyogcGd3aW4zMl9SZXNlcnZlU2hhcmVkTWVt b3J5UmVnaW9uIGFscmVhZHkgbWFkZSBhIGxvZyBlbnRyeSAqLworCQlpZiAoIVRlcm1pbmF0 ZVByb2Nlc3MocGkuaFByb2Nlc3MsIDI1NSkpCisJCQllcmVwb3J0KExPRywKKwkJCQkJKGVy cm1zZ19pbnRlcm5hbCgiY291bGQgbm90IHRlcm1pbmF0ZSBwcm9jZXNzIHRoYXQgZmFpbGVk IHRvIHJlc2VydmUgbWVtb3J5OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJCQkgR2V0TGFz dEVycm9yKCkpKSk7CisJCUNsb3NlSGFuZGxlKHBpLmhQcm9jZXNzKTsKKwkJQ2xvc2VIYW5k bGUocGkuaFRocmVhZCk7CisJCWlmICgrK3JldHJ5X2NvdW50IDwgMTAwKQorCQkJZ290byBy ZXRyeTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygiZ2l2aW5nIHVwIGFmdGVyIHRv byBtYW55IHRyaWVzIHRvIHJlc2VydmUgc2hhcmVkIG1lbW9yeSIpLAorCQkJCSBlcnJoaW50 KCJUaGlzIG1pZ2h0IGJlIGNhdXNlZCBieSBBU0xSIG9yIGFudGl2aXJ1cyBzb2Z0d2FyZS4i KSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB0aGUgYmFja2Vu ZCB2YXJpYWJsZXMgYXJlIHdyaXR0ZW4gb3V0LCB3ZSBzdGFydCB0aGUgY2hpbGQKKwkgKiB0 aHJlYWQgc28gaXQgY2FuIHN0YXJ0IGluaXRpYWxpemluZyB3aGlsZSB3ZSBzZXQgdXAgdGhl IHJlc3Qgb2YgdGhlCisJICogcGFyZW50IHN0YXRlLgorCSAqLworCWlmIChSZXN1bWVUaHJl YWQocGkuaFRocmVhZCkgPT0gLTEpCisJeworCQlpZiAoIVRlcm1pbmF0ZVByb2Nlc3MocGku aFByb2Nlc3MsIDI1NSkpCisJCXsKKwkJCWVyZXBvcnQoTE9HLAorCQkJCQkoZXJybXNnX2lu dGVybmFsKCJjb3VsZCBub3QgdGVybWluYXRlIHVuc3RhcnRhYmxlIHByb2Nlc3M6IGVycm9y IGNvZGUgJWx1IiwKKwkJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKKwkJCUNsb3NlSGFu ZGxlKHBpLmhQcm9jZXNzKTsKKwkJCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOworCQkJcmV0 dXJuIC0xOworCQl9CisJCUNsb3NlSGFuZGxlKHBpLmhQcm9jZXNzKTsKKwkJQ2xvc2VIYW5k bGUocGkuaFRocmVhZCk7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2dfaW50ZXJuYWwo ImNvdWxkIG5vdCByZXN1bWUgdGhyZWFkIG9mIHVuc3RhcnRlZCBwcm9jZXNzOiBlcnJvciBj b2RlICVsdSIsCisJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKKwkJcmV0dXJuIC0xOwor CX0KKworCXBnd2luMzJfcmVnaXN0ZXJfZGVhZGNoaWxkX2NhbGxiYWNrKHBpLmhQcm9jZXNz LCBwaS5kd1Byb2Nlc3NJZCk7CisKKwkvKiBEb24ndCBjbG9zZSBwaS5oUHJvY2VzcyBoZXJl IC0gd2FpdHBpZCgpIG5lZWRzIGFjY2VzcyB0byBpdCAqLworCUNsb3NlSGFuZGxlKHBpLmhU aHJlYWQpOworCisJcmV0dXJuIHBpLmR3UHJvY2Vzc0lkOworfQorI2VuZGlmCQkJCQkJCS8q IFdJTjMyICovCisKKy8qCisgKiBTdWJQb3N0bWFzdGVyTWFpbiAtLSBHZXQgdGhlIGZvcmsv ZXhlYydkIHByb2Nlc3MgaW50byBhIHN0YXRlIGVxdWl2YWxlbnQKKyAqCQkJdG8gd2hhdCBp dCB3b3VsZCBiZSBpZiB3ZSdkIHNpbXBseSBmb3JrZWQgb24gVW5peCwgYW5kIHRoZW4KKyAq CQkJZGlzcGF0Y2ggdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlLgorICoKKyAqIFRoZSBmaXJz dCB0d28gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgZXhwZWN0ZWQgdG8gYmUgIi0tZm9y a2NoaWxkPTxuYW1lPiIsCisgKiB3aGVyZSA8bmFtZT4gaW5kaWNhdGVzIHdoaWNoIHBvc3Rt YXN0ZXIgY2hpbGQgd2UgYXJlIHRvIGJlY29tZSwgYW5kCisgKiB0aGUgbmFtZSBvZiBhIHZh cmlhYmxlcyBmaWxlIHRoYXQgd2UgY2FuIHJlYWQgdG8gbG9hZCBkYXRhIHRoYXQgd291bGQK KyAqIGhhdmUgYmVlbiBpbmhlcml0ZWQgYnkgZm9yaygpIG9uIFVuaXguCisgKi8KK3ZvaWQK K1N1YlBvc3RtYXN0ZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJUG9zdG1h c3RlckNoaWxkVHlwZSBjaGlsZF90eXBlOworCWNoYXIJICAgKnN0YXJ0dXBfZGF0YTsKKwlz aXplX3QJCXN0YXJ0dXBfZGF0YV9sZW47CisJY2hhcgkgICAqZW50cnlfbmFtZTsKKwlib29s CQlmb3VuZCA9IGZhbHNlOworCisJLyogSW4gRVhFQ19CQUNLRU5EIGNhc2Ugd2Ugd2lsbCBu b3QgaGF2ZSBpbmhlcml0ZWQgdGhlc2Ugc2V0dGluZ3MgKi8KKwlJc1Bvc3RtYXN0ZXJFbnZp cm9ubWVudCA9IHRydWU7CisJd2hlcmVUb1NlbmRPdXRwdXQgPSBEZXN0Tm9uZTsKKworCS8q IFNldHVwIGVzc2VudGlhbCBzdWJzeXN0ZW1zICh0byBlbnN1cmUgZWxvZygpIGJlaGF2ZXMg c2FuZWx5KSAqLworCUluaXRpYWxpemVHVUNPcHRpb25zKCk7CisKKwkvKiBDaGVjayB3ZSBn b3QgYXBwcm9wcmlhdGUgYXJncyAqLworCWlmIChhcmdjICE9IDMpCisJCWVsb2coRkFUQUws ICJpbnZhbGlkIHN1YnBvc3RtYXN0ZXIgaW52b2NhdGlvbiIpOworCisJaWYgKHN0cm5jbXAo YXJndlsxXSwgIi0tZm9ya2NoaWxkPSIsIDEyKSAhPSAwKQorCQllbG9nKEZBVEFMLCAiaW52 YWxpZCBzdWJwb3N0bWFzdGVyIGludm9jYXRpb24gKC0tZm9ya2NoaWxkIGFyZ3VtZW50IG1p c3NpbmcpIik7CisJZW50cnlfbmFtZSA9IGFyZ3ZbMV0gKyAxMjsKKwlmb3VuZCA9IGZhbHNl OworCWZvciAoaW50IGlkeCA9IDA7IGlkeCA8IGxlbmd0aG9mKGVudHJ5X2tpbmRzKTsgaWR4 KyspCisJeworCQlpZiAoc3RyY21wKGVudHJ5X2tpbmRzW2lkeF0ubmFtZSwgZW50cnlfbmFt ZSkgPT0gMCkKKwkJeworCQkJY2hpbGRfdHlwZSA9IGlkeDsKKwkJCWZvdW5kID0gdHJ1ZTsK KwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm91bmQpCisJCWVsb2coRVJST1IsICJ1bmtu b3duIGNoaWxkIGtpbmQgJXMiLCBlbnRyeV9uYW1lKTsKKworCS8qIFJlYWQgaW4gdGhlIHZh cmlhYmxlcyBmaWxlICovCisJcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhhcmd2WzJdLCAmc3Rh cnR1cF9kYXRhLCAmc3RhcnR1cF9kYXRhX2xlbik7CisKKwkvKiBTZXR1cCBhcyBwb3N0bWFz dGVyIGNoaWxkICovCisJSW5pdFBvc3RtYXN0ZXJDaGlsZChjaGlsZF90eXBlID09IFBNQ19T WVNMT0dHRVIpOworCisJLyoKKwkgKiBJZiBhcHByb3ByaWF0ZSwgcGh5c2ljYWxseSByZS1h dHRhY2ggdG8gc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBXZSB3YW50CisJICogdG8gZG8gdGhp cyBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIgdG8gZW5zdXJlIHRoYXQgd2UgY2FuIGF0dGFj aCBhdCB0aGUKKwkgKiBzYW1lIGFkZHJlc3MgdGhlIHBvc3RtYXN0ZXIgdXNlZC4gIE9uIHRo ZSBvdGhlciBoYW5kLCBpZiB3ZSBjaG9vc2Ugbm90CisJICogdG8gcmUtYXR0YWNoLCB3ZSBt YXkgaGF2ZSBvdGhlciBjbGVhbnVwIHRvIGRvLgorCSAqCisJICogSWYgdGVzdGluZyBFWEVD X0JBQ0tFTkQgb24gTGludXgsIHlvdSBzaG91bGQgcnVuIHRoaXMgYXMgcm9vdCBiZWZvcmUK KwkgKiBzdGFydGluZyB0aGUgcG9zdG1hc3RlcjoKKwkgKgorCSAqIHN5c2N0bCAtdyBrZXJu ZWwucmFuZG9taXplX3ZhX3NwYWNlPTAKKwkgKgorCSAqIFRoaXMgcHJldmVudHMgdXNpbmcg cmFuZG9taXplZCBzdGFjayBhbmQgY29kZSBhZGRyZXNzZXMgdGhhdCBjYXVzZSB0aGUKKwkg KiBjaGlsZCBwcm9jZXNzJ3MgbWVtb3J5IG1hcCB0byBiZSBkaWZmZXJlbnQgZnJvbSB0aGUg cGFyZW50J3MsIG1ha2luZyBpdAorCSAqIHNvbWV0aW1lcyBpbXBvc3NpYmxlIHRvIGF0dGFj aCB0byBzaGFyZWQgbWVtb3J5IGF0IHRoZSBkZXNpcmVkIGFkZHJlc3MuCisJICogUmV0dXJu IHRoZSBzZXR0aW5nIHRvIGl0cyBvbGQgdmFsdWUgKHVzdWFsbHkgJzEnIG9yICcyJykgd2hl biBmaW5pc2hlZC4KKwkgKi8KKwlpZiAoZW50cnlfa2luZHNbY2hpbGRfdHlwZV0uc2htZW1f YXR0YWNoKQorCQlQR1NoYXJlZE1lbW9yeVJlQXR0YWNoKCk7CisJZWxzZQorCQlQR1NoYXJl ZE1lbW9yeU5vUmVBdHRhY2goKTsKKworCS8qIFJlYWQgaW4gcmVtYWluaW5nIEdVQyB2YXJp YWJsZXMgKi8KKwlyZWFkX25vbmRlZmF1bHRfdmFyaWFibGVzKCk7CisKKwkvKgorCSAqIENo ZWNrIHRoYXQgdGhlIGRhdGEgZGlyZWN0b3J5IGxvb2tzIHZhbGlkLCB3aGljaCB3aWxsIGFs c28gY2hlY2sgdGhlCisJICogcHJpdmlsZWdlcyBvbiB0aGUgZGF0YSBkaXJlY3RvcnkgYW5k IHVwZGF0ZSBvdXIgdW1hc2sgYW5kIGZpbGUvZ3JvdXAKKwkgKiB2YXJpYWJsZXMgZm9yIGNy ZWF0aW5nIGZpbGVzIGxhdGVyLiAgTm90ZTogdGhpcyBzaG91bGQgcmVhbGx5IGJlIGRvbmUK KwkgKiBiZWZvcmUgd2UgY3JlYXRlIGFueSBmaWxlcyBvciBkaXJlY3Rvcmllcy4KKwkgKi8K KwljaGVja0RhdGFEaXIoKTsKKworCS8qCisJICogKHJlLSlyZWFkIGNvbnRyb2wgZmlsZSwg YXMgaXQgY29udGFpbnMgY29uZmlnLiBUaGUgcG9zdG1hc3RlciB3aWxsCisJICogYWxyZWFk eSBoYXZlIHJlYWQgdGhpcywgYnV0IHRoaXMgcHJvY2VzcyBkb2Vzbid0IGtub3cgYWJvdXQg dGhhdC4KKwkgKi8KKwlMb2NhbFByb2Nlc3NDb250cm9sRmlsZShmYWxzZSk7CisKKwkvKgor CSAqIFJlbG9hZCBhbnkgbGlicmFyaWVzIHRoYXQgd2VyZSBwcmVsb2FkZWQgYnkgdGhlIHBv c3RtYXN0ZXIuICBTaW5jZSB3ZQorCSAqIGV4ZWMnZCB0aGlzIHByb2Nlc3MsIHRob3NlIGxp YnJhcmllcyBkaWRuJ3QgY29tZSBhbG9uZyB3aXRoIHVzOyBidXQgd2UKKwkgKiBzaG91bGQg bG9hZCB0aGVtIGludG8gYWxsIGNoaWxkIHByb2Nlc3NlcyB0byBiZSBjb25zaXN0ZW50IHdp dGggdGhlCisJICogbm9uLUVYRUNfQkFDS0VORCBiZWhhdmlvci4KKwkgKi8KKwlwcm9jZXNz X3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllcygpOworCisJLyogUmVzdG9yZSBiYXNpYyBzaGFy ZWQgbWVtb3J5IHBvaW50ZXJzICovCisJaWYgKFVzZWRTaG1lbVNlZ0FkZHIgIT0gTlVMTCkK KwkJSW5pdFNobWVtQWNjZXNzKFVzZWRTaG1lbVNlZ0FkZHIpOworCisJLyogUnVuIGJhY2tl bmQgb3IgYXBwcm9wcmlhdGUgY2hpbGQgKi8KKwllbnRyeV9raW5kc1tjaGlsZF90eXBlXS5t YWluX2ZuKHN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRhX2xlbik7CisKKwlhYm9ydCgpOwkJ CQkJLyogc2hvdWxkbid0IGdldCBoZXJlICovCit9CisjZW5kaWYJCQkJCQkJLyogRVhFQ19C QUNLRU5EICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCWNvbW1vbiBwcm9jZXNzIHN0YXJ0dXAg Y29kZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBiYXNp YyBlbnZpcm9ubWVudCBmb3IgYSBwb3N0bWFzdGVyIGNoaWxkCisgKgorICogU2hvdWxkIGJl IGNhbGxlZCBhcyBlYXJseSBhcyBwb3NzaWJsZSBhZnRlciB0aGUgY2hpbGQncyBzdGFydHVw LiBIb3dldmVyLAorICogb24gRVhFQ19CQUNLRU5EIGJ1aWxkcyBpdCBkb2VzIG5lZWQgdG8g YmUgYWZ0ZXIgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcygpLgorICovCitzdGF0aWMgdm9pZAor SW5pdFBvc3RtYXN0ZXJDaGlsZChib29sIGFtX3N5c2xvZ2dlcikKK3sKKwkvKiBDbG9zZSB0 aGUgcG9zdG1hc3RlcidzIHNvY2tldHMgKGFzIHNvb24gYXMgd2Uga25vdyB0aGVtKSAqLwor CUNsb3NlUG9zdG1hc3RlclBvcnRzKGFtX3N5c2xvZ2dlcik7CisKKwlJc1VuZGVyUG9zdG1h c3RlciA9IHRydWU7CS8qIHdlIGFyZSBhIHBvc3RtYXN0ZXIgc3VicHJvY2VzcyBub3cgKi8K KworCS8qCisJICogU3RhcnQgb3VyIHdpbjMyIHNpZ25hbCBpbXBsZW1lbnRhdGlvbi4gVGhp cyBoYXMgdG8gYmUgZG9uZSBhZnRlciB3ZQorCSAqIHJlYWQgdGhlIGJhY2tlbmQgdmFyaWFi bGVzLCBiZWNhdXNlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgc2lnbmFsIHBpcGUKKwkgKiBm cm9tIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKwkgKi8KKyNpZmRlZiBXSU4zMgorCXBnd2luMzJf c2lnbmFsX2luaXRpYWxpemUoKTsKKyNlbmRpZgorCisJLyoKKwkgKiBTZXQgcmVmZXJlbmNl IHBvaW50IGZvciBzdGFjay1kZXB0aCBjaGVja2luZy4gIFRoaXMgbWlnaHQgc2VlbQorCSAq IHJlZHVuZGFudCBpbiAhRVhFQ19CQUNLRU5EIGJ1aWxkczsgYnV0IGl0J3Mgbm90IGJlY2F1 c2UgdGhlIHBvc3RtYXN0ZXIKKwkgKiBsYXVuY2hlcyBpdHMgY2hpbGRyZW4gZnJvbSBzaWdu YWwgaGFuZGxlcnMsIHNvIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24KKwkgKiBhbiBhbHRlcm5h dGl2ZSBzdGFjay4gWFhYIHN0aWxsIHRydWU/CisJICovCisJKHZvaWQpIHNldF9zdGFja19i YXNlKCk7CisKKwlJbml0UHJvY2Vzc0dsb2JhbHMoKTsKKworCS8qCisJICogbWFrZSBzdXJl IHN0ZGVyciBpcyBpbiBiaW5hcnkgbW9kZSBiZWZvcmUgYW55dGhpbmcgY2FuIHBvc3NpYmx5 IGJlCisJICogd3JpdHRlbiB0byBpdCwgaW4gY2FzZSBpdCdzIGFjdHVhbGx5IHRoZSBzeXNs b2dnZXIgcGlwZSwgc28gdGhlIHBpcGUKKwkgKiBjaHVua2luZyBwcm90b2NvbCBpc24ndCBk aXN0dXJiZWQuIE5vbi1sb2dwaXBlIGRhdGEgZ2V0cyB0cmFuc2xhdGVkIG9uCisJICogcmVk aXJlY3Rpb24gKGUuZy4gdmlhIHBnX2N0bCAtbCkgYW55d2F5LgorCSAqLworI2lmZGVmIFdJ TjMyCisJX3NldG1vZGUoZmlsZW5vKHN0ZGVyciksIF9PX0JJTkFSWSk7CisjZW5kaWYKKwor CS8qIFdlIGRvbid0IHdhbnQgdGhlIHBvc3RtYXN0ZXIncyBwcm9jX2V4aXQoKSBoYW5kbGVy cyAqLworCW9uX2V4aXRfcmVzZXQoKTsKKworCS8qIEluIEVYRUNfQkFDS0VORCBjYXNlIHdl IHdpbGwgbm90IGhhdmUgaW5oZXJpdGVkIEJsb2NrU2lnIGV0YyB2YWx1ZXMgKi8KKyNpZmRl ZiBFWEVDX0JBQ0tFTkQKKwlwcWluaXRtYXNrKCk7CisjZW5kaWYKKworCS8qIEluaXRpYWxp emUgcHJvY2Vzcy1sb2NhbCBsYXRjaCBzdXBwb3J0ICovCisJSW5pdGlhbGl6ZUxhdGNoU3Vw cG9ydCgpOworCUluaXRQcm9jZXNzTG9jYWxMYXRjaCgpOworCUluaXRpYWxpemVMYXRjaFdh aXRTZXQoKTsKKworCS8qCisJICogSWYgcG9zc2libGUsIG1ha2UgdGhpcyBwcm9jZXNzIGEg Z3JvdXAgbGVhZGVyLCBzbyB0aGF0IHRoZSBwb3N0bWFzdGVyCisJICogY2FuIHNpZ25hbCBh bnkgY2hpbGQgcHJvY2Vzc2VzIHRvby4gTm90IGFsbCBwcm9jZXNzZXMgd2lsbCBoYXZlCisJ ICogY2hpbGRyZW4sIGJ1dCBmb3IgY29uc2lzdGVuY3kgd2UgbWFrZSBhbGwgcG9zdG1hc3Rl ciBjaGlsZCBwcm9jZXNzZXMgZG8KKwkgKiB0aGlzLgorCSAqLworI2lmZGVmIEhBVkVfU0VU U0lECisJaWYgKHNldHNpZCgpIDwgMCkKKwkJZWxvZyhGQVRBTCwgInNldHNpZCgpIGZhaWxl ZDogJW0iKTsKKyNlbmRpZgorCisJLyoKKwkgKiBFdmVyeSBwb3N0bWFzdGVyIGNoaWxkIHBy b2Nlc3MgaXMgZXhwZWN0ZWQgdG8gcmVzcG9uZCBwcm9tcHRseSB0bworCSAqIFNJR1FVSVQg YXQgYWxsIHRpbWVzLiAgVGhlcmVmb3JlIHdlIGNlbnRyYWxseSByZW1vdmUgU0lHUVVJVCBm cm9tCisJICogQmxvY2tTaWcgYW5kIGluc3RhbGwgYSBzdWl0YWJsZSBzaWduYWwgaGFuZGxl ci4gIChDbGllbnQtZmFjaW5nCisJICogcHJvY2Vzc2VzIG1heSBjaG9vc2UgdG8gcmVwbGFj ZSB0aGlzIGRlZmF1bHQgY2hvaWNlIG9mIGhhbmRsZXIgd2l0aAorCSAqIHF1aWNrZGllKCku KSAgQWxsIG90aGVyIGJsb2NrYWJsZSBzaWduYWxzIHJlbWFpbiBibG9ja2VkIGZvciBub3cu CisJICovCisJcHFzaWduYWwoU0lHUVVJVCwgU2lnbmFsSGFuZGxlckZvckNyYXNoRXhpdCk7 CisKKwlzaWdkZWxzZXQoJkJsb2NrU2lnLCBTSUdRVUlUKTsKKwlzaWdwcm9jbWFzayhTSUdf U0VUTUFTSywgJkJsb2NrU2lnLCBOVUxMKTsKKworCS8qIFJlcXVlc3QgYSBzaWduYWwgaWYg dGhlIHBvc3RtYXN0ZXIgZGllcywgaWYgcG9zc2libGUuICovCisJUG9zdG1hc3RlckRlYXRo U2lnbmFsSW5pdCgpOworCisJLyogRG9uJ3QgZ2l2ZSB0aGUgcGlwZSB0byBzdWJwcm9ncmFt cyB0aGF0IHdlIGV4ZWN1dGUuICovCisjaWZuZGVmIFdJTjMyCisJaWYgKGZjbnRsKHBvc3Rt YXN0ZXJfYWxpdmVfZmRzW1BPU1RNQVNURVJfRkRfV0FUQ0hdLCBGX1NFVEZELCBGRF9DTE9F WEVDKSA8IDApCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJKGVycmNvZGVfZm9yX3NvY2tldF9h Y2Nlc3MoKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3Qgc2V0IHBvc3RtYXN0 ZXIgZGVhdGggbW9uaXRvcmluZyBwaXBlIHRvIEZEX0NMT0VYRUMgbW9kZTogJW0iKSkpOwor I2VuZGlmCit9CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBiYXNpYyBlbnZpcm9ubWVudCBm b3IgYSBzdGFuZGFsb25lIHByb2Nlc3MuCisgKgorICogYXJndjAgaGFzIHRvIGJlIHN1aXRh YmxlIHRvIGZpbmQgdGhlIHByb2dyYW0ncyBleGVjdXRhYmxlLgorICovCit2b2lkCitJbml0 U3RhbmRhbG9uZVByb2Nlc3MoY29uc3QgY2hhciAqYXJndjApCit7CisJQXNzZXJ0KCFJc1Bv c3RtYXN0ZXJFbnZpcm9ubWVudCk7CisKKwlNeUJhY2tlbmRUeXBlID0gQl9TVEFOREFMT05F X0JBQ0tFTkQ7CisKKwkvKgorCSAqIFN0YXJ0IG91ciB3aW4zMiBzaWduYWwgaW1wbGVtZW50 YXRpb24KKwkgKi8KKyNpZmRlZiBXSU4zMgorCXBnd2luMzJfc2lnbmFsX2luaXRpYWxpemUo KTsKKyNlbmRpZgorCisJSW5pdFByb2Nlc3NHbG9iYWxzKCk7CisKKwkvKiBJbml0aWFsaXpl IHByb2Nlc3MtbG9jYWwgbGF0Y2ggc3VwcG9ydCAqLworCUluaXRpYWxpemVMYXRjaFN1cHBv cnQoKTsKKwlJbml0UHJvY2Vzc0xvY2FsTGF0Y2goKTsKKwlJbml0aWFsaXplTGF0Y2hXYWl0 U2V0KCk7CisKKwkvKgorCSAqIEZvciBjb25zaXN0ZW5jeSB3aXRoIEluaXRQb3N0bWFzdGVy Q2hpbGQsIGluaXRpYWxpemUgc2lnbmFsIG1hc2sgaGVyZS4KKwkgKiBCdXQgd2UgZG9uJ3Qg dW5ibG9jayBTSUdRVUlUIG9yIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIgZm9yIGl0Lgor CSAqLworCXBxaW5pdG1hc2soKTsKKwlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJkJsb2Nr U2lnLCBOVUxMKTsKKworCS8qIENvbXB1dGUgcGF0aHMsIG5vIHBvc3RtYXN0ZXIgdG8gaW5o ZXJpdCBmcm9tICovCisJaWYgKG15X2V4ZWNfcGF0aFswXSA9PSAnXDAnKQorCXsKKwkJaWYg KGZpbmRfbXlfZXhlYyhhcmd2MCwgbXlfZXhlY19wYXRoKSA8IDApCisJCQllbG9nKEZBVEFM LCAiJXM6IGNvdWxkIG5vdCBsb2NhdGUgbXkgb3duIGV4ZWN1dGFibGUgcGF0aCIsCisJCQkJ IGFyZ3YwKTsKKwl9CisKKwlpZiAocGtnbGliX3BhdGhbMF0gPT0gJ1wwJykKKwkJZ2V0X3Br Z2xpYl9wYXRoKG15X2V4ZWNfcGF0aCwgcGtnbGliX3BhdGgpOworfQorCisKKyNpZmRlZiBF WEVDX0JBQ0tFTkQKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbmVlZCB0byBiZSBhdmFpbGFi bGUgdG8gdGhlIHNhdmUvcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcworICogZnVuY3Rpb25z LiAgVGhleSBhcmUgbWFya2VkIE5PTl9FWEVDX1NUQVRJQyBpbiB0aGVpciBob21lIG1vZHVs ZXMuCisgKi8KK2V4dGVybiBzbG9ja190ICpTaG1lbUxvY2s7CitleHRlcm4gc2xvY2tfdCAq UHJvY1N0cnVjdExvY2s7CitleHRlcm4gUEdQUk9DICpBdXhpbGlhcnlQcm9jczsKK2V4dGVy biBQTVNpZ25hbERhdGEgKlBNU2lnbmFsU3RhdGU7CitleHRlcm4gcGdfdGltZV90IGZpcnN0 X3N5c2xvZ2dlcl9maWxlX3RpbWU7CitleHRlcm4gc3RydWN0IGJrZW5kICpTaG1lbUJhY2tl bmRBcnJheTsKK2V4dGVybiBib29sIHJlZGlyZWN0aW9uX2RvbmU7CisKKyNpZm5kZWYgV0lO MzIKKyNkZWZpbmUgd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KGRlc3QsIHNyYywgY2hpbGRw aWQpICgoKihkZXN0KSA9IChzcmMpKSwgdHJ1ZSkKKyNkZWZpbmUgcmVhZF9pbmhlcml0YWJs ZV9zb2NrZXQoZGVzdCwgc3JjKSAoKihkZXN0KSA9ICooc3JjKSkKKyNlbHNlCitzdGF0aWMg Ym9vbCB3cml0ZV9kdXBsaWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3QsIEhBTkRMRSBzcmMs IEhBTkRMRSBjaGlsZCk7CitzdGF0aWMgYm9vbCB3cml0ZV9pbmhlcml0YWJsZV9zb2NrZXQo SW5oZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tFVCBzcmMsCisJCQkJCQkJCQkgcGlkX3Qg Y2hpbGRQaWQpOworc3RhdGljIHZvaWQgcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoU09DS0VU ICpkZXN0LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKTsKKyNlbmRpZgorCisKKy8qIFNhdmUg Y3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgaW50byB0aGUgQmFja2VuZFBhcmFtZXRlcnMg c3RydWN0ICovCitzdGF0aWMgYm9vbAorc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5k UGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ssCisjaWZkZWYg V0lOMzIKKwkJCQkJICAgSEFORExFIGNoaWxkUHJvY2VzcywgcGlkX3QgY2hpbGRQaWQsCisj ZW5kaWYKKwkJCQkJICAgY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRh X2xlbikKK3sKKwlpZiAoY2xpZW50X3NvY2spCisJCW1lbWNweSgmcGFyYW0tPmNsaWVudF9z b2NrLCBjbGllbnRfc29jaywgc2l6ZW9mKENsaWVudFNvY2tldCkpOworCWVsc2UKKwkJbWVt c2V0KCZwYXJhbS0+Y2xpZW50X3NvY2ssIDAsIHNpemVvZihDbGllbnRTb2NrZXQpKTsKKwlp ZiAoIXdyaXRlX2luaGVyaXRhYmxlX3NvY2tldCgmcGFyYW0tPmluaF9zb2NrLAorCQkJCQkJ CQkgIGNsaWVudF9zb2NrID8gY2xpZW50X3NvY2stPnNvY2sgOiBQR0lOVkFMSURfU09DS0VU LAorCQkJCQkJCQkgIGNoaWxkUGlkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3RybGNweShw YXJhbS0+RGF0YURpciwgRGF0YURpciwgTUFYUEdQQVRIKTsKKworCXBhcmFtLT5NeUNhbmNl bEtleSA9IE15Q2FuY2VsS2V5OworCXBhcmFtLT5NeVBNQ2hpbGRTbG90ID0gTXlQTUNoaWxk U2xvdDsKKworI2lmZGVmIFdJTjMyCisJcGFyYW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbiA9 IFNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsKKyNlbmRpZgorCXBhcmFtLT5Vc2VkU2htZW1TZWdJ RCA9IFVzZWRTaG1lbVNlZ0lEOworCXBhcmFtLT5Vc2VkU2htZW1TZWdBZGRyID0gVXNlZFNo bWVtU2VnQWRkcjsKKworCXBhcmFtLT5TaG1lbUxvY2sgPSBTaG1lbUxvY2s7CisJcGFyYW0t PlNobWVtVmFyaWFibGVDYWNoZSA9IFNobWVtVmFyaWFibGVDYWNoZTsKKwlwYXJhbS0+U2ht ZW1CYWNrZW5kQXJyYXkgPSBTaG1lbUJhY2tlbmRBcnJheTsKKworI2lmbmRlZiBIQVZFX1NQ SU5MT0NLUworCXBhcmFtLT5TcGlubG9ja1NlbWFBcnJheSA9IFNwaW5sb2NrU2VtYUFycmF5 OworI2VuZGlmCisJcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3RzID0gTmFtZWRM V0xvY2tUcmFuY2hlUmVxdWVzdHM7CisJcGFyYW0tPk5hbWVkTFdMb2NrVHJhbmNoZUFycmF5 ID0gTmFtZWRMV0xvY2tUcmFuY2hlQXJyYXk7CisJcGFyYW0tPk1haW5MV0xvY2tBcnJheSA9 IE1haW5MV0xvY2tBcnJheTsKKwlwYXJhbS0+UHJvY1N0cnVjdExvY2sgPSBQcm9jU3RydWN0 TG9jazsKKwlwYXJhbS0+UHJvY0dsb2JhbCA9IFByb2NHbG9iYWw7CisJcGFyYW0tPkF1eGls aWFyeVByb2NzID0gQXV4aWxpYXJ5UHJvY3M7CisJcGFyYW0tPlByZXBhcmVkWGFjdFByb2Nz ID0gUHJlcGFyZWRYYWN0UHJvY3M7CisJcGFyYW0tPlBNU2lnbmFsU3RhdGUgPSBQTVNpZ25h bFN0YXRlOworCisJcGFyYW0tPlBvc3RtYXN0ZXJQaWQgPSBQb3N0bWFzdGVyUGlkOworCXBh cmFtLT5QZ1N0YXJ0VGltZSA9IFBnU3RhcnRUaW1lOworCXBhcmFtLT5QZ1JlbG9hZFRpbWUg PSBQZ1JlbG9hZFRpbWU7CisJcGFyYW0tPmZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWUgPSBm aXJzdF9zeXNsb2dnZXJfZmlsZV90aW1lOworCisJcGFyYW0tPnJlZGlyZWN0aW9uX2RvbmUg PSByZWRpcmVjdGlvbl9kb25lOworCXBhcmFtLT5Jc0JpbmFyeVVwZ3JhZGUgPSBJc0JpbmFy eVVwZ3JhZGU7CisJcGFyYW0tPnF1ZXJ5X2lkX2VuYWJsZWQgPSBxdWVyeV9pZF9lbmFibGVk OworCXBhcmFtLT5tYXhfc2FmZV9mZHMgPSBtYXhfc2FmZV9mZHM7CisKKwlwYXJhbS0+TWF4 QmFja2VuZHMgPSBNYXhCYWNrZW5kczsKKworI2lmZGVmIFdJTjMyCisJcGFyYW0tPlBvc3Rt YXN0ZXJIYW5kbGUgPSBQb3N0bWFzdGVySGFuZGxlOworCWlmICghd3JpdGVfZHVwbGljYXRl ZF9oYW5kbGUoJnBhcmFtLT5pbml0aWFsX3NpZ25hbF9waXBlLAorCQkJCQkJCQkgcGd3aW4z Ml9jcmVhdGVfc2lnbmFsX2xpc3RlbmVyKGNoaWxkUGlkKSwKKwkJCQkJCQkJIGNoaWxkUHJv Y2VzcykpCisJCXJldHVybiBmYWxzZTsKKyNlbHNlCisJbWVtY3B5KCZwYXJhbS0+cG9zdG1h c3Rlcl9hbGl2ZV9mZHMsICZwb3N0bWFzdGVyX2FsaXZlX2ZkcywKKwkJICAgc2l6ZW9mKHBv c3RtYXN0ZXJfYWxpdmVfZmRzKSk7CisjZW5kaWYKKworCW1lbWNweSgmcGFyYW0tPnN5c2xv Z1BpcGUsICZzeXNsb2dQaXBlLCBzaXplb2Yoc3lzbG9nUGlwZSkpOworCisJc3RybGNweShw YXJhbS0+bXlfZXhlY19wYXRoLCBteV9leGVjX3BhdGgsIE1BWFBHUEFUSCk7CisKKwlzdHJs Y3B5KHBhcmFtLT5wa2dsaWJfcGF0aCwgcGtnbGliX3BhdGgsIE1BWFBHUEFUSCk7CisKKwlw YXJhbS0+c3RhcnR1cF9kYXRhX2xlbiA9IHN0YXJ0dXBfZGF0YV9sZW47CisJbWVtY3B5KHBh cmFtLT5zdGFydHVwX2RhdGEsIHN0YXJ0dXBfZGF0YSwgc3RhcnR1cF9kYXRhX2xlbik7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworCisjaWZkZWYgV0lOMzIKKy8qCisgKiBEdXBsaWNhdGUg YSBoYW5kbGUgZm9yIHVzYWdlIGluIGEgY2hpbGQgcHJvY2VzcywgYW5kIHdyaXRlIHRoZSBj aGlsZAorICogcHJvY2VzcyBpbnN0YW5jZSBvZiB0aGUgaGFuZGxlIHRvIHRoZSBwYXJhbWV0 ZXIgZmlsZS4KKyAqLworc3RhdGljIGJvb2wKK3dyaXRlX2R1cGxpY2F0ZWRfaGFuZGxlKEhB TkRMRSAqZGVzdCwgSEFORExFIHNyYywgSEFORExFIGNoaWxkUHJvY2VzcykKK3sKKwlIQU5E TEUJCWhDaGlsZCA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCisJaWYgKCFEdXBsaWNhdGVI YW5kbGUoR2V0Q3VycmVudFByb2Nlc3MoKSwKKwkJCQkJCSBzcmMsCisJCQkJCQkgY2hpbGRQ cm9jZXNzLAorCQkJCQkJICZoQ2hpbGQsCisJCQkJCQkgMCwKKwkJCQkJCSBUUlVFLAorCQkJ CQkJIERVUExJQ0FURV9DTE9TRV9TT1VSQ0UgfCBEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQor CXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZ19pbnRlcm5hbCgiY291bGQgbm90IGR1 cGxpY2F0ZSBoYW5kbGUgdG8gYmUgd3JpdHRlbiB0byBiYWNrZW5kIHBhcmFtZXRlciBmaWxl OiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSkpKTsKKwkJcmV0 dXJuIGZhbHNlOworCX0KKworCSpkZXN0ID0gaENoaWxkOworCXJldHVybiB0cnVlOworfQor CisvKgorICogRHVwbGljYXRlIGEgc29ja2V0IGZvciB1c2FnZSBpbiBhIGNoaWxkIHByb2Nl c3MsIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nCisgKiBzdHJ1Y3R1cmUgdG8gdGhlIHBhcmFt ZXRlciBmaWxlLgorICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGEgbnVtYmVyIG9mIExT UHMgKExheWVyZWQgU2VydmljZSBQcm92aWRlcnMpIHZlcnkKKyAqIGNvbW1vbiBvbiBXaW5k b3dzIChhbnRpdmlydXMsIGZpcmV3YWxscywgZG93bmxvYWQgbWFuYWdlcnMgZXRjKSBicmVh aworICogc3RyYWlnaHQgc29ja2V0IGluaGVyaXRhbmNlLgorICovCitzdGF0aWMgYm9vbAor d3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KEluaGVyaXRhYmxlU29ja2V0ICpkZXN0LCBTT0NL RVQgc3JjLCBwaWRfdCBjaGlsZHBpZCkKK3sKKwlkZXN0LT5vcmlnc29ja2V0ID0gc3JjOwor CWlmIChzcmMgIT0gMCAmJiBzcmMgIT0gUEdJTlZBTElEX1NPQ0tFVCkKKwl7CisJCS8qIEFj dHVhbCBzb2NrZXQgKi8KKwkJaWYgKFdTQUR1cGxpY2F0ZVNvY2tldChzcmMsIGNoaWxkcGlk LCAmZGVzdC0+d3NhaW5mbykgIT0gMCkKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCShl cnJtc2coImNvdWxkIG5vdCBkdXBsaWNhdGUgc29ja2V0ICVkIGZvciB1c2UgaW4gYmFja2Vu ZDogZXJyb3IgY29kZSAlZCIsCisJCQkJCQkJKGludCkgc3JjLCBXU0FHZXRMYXN0RXJyb3Io KSkpKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwor LyoKKyAqIFJlYWQgYSBkdXBsaWNhdGUgc29ja2V0IHN0cnVjdHVyZSBiYWNrLCBhbmQgZ2V0 IHRoZSBzb2NrZXQgZGVzY3JpcHRvci4KKyAqLworc3RhdGljIHZvaWQKK3JlYWRfaW5oZXJp dGFibGVfc29ja2V0KFNPQ0tFVCAqZGVzdCwgSW5oZXJpdGFibGVTb2NrZXQgKnNyYykKK3sK KwlTT0NLRVQJCXM7CisKKwlpZiAoc3JjLT5vcmlnc29ja2V0ID09IFBHSU5WQUxJRF9TT0NL RVQgfHwgc3JjLT5vcmlnc29ja2V0ID09IDApCisJeworCQkvKiBOb3QgYSByZWFsIHNvY2tl dCEgKi8KKwkJKmRlc3QgPSBzcmMtPm9yaWdzb2NrZXQ7CisJfQorCWVsc2UKKwl7CisJCS8q IEFjdHVhbCBzb2NrZXQsIHNvIGNyZWF0ZSBmcm9tIHN0cnVjdHVyZSAqLworCQlzID0gV1NB U29ja2V0KEZST01fUFJPVE9DT0xfSU5GTywKKwkJCQkJICBGUk9NX1BST1RPQ09MX0lORk8s CisJCQkJCSAgRlJPTV9QUk9UT0NPTF9JTkZPLAorCQkJCQkgICZzcmMtPndzYWluZm8sCisJ CQkJCSAgMCwKKwkJCQkJICAwKTsKKwkJaWYgKHMgPT0gSU5WQUxJRF9TT0NLRVQpCisJCXsK KwkJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IGNyZWF0ZSBpbmhlcml0ZWQgc29ja2V0OiBl cnJvciBjb2RlICVkXG4iLAorCQkJCQkJIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCWV4aXQo MSk7CisJCX0KKwkJKmRlc3QgPSBzOworCisJCS8qCisJCSAqIFRvIG1ha2Ugc3VyZSB3ZSBk b24ndCBnZXQgdHdvIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgc29ja2V0LCBjbG9zZQorCQkg KiB0aGUgb3JpZ2luYWwgb25lLiAoVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBpbmhlcml0YW5j ZSBhY3R1YWxseQorCQkgKiB3b3Jrcy4uCisJCSAqLworCQljbG9zZXNvY2tldChzcmMtPm9y aWdzb2NrZXQpOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorcmVhZF9iYWNrZW5k X3ZhcmlhYmxlcyhjaGFyICppZCwgY2hhciAqKnN0YXJ0dXBfZGF0YSwgc2l6ZV90ICpzdGFy dHVwX2RhdGFfbGVuKQoreworCUJhY2tlbmRQYXJhbWV0ZXJzIHBhcmFtOworCisjaWZuZGVm IFdJTjMyCisJLyogTm9uLXdpbjMyIGltcGxlbWVudGF0aW9uIHJlYWRzIGZyb20gZmlsZSAq LworCUZJTEUJICAgKmZwOworCisJLyogT3BlbiBmaWxlICovCisJZnAgPSBBbGxvY2F0ZUZp bGUoaWQsIFBHX0JJTkFSWV9SKTsKKwlpZiAoIWZwKQorCXsKKwkJd3JpdGVfc3RkZXJyKCJj b3VsZCBub3Qgb3BlbiBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNcIjogJXNcbiIsCisJ CQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoZnJl YWQoJnBhcmFtLCBzaXplb2YocGFyYW0pLCAxLCBmcCkgIT0gMSkKKwl7CisJCXdyaXRlX3N0 ZGVycigiY291bGQgbm90IHJlYWQgZnJvbSBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNc IjogJXNcbiIsCisJCQkJCSBpZCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9 CisKKwkvKiByZWFkIHN0YXJ0dXAgZGF0YSAqLworCSpzdGFydHVwX2RhdGFfbGVuID0gcGFy YW0uc3RhcnR1cF9kYXRhX2xlbjsKKwlpZiAocGFyYW0uc3RhcnR1cF9kYXRhX2xlbiA+IDAp CisJeworCQkqc3RhcnR1cF9kYXRhID0gcGFsbG9jKCpzdGFydHVwX2RhdGFfbGVuKTsKKwkJ aWYgKGZyZWFkKCpzdGFydHVwX2RhdGEsICpzdGFydHVwX2RhdGFfbGVuLCAxLCBmcCkgIT0g MSkKKwkJeworCQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgcmVhZCBzdGFydHVwIGRhdGEg ZnJvbSBiYWNrZW5kIHZhcmlhYmxlcyBmaWxlIFwiJXNcIjogJXNcbiIsCisJCQkJCQkgaWQs IHN0cmVycm9yKGVycm5vKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCWVsc2UKKwkJKnN0 YXJ0dXBfZGF0YSA9IE5VTEw7CisKKwkvKiBSZWxlYXNlIGZpbGUgKi8KKwlGcmVlRmlsZShm cCk7CisJaWYgKHVubGluayhpZCkgIT0gMCkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQg bm90IHJlbW92ZSBmaWxlIFwiJXNcIjogJXNcbiIsCisJCQkJCSBpZCwgc3RyZXJyb3IoZXJy bm8pKTsKKwkJZXhpdCgxKTsKKwl9CisjZWxzZQorCS8qIFdpbjMyIHZlcnNpb24gdXNlcyBt YXBwZWQgZmlsZSAqLworCUhBTkRMRQkJcGFyYW1IYW5kbGU7CisJQmFja2VuZFBhcmFtZXRl cnMgKmZpbGVwOworCisjaWZkZWYgX1dJTjY0CisJcGFyYW1IYW5kbGUgPSAoSEFORExFKSBf YXRvaTY0KGlkKTsKKyNlbHNlCisJcGFyYW1IYW5kbGUgPSAoSEFORExFKSBhdG9sKGlkKTsK KyNlbmRpZgorCWZpbGVwID0gTWFwVmlld09mRmlsZShwYXJhbUhhbmRsZSwgRklMRV9NQVBf UkVBRCwgMCwgMCwgMCk7CisJaWYgKCFmaWxlcCkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291 bGQgbm90IG1hcCB2aWV3IG9mIGJhY2tlbmQgdmFyaWFibGVzOiBlcnJvciBjb2RlICVsdVxu IiwKKwkJCQkJIEdldExhc3RFcnJvcigpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwltZW1jcHko JnBhcmFtLCBmaWxlcCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSk7CisKKwkvKiByZWFk IHN0YXJ0dXAgZGF0YSAqLworCSpzdGFydHVwX2RhdGFfbGVuID0gcGFyYW0uc3RhcnR1cF9k YXRhX2xlbjsKKwlpZiAocGFyYW0uc3RhcnR1cF9kYXRhX2xlbiA+IDApCisJeworCQkqc3Rh cnR1cF9kYXRhID0gcGFsbG9jKHBhcmFtLnN0YXJ0dXBfZGF0YV9sZW4pOworCQltZW1jcHko KnN0YXJ0dXBfZGF0YSwgZmlsZXAtPnN0YXJ0dXBfZGF0YSwgcGFyYW0uc3RhcnR1cF9kYXRh X2xlbik7CisJfQorCWVsc2UKKwkJKnN0YXJ0dXBfZGF0YSA9IE5VTEw7CisKKwlpZiAoIVVu bWFwVmlld09mRmlsZShmaWxlcCkpCisJeworCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCB1 bm1hcCB2aWV3IG9mIGJhY2tlbmQgdmFyaWFibGVzOiBlcnJvciBjb2RlICVsdVxuIiwKKwkJ CQkJIEdldExhc3RFcnJvcigpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoIUNsb3NlSGFu ZGxlKHBhcmFtSGFuZGxlKSkKKwl7CisJCXdyaXRlX3N0ZGVycigiY291bGQgbm90IGNsb3Nl IGhhbmRsZSB0byBiYWNrZW5kIHBhcmFtZXRlciB2YXJpYWJsZXM6IGVycm9yIGNvZGUgJWx1 XG4iLAorCQkJCQkgR2V0TGFzdEVycm9yKCkpOworCQlleGl0KDEpOworCX0KKyNlbmRpZgor CisJcmVzdG9yZV9iYWNrZW5kX3ZhcmlhYmxlcygmcGFyYW0pOworfQorCisvKiBSZXN0b3Jl IGNyaXRpY2FsIGJhY2tlbmQgdmFyaWFibGVzIGZyb20gdGhlIEJhY2tlbmRQYXJhbWV0ZXJz IHN0cnVjdCAqLworc3RhdGljIHZvaWQKK3Jlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoQmFj a2VuZFBhcmFtZXRlcnMgKnBhcmFtKQoreworCWlmIChwYXJhbS0+Y2xpZW50X3NvY2suc29j ayAhPSBQR0lOVkFMSURfU09DS0VUKQorCXsKKwkJTXlDbGllbnRTb2NrZXQgPSBNZW1vcnlD b250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKENsaWVudFNvY2tldCkpOwor CQltZW1jcHkoTXlDbGllbnRTb2NrZXQsICZwYXJhbS0+Y2xpZW50X3NvY2ssIHNpemVvZihD bGllbnRTb2NrZXQpKTsKKwkJcmVhZF9pbmhlcml0YWJsZV9zb2NrZXQoJk15Q2xpZW50U29j a2V0LT5zb2NrLCAmcGFyYW0tPmluaF9zb2NrKTsKKwl9CisKKwlTZXREYXRhRGlyKHBhcmFt LT5EYXRhRGlyKTsKKworCU15Q2FuY2VsS2V5ID0gcGFyYW0tPk15Q2FuY2VsS2V5OworCU15 UE1DaGlsZFNsb3QgPSBwYXJhbS0+TXlQTUNoaWxkU2xvdDsKKworI2lmZGVmIFdJTjMyCisJ U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gcGFyYW0tPlNobWVtUHJvdGVjdGl2ZVJlZ2lvbjsK KyNlbmRpZgorCVVzZWRTaG1lbVNlZ0lEID0gcGFyYW0tPlVzZWRTaG1lbVNlZ0lEOworCVVz ZWRTaG1lbVNlZ0FkZHIgPSBwYXJhbS0+VXNlZFNobWVtU2VnQWRkcjsKKworCVNobWVtTG9j ayA9IHBhcmFtLT5TaG1lbUxvY2s7CisJU2htZW1WYXJpYWJsZUNhY2hlID0gcGFyYW0tPlNo bWVtVmFyaWFibGVDYWNoZTsKKwlTaG1lbUJhY2tlbmRBcnJheSA9IHBhcmFtLT5TaG1lbUJh Y2tlbmRBcnJheTsKKworI2lmbmRlZiBIQVZFX1NQSU5MT0NLUworCVNwaW5sb2NrU2VtYUFy cmF5ID0gcGFyYW0tPlNwaW5sb2NrU2VtYUFycmF5OworI2VuZGlmCisJTmFtZWRMV0xvY2tU cmFuY2hlUmVxdWVzdHMgPSBwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHM7CisJ TmFtZWRMV0xvY2tUcmFuY2hlQXJyYXkgPSBwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlQXJy YXk7CisJTWFpbkxXTG9ja0FycmF5ID0gcGFyYW0tPk1haW5MV0xvY2tBcnJheTsKKwlQcm9j U3RydWN0TG9jayA9IHBhcmFtLT5Qcm9jU3RydWN0TG9jazsKKwlQcm9jR2xvYmFsID0gcGFy YW0tPlByb2NHbG9iYWw7CisJQXV4aWxpYXJ5UHJvY3MgPSBwYXJhbS0+QXV4aWxpYXJ5UHJv Y3M7CisJUHJlcGFyZWRYYWN0UHJvY3MgPSBwYXJhbS0+UHJlcGFyZWRYYWN0UHJvY3M7CisJ UE1TaWduYWxTdGF0ZSA9IHBhcmFtLT5QTVNpZ25hbFN0YXRlOworCisJUG9zdG1hc3RlclBp ZCA9IHBhcmFtLT5Qb3N0bWFzdGVyUGlkOworCVBnU3RhcnRUaW1lID0gcGFyYW0tPlBnU3Rh cnRUaW1lOworCVBnUmVsb2FkVGltZSA9IHBhcmFtLT5QZ1JlbG9hZFRpbWU7CisJZmlyc3Rf c3lzbG9nZ2VyX2ZpbGVfdGltZSA9IHBhcmFtLT5maXJzdF9zeXNsb2dnZXJfZmlsZV90aW1l OworCisJcmVkaXJlY3Rpb25fZG9uZSA9IHBhcmFtLT5yZWRpcmVjdGlvbl9kb25lOworCUlz QmluYXJ5VXBncmFkZSA9IHBhcmFtLT5Jc0JpbmFyeVVwZ3JhZGU7CisJcXVlcnlfaWRfZW5h YmxlZCA9IHBhcmFtLT5xdWVyeV9pZF9lbmFibGVkOworCW1heF9zYWZlX2ZkcyA9IHBhcmFt LT5tYXhfc2FmZV9mZHM7CisKKwlNYXhCYWNrZW5kcyA9IHBhcmFtLT5NYXhCYWNrZW5kczsK KworI2lmZGVmIFdJTjMyCisJUG9zdG1hc3RlckhhbmRsZSA9IHBhcmFtLT5Qb3N0bWFzdGVy SGFuZGxlOworCXBnd2luMzJfaW5pdGlhbF9zaWduYWxfcGlwZSA9IHBhcmFtLT5pbml0aWFs X3NpZ25hbF9waXBlOworI2Vsc2UKKwltZW1jcHkoJnBvc3RtYXN0ZXJfYWxpdmVfZmRzLCAm cGFyYW0tPnBvc3RtYXN0ZXJfYWxpdmVfZmRzLAorCQkgICBzaXplb2YocG9zdG1hc3Rlcl9h bGl2ZV9mZHMpKTsKKyNlbmRpZgorCisJbWVtY3B5KCZzeXNsb2dQaXBlLCAmcGFyYW0tPnN5 c2xvZ1BpcGUsIHNpemVvZihzeXNsb2dQaXBlKSk7CisKKwlzdHJsY3B5KG15X2V4ZWNfcGF0 aCwgcGFyYW0tPm15X2V4ZWNfcGF0aCwgTUFYUEdQQVRIKTsKKworCXN0cmxjcHkocGtnbGli X3BhdGgsIHBhcmFtLT5wa2dsaWJfcGF0aCwgTUFYUEdQQVRIKTsKKworCS8qCisJICogV2Ug bmVlZCB0byByZXN0b3JlIGZkLmMncyBjb3VudHMgb2YgZXh0ZXJuYWxseS1vcGVuZWQgRkRz OyB0byBhdm9pZAorCSAqIGNvbmZ1c2lvbiwgYmUgc3VyZSB0byBkbyB0aGlzIGFmdGVyIHJl c3RvcmluZyBtYXhfc2FmZV9mZHMuICAoTm90ZToKKwkgKiBCYWNrZW5kSW5pdGlhbGl6ZSB3 aWxsIGhhbmRsZSB0aGlzIGZvciBjbGllbnRfc29jay0+c29jay4pCisJICovCisjaWZuZGVm IFdJTjMyCisJaWYgKHBvc3RtYXN0ZXJfYWxpdmVfZmRzWzBdID49IDApCisJCVJlc2VydmVF eHRlcm5hbEZEKCk7CisJaWYgKHBvc3RtYXN0ZXJfYWxpdmVfZmRzWzFdID49IDApCisJCVJl c2VydmVFeHRlcm5hbEZEKCk7CisjZW5kaWYKK30KKworI2VuZGlmCQkJCQkJCS8qIEVYRUNf QkFDS0VORCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9tZXNvbi5i dWlsZCBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQKaW5kZXggY2RhOTIx ZmQxMGIuLjg5ZmYxMWJlYjBhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVy L21lc29uLmJ1aWxkCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvbWVzb24uYnVpbGQK QEAgLTYsOCArNiw4IEBAIGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2Jnd29ya2Vy LmMnLAogICAnYmd3cml0ZXIuYycsCiAgICdjaGVja3BvaW50ZXIuYycsCi0gICdmb3JrX3By b2Nlc3MuYycsCiAgICdpbnRlcnJ1cHQuYycsCisgICdsYXVuY2hfYmFja2VuZC5jJywKICAg J3BnYXJjaC5jJywKICAgJ3Bvc3RtYXN0ZXIuYycsCiAgICdzdGFydHVwLmMnLApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyBiL3NyYy9iYWNrZW5kL3Bv c3RtYXN0ZXIvcGdhcmNoLmMKaW5kZXggNDZhZjM0OTU2NDQuLmI4MmQ2NmZhYjUyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJs aWIvYmluYXJ5aGVhcC5oIgogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5jbHVk ZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5j bHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bn YXJjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKQEAgLTIxMSw4ICsyMTIsMTQgQEAg UGdBcmNoQ2FuUmVzdGFydCh2b2lkKQogCiAvKiBNYWluIGVudHJ5IHBvaW50IGZvciBhcmNo aXZlciBwcm9jZXNzICovCiB2b2lkCi1QZ0FyY2hpdmVyTWFpbih2b2lkKQorUGdBcmNoaXZl ck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsK KwlBc3NlcnQoc3RhcnR1cF9kYXRhX2xlbiA9PSAwKTsKKworCU15QXV4UHJvY1R5cGUgPSBB cmNoaXZlclByb2Nlc3M7CisJTXlCYWNrZW5kVHlwZSA9IEJfQVJDSElWRVI7CisJQXV4aWxp YXJ5UHJvY2Vzc0luaXQoKTsKKwogCS8qCiAJICogSWdub3JlIGFsbCBzaWduYWxzIHVzdWFs bHkgYm91bmQgdG8gc29tZSBhY3Rpb24gaW4gdGhlIHBvc3RtYXN0ZXIsCiAJICogZXhjZXB0 IGZvciBTSUdIVVAsIFNJR1RFUk0sIFNJR1VTUjEsIFNJR1VTUjIsIGFuZCBTSUdRVUlULgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wb3N0bWFzdGVyLmMgYi9zcmMv YmFja2VuZC9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuYwppbmRleCA1NTAxMzYwMDlhOC4uNjBl YTczOWY3YWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rl ci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5jCkBAIC0yLDkg KzIsOSBAQAogICoKICAqIHBvc3RtYXN0ZXIuYwogICoJICBUaGlzIHByb2dyYW0gYWN0cyBh cyBhIGNsZWFyaW5nIGhvdXNlIGZvciByZXF1ZXN0cyB0byB0aGUKLSAqCSAgUE9TVEdSRVMg c3lzdGVtLiAgRnJvbnRlbmQgcHJvZ3JhbXMgc2VuZCBhIHN0YXJ0dXAgbWVzc2FnZQotICoJ ICB0byB0aGUgUG9zdG1hc3RlciBhbmQgdGhlIHBvc3RtYXN0ZXIgdXNlcyB0aGUgaW5mbyBp biB0aGUKLSAqCSAgbWVzc2FnZSB0byBzZXR1cCBhIGJhY2tlbmQgcHJvY2Vzcy4KKyAqCSAg UE9TVEdSRVMgc3lzdGVtLiAgRnJvbnRlbmQgcHJvZ3JhbXMgY29ubmVjdCB0byB0aGUgUG9z dG1hc3RlciwKKyAqCSAgYW5kIHBvc3RtYXN0ZXIgZm9ya3MgYSBuZXcgYmFja2VuZCBwcm9j ZXNzIHRvIGhhbmRsZSB0aGUKKyAqCSAgY29ubmVjdGlvbi4KICAqCiAgKgkgIFRoZSBwb3N0 bWFzdGVyIGFsc28gbWFuYWdlcyBzeXN0ZW0td2lkZSBvcGVyYXRpb25zIHN1Y2ggYXMKICAq CSAgc3RhcnR1cCBhbmQgc2h1dGRvd24uIFRoZSBwb3N0bWFzdGVyIGl0c2VsZiBkb2Vzbid0 IGRvIHRob3NlCkBAIC0xMTAsNyArMTEwLDYgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1 dG92YWN1dW0uaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNs dWRlICJwb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oIgotI2luY2x1ZGUgInBvc3Rt YXN0ZXIvZm9ya19wcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3BnYXJjaC5oIgogI2luY2x1ZGUgInBvc3RtYXN0 ZXIvcG9zdG1hc3Rlci5oIgpAQCAtMTMyLDEwICsxMzEsNiBAQAogI2luY2x1ZGUgInV0aWxz L3RpbWVzdGFtcC5oIgogI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIKIAotI2lmZGVmIEVY RUNfQkFDS0VORAotI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgotI2VuZGlmCi0KIAogLyoK ICAqIFBvc3NpYmxlIHR5cGVzIG9mIGEgYmFja2VuZC4gQmV5b25kIGJlaW5nIHRoZSBwb3Nz aWJsZSBia2VuZF90eXBlIHZhbHVlcyBpbgpAQCAtMTg4LDcgKzE4Myw3IEBAIHR5cGVkZWYg c3RydWN0IGJrZW5kCiBzdGF0aWMgZGxpc3RfaGVhZCBCYWNrZW5kTGlzdCA9IERMSVNUX1NU QVRJQ19JTklUKEJhY2tlbmRMaXN0KTsKIAogI2lmZGVmIEVYRUNfQkFDS0VORAotc3RhdGlj IEJhY2tlbmQgKlNobWVtQmFja2VuZEFycmF5OworQmFja2VuZCAgICAqU2htZW1CYWNrZW5k QXJyYXk7CiAjZW5kaWYKIAogQmFja2dyb3VuZFdvcmtlciAqTXlCZ3dvcmtlckVudHJ5ID0g TlVMTDsKQEAgLTQxMyw3ICs0MDgsNyBAQCBzdGF0aWMgdm9pZCBTdGFydHVwUGFja2V0VGlt ZW91dEhhbmRsZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBDbGVhbnVwQmFja2VuZChpbnQgcGlk LCBpbnQgZXhpdHN0YXR1cyk7CiBzdGF0aWMgYm9vbCBDbGVhbnVwQmFja2dyb3VuZFdvcmtl cihpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cyk7CiBzdGF0aWMgdm9pZCBIYW5kbGVDaGlsZENy YXNoKGludCBwaWQsIGludCBleGl0c3RhdHVzLCBjb25zdCBjaGFyICpwcm9jbmFtZSk7Ci1z dGF0aWMgdm9pZCBMb2dDaGlsZEV4aXQoaW50IGxldiwgY29uc3QgY2hhciAqcHJvY25hbWUs CitzdGF0aWMgdm9pZCBMb2dDaGlsZEV4aXQoaW50IGxldiwgY29uc3QgY2hhciAqcHJvY25h bUJhY2tlbmRJbml0aWFsaXplZSwKIAkJCQkJCSBpbnQgcGlkLCBpbnQgZXhpdHN0YXR1cyk7 CiBzdGF0aWMgdm9pZCBQb3N0bWFzdGVyU3RhdGVNYWNoaW5lKHZvaWQpOwogCkBAIC00Mjgs NyArNDIzLDYgQEAgdHlwZWRlZiBlbnVtIENBQ19zdGF0ZQogfSBDQUNfc3RhdGU7CiAKIHN0 YXRpYyB2b2lkIEJhY2tlbmRJbml0aWFsaXplKENsaWVudFNvY2tldCAqY2xpZW50X3NvY2ss IENBQ19zdGF0ZSBjYWMpOwotc3RhdGljIHZvaWQgQmFja2VuZFJ1bih2b2lkKSBwZ19hdHRy aWJ1dGVfbm9yZXR1cm4oKTsKIHN0YXRpYyB2b2lkIEV4aXRQb3N0bWFzdGVyKGludCBzdGF0 dXMpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGljIGludAlTZXJ2ZXJMb29wKHZv aWQpOwogc3RhdGljIGludAlCYWNrZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKnBvcnQpOwpA QCAtNDQ5LDcgKzQ0Myw3IEBAIHN0YXRpYyBpbnQJQ291bnRDaGlsZHJlbihpbnQgdGFyZ2V0 KTsKIHN0YXRpYyBib29sIGFzc2lnbl9iYWNrZW5kbGlzdF9lbnRyeShSZWdpc3RlcmVkQmdX b3JrZXIgKnJ3KTsKIHN0YXRpYyB2b2lkIG1heWJlX3N0YXJ0X2Jnd29ya2Vycyh2b2lkKTsK IHN0YXRpYyBib29sIENyZWF0ZU9wdHNGaWxlKGludCBhcmdjLCBjaGFyICphcmd2W10sIGNo YXIgKmZ1bGxwcm9nbmFtZSk7Ci1zdGF0aWMgcGlkX3QgU3RhcnRDaGlsZFByb2Nlc3MoQXV4 UHJvY1R5cGUgdHlwZSk7CitzdGF0aWMgcGlkX3QgU3RhcnRDaGlsZFByb2Nlc3MoUG9zdG1h c3RlckNoaWxkVHlwZSB0eXBlKTsKIHN0YXRpYyB2b2lkIFN0YXJ0QXV0b3ZhY3V1bVdvcmtl cih2b2lkKTsKIHN0YXRpYyB2b2lkIE1heWJlU3RhcnRXYWxSZWNlaXZlcih2b2lkKTsKIHN0 YXRpYyB2b2lkIEluaXRQb3N0bWFzdGVyRGVhdGhXYXRjaEhhbmRsZSh2b2lkKTsKQEAgLTQ4 NCw5NSArNDc4LDE5IEBAIHR5cGVkZWYgc3RydWN0CiB9IHdpbjMyX2RlYWRjaGlsZF93YWl0 aW5mbzsKICNlbmRpZgkJCQkJCQkvKiBXSU4zMiAqLwogCi1zdGF0aWMgcGlkX3QgYmFja2Vu ZF9mb3JrZXhlYyhDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKTsK LXN0YXRpYyBwaWRfdCBpbnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltd LCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsKLQotLyogVHlwZSBmb3IgYSBzb2NrZXQg dGhhdCBjYW4gYmUgaW5oZXJpdGVkIHRvIGEgY2xpZW50IHByb2Nlc3MgKi8KLSNpZmRlZiBX SU4zMgotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlTT0NLRVQJCW9yaWdzb2NrZXQ7CQkvKiBPcmln aW5hbCBzb2NrZXQgdmFsdWUsIG9yIFBHSU5WQUxJRF9TT0NLRVQKLQkJCQkJCQkJICogaWYg bm90IGEgc29ja2V0ICovCi0JV1NBUFJPVE9DT0xfSU5GTyB3c2FpbmZvOwotfSBJbmhlcml0 YWJsZVNvY2tldDsKLSNlbHNlCi10eXBlZGVmIGludCBJbmhlcml0YWJsZVNvY2tldDsKLSNl bmRpZgotCi0vKgotICogU3RydWN0dXJlIGNvbnRhaW5zIGFsbCB2YXJpYWJsZXMgcGFzc2Vk IHRvIGV4ZWM6ZWQgYmFja2VuZHMKLSAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlDbGllbnRT b2NrZXQgY2xpZW50X3NvY2s7Ci0JSW5oZXJpdGFibGVTb2NrZXQgc2VyaWFsaXplZF9zb2Nr OwotCWNoYXIJCURhdGFEaXJbTUFYUEdQQVRIXTsKLQlpbnQzMgkJTXlDYW5jZWxLZXk7Ci0J aW50CQkJTXlQTUNoaWxkU2xvdDsKLSNpZm5kZWYgV0lOMzIKLQl1bnNpZ25lZCBsb25nIFVz ZWRTaG1lbVNlZ0lEOwotI2Vsc2UKLQl2b2lkCSAgICpTaG1lbVByb3RlY3RpdmVSZWdpb247 Ci0JSEFORExFCQlVc2VkU2htZW1TZWdJRDsKLSNlbmRpZgotCXZvaWQJICAgKlVzZWRTaG1l bVNlZ0FkZHI7Ci0Jc2xvY2tfdCAgICAqU2htZW1Mb2NrOwotCVZhcmlhYmxlQ2FjaGUgU2ht ZW1WYXJpYWJsZUNhY2hlOwotCUJhY2tlbmQgICAgKlNobWVtQmFja2VuZEFycmF5OwotI2lm bmRlZiBIQVZFX1NQSU5MT0NLUwotCVBHU2VtYXBob3JlICpTcGlubG9ja1NlbWFBcnJheTsK LSNlbmRpZgotCWludAkJCU5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3RzOwotCU5hbWVkTFdM b2NrVHJhbmNoZSAqTmFtZWRMV0xvY2tUcmFuY2hlQXJyYXk7Ci0JTFdMb2NrUGFkZGVkICpN YWluTFdMb2NrQXJyYXk7Ci0Jc2xvY2tfdCAgICAqUHJvY1N0cnVjdExvY2s7Ci0JUFJPQ19I RFIgICAqUHJvY0dsb2JhbDsKLQlQR1BST0MJICAgKkF1eGlsaWFyeVByb2NzOwotCVBHUFJP QwkgICAqUHJlcGFyZWRYYWN0UHJvY3M7Ci0JUE1TaWduYWxEYXRhICpQTVNpZ25hbFN0YXRl OwotCXBpZF90CQlQb3N0bWFzdGVyUGlkOwotCVRpbWVzdGFtcFR6IFBnU3RhcnRUaW1lOwot CVRpbWVzdGFtcFR6IFBnUmVsb2FkVGltZTsKLQlwZ190aW1lX3QJZmlyc3Rfc3lzbG9nZ2Vy X2ZpbGVfdGltZTsKLQlib29sCQlyZWRpcmVjdGlvbl9kb25lOwotCWJvb2wJCUlzQmluYXJ5 VXBncmFkZTsKLQlib29sCQlxdWVyeV9pZF9lbmFibGVkOwotCWludAkJCW1heF9zYWZlX2Zk czsKLQlpbnQJCQlNYXhCYWNrZW5kczsKLSNpZmRlZiBXSU4zMgotCUhBTkRMRQkJUG9zdG1h c3RlckhhbmRsZTsKLQlIQU5ETEUJCWluaXRpYWxfc2lnbmFsX3BpcGU7Ci0JSEFORExFCQlz eXNsb2dQaXBlWzJdOwotI2Vsc2UKLQlpbnQJCQlwb3N0bWFzdGVyX2FsaXZlX2Zkc1syXTsK LQlpbnQJCQlzeXNsb2dQaXBlWzJdOwotI2VuZGlmCi0JY2hhcgkJbXlfZXhlY19wYXRoW01B WFBHUEFUSF07Ci0JY2hhcgkJcGtnbGliX3BhdGhbTUFYUEdQQVRIXTsKLQotCUJhY2tncm91 bmRXb3JrZXIgTXlCZ3dvcmtlckVudHJ5OwotfSBCYWNrZW5kUGFyYW1ldGVyczsKLQotc3Rh dGljIHZvaWQgcmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhjaGFyICppZCwgQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jayk7Ci1zdGF0aWMgdm9pZCByZXN0b3JlX2JhY2tlbmRfdmFyaWFibGVz KEJhY2tlbmRQYXJhbWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jayk7 Ci0KLSNpZm5kZWYgV0lOMzIKLXN0YXRpYyBib29sIHNhdmVfYmFja2VuZF92YXJpYWJsZXMo QmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKTsK LSNlbHNlCi1zdGF0aWMgYm9vbCBzYXZlX2JhY2tlbmRfdmFyaWFibGVzKEJhY2tlbmRQYXJh bWV0ZXJzICpwYXJhbSwgQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaywKLQkJCQkJCQkJICAg SEFORExFIGNoaWxkUHJvY2VzcywgcGlkX3QgY2hpbGRQaWQpOwotI2VuZGlmCi0KIHN0YXRp YyB2b2lkIFNobWVtQmFja2VuZEFycmF5QWRkKEJhY2tlbmQgKmJuKTsKIHN0YXRpYyB2b2lk IFNobWVtQmFja2VuZEFycmF5UmVtb3ZlKEJhY2tlbmQgKmJuKTsKICNlbmRpZgkJCQkJCQkv KiBFWEVDX0JBQ0tFTkQgKi8KIAotI2RlZmluZSBTdGFydHVwRGF0YUJhc2UoKQkJU3RhcnRD aGlsZFByb2Nlc3MoU3RhcnR1cFByb2Nlc3MpCi0jZGVmaW5lIFN0YXJ0QXJjaGl2ZXIoKQkJ CVN0YXJ0Q2hpbGRQcm9jZXNzKEFyY2hpdmVyUHJvY2VzcykKLSNkZWZpbmUgU3RhcnRCYWNr Z3JvdW5kV3JpdGVyKCkgU3RhcnRDaGlsZFByb2Nlc3MoQmdXcml0ZXJQcm9jZXNzKQotI2Rl ZmluZSBTdGFydENoZWNrcG9pbnRlcigpCQlTdGFydENoaWxkUHJvY2VzcyhDaGVja3BvaW50 ZXJQcm9jZXNzKQotI2RlZmluZSBTdGFydFdhbFdyaXRlcigpCQlTdGFydENoaWxkUHJvY2Vz cyhXYWxXcml0ZXJQcm9jZXNzKQotI2RlZmluZSBTdGFydFdhbFJlY2VpdmVyKCkJCVN0YXJ0 Q2hpbGRQcm9jZXNzKFdhbFJlY2VpdmVyUHJvY2VzcykKKyNkZWZpbmUgU3RhcnR1cERhdGFC YXNlKCkJCVN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19TVEFSVFVQKQorI2RlZmluZSBTdGFydEFy Y2hpdmVyKCkJCQlTdGFydENoaWxkUHJvY2VzcyhQTUNfQVJDSElWRVIpCisjZGVmaW5lIFN0 YXJ0QmFja2dyb3VuZFdyaXRlcigpIFN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19CR1dSSVRFUikK KyNkZWZpbmUgU3RhcnRDaGVja3BvaW50ZXIoKQkJU3RhcnRDaGlsZFByb2Nlc3MoUE1DX0NI RUNLUE9JTlRFUikKKyNkZWZpbmUgU3RhcnRXYWxXcml0ZXIoKQkJU3RhcnRDaGlsZFByb2Nl c3MoUE1DX1dBTF9XUklURVIpCisjZGVmaW5lIFN0YXJ0V2FsUmVjZWl2ZXIoKQkJU3RhcnRD aGlsZFByb2Nlc3MoUE1DX1dBTF9SRUNFSVZFUikKKworI2RlZmluZSBTdGFydEF1dG9WYWNM YXVuY2hlcigpCVN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19BVl9MQVVOQ0hFUik7CisjZGVmaW5l IFN0YXJ0QXV0b1ZhY1dvcmtlcigpCVN0YXJ0Q2hpbGRQcm9jZXNzKFBNQ19BVl9XT1JLRVIp OwogCiAvKiBNYWNyb3MgdG8gY2hlY2sgZXhpdCBzdGF0dXMgb2YgYSBjaGlsZCBwcm9jZXNz ICovCiAjZGVmaW5lIEVYSVRfU1RBVFVTXzAoc3QpICAoKHN0KSA9PSAwKQpAQCAtMTExNSwx MSArMTAzMywxMSBAQCBQb3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQog CiAJLyoKIAkgKiBDbGVhbiBvdXQgdGhlIHRlbXAgZGlyZWN0b3J5IHVzZWQgdG8gdHJhbnNt aXQgcGFyYW1ldGVycyB0byBjaGlsZAotCSAqIHByb2Nlc3NlcyAoc2VlIGludGVybmFsX2Zv cmtleGVjLCBiZWxvdykuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlCi0JICogbGF1bmNoaW5n IGFueSBjaGlsZCBwcm9jZXNzZXMsIGVsc2Ugd2UgaGF2ZSBhIHJhY2UgY29uZGl0aW9uOiB3 ZSBjb3VsZAotCSAqIHJlbW92ZSBhIHBhcmFtZXRlciBmaWxlIGJlZm9yZSB0aGUgY2hpbGQg Y2FuIHJlYWQgaXQuICBJdCBzaG91bGQgYmUKLQkgKiBzYWZlIHRvIGRvIHNvIG5vdywgYmVj YXVzZSB3ZSB2ZXJpZmllZCBlYXJsaWVyIHRoYXQgdGhlcmUgYXJlIG5vCi0JICogY29uZmxp Y3RpbmcgUG9zdGdyZXMgcHJvY2Vzc2VzIGluIHRoaXMgZGF0YSBkaXJlY3RvcnkuCisJICog cHJvY2Vzc2VzIChzZWUgaW50ZXJuYWxfZm9ya2V4ZWMpLiAgV2UgbXVzdCBkbyB0aGlzIGJl Zm9yZSBsYXVuY2hpbmcKKwkgKiBhbnkgY2hpbGQgcHJvY2Vzc2VzLCBlbHNlIHdlIGhhdmUg YSByYWNlIGNvbmRpdGlvbjogd2UgY291bGQgcmVtb3ZlIGEKKwkgKiBwYXJhbWV0ZXIgZmls ZSBiZWZvcmUgdGhlIGNoaWxkIGNhbiByZWFkIGl0LiAgSXQgc2hvdWxkIGJlIHNhZmUgdG8g ZG8KKwkgKiBzbyBub3csIGJlY2F1c2Ugd2UgdmVyaWZpZWQgZWFybGllciB0aGF0IHRoZXJl IGFyZSBubyBjb25mbGljdGluZworCSAqIFBvc3RncmVzIHByb2Nlc3NlcyBpbiB0aGlzIGRh dGEgZGlyZWN0b3J5LgogCSAqLwogCVJlbW92ZVBnVGVtcEZpbGVzSW5EaXIoUEdfVEVNUF9G SUxFU19ESVIsIHRydWUsIGZhbHNlKTsKICNlbmRpZgpAQCAtMzk4OSw2ICszOTA3LDExIEBA IFRlcm1pbmF0ZUNoaWxkcmVuKGludCBzaWduYWwpCiAJCXNpZ25hbF9jaGlsZChQZ0FyY2hQ SUQsIHNpZ25hbCk7CiB9CiAKK3R5cGVkZWYgc3RydWN0IEJhY2tlbmRTdGFydHVwSW5mbwor eworCUNBQ19zdGF0ZQljYW5BY2NlcHRDb25uZWN0aW9uczsKK30JCQlCYWNrZW5kU3RhcnR1 cEluZm87CisKIC8qCiAgKiBCYWNrZW5kU3RhcnR1cCAtLSBzdGFydCBiYWNrZW5kIHByb2Nl c3MKICAqCkBAIC00MDAxLDcgKzM5MjQsNyBAQCBCYWNrZW5kU3RhcnR1cChDbGllbnRTb2Nr ZXQgKmNsaWVudF9zb2NrKQogewogCUJhY2tlbmQgICAgKmJuOwkJCQkvKiBmb3IgYmFja2Vu ZCBjbGVhbnVwICovCiAJcGlkX3QJCXBpZDsKLQlDQUNfc3RhdGUJY2FjOworCUJhY2tlbmRT dGFydHVwSW5mbyBpbmZvOwogCiAJLyoKIAkgKiBDcmVhdGUgYmFja2VuZCBkYXRhIHN0cnVj dHVyZS4gIEJldHRlciBiZWZvcmUgdGhlIGZvcmsoKSBzbyB3ZSBjYW4KQEAgLTQwMzAsMTEg KzM5NTMsMTAgQEAgQmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0ICpjbGllbnRfc29jaykK IAkJcmV0dXJuIFNUQVRVU19FUlJPUjsKIAl9CiAKLQlibi0+Y2FuY2VsX2tleSA9IE15Q2Fu Y2VsS2V5OwotCiAJLyogUGFzcyBkb3duIGNhbkFjY2VwdENvbm5lY3Rpb25zIHN0YXRlICov Ci0JY2FjID0gY2FuQWNjZXB0Q29ubmVjdGlvbnMoQkFDS0VORF9UWVBFX05PUk1BTCk7Ci0J Ym4tPmRlYWRfZW5kID0gKGNhYyAhPSBDQUNfT0spOworCWluZm8uY2FuQWNjZXB0Q29ubmVj dGlvbnMgPSBjYW5BY2NlcHRDb25uZWN0aW9ucyhCQUNLRU5EX1RZUEVfTk9STUFMKTsKKwli bi0+ZGVhZF9lbmQgPSAoaW5mby5jYW5BY2NlcHRDb25uZWN0aW9ucyAhPSBDQUNfT0spOwor CWJuLT5jYW5jZWxfa2V5ID0gTXlDYW5jZWxLZXk7CiAKIAkvKgogCSAqIFVubGVzcyBpdCdz IGEgZGVhZF9lbmQgY2hpbGQsIGFzc2lnbiBpdCBhIGNoaWxkIHNsb3QgbnVtYmVyCkBAIC00 MDQ3LDI2ICszOTY5LDcgQEAgQmFja2VuZFN0YXJ0dXAoQ2xpZW50U29ja2V0ICpjbGllbnRf c29jaykKIAkvKiBIYXNuJ3QgYXNrZWQgdG8gYmUgbm90aWZpZWQgYWJvdXQgYW55IGJnd29y a2VycyB5ZXQgKi8KIAlibi0+Ymd3b3JrZXJfbm90aWZ5ID0gZmFsc2U7CiAKLSNpZmRlZiBF WEVDX0JBQ0tFTkQKLQlwaWQgPSBiYWNrZW5kX2ZvcmtleGVjKGNsaWVudF9zb2NrLCBjYWMp OwotI2Vsc2UJCQkJCQkJLyogIUVYRUNfQkFDS0VORCAqLwotCXBpZCA9IGZvcmtfcHJvY2Vz cygpOwotCWlmIChwaWQgPT0gMCkJCQkJLyogY2hpbGQgKi8KLQl7Ci0JCS8qIERldGFuZ2xl IGZyb20gcG9zdG1hc3RlciAqLwotCQlJbml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJLyog Q2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCUNsb3NlUG9zdG1hc3RlclBv cnRzKGZhbHNlKTsKLQotCQkvKiBQZXJmb3JtIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24g YW5kIGNvbGxlY3Qgc3RhcnR1cCBwYWNrZXQgKi8KLQkJQmFja2VuZEluaXRpYWxpemUoY2xp ZW50X3NvY2ssIGNhYyk7Ci0KLQkJLyogQW5kIHJ1biB0aGUgYmFja2VuZCAqLwotCQlCYWNr ZW5kUnVuKCk7Ci0JfQotI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwotCisJcGlk ID0gcG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2goUE1DX0JBQ0tFTkQsIChjaGFyICopICZpbmZv LCBzaXplb2YoaW5mbyksIGNsaWVudF9zb2NrKTsKIAlpZiAocGlkIDwgMCkKIAl7CiAJCS8q IGluIHBhcmVudCwgZm9yayBmYWlsZWQgKi8KQEAgLTQxMDMsNiArNDAwNiw1OCBAQCBCYWNr ZW5kU3RhcnR1cChDbGllbnRTb2NrZXQgKmNsaWVudF9zb2NrKQogCXJldHVybiBTVEFUVVNf T0s7CiB9CiAKK3ZvaWQKK0JhY2tlbmRNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCit7CisJQmFja2VuZFN0YXJ0dXBJbmZvICppbmZvID0gKEJh Y2tlbmRTdGFydHVwSW5mbyAqKSBzdGFydHVwX2RhdGE7CisKKwlBc3NlcnQoc3RhcnR1cF9k YXRhX2xlbiA9PSBzaXplb2YoQmFja2VuZFN0YXJ0dXBJbmZvKSk7CisJQXNzZXJ0KE15Q2xp ZW50U29ja2V0ICE9IE5VTEwpOworCisjaWZkZWYgRVhFQ19CQUNLRU5ECisKKwkvKgorCSAq IE5lZWQgdG8gcmVpbml0aWFsaXplIHRoZSBTU0wgbGlicmFyeSBpbiB0aGUgYmFja2VuZCwg c2luY2UgdGhlIGNvbnRleHQKKwkgKiBzdHJ1Y3R1cmVzIGNvbnRhaW4gZnVuY3Rpb24gcG9p bnRlcnMgYW5kIGNhbm5vdCBiZSBwYXNzZWQgdGhyb3VnaCB0aGUKKwkgKiBwYXJhbWV0ZXIg ZmlsZS4KKwkgKgorCSAqIElmIGZvciBzb21lIHJlYXNvbiByZWxvYWQgZmFpbHMgKG1heWJl IHRoZSB1c2VyIGluc3RhbGxlZCBicm9rZW4ga2V5CisJICogZmlsZXMpLCBzb2xkaWVyIG9u IHdpdGhvdXQgU1NMOyB0aGF0J3MgYmV0dGVyIHRoYW4gYWxsIGNvbm5lY3Rpb25zCisJICog YmVjb21pbmcgaW1wb3NzaWJsZS4KKwkgKgorCSAqIFhYWCBzaG91bGQgd2UgZG8gdGhpcyBp biBhbGwgY2hpbGQgcHJvY2Vzc2VzPyAgRm9yIHRoZSBtb21lbnQgaXQncworCSAqIGVub3Vn aCB0byBkbyBpdCBpbiBiYWNrZW5kIGNoaWxkcmVuLgorCSAqLworI2lmZGVmIFVTRV9TU0wK KwlpZiAoRW5hYmxlU1NMKQorCXsKKwkJaWYgKHNlY3VyZV9pbml0aWFsaXplKGZhbHNlKSA9 PSAwKQorCQkJTG9hZGVkU1NMID0gdHJ1ZTsKKwkJZWxzZQorCQkJZXJlcG9ydChMT0csCisJ CQkJCShlcnJtc2coIlNTTCBjb25maWd1cmF0aW9uIGNvdWxkIG5vdCBiZSBsb2FkZWQgaW4g Y2hpbGQgcHJvY2VzcyIpKSk7CisJfQorI2VuZGlmCisjZW5kaWYKKworCS8qIFBlcmZvcm0g YWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBhbmQgY29sbGVjdCBzdGFydHVwIHBhY2tldCAq LworCUJhY2tlbmRJbml0aWFsaXplKE15Q2xpZW50U29ja2V0LCBpbmZvLT5jYW5BY2NlcHRD b25uZWN0aW9ucyk7CisKKwkvKgorCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBz dHJ1Y3QgaW4gc2hhcmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcworCSAqIGJlZm9yZSB3 ZSBjYW4gdXNlIExXTG9ja3Mgb3IgYWNjZXNzIGFueSBzaGFyZWQgbWVtb3J5LgorCSAqLwor CUluaXRQcm9jZXNzKCk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB3ZSBhcmVuJ3QgaW4gUG9z dG1hc3RlckNvbnRleHQgYW55bW9yZS4gIChXZSBjYW4ndCBkZWxldGUgaXQKKwkgKiBqdXN0 IHlldCwgdGhvdWdoLCBiZWNhdXNlIEluaXRQb3N0Z3JlcyB3aWxsIG5lZWQgdGhlIEhCQSBk YXRhLikKKwkgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7 CisKKwlQb3N0Z3Jlc01haW4oTXlQcm9jUG9ydC0+ZGF0YWJhc2VfbmFtZSwgTXlQcm9jUG9y dC0+dXNlcl9uYW1lKTsKK30KKwogLyoKICAqIFRyeSB0byByZXBvcnQgYmFja2VuZCBmb3Jr KCkgZmFpbHVyZSB0byBjbGllbnQgYmVmb3JlIHdlIGNsb3NlIHRoZQogICogY29ubmVjdGlv bi4gIFNpbmNlIHdlIGRvIG5vdCBjYXJlIHRvIHJpc2sgYmxvY2tpbmcgdGhlIHBvc3RtYXN0 ZXIgb24KQEAgLTQzNzgsNzI5ICs0MzMzLDE2MSBAQCBCYWNrZW5kSW5pdGlhbGl6ZShDbGll bnRTb2NrZXQgKmNsaWVudF9zb2NrLCBDQUNfc3RhdGUgY2FjKQogCiAKIC8qCi0gKiBCYWNr ZW5kUnVuIC0tIHNldCB1cCB0aGUgYmFja2VuZCdzIGFyZ3VtZW50IGxpc3QgYW5kIGludm9r ZSBQb3N0Z3Jlc01haW4oKQorICogRXhpdFBvc3RtYXN0ZXIgLS0gY2xlYW51cAogICoKLSAq IHJldHVybnM6Ci0gKgkJRG9lc24ndCByZXR1cm4gYXQgYWxsLgorICogRG8gTk9UIGNhbGwg ZXhpdCgpIGRpcmVjdGx5IC0tLSBhbHdheXMgZ28gdGhyb3VnaCBoZXJlIQogICovCiBzdGF0 aWMgdm9pZAotQmFja2VuZFJ1bih2b2lkKQorRXhpdFBvc3RtYXN0ZXIoaW50IHN0YXR1cykK IHsKLQkvKgotCSAqIENyZWF0ZSBhIHBlci1iYWNrZW5kIFBHUFJPQyBzdHJ1Y3QgaW4gc2hh cmVkIG1lbW9yeS4gIFdlIG11c3QgZG8gdGhpcwotCSAqIGJlZm9yZSB3ZSBjYW4gdXNlIExX TG9ja3Mgb3IgYWNjZXNzIGFueSBzaGFyZWQgbWVtb3J5LgotCSAqLwotCUluaXRQcm9jZXNz KCk7CisjaWZkZWYgSEFWRV9QVEhSRUFEX0lTX1RIUkVBREVEX05QCiAKIAkvKgotCSAqIE1h a2Ugc3VyZSB3ZSBhcmVuJ3QgaW4gUG9zdG1hc3RlckNvbnRleHQgYW55bW9yZS4gIChXZSBj YW4ndCBkZWxldGUgaXQKLQkgKiBqdXN0IHlldCwgdGhvdWdoLCBiZWNhdXNlIEluaXRQb3N0 Z3JlcyB3aWxsIG5lZWQgdGhlIEhCQSBkYXRhLikKKwkgKiBUaGVyZSBpcyBubyBrbm93biBj YXVzZSBmb3IgYSBwb3N0bWFzdGVyIHRvIGJlY29tZSBtdWx0aXRocmVhZGVkIGFmdGVyCisJ ICogc3RhcnR1cC4gIFJlY2hlY2sgdG8gYWNjb3VudCBmb3IgdGhlIHBvc3NpYmlsaXR5IG9m IHVua25vd24gY2F1c2VzLgorCSAqIFRoaXMgbWVzc2FnZSB1c2VzIExPRyBsZXZlbCwgYmVj YXVzZSBhbiB1bmNsZWFuIHNodXRkb3duIGF0IHRoaXMgcG9pbnQKKwkgKiB3b3VsZCB1c3Vh bGx5IG5vdCBsb29rIG11Y2ggZGlmZmVyZW50IGZyb20gYSBjbGVhbiBzaHV0ZG93bi4KIAkg Ki8KLQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0KLQlQb3N0 Z3Jlc01haW4oTXlQcm9jUG9ydC0+ZGF0YWJhc2VfbmFtZSwgTXlQcm9jUG9ydC0+dXNlcl9u YW1lKTsKLX0KLQotCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi0KLS8qCi0gKiBwb3N0bWFzdGVy X2ZvcmtleGVjIC0tIGZvcmsgYW5kIGV4ZWMgYSBwb3N0bWFzdGVyIHN1YnByb2Nlc3MKLSAq Ci0gKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBzZXQgdXAgdGhlIGFyZ3YgYXJyYXkgYWxyZWFk eSwgZXhjZXB0IGZvciBhcmd2WzJdCi0gKiB3aGljaCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRo ZSBuYW1lIG9mIHRoZSB0ZW1wIHZhcmlhYmxlIGZpbGUuCi0gKgotICogUmV0dXJucyB0aGUg Y2hpbGQgcHJvY2VzcyBQSUQsIG9yIC0xIG9uIGZvcmsgZmFpbHVyZSAoYSBzdWl0YWJsZSBl cnJvcgotICogbWVzc2FnZSBoYXMgYmVlbiBsb2dnZWQgb24gZmFpbHVyZSkuCi0gKgotICog QWxsIHVzZXMgb2YgdGhpcyByb3V0aW5lIHdpbGwgZGlzcGF0Y2ggdG8gU3ViUG9zdG1hc3Rl ck1haW4gaW4gdGhlCi0gKiBjaGlsZCBwcm9jZXNzLgotICovCi1waWRfdAotcG9zdG1hc3Rl cl9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCUNsaWVudFNvY2tldCBj bGllbnRfc29jazsKLQotCS8qIFRoaXMgZW50cnkgcG9pbnQgZG9lc24ndCBwYXNzIGEgY2xp ZW50IHNvY2tldCAqLwotCW1lbXNldCgmY2xpZW50X3NvY2ssIDAsIHNpemVvZihDbGllbnRT b2NrZXQpKTsKLQlyZXR1cm4gaW50ZXJuYWxfZm9ya2V4ZWMoYXJnYywgYXJndiwgJmNsaWVu dF9zb2NrKTsKLX0KLQotLyoKLSAqIGJhY2tlbmRfZm9ya2V4ZWMgLS0gZm9yay9leGVjIG9m ZiBhIGJhY2tlbmQgcHJvY2VzcwotICoKLSAqIFNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgKFdJ TjMyKSBkb24ndCBoYXZlIGZvcmsoKSBzbyB3ZSBoYXZlIHRvIHNpbXVsYXRlCi0gKiBpdCBi eSBzdG9yaW5nIHBhcmFtZXRlcnMgdGhhdCBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgY2hp bGQgYW5kCi0gKiB0aGVuIGNyZWF0ZSBhIG5ldyBjaGlsZCBwcm9jZXNzLgotICoKLSAqIHJl dHVybnMgdGhlIHBpZCBvZiB0aGUgZm9yay9leGVjJ2QgcHJvY2Vzcywgb3IgLTEgb24gZmFp bHVyZQotICovCi1zdGF0aWMgcGlkX3QKLWJhY2tlbmRfZm9ya2V4ZWMoQ2xpZW50U29ja2V0 ICpjbGllbnRfc29jaywgQ0FDX3N0YXRlIGNhYykKLXsKLQljaGFyCSAgICphdls1XTsKLQlp bnQJCQlhYyA9IDA7Ci0JY2hhcgkJY2FjYnVmWzEwXTsKLQotCWF2W2FjKytdID0gInBvc3Rn cmVzIjsKLQlhdlthYysrXSA9ICItLWZvcmtiYWNrZW5kIjsKLQlhdlthYysrXSA9IE5VTEw7 CQkJLyogZmlsbGVkIGluIGJ5IGludGVybmFsX2ZvcmtleGVjICovCisJaWYgKHB0aHJlYWRf aXNfdGhyZWFkZWRfbnAoKSAhPSAwKQorCQllcmVwb3J0KExPRywKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVEVSTkFMX0VSUk9SKSwKKwkJCQkgZXJybXNnX2ludGVybmFsKCJwb3N0bWFz dGVyIGJlY2FtZSBtdWx0aXRocmVhZGVkIiksCisJCQkJIGVycmRldGFpbCgiUGxlYXNlIHJl cG9ydCB0aGlzIHRvIDwlcz4uIiwgUEFDS0FHRV9CVUdSRVBPUlQpKSk7CisjZW5kaWYKIAot CXNucHJpbnRmKGNhY2J1Ziwgc2l6ZW9mKGNhY2J1ZiksICIlZCIsIChpbnQpIGNhYyk7Ci0J YXZbYWMrK10gPSBjYWNidWY7CisJLyogc2hvdWxkIGNsZWFudXAgc2hhcmVkIG1lbW9yeSBh bmQga2lsbCBhbGwgYmFja2VuZHMgKi8KIAotCWF2W2FjXSA9IE5VTEw7Ci0JQXNzZXJ0KGFj IDwgbGVuZ3Rob2YoYXYpKTsKKwkvKgorCSAqIE5vdCBzdXJlIG9mIHRoZSBzZW1hbnRpY3Mg aGVyZS4gIFdoZW4gdGhlIFBvc3RtYXN0ZXIgZGllcywgc2hvdWxkIHRoZQorCSAqIGJhY2tl bmRzIGFsbCBiZSBraWxsZWQ/IHByb2JhYmx5IG5vdC4KKwkgKgorCSAqIE1VU1QJCS0tIHZh ZGltIDA1LTEwLTE5OTkKKwkgKi8KIAotCXJldHVybiBpbnRlcm5hbF9mb3JrZXhlYyhhYywg YXYsIGNsaWVudF9zb2NrKTsKKwlwcm9jX2V4aXQoc3RhdHVzKTsKIH0KIAotI2lmbmRlZiBX SU4zMgotCiAvKgotICogaW50ZXJuYWxfZm9ya2V4ZWMgbm9uLXdpbjMyIGltcGxlbWVudGF0 aW9uCi0gKgotICogLSB3cml0ZXMgb3V0IGJhY2tlbmQgdmFyaWFibGVzIHRvIHRoZSBwYXJh bWV0ZXIgZmlsZQotICogLSBmb3JrKCk6cywgYW5kIHRoZW4gZXhlYygpOnMgdGhlIGNoaWxk IHByb2Nlc3MKKyAqIEhhbmRsZSBwbXNpZ25hbCBjb25kaXRpb25zIHJlcHJlc2VudGluZyBy ZXF1ZXN0cyBmcm9tIGJhY2tlbmRzLAorICogYW5kIGNoZWNrIGZvciBwcm9tb3RlIGFuZCBs b2dyb3RhdGUgcmVxdWVzdHMgZnJvbSBwZ19jdGwuCiAgKi8KLXN0YXRpYyBwaWRfdAotaW50 ZXJuYWxfZm9ya2V4ZWMoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSwgQ2xpZW50U29ja2V0ICpj bGllbnRfc29jaykKK3N0YXRpYyB2b2lkCitwcm9jZXNzX3BtX3Btc2lnbmFsKHZvaWQpCiB7 Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgdG1wQmFja2VuZEZpbGVOdW0gPSAwOwotCXBpZF90 CQlwaWQ7Ci0JY2hhcgkJdG1wZmlsZW5hbWVbTUFYUEdQQVRIXTsKLQlCYWNrZW5kUGFyYW1l dGVycyBwYXJhbTsKLQlGSUxFCSAgICpmcDsKLQotCWlmICghc2F2ZV9iYWNrZW5kX3Zhcmlh YmxlcygmcGFyYW0sIGNsaWVudF9zb2NrKSkKLQkJcmV0dXJuIC0xOwkJCQkvKiBsb2cgbWFk ZSBieSBzYXZlX2JhY2tlbmRfdmFyaWFibGVzICovCisJcGVuZGluZ19wbV9wbXNpZ25hbCA9 IGZhbHNlOwogCi0JLyogQ2FsY3VsYXRlIG5hbWUgZm9yIHRlbXAgZmlsZSAqLwotCXNucHJp bnRmKHRtcGZpbGVuYW1lLCBNQVhQR1BBVEgsICIlcy8lcy5iYWNrZW5kX3Zhci4lZC4lbHUi LAotCQkJIFBHX1RFTVBfRklMRVNfRElSLCBQR19URU1QX0ZJTEVfUFJFRklYLAotCQkJIE15 UHJvY1BpZCwgKyt0bXBCYWNrZW5kRmlsZU51bSk7CisJZXJlcG9ydChERUJVRzIsCisJCQko ZXJybXNnX2ludGVybmFsKCJwb3N0bWFzdGVyIHJlY2VpdmVkIHBtc2lnbmFsIHNpZ25hbCIp KSk7CiAKLQkvKiBPcGVuIGZpbGUgKi8KLQlmcCA9IEFsbG9jYXRlRmlsZSh0bXBmaWxlbmFt ZSwgUEdfQklOQVJZX1cpOwotCWlmICghZnApCisJLyoKKwkgKiBSRUNPVkVSWV9TVEFSVEVE IGFuZCBCRUdJTl9IT1RfU1RBTkRCWSBzaWduYWxzIGFyZSBpZ25vcmVkIGluCisJICogdW5l eHBlY3RlZCBzdGF0ZXMuIElmIHRoZSBzdGFydHVwIHByb2Nlc3MgcXVpY2tseSBzdGFydHMg dXAsIGNvbXBsZXRlcworCSAqIHJlY292ZXJ5LCBleGl0cywgd2UgbWlnaHQgcHJvY2VzcyB0 aGUgZGVhdGggb2YgdGhlIHN0YXJ0dXAgcHJvY2VzcworCSAqIGZpcnN0LiBXZSBkb24ndCB3 YW50IHRvIGdvIGJhY2sgdG8gcmVjb3ZlcnkgaW4gdGhhdCBjYXNlLgorCSAqLworCWlmIChD aGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfUkVDT1ZFUllfU1RBUlRFRCkgJiYKKwkJ cG1TdGF0ZSA9PSBQTV9TVEFSVFVQICYmIFNodXRkb3duID09IE5vU2h1dGRvd24pCiAJewor CQkvKiBXQUwgcmVkbyBoYXMgc3RhcnRlZC4gV2UncmUgb3V0IG9mIHJlaW5pdGlhbGl6YXRp b24uICovCisJCUZhdGFsRXJyb3IgPSBmYWxzZTsKKwkJQWJvcnRTdGFydFRpbWUgPSAwOwor CiAJCS8qCi0JCSAqIEFzIGluIE9wZW5UZW1wb3JhcnlGaWxlSW5UYWJsZXNwYWNlLCB0cnkg dG8gbWFrZSB0aGUgdGVtcC1maWxlCi0JCSAqIGRpcmVjdG9yeSwgaWdub3JpbmcgZXJyb3Jz LgorCQkgKiBTdGFydCB0aGUgYXJjaGl2ZXIgaWYgd2UncmUgcmVzcG9uc2libGUgZm9yIChy ZS0pYXJjaGl2aW5nIHJlY2VpdmVkCisJCSAqIGZpbGVzLgogCQkgKi8KLQkJKHZvaWQpIE1h a2VQR0RpcmVjdG9yeShQR19URU1QX0ZJTEVTX0RJUik7CisJCUFzc2VydChQZ0FyY2hQSUQg PT0gMCk7CisJCWlmIChYTG9nQXJjaGl2aW5nQWx3YXlzKCkpCisJCQlQZ0FyY2hQSUQgPSBT dGFydEFyY2hpdmVyKCk7CiAKLQkJZnAgPSBBbGxvY2F0ZUZpbGUodG1wZmlsZW5hbWUsIFBH X0JJTkFSWV9XKTsKLQkJaWYgKCFmcCkKKwkJLyoKKwkJICogSWYgd2UgYXJlbid0IHBsYW5u aW5nIHRvIGVudGVyIGhvdCBzdGFuZGJ5IG1vZGUgbGF0ZXIsIHRyZWF0CisJCSAqIFJFQ09W RVJZX1NUQVJURUQgYXMgbWVhbmluZyB3ZSdyZSBvdXQgb2Ygc3RhcnR1cCwgYW5kIHJlcG9y dCBzdGF0dXMKKwkJICogYWNjb3JkaW5nbHkuCisJCSAqLworCQlpZiAoIUVuYWJsZUhvdFN0 YW5kYnkpCiAJCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKLQkJCQkJIGVycm1zZygiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjog JW0iLAotCQkJCQkJCXRtcGZpbGVuYW1lKSkpOwotCQkJcmV0dXJuIC0xOworCQkJQWRkVG9E YXRhRGlyTG9ja0ZpbGUoTE9DS19GSUxFX0xJTkVfUE1fU1RBVFVTLCBQTV9TVEFUVVNfU1RB TkRCWSk7CisjaWZkZWYgVVNFX1NZU1RFTUQKKwkJCXNkX25vdGlmeSgwLCAiUkVBRFk9MSIp OworI2VuZGlmCiAJCX0KKworCQlwbVN0YXRlID0gUE1fUkVDT1ZFUlk7CiAJfQogCi0JaWYg KGZ3cml0ZSgmcGFyYW0sIHNpemVvZihwYXJhbSksIDEsIGZwKSAhPSAxKQorCWlmIChDaGVj a1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfQkVHSU5fSE9UX1NUQU5EQlkpICYmCisJCXBt U3RhdGUgPT0gUE1fUkVDT1ZFUlkgJiYgU2h1dGRvd24gPT0gTm9TaHV0ZG93bikKIAl7CiAJ CWVyZXBvcnQoTE9HLAotCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCSBl cnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNcIjogJW0iLCB0bXBmaWxlbmFt ZSkpKTsKLQkJRnJlZUZpbGUoZnApOwotCQlyZXR1cm4gLTE7CisJCQkJKGVycm1zZygiZGF0 YWJhc2Ugc3lzdGVtIGlzIHJlYWR5IHRvIGFjY2VwdCByZWFkLW9ubHkgY29ubmVjdGlvbnMi KSkpOworCisJCS8qIFJlcG9ydCBzdGF0dXMgKi8KKwkJQWRkVG9EYXRhRGlyTG9ja0ZpbGUo TE9DS19GSUxFX0xJTkVfUE1fU1RBVFVTLCBQTV9TVEFUVVNfUkVBRFkpOworI2lmZGVmIFVT RV9TWVNURU1ECisJCXNkX25vdGlmeSgwLCAiUkVBRFk9MSIpOworI2VuZGlmCisKKwkJcG1T dGF0ZSA9IFBNX0hPVF9TVEFOREJZOworCQljb25uc0FsbG93ZWQgPSB0cnVlOworCisJCS8q IFNvbWUgd29ya2VycyBtYXkgYmUgc2NoZWR1bGVkIHRvIHN0YXJ0IG5vdyAqLworCQlTdGFy dFdvcmtlck5lZWRlZCA9IHRydWU7CiAJfQogCi0JLyogUmVsZWFzZSBmaWxlICovCi0JaWYg KEZyZWVGaWxlKGZwKSkKKwkvKiBQcm9jZXNzIGJhY2tncm91bmQgd29ya2VyIHN0YXRlIGNo YW5nZXMuICovCisJaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9CQUNLR1JP VU5EX1dPUktFUl9DSEFOR0UpKQogCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJIGVycm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZp bGUgXCIlc1wiOiAlbSIsIHRtcGZpbGVuYW1lKSkpOwotCQlyZXR1cm4gLTE7CisJCS8qIEFj Y2VwdCBuZXcgd29ya2VyIHJlcXVlc3RzIG9ubHkgaWYgbm90IHN0b3BwaW5nLiAqLworCQlC YWNrZ3JvdW5kV29ya2VyU3RhdGVDaGFuZ2UocG1TdGF0ZSA8IFBNX1NUT1BfQkFDS0VORFMp OworCQlTdGFydFdvcmtlck5lZWRlZCA9IHRydWU7CiAJfQogCi0JLyogTWFrZSBzdXJlIGNh bGxlciBzZXQgdXAgYXJndiBwcm9wZXJseSAqLwotCUFzc2VydChhcmdjID49IDMpOwotCUFz c2VydChhcmd2W2FyZ2NdID09IE5VTEwpOwotCUFzc2VydChzdHJuY21wKGFyZ3ZbMV0sICIt LWZvcmsiLCA2KSA9PSAwKTsKLQlBc3NlcnQoYXJndlsyXSA9PSBOVUxMKTsKLQotCS8qIElu c2VydCB0ZW1wIGZpbGUgbmFtZSBhZnRlciAtLWZvcmsgYXJndW1lbnQgKi8KLQlhcmd2WzJd ID0gdG1wZmlsZW5hbWU7CisJaWYgKFN0YXJ0V29ya2VyTmVlZGVkIHx8IEhhdmVDcmFzaGVk V29ya2VyKQorCQltYXliZV9zdGFydF9iZ3dvcmtlcnMoKTsKIAotCS8qIEZpcmUgb2ZmIGV4 ZWN2IGluIGNoaWxkICovCi0JaWYgKChwaWQgPSBmb3JrX3Byb2Nlc3MoKSkgPT0gMCkKKwkv KiBUZWxsIHN5c2xvZ2dlciB0byByb3RhdGUgbG9nZmlsZSBpZiByZXF1ZXN0ZWQgKi8KKwlp ZiAoU3lzTG9nZ2VyUElEICE9IDApCiAJewotCQlpZiAoZXhlY3YocG9zdGdyZXNfZXhlY19w YXRoLCBhcmd2KSA8IDApCisJCWlmIChDaGVja0xvZ3JvdGF0ZVNpZ25hbCgpKQogCQl7Ci0J CQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiY291bGQgbm90IGV4ZWN1dGUgc2VydmVy IHByb2Nlc3MgXCIlc1wiOiAlbSIsCi0JCQkJCQkJcG9zdGdyZXNfZXhlY19wYXRoKSkpOwot CQkJLyogV2UncmUgYWxyZWFkeSBpbiB0aGUgY2hpbGQgcHJvY2VzcyBoZXJlLCBjYW4ndCBy ZXR1cm4gKi8KLQkJCWV4aXQoMSk7CisJCQlzaWduYWxfY2hpbGQoU3lzTG9nZ2VyUElELCBT SUdVU1IxKTsKKwkJCVJlbW92ZUxvZ3JvdGF0ZVNpZ25hbEZpbGVzKCk7CisJCX0KKwkJZWxz ZSBpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1JPVEFURV9MT0dGSUxFKSkK KwkJeworCQkJc2lnbmFsX2NoaWxkKFN5c0xvZ2dlclBJRCwgU0lHVVNSMSk7CiAJCX0KIAl9 CiAKLQlyZXR1cm4gcGlkOwkJCQkJLyogUGFyZW50IHJldHVybnMgcGlkLCBvciAtMSBvbiBm b3JrIGZhaWx1cmUgKi8KLX0KLSNlbHNlCQkJCQkJCS8qIFdJTjMyICovCi0KLS8qCi0gKiBp bnRlcm5hbF9mb3JrZXhlYyB3aW4zMiBpbXBsZW1lbnRhdGlvbgotICoKLSAqIC0gc3RhcnRz IGJhY2tlbmQgdXNpbmcgQ3JlYXRlUHJvY2VzcygpLCBpbiBzdXNwZW5kZWQgc3RhdGUKLSAq IC0gd3JpdGVzIG91dCBiYWNrZW5kIHZhcmlhYmxlcyB0byB0aGUgcGFyYW1ldGVyIGZpbGUK LSAqCS0gZHVyaW5nIHRoaXMsIGR1cGxpY2F0ZXMgaGFuZGxlcyBhbmQgc29ja2V0cyByZXF1 aXJlZCBmb3IKLSAqCSAgaW5oZXJpdGFuY2UgaW50byB0aGUgbmV3IHByb2Nlc3MKLSAqIC0g cmVzdW1lcyBleGVjdXRpb24gb2YgdGhlIG5ldyBwcm9jZXNzIG9uY2UgdGhlIGJhY2tlbmQg cGFyYW1ldGVyCi0gKgkgZmlsZSBpcyBjb21wbGV0ZS4KLSAqLwotc3RhdGljIHBpZF90Ci1p bnRlcm5hbF9mb3JrZXhlYyhpbnQgYXJnYywgY2hhciAqYXJndltdLCBQb3J0ICpwb3J0KQot ewotCWludAkJCXJldHJ5X2NvdW50ID0gMDsKLQlTVEFSVFVQSU5GTyBzaTsKLQlQUk9DRVNT X0lORk9STUFUSU9OIHBpOwotCWludAkJCWk7Ci0JaW50CQkJajsKLQljaGFyCQljbWRMaW5l W01BWFBHUEFUSCAqIDJdOwotCUhBTkRMRQkJcGFyYW1IYW5kbGU7Ci0JQmFja2VuZFBhcmFt ZXRlcnMgKnBhcmFtOwotCVNFQ1VSSVRZX0FUVFJJQlVURVMgc2E7Ci0JY2hhcgkJcGFyYW1I YW5kbGVTdHJbMzJdOwotCXdpbjMyX2RlYWRjaGlsZF93YWl0aW5mbyAqY2hpbGRpbmZvOwot Ci0JLyogTWFrZSBzdXJlIGNhbGxlciBzZXQgdXAgYXJndiBwcm9wZXJseSAqLwotCUFzc2Vy dChhcmdjID49IDMpOwotCUFzc2VydChhcmd2W2FyZ2NdID09IE5VTEwpOwotCUFzc2VydChz dHJuY21wKGFyZ3ZbMV0sICItLWZvcmsiLCA2KSA9PSAwKTsKLQlBc3NlcnQoYXJndlsyXSA9 PSBOVUxMKTsKLQotCS8qIFJlc3VtZSBoZXJlIGlmIHdlIG5lZWQgdG8gcmV0cnkgKi8KLXJl dHJ5OgotCi0JLyogU2V0IHVwIHNoYXJlZCBtZW1vcnkgZm9yIHBhcmFtZXRlciBwYXNzaW5n ICovCi0JWmVyb01lbW9yeSgmc2EsIHNpemVvZihzYSkpOwotCXNhLm5MZW5ndGggPSBzaXpl b2Yoc2EpOwotCXNhLmJJbmhlcml0SGFuZGxlID0gVFJVRTsKLQlwYXJhbUhhbmRsZSA9IENy ZWF0ZUZpbGVNYXBwaW5nKElOVkFMSURfSEFORExFX1ZBTFVFLAotCQkJCQkJCQkJJnNhLAot CQkJCQkJCQkJUEFHRV9SRUFEV1JJVEUsCi0JCQkJCQkJCQkwLAotCQkJCQkJCQkJc2l6ZW9m KEJhY2tlbmRQYXJhbWV0ZXJzKSwKLQkJCQkJCQkJCU5VTEwpOwotCWlmIChwYXJhbUhhbmRs ZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKwlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFs KFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpICYmCisJCVNodXRkb3duIDw9IFNt YXJ0U2h1dGRvd24gJiYgcG1TdGF0ZSA8IFBNX1NUT1BfQkFDS0VORFMpCiAJewotCQllcmVw b3J0KExPRywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgY3JlYXRlIGJhY2tlbmQgcGFyYW1l dGVyIGZpbGUgbWFwcGluZzogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJR2V0TGFzdEVycm9y KCkpKSk7Ci0JCXJldHVybiAtMTsKKwkJLyoKKwkJICogU3RhcnQgb25lIGl0ZXJhdGlvbiBv ZiB0aGUgYXV0b3ZhY3V1bSBkYWVtb24sIGV2ZW4gaWYgYXV0b3ZhY3V1bWluZworCQkgKiBp cyBub21pbmFsbHkgbm90IGVuYWJsZWQuICBUaGlzIGlzIHNvIHdlIGNhbiBoYXZlIGFuIGFj dGl2ZSBkZWZlbnNlCisJCSAqIGFnYWluc3QgdHJhbnNhY3Rpb24gSUQgd3JhcGFyb3VuZC4g IFdlIHNldCBhIGZsYWcgZm9yIHRoZSBtYWluIGxvb3AKKwkJICogdG8gZG8gaXQgcmF0aGVy IHRoYW4gdHJ5aW5nIHRvIGRvIGl0IGhlcmUgLS0tIHRoaXMgaXMgYmVjYXVzZSB0aGUKKwkJ ICogYXV0b3ZhYyBwcm9jZXNzIGl0c2VsZiBtYXkgc2VuZCB0aGUgc2lnbmFsLCBhbmQgd2Ug d2FudCB0byBoYW5kbGUKKwkJICogdGhhdCBieSBsYXVuY2hpbmcgYW5vdGhlciBpdGVyYXRp b24gYXMgc29vbiBhcyB0aGUgY3VycmVudCBvbmUKKwkJICogY29tcGxldGVzLgorCQkgKi8K KwkJc3RhcnRfYXV0b3ZhY19sYXVuY2hlciA9IHRydWU7CiAJfQogCi0JcGFyYW0gPSBNYXBW aWV3T2ZGaWxlKHBhcmFtSGFuZGxlLCBGSUxFX01BUF9XUklURSwgMCwgMCwgc2l6ZW9mKEJh Y2tlbmRQYXJhbWV0ZXJzKSk7Ci0JaWYgKCFwYXJhbSkKKwlpZiAoQ2hlY2tQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfV09SS0VSKSAmJgorCQlTaHV0ZG93biA8 PSBTbWFydFNodXRkb3duICYmIHBtU3RhdGUgPCBQTV9TVE9QX0JBQ0tFTkRTKQogCXsKLQkJ ZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiY291bGQgbm90IG1hcCBiYWNrZW5kIHBhcmFt ZXRlciBtZW1vcnk6IGVycm9yIGNvZGUgJWx1IiwKLQkJCQkJCUdldExhc3RFcnJvcigpKSkp OwotCQlDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSk7Ci0JCXJldHVybiAtMTsKKwkJLyogVGhl IGF1dG92YWN1dW0gbGF1bmNoZXIgd2FudHMgdXMgdG8gc3RhcnQgYSB3b3JrZXIgcHJvY2Vz cy4gKi8KKwkJU3RhcnRBdXRvdmFjdXVtV29ya2VyKCk7CiAJfQogCi0JLyogSW5zZXJ0IHRl bXAgZmlsZSBuYW1lIGFmdGVyIC0tZm9yayBhcmd1bWVudCAqLwotI2lmZGVmIF9XSU42NAot CXNwcmludGYocGFyYW1IYW5kbGVTdHIsICIlbGx1IiwgKExPTkdfUFRSKSBwYXJhbUhhbmRs ZSk7Ci0jZWxzZQotCXNwcmludGYocGFyYW1IYW5kbGVTdHIsICIlbHUiLCAoRFdPUkQpIHBh cmFtSGFuZGxlKTsKLSNlbmRpZgotCWFyZ3ZbMl0gPSBwYXJhbUhhbmRsZVN0cjsKLQotCS8q IEZvcm1hdCB0aGUgY21kIGxpbmUgKi8KLQljbWRMaW5lW3NpemVvZihjbWRMaW5lKSAtIDFd ID0gJ1wwJzsKLQljbWRMaW5lW3NpemVvZihjbWRMaW5lKSAtIDJdID0gJ1wwJzsKLQlzbnBy aW50ZihjbWRMaW5lLCBzaXplb2YoY21kTGluZSkgLSAxLCAiXCIlc1wiIiwgcG9zdGdyZXNf ZXhlY19wYXRoKTsKLQlpID0gMDsKLQl3aGlsZSAoYXJndlsrK2ldICE9IE5VTEwpCi0Jewot CQlqID0gc3RybGVuKGNtZExpbmUpOwotCQlzbnByaW50ZihjbWRMaW5lICsgaiwgc2l6ZW9m KGNtZExpbmUpIC0gMSAtIGosICIgXCIlc1wiIiwgYXJndltpXSk7Ci0JfQotCWlmIChjbWRM aW5lW3NpemVvZihjbWRMaW5lKSAtIDJdICE9ICdcMCcpCisJaWYgKENoZWNrUG9zdG1hc3Rl clNpZ25hbChQTVNJR05BTF9TVEFSVF9XQUxSRUNFSVZFUikpCiAJewotCQllcmVwb3J0KExP RywKLQkJCQkoZXJybXNnKCJzdWJwcm9jZXNzIGNvbW1hbmQgbGluZSB0b28gbG9uZyIpKSk7 Ci0JCVVubWFwVmlld09mRmlsZShwYXJhbSk7Ci0JCUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxl KTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCW1lbXNldCgmcGksIDAsIHNpemVvZihwaSkpOwot CW1lbXNldCgmc2ksIDAsIHNpemVvZihzaSkpOwotCXNpLmNiID0gc2l6ZW9mKHNpKTsKLQot CS8qCi0JICogQ3JlYXRlIHRoZSBzdWJwcm9jZXNzIGluIGEgc3VzcGVuZGVkIHN0YXRlLiBU aGlzIHdpbGwgYmUgcmVzdW1lZCBsYXRlciwKLQkgKiBvbmNlIHdlIGhhdmUgd3JpdHRlbiBv dXQgdGhlIHBhcmFtZXRlciBmaWxlLgotCSAqLwotCWlmICghQ3JlYXRlUHJvY2VzcyhOVUxM LCBjbWRMaW5lLCBOVUxMLCBOVUxMLCBUUlVFLCBDUkVBVEVfU1VTUEVOREVELAotCQkJCQkg ICBOVUxMLCBOVUxMLCAmc2ksICZwaSkpCi0JewotCQllcmVwb3J0KExPRywKLQkJCQkoZXJy bXNnKCJDcmVhdGVQcm9jZXNzKCkgY2FsbCBmYWlsZWQ6ICVtIChlcnJvciBjb2RlICVsdSki LAotCQkJCQkJR2V0TGFzdEVycm9yKCkpKSk7Ci0JCVVubWFwVmlld09mRmlsZShwYXJhbSk7 Ci0JCUNsb3NlSGFuZGxlKHBhcmFtSGFuZGxlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlm ICghc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyhwYXJhbSwgcG9ydCwgcGkuaFByb2Nlc3MsIHBp LmR3UHJvY2Vzc0lkKSkKLQl7Ci0JCS8qCi0JCSAqIGxvZyBtYWRlIGJ5IHNhdmVfYmFja2Vu ZF92YXJpYWJsZXMsIGJ1dCB3ZSBoYXZlIHRvIGNsZWFuIHVwIHRoZQotCQkgKiBtZXNzIHdp dGggdGhlIGhhbGYtc3RhcnRlZCBwcm9jZXNzCi0JCSAqLwotCQlpZiAoIVRlcm1pbmF0ZVBy b2Nlc3MocGkuaFByb2Nlc3MsIDI1NSkpCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1z Z19pbnRlcm5hbCgiY291bGQgbm90IHRlcm1pbmF0ZSB1bnN0YXJ0ZWQgcHJvY2VzczogZXJy b3IgY29kZSAlbHUiLAotCQkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOwotCQlDbG9zZUhh bmRsZShwaS5oUHJvY2Vzcyk7Ci0JCUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotCQlVbm1h cFZpZXdPZkZpbGUocGFyYW0pOwotCQlDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSk7Ci0JCXJl dHVybiAtMTsJCQkJLyogbG9nIG1hZGUgYnkgc2F2ZV9iYWNrZW5kX3ZhcmlhYmxlcyAqLwot CX0KLQotCS8qIERyb3AgdGhlIHBhcmFtZXRlciBzaGFyZWQgbWVtb3J5IHRoYXQgaXMgbm93 IGluaGVyaXRlZCB0byB0aGUgYmFja2VuZCAqLwotCWlmICghVW5tYXBWaWV3T2ZGaWxlKHBh cmFtKSkKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiY291bGQgbm90IHVubWFwIHZp ZXcgb2YgYmFja2VuZCBwYXJhbWV0ZXIgZmlsZTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJ R2V0TGFzdEVycm9yKCkpKSk7Ci0JaWYgKCFDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSkpCi0J CWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImNvdWxkIG5vdCBjbG9zZSBoYW5kbGUgdG8g YmFja2VuZCBwYXJhbWV0ZXIgZmlsZTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJR2V0TGFz dEVycm9yKCkpKSk7Ci0KLQkvKgotCSAqIFJlc2VydmUgdGhlIG1lbW9yeSByZWdpb24gdXNl ZCBieSBvdXIgbWFpbiBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYmVmb3JlCi0JICogd2UgcmVz dW1lIHRoZSBjaGlsZCBwcm9jZXNzLiAgTm9ybWFsbHkgdGhpcyBzaG91bGQgc3VjY2VlZCwg YnV0IGlmIEFTTFIKLQkgKiBpcyBhY3RpdmUgdGhlbiBpdCBtaWdodCBzb21ldGltZXMgZmFp bCBkdWUgdG8gdGhlIHN0YWNrIG9yIGhlYXAgaGF2aW5nCi0JICogZ290dGVuIG1hcHBlZCBp bnRvIHRoYXQgcmFuZ2UuICBJbiB0aGF0IGNhc2UsIGp1c3QgdGVybWluYXRlIHRoZQotCSAq IHByb2Nlc3MgYW5kIHJldHJ5LgotCSAqLwotCWlmICghcGd3aW4zMl9SZXNlcnZlU2hhcmVk TWVtb3J5UmVnaW9uKHBpLmhQcm9jZXNzKSkKLQl7Ci0JCS8qIHBnd2luMzJfUmVzZXJ2ZVNo YXJlZE1lbW9yeVJlZ2lvbiBhbHJlYWR5IG1hZGUgYSBsb2cgZW50cnkgKi8KLQkJaWYgKCFU ZXJtaW5hdGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAyNTUpKQotCQkJZXJlcG9ydChMT0csCi0J CQkJCShlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCB0ZXJtaW5hdGUgcHJvY2VzcyB0aGF0 IGZhaWxlZCB0byByZXNlcnZlIG1lbW9yeTogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkJ IEdldExhc3RFcnJvcigpKSkpOwotCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0JCUNs b3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotCQlpZiAoKytyZXRyeV9jb3VudCA8IDEwMCkKLQkJ CWdvdG8gcmV0cnk7Ci0JCWVyZXBvcnQoTE9HLAotCQkJCShlcnJtc2coImdpdmluZyB1cCBh ZnRlciB0b28gbWFueSB0cmllcyB0byByZXNlcnZlIHNoYXJlZCBtZW1vcnkiKSwKLQkJCQkg ZXJyaGludCgiVGhpcyBtaWdodCBiZSBjYXVzZWQgYnkgQVNMUiBvciBhbnRpdmlydXMgc29m dHdhcmUuIikpKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogTm93IHRoYXQgdGhl IGJhY2tlbmQgdmFyaWFibGVzIGFyZSB3cml0dGVuIG91dCwgd2Ugc3RhcnQgdGhlIGNoaWxk Ci0JICogdGhyZWFkIHNvIGl0IGNhbiBzdGFydCBpbml0aWFsaXppbmcgd2hpbGUgd2Ugc2V0 IHVwIHRoZSByZXN0IG9mIHRoZQotCSAqIHBhcmVudCBzdGF0ZS4KLQkgKi8KLQlpZiAoUmVz dW1lVGhyZWFkKHBpLmhUaHJlYWQpID09IC0xKQotCXsKLQkJaWYgKCFUZXJtaW5hdGVQcm9j ZXNzKHBpLmhQcm9jZXNzLCAyNTUpKQotCQl7Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVy cm1zZ19pbnRlcm5hbCgiY291bGQgbm90IHRlcm1pbmF0ZSB1bnN0YXJ0YWJsZSBwcm9jZXNz OiBlcnJvciBjb2RlICVsdSIsCi0JCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0JCQlD bG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0JCQlDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsK LQkJCXJldHVybiAtMTsKLQkJfQotCQlDbG9zZUhhbmRsZShwaS5oUHJvY2Vzcyk7Ci0JCUNs b3NlSGFuZGxlKHBpLmhUaHJlYWQpOwotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNnX2lu dGVybmFsKCJjb3VsZCBub3QgcmVzdW1lIHRocmVhZCBvZiB1bnN0YXJ0ZWQgcHJvY2Vzczog ZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0JCXJldHVy biAtMTsKLQl9Ci0KLQkvKgotCSAqIFF1ZXVlIGEgd2FpdGVyIHRvIHNpZ25hbCB3aGVuIHRo aXMgY2hpbGQgZGllcy4gVGhlIHdhaXQgd2lsbCBiZSBoYW5kbGVkCi0JICogYXV0b21hdGlj YWxseSBieSBhbiBvcGVyYXRpbmcgc3lzdGVtIHRocmVhZCBwb29sLiAgVGhlIG1lbW9yeSB3 aWxsIGJlCi0JICogZnJlZWQgYnkgYSBsYXRlciBjYWxsIHRvIHdhaXRwaWQoKS4KLQkgKi8K LQljaGlsZGluZm8gPSBwYWxsb2Moc2l6ZW9mKHdpbjMyX2RlYWRjaGlsZF93YWl0aW5mbykp OwotCWNoaWxkaW5mby0+cHJvY0hhbmRsZSA9IHBpLmhQcm9jZXNzOwotCWNoaWxkaW5mby0+ cHJvY0lkID0gcGkuZHdQcm9jZXNzSWQ7Ci0KLQlpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmds ZU9iamVjdCgmY2hpbGRpbmZvLT53YWl0SGFuZGxlLAotCQkJCQkJCQkJIHBpLmhQcm9jZXNz LAotCQkJCQkJCQkJIHBnd2luMzJfZGVhZGNoaWxkX2NhbGxiYWNrLAotCQkJCQkJCQkJIGNo aWxkaW5mbywKLQkJCQkJCQkJCSBJTkZJTklURSwKLQkJCQkJCQkJCSBXVF9FWEVDVVRFT05M WU9OQ0UgfCBXVF9FWEVDVVRFSU5XQUlUVEhSRUFEKSkKLQkJZXJlcG9ydChGQVRBTCwKLQkJ CQkoZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3QgcmVnaXN0ZXIgcHJvY2VzcyBmb3Igd2Fp dDogZXJyb3IgY29kZSAlbHUiLAotCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0KLQkv KiBEb24ndCBjbG9zZSBwaS5oUHJvY2VzcyBoZXJlIC0gd2FpdHBpZCgpIG5lZWRzIGFjY2Vz cyB0byBpdCAqLwotCi0JQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7Ci0KLQlyZXR1cm4gcGku ZHdQcm9jZXNzSWQ7Ci19Ci0jZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KLQotCi0vKgotICog U3ViUG9zdG1hc3Rlck1haW4gLS0gR2V0IHRoZSBmb3JrL2V4ZWMnZCBwcm9jZXNzIGludG8g YSBzdGF0ZSBlcXVpdmFsZW50Ci0gKgkJCXRvIHdoYXQgaXQgd291bGQgYmUgaWYgd2UnZCBz aW1wbHkgZm9ya2VkIG9uIFVuaXgsIGFuZCB0aGVuCi0gKgkJCWRpc3BhdGNoIHRvIHRoZSBh cHByb3ByaWF0ZSBwbGFjZS4KLSAqCi0gKiBUaGUgZmlyc3QgdHdvIGNvbW1hbmQgbGluZSBh cmd1bWVudHMgYXJlIGV4cGVjdGVkIHRvIGJlICItLWZvcmtGT08iCi0gKiAod2hlcmUgRk9P IGluZGljYXRlcyB3aGljaCBwb3N0bWFzdGVyIGNoaWxkIHdlIGFyZSB0byBiZWNvbWUpLCBh bmQKLSAqIHRoZSBuYW1lIG9mIGEgdmFyaWFibGVzIGZpbGUgdGhhdCB3ZSBjYW4gcmVhZCB0 byBsb2FkIGRhdGEgdGhhdCB3b3VsZAotICogaGF2ZSBiZWVuIGluaGVyaXRlZCBieSBmb3Jr KCkgb24gVW5peC4gIFJlbWFpbmluZyBhcmd1bWVudHMgZ28gdG8gdGhlCi0gKiBzdWJwcm9j ZXNzIEZvb01haW4oKSByb3V0aW5lLgotICovCi12b2lkCi1TdWJQb3N0bWFzdGVyTWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKQotewotCUNsaWVudFNvY2tldCBjbGllbnRfc29jazsK LQotCS8qIEluIEVYRUNfQkFDS0VORCBjYXNlIHdlIHdpbGwgbm90IGhhdmUgaW5oZXJpdGVk IHRoZXNlIHNldHRpbmdzICovCi0JSXNQb3N0bWFzdGVyRW52aXJvbm1lbnQgPSB0cnVlOwot CXdoZXJlVG9TZW5kT3V0cHV0ID0gRGVzdE5vbmU7Ci0KLQkvKiBTZXR1cCBlc3NlbnRpYWwg c3Vic3lzdGVtcyAodG8gZW5zdXJlIGVsb2coKSBiZWhhdmVzIHNhbmVseSkgKi8KLQlJbml0 aWFsaXplR1VDT3B0aW9ucygpOwotCi0JLyogQ2hlY2sgd2UgZ290IGFwcHJvcHJpYXRlIGFy Z3MgKi8KLQlpZiAoYXJnYyA8IDMpCi0JCWVsb2coRkFUQUwsICJpbnZhbGlkIHN1YnBvc3Rt YXN0ZXIgaW52b2NhdGlvbiIpOwotCi0JLyogUmVhZCBpbiB0aGUgdmFyaWFibGVzIGZpbGUg Ki8KLQltZW1zZXQoJmNsaWVudF9zb2NrLCAwLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7Ci0J cmVhZF9iYWNrZW5kX3ZhcmlhYmxlcyhhcmd2WzJdLCAmY2xpZW50X3NvY2spOwotCi0JLyog Q2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzIChhcyBzb29uIGFzIHdlIGtub3cgdGhl bSkgKi8KLQlDbG9zZVBvc3RtYXN0ZXJQb3J0cyhzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2xv ZyIpID09IDApOwotCi0JLyogU2V0dXAgYXMgcG9zdG1hc3RlciBjaGlsZCAqLwotCUluaXRQ b3N0bWFzdGVyQ2hpbGQoKTsKLQotCS8qCi0JICogSWYgYXBwcm9wcmlhdGUsIHBoeXNpY2Fs bHkgcmUtYXR0YWNoIHRvIHNoYXJlZCBtZW1vcnkgc2VnbWVudC4gV2Ugd2FudAotCSAqIHRv IGRvIHRoaXMgYmVmb3JlIGdvaW5nIGFueSBmdXJ0aGVyIHRvIGVuc3VyZSB0aGF0IHdlIGNh biBhdHRhY2ggYXQgdGhlCi0JICogc2FtZSBhZGRyZXNzIHRoZSBwb3N0bWFzdGVyIHVzZWQu ICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgd2UgY2hvb3NlIG5vdAotCSAqIHRvIHJlLWF0dGFj aCwgd2UgbWF5IGhhdmUgb3RoZXIgY2xlYW51cCB0byBkby4KLQkgKgotCSAqIElmIHRlc3Rp bmcgRVhFQ19CQUNLRU5EIG9uIExpbnV4LCB5b3Ugc2hvdWxkIHJ1biB0aGlzIGFzIHJvb3Qg YmVmb3JlCi0JICogc3RhcnRpbmcgdGhlIHBvc3RtYXN0ZXI6Ci0JICoKLQkgKiBzeXNjdGwg LXcga2VybmVsLnJhbmRvbWl6ZV92YV9zcGFjZT0wCi0JICoKLQkgKiBUaGlzIHByZXZlbnRz IHVzaW5nIHJhbmRvbWl6ZWQgc3RhY2sgYW5kIGNvZGUgYWRkcmVzc2VzIHRoYXQgY2F1c2Ug dGhlCi0JICogY2hpbGQgcHJvY2VzcydzIG1lbW9yeSBtYXAgdG8gYmUgZGlmZmVyZW50IGZy b20gdGhlIHBhcmVudCdzLCBtYWtpbmcgaXQKLQkgKiBzb21ldGltZXMgaW1wb3NzaWJsZSB0 byBhdHRhY2ggdG8gc2hhcmVkIG1lbW9yeSBhdCB0aGUgZGVzaXJlZCBhZGRyZXNzLgotCSAq IFJldHVybiB0aGUgc2V0dGluZyB0byBpdHMgb2xkIHZhbHVlICh1c3VhbGx5ICcxJyBvciAn MicpIHdoZW4gZmluaXNoZWQuCi0JICovCi0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3Jr YmFja2VuZCIpID09IDAgfHwKLQkJc3RyY21wKGFyZ3ZbMV0sICItLWZvcmthdmxhdW5jaGVy IikgPT0gMCB8fAotCQlzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F2d29ya2VyIikgPT0gMCB8 fAotCQlzdHJjbXAoYXJndlsxXSwgIi0tZm9ya2F1eCIpID09IDAgfHwKLQkJc3RybmNtcChh cmd2WzFdLCAiLS1mb3JrYmd3b3JrZXIiLCAxNCkgPT0gMCkKLQkJUEdTaGFyZWRNZW1vcnlS ZUF0dGFjaCgpOwotCWVsc2UKLQkJUEdTaGFyZWRNZW1vcnlOb1JlQXR0YWNoKCk7Ci0KLQkv KiBhdXRvdmFjdXVtIG5lZWRzIHRoaXMgc2V0IGJlZm9yZSBjYWxsaW5nIEluaXRQcm9jZXNz ICovCi0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZsYXVuY2hlciIpID09IDApCi0J CUF1dG92YWN1dW1MYXVuY2hlcklBbSgpOwotCWlmIChzdHJjbXAoYXJndlsxXSwgIi0tZm9y a2F2d29ya2VyIikgPT0gMCkKLQkJQXV0b3ZhY3V1bVdvcmtlcklBbSgpOwotCi0JLyogUmVh ZCBpbiByZW1haW5pbmcgR1VDIHZhcmlhYmxlcyAqLwotCXJlYWRfbm9uZGVmYXVsdF92YXJp YWJsZXMoKTsKLQotCS8qCi0JICogQ2hlY2sgdGhhdCB0aGUgZGF0YSBkaXJlY3RvcnkgbG9v a3MgdmFsaWQsIHdoaWNoIHdpbGwgYWxzbyBjaGVjayB0aGUKLQkgKiBwcml2aWxlZ2VzIG9u IHRoZSBkYXRhIGRpcmVjdG9yeSBhbmQgdXBkYXRlIG91ciB1bWFzayBhbmQgZmlsZS9ncm91 cAotCSAqIHZhcmlhYmxlcyBmb3IgY3JlYXRpbmcgZmlsZXMgbGF0ZXIuICBOb3RlOiB0aGlz IHNob3VsZCByZWFsbHkgYmUgZG9uZQotCSAqIGJlZm9yZSB3ZSBjcmVhdGUgYW55IGZpbGVz IG9yIGRpcmVjdG9yaWVzLgotCSAqLwotCWNoZWNrRGF0YURpcigpOwotCi0JLyoKLQkgKiAo cmUtKXJlYWQgY29udHJvbCBmaWxlLCBhcyBpdCBjb250YWlucyBjb25maWcuIFRoZSBwb3N0 bWFzdGVyIHdpbGwKLQkgKiBhbHJlYWR5IGhhdmUgcmVhZCB0aGlzLCBidXQgdGhpcyBwcm9j ZXNzIGRvZXNuJ3Qga25vdyBhYm91dCB0aGF0LgotCSAqLwotCUxvY2FsUHJvY2Vzc0NvbnRy b2xGaWxlKGZhbHNlKTsKLQotCS8qCi0JICogUmVsb2FkIGFueSBsaWJyYXJpZXMgdGhhdCB3 ZXJlIHByZWxvYWRlZCBieSB0aGUgcG9zdG1hc3Rlci4gIFNpbmNlIHdlCi0JICogZXhlYydk IHRoaXMgcHJvY2VzcywgdGhvc2UgbGlicmFyaWVzIGRpZG4ndCBjb21lIGFsb25nIHdpdGgg dXM7IGJ1dCB3ZQotCSAqIHNob3VsZCBsb2FkIHRoZW0gaW50byBhbGwgY2hpbGQgcHJvY2Vz c2VzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUKLQkgKiBub24tRVhFQ19CQUNLRU5EIGJl aGF2aW9yLgotCSAqLwotCXByb2Nlc3Nfc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzKCk7Ci0K LQkvKiBSdW4gYmFja2VuZCBvciBhcHByb3ByaWF0ZSBjaGlsZCAqLwotCWlmIChzdHJjbXAo YXJndlsxXSwgIi0tZm9ya2JhY2tlbmQiKSA9PSAwKQotCXsKLQkJQ0FDX3N0YXRlCWNhYzsK LQotCQlBc3NlcnQoYXJnYyA9PSA0KTsKLQkJY2FjID0gKENBQ19zdGF0ZSkgYXRvaShhcmd2 WzNdKTsKLQotCQkvKgotCQkgKiBOZWVkIHRvIHJlaW5pdGlhbGl6ZSB0aGUgU1NMIGxpYnJh cnkgaW4gdGhlIGJhY2tlbmQsIHNpbmNlIHRoZQotCQkgKiBjb250ZXh0IHN0cnVjdHVyZXMg Y29udGFpbiBmdW5jdGlvbiBwb2ludGVycyBhbmQgY2Fubm90IGJlIHBhc3NlZAotCQkgKiB0 aHJvdWdoIHRoZSBwYXJhbWV0ZXIgZmlsZS4KLQkJICoKLQkJICogSWYgZm9yIHNvbWUgcmVh c29uIHJlbG9hZCBmYWlscyAobWF5YmUgdGhlIHVzZXIgaW5zdGFsbGVkIGJyb2tlbgotCQkg KiBrZXkgZmlsZXMpLCBzb2xkaWVyIG9uIHdpdGhvdXQgU1NMOyB0aGF0J3MgYmV0dGVyIHRo YW4gYWxsCi0JCSAqIGNvbm5lY3Rpb25zIGJlY29taW5nIGltcG9zc2libGUuCi0JCSAqCi0J CSAqIFhYWCBzaG91bGQgd2UgZG8gdGhpcyBpbiBhbGwgY2hpbGQgcHJvY2Vzc2VzPyAgRm9y IHRoZSBtb21lbnQgaXQncwotCQkgKiBlbm91Z2ggdG8gZG8gaXQgaW4gYmFja2VuZCBjaGls ZHJlbi4KLQkJICovCi0jaWZkZWYgVVNFX1NTTAotCQlpZiAoRW5hYmxlU1NMKQotCQl7Ci0J CQlpZiAoc2VjdXJlX2luaXRpYWxpemUoZmFsc2UpID09IDApCi0JCQkJTG9hZGVkU1NMID0g dHJ1ZTsKLQkJCWVsc2UKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coIlNTTCBj b25maWd1cmF0aW9uIGNvdWxkIG5vdCBiZSBsb2FkZWQgaW4gY2hpbGQgcHJvY2VzcyIpKSk7 Ci0JCX0KLSNlbmRpZgotCi0JCS8qCi0JCSAqIFBlcmZvcm0gYWRkaXRpb25hbCBpbml0aWFs aXphdGlvbiBhbmQgY29sbGVjdCBzdGFydHVwIHBhY2tldC4KLQkJICoKLQkJICogV2Ugd2Fu dCB0byBkbyB0aGlzIGJlZm9yZSBJbml0UHJvY2VzcygpIGZvciBhIGNvdXBsZSBvZiByZWFz b25zOiAxLgotCQkgKiBzbyB0aGF0IHdlIGFyZW4ndCBlYXRpbmcgdXAgYSBQR1BST0Mgc2xv dCB3aGlsZSB3YWl0aW5nIG9uIHRoZQotCQkgKiBjbGllbnQuIDIuIHNvIHRoYXQgaWYgSW5p dFByb2Nlc3MoKSBmYWlscyBkdWUgdG8gYmVpbmcgb3V0IG9mCi0JCSAqIFBHUFJPQyBzbG90 cywgd2UgaGF2ZSBhbHJlYWR5IGluaXRpYWxpemVkIGxpYnBxIGFuZCBhcmUgYWJsZSB0bwot CQkgKiByZXBvcnQgdGhlIGVycm9yIHRvIHRoZSBjbGllbnQuCi0JCSAqLwotCQlCYWNrZW5k SW5pdGlhbGl6ZSgmY2xpZW50X3NvY2ssIGNhYyk7Ci0KLQkJLyogUmVzdG9yZSBiYXNpYyBz aGFyZWQgbWVtb3J5IHBvaW50ZXJzICovCi0JCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1T ZWdBZGRyKTsKLQotCQkvKiBBbmQgcnVuIHRoZSBiYWNrZW5kICovCi0JCUJhY2tlbmRSdW4o KTsJCQkvKiBkb2VzIG5vdCByZXR1cm4gKi8KLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAi LS1mb3JrYXV4IikgPT0gMCkKLQl7Ci0JCUF1eFByb2NUeXBlIGF1eHR5cGU7Ci0KLQkJQXNz ZXJ0KGFyZ2MgPT0gNCk7Ci0KLQkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBv aW50ZXJzICovCi0JCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQlh dXh0eXBlID0gYXRvaShhcmd2WzNdKTsKLQkJQXV4aWxpYXJ5UHJvY2Vzc01haW4oYXV4dHlw ZSk7CS8qIGRvZXMgbm90IHJldHVybiAqLwotCX0KLQlpZiAoc3RyY21wKGFyZ3ZbMV0sICIt LWZvcmthdmxhdW5jaGVyIikgPT0gMCkKLQl7Ci0JCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVk IG1lbW9yeSBwb2ludGVycyAqLwotCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRk cik7Ci0KLQkJQXV0b1ZhY0xhdW5jaGVyTWFpbihhcmdjIC0gMiwgYXJndiArIDIpOwkvKiBk b2VzIG5vdCByZXR1cm4gKi8KLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrYXZ3 b3JrZXIiKSA9PSAwKQotCXsKLQkJLyogUmVzdG9yZSBiYXNpYyBzaGFyZWQgbWVtb3J5IHBv aW50ZXJzICovCi0JCUluaXRTaG1lbUFjY2VzcyhVc2VkU2htZW1TZWdBZGRyKTsKLQotCQlB dXRvVmFjV29ya2VyTWFpbihhcmdjIC0gMiwgYXJndiArIDIpOwkvKiBkb2VzIG5vdCByZXR1 cm4gKi8KLQl9Ci0JaWYgKHN0cm5jbXAoYXJndlsxXSwgIi0tZm9ya2Jnd29ya2VyIiwgMTQp ID09IDApCi0JewotCQkvKiBkbyB0aGlzIGFzIGVhcmx5IGFzIHBvc3NpYmxlOyBpbiBwYXJ0 aWN1bGFyLCBiZWZvcmUgSW5pdFByb2Nlc3MoKSAqLwotCQlJc0JhY2tncm91bmRXb3JrZXIg PSB0cnVlOwotCi0JCS8qIFJlc3RvcmUgYmFzaWMgc2hhcmVkIG1lbW9yeSBwb2ludGVycyAq LwotCQlJbml0U2htZW1BY2Nlc3MoVXNlZFNobWVtU2VnQWRkcik7Ci0KLQkJQmFja2dyb3Vu ZFdvcmtlck1haW4oKTsKLQl9Ci0JaWYgKHN0cmNtcChhcmd2WzFdLCAiLS1mb3JrbG9nIikg PT0gMCkKLQl7Ci0JCS8qIERvIG5vdCB3YW50IHRvIGF0dGFjaCB0byBzaGFyZWQgbWVtb3J5 ICovCi0KLQkJU3lzTG9nZ2VyTWFpbihhcmdjLCBhcmd2KTsJLyogZG9lcyBub3QgcmV0dXJu ICovCi0JfQotCi0JYWJvcnQoKTsJCQkJCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwotfQot I2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwotCi0KLS8qCi0gKiBFeGl0UG9zdG1h c3RlciAtLSBjbGVhbnVwCi0gKgotICogRG8gTk9UIGNhbGwgZXhpdCgpIGRpcmVjdGx5IC0t LSBhbHdheXMgZ28gdGhyb3VnaCBoZXJlIQotICovCi1zdGF0aWMgdm9pZAotRXhpdFBvc3Rt YXN0ZXIoaW50IHN0YXR1cykKLXsKLSNpZmRlZiBIQVZFX1BUSFJFQURfSVNfVEhSRUFERURf TlAKLQotCS8qCi0JICogVGhlcmUgaXMgbm8ga25vd24gY2F1c2UgZm9yIGEgcG9zdG1hc3Rl ciB0byBiZWNvbWUgbXVsdGl0aHJlYWRlZCBhZnRlcgotCSAqIHN0YXJ0dXAuICBSZWNoZWNr IHRvIGFjY291bnQgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiB1bmtub3duIGNhdXNlcy4KLQkg KiBUaGlzIG1lc3NhZ2UgdXNlcyBMT0cgbGV2ZWwsIGJlY2F1c2UgYW4gdW5jbGVhbiBzaHV0 ZG93biBhdCB0aGlzIHBvaW50Ci0JICogd291bGQgdXN1YWxseSBub3QgbG9vayBtdWNoIGRp ZmZlcmVudCBmcm9tIGEgY2xlYW4gc2h1dGRvd24uCi0JICovCi0JaWYgKHB0aHJlYWRfaXNf dGhyZWFkZWRfbnAoKSAhPSAwKQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVEVSTkFMX0VSUk9SKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJwb3N0bWFzdGVy IGJlY2FtZSBtdWx0aXRocmVhZGVkIiksCi0JCQkJIGVycmRldGFpbCgiUGxlYXNlIHJlcG9y dCB0aGlzIHRvIDwlcz4uIiwgUEFDS0FHRV9CVUdSRVBPUlQpKSk7Ci0jZW5kaWYKLQotCS8q IHNob3VsZCBjbGVhbnVwIHNoYXJlZCBtZW1vcnkgYW5kIGtpbGwgYWxsIGJhY2tlbmRzICov Ci0KLQkvKgotCSAqIE5vdCBzdXJlIG9mIHRoZSBzZW1hbnRpY3MgaGVyZS4gIFdoZW4gdGhl IFBvc3RtYXN0ZXIgZGllcywgc2hvdWxkIHRoZQotCSAqIGJhY2tlbmRzIGFsbCBiZSBraWxs ZWQ/IHByb2JhYmx5IG5vdC4KLQkgKgotCSAqIE1VU1QJCS0tIHZhZGltIDA1LTEwLTE5OTkK LQkgKi8KLQotCXByb2NfZXhpdChzdGF0dXMpOwotfQotCi0vKgotICogSGFuZGxlIHBtc2ln bmFsIGNvbmRpdGlvbnMgcmVwcmVzZW50aW5nIHJlcXVlc3RzIGZyb20gYmFja2VuZHMsCi0g KiBhbmQgY2hlY2sgZm9yIHByb21vdGUgYW5kIGxvZ3JvdGF0ZSByZXF1ZXN0cyBmcm9tIHBn X2N0bC4KLSAqLwotc3RhdGljIHZvaWQKLXByb2Nlc3NfcG1fcG1zaWduYWwodm9pZCkKLXsK LQlwZW5kaW5nX3BtX3Btc2lnbmFsID0gZmFsc2U7Ci0KLQllcmVwb3J0KERFQlVHMiwKLQkJ CShlcnJtc2dfaW50ZXJuYWwoInBvc3RtYXN0ZXIgcmVjZWl2ZWQgcG1zaWduYWwgc2lnbmFs IikpKTsKLQotCS8qCi0JICogUkVDT1ZFUllfU1RBUlRFRCBhbmQgQkVHSU5fSE9UX1NUQU5E Qlkgc2lnbmFscyBhcmUgaWdub3JlZCBpbgotCSAqIHVuZXhwZWN0ZWQgc3RhdGVzLiBJZiB0 aGUgc3RhcnR1cCBwcm9jZXNzIHF1aWNrbHkgc3RhcnRzIHVwLCBjb21wbGV0ZXMKLQkgKiBy ZWNvdmVyeSwgZXhpdHMsIHdlIG1pZ2h0IHByb2Nlc3MgdGhlIGRlYXRoIG9mIHRoZSBzdGFy dHVwIHByb2Nlc3MKLQkgKiBmaXJzdC4gV2UgZG9uJ3Qgd2FudCB0byBnbyBiYWNrIHRvIHJl Y292ZXJ5IGluIHRoYXQgY2FzZS4KLQkgKi8KLQlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFs KFBNU0lHTkFMX1JFQ09WRVJZX1NUQVJURUQpICYmCi0JCXBtU3RhdGUgPT0gUE1fU1RBUlRV UCAmJiBTaHV0ZG93biA9PSBOb1NodXRkb3duKQotCXsKLQkJLyogV0FMIHJlZG8gaGFzIHN0 YXJ0ZWQuIFdlJ3JlIG91dCBvZiByZWluaXRpYWxpemF0aW9uLiAqLwotCQlGYXRhbEVycm9y ID0gZmFsc2U7Ci0JCUFib3J0U3RhcnRUaW1lID0gMDsKLQotCQkvKgotCQkgKiBTdGFydCB0 aGUgYXJjaGl2ZXIgaWYgd2UncmUgcmVzcG9uc2libGUgZm9yIChyZS0pYXJjaGl2aW5nIHJl Y2VpdmVkCi0JCSAqIGZpbGVzLgotCQkgKi8KLQkJQXNzZXJ0KFBnQXJjaFBJRCA9PSAwKTsK LQkJaWYgKFhMb2dBcmNoaXZpbmdBbHdheXMoKSkKLQkJCVBnQXJjaFBJRCA9IFN0YXJ0QXJj aGl2ZXIoKTsKLQotCQkvKgotCQkgKiBJZiB3ZSBhcmVuJ3QgcGxhbm5pbmcgdG8gZW50ZXIg aG90IHN0YW5kYnkgbW9kZSBsYXRlciwgdHJlYXQKLQkJICogUkVDT1ZFUllfU1RBUlRFRCBh cyBtZWFuaW5nIHdlJ3JlIG91dCBvZiBzdGFydHVwLCBhbmQgcmVwb3J0IHN0YXR1cwotCQkg KiBhY2NvcmRpbmdseS4KLQkJICovCi0JCWlmICghRW5hYmxlSG90U3RhbmRieSkKLQkJewot CQkJQWRkVG9EYXRhRGlyTG9ja0ZpbGUoTE9DS19GSUxFX0xJTkVfUE1fU1RBVFVTLCBQTV9T VEFUVVNfU1RBTkRCWSk7Ci0jaWZkZWYgVVNFX1NZU1RFTUQKLQkJCXNkX25vdGlmeSgwLCAi UkVBRFk9MSIpOwotI2VuZGlmCi0JCX0KLQotCQlwbVN0YXRlID0gUE1fUkVDT1ZFUlk7Ci0J fQotCi0JaWYgKENoZWNrUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9CRUdJTl9IT1RfU1RB TkRCWSkgJiYKLQkJcG1TdGF0ZSA9PSBQTV9SRUNPVkVSWSAmJiBTaHV0ZG93biA9PSBOb1No dXRkb3duKQotCXsKLQkJZXJlcG9ydChMT0csCi0JCQkJKGVycm1zZygiZGF0YWJhc2Ugc3lz dGVtIGlzIHJlYWR5IHRvIGFjY2VwdCByZWFkLW9ubHkgY29ubmVjdGlvbnMiKSkpOwotCi0J CS8qIFJlcG9ydCBzdGF0dXMgKi8KLQkJQWRkVG9EYXRhRGlyTG9ja0ZpbGUoTE9DS19GSUxF X0xJTkVfUE1fU1RBVFVTLCBQTV9TVEFUVVNfUkVBRFkpOwotI2lmZGVmIFVTRV9TWVNURU1E Ci0JCXNkX25vdGlmeSgwLCAiUkVBRFk9MSIpOwotI2VuZGlmCi0KLQkJcG1TdGF0ZSA9IFBN X0hPVF9TVEFOREJZOwotCQljb25uc0FsbG93ZWQgPSB0cnVlOwotCi0JCS8qIFNvbWUgd29y a2VycyBtYXkgYmUgc2NoZWR1bGVkIHRvIHN0YXJ0IG5vdyAqLwotCQlTdGFydFdvcmtlck5l ZWRlZCA9IHRydWU7Ci0JfQotCi0JLyogUHJvY2VzcyBiYWNrZ3JvdW5kIHdvcmtlciBzdGF0 ZSBjaGFuZ2VzLiAqLwotCWlmIChDaGVja1Bvc3RtYXN0ZXJTaWduYWwoUE1TSUdOQUxfQkFD S0dST1VORF9XT1JLRVJfQ0hBTkdFKSkKLQl7Ci0JCS8qIEFjY2VwdCBuZXcgd29ya2VyIHJl cXVlc3RzIG9ubHkgaWYgbm90IHN0b3BwaW5nLiAqLwotCQlCYWNrZ3JvdW5kV29ya2VyU3Rh dGVDaGFuZ2UocG1TdGF0ZSA8IFBNX1NUT1BfQkFDS0VORFMpOwotCQlTdGFydFdvcmtlck5l ZWRlZCA9IHRydWU7Ci0JfQotCi0JaWYgKFN0YXJ0V29ya2VyTmVlZGVkIHx8IEhhdmVDcmFz aGVkV29ya2VyKQotCQltYXliZV9zdGFydF9iZ3dvcmtlcnMoKTsKLQotCS8qIFRlbGwgc3lz bG9nZ2VyIHRvIHJvdGF0ZSBsb2dmaWxlIGlmIHJlcXVlc3RlZCAqLwotCWlmIChTeXNMb2dn ZXJQSUQgIT0gMCkKLQl7Ci0JCWlmIChDaGVja0xvZ3JvdGF0ZVNpZ25hbCgpKQotCQl7Ci0J CQlzaWduYWxfY2hpbGQoU3lzTG9nZ2VyUElELCBTSUdVU1IxKTsKLQkJCVJlbW92ZUxvZ3Jv dGF0ZVNpZ25hbEZpbGVzKCk7Ci0JCX0KLQkJZWxzZSBpZiAoQ2hlY2tQb3N0bWFzdGVyU2ln bmFsKFBNU0lHTkFMX1JPVEFURV9MT0dGSUxFKSkKLQkJewotCQkJc2lnbmFsX2NoaWxkKFN5 c0xvZ2dlclBJRCwgU0lHVVNSMSk7Ci0JCX0KLQl9Ci0KLQlpZiAoQ2hlY2tQb3N0bWFzdGVy U2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpICYmCi0JCVNodXRkb3du IDw9IFNtYXJ0U2h1dGRvd24gJiYgcG1TdGF0ZSA8IFBNX1NUT1BfQkFDS0VORFMpCi0Jewot CQkvKgotCQkgKiBTdGFydCBvbmUgaXRlcmF0aW9uIG9mIHRoZSBhdXRvdmFjdXVtIGRhZW1v biwgZXZlbiBpZiBhdXRvdmFjdXVtaW5nCi0JCSAqIGlzIG5vbWluYWxseSBub3QgZW5hYmxl ZC4gIFRoaXMgaXMgc28gd2UgY2FuIGhhdmUgYW4gYWN0aXZlIGRlZmVuc2UKLQkJICogYWdh aW5zdCB0cmFuc2FjdGlvbiBJRCB3cmFwYXJvdW5kLiAgV2Ugc2V0IGEgZmxhZyBmb3IgdGhl IG1haW4gbG9vcAotCQkgKiB0byBkbyBpdCByYXRoZXIgdGhhbiB0cnlpbmcgdG8gZG8gaXQg aGVyZSAtLS0gdGhpcyBpcyBiZWNhdXNlIHRoZQotCQkgKiBhdXRvdmFjIHByb2Nlc3MgaXRz ZWxmIG1heSBzZW5kIHRoZSBzaWduYWwsIGFuZCB3ZSB3YW50IHRvIGhhbmRsZQotCQkgKiB0 aGF0IGJ5IGxhdW5jaGluZyBhbm90aGVyIGl0ZXJhdGlvbiBhcyBzb29uIGFzIHRoZSBjdXJy ZW50IG9uZQotCQkgKiBjb21wbGV0ZXMuCi0JCSAqLwotCQlzdGFydF9hdXRvdmFjX2xhdW5j aGVyID0gdHJ1ZTsKLQl9Ci0KLQlpZiAoQ2hlY2tQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFM X1NUQVJUX0FVVE9WQUNfV09SS0VSKSAmJgotCQlTaHV0ZG93biA8PSBTbWFydFNodXRkb3du ICYmIHBtU3RhdGUgPCBQTV9TVE9QX0JBQ0tFTkRTKQotCXsKLQkJLyogVGhlIGF1dG92YWN1 dW0gbGF1bmNoZXIgd2FudHMgdXMgdG8gc3RhcnQgYSB3b3JrZXIgcHJvY2Vzcy4gKi8KLQkJ U3RhcnRBdXRvdmFjdXVtV29ya2VyKCk7Ci0JfQotCi0JaWYgKENoZWNrUG9zdG1hc3RlclNp Z25hbChQTVNJR05BTF9TVEFSVF9XQUxSRUNFSVZFUikpCi0JewotCQkvKiBTdGFydHVwIFBy b2Nlc3Mgd2FudHMgdXMgdG8gc3RhcnQgdGhlIHdhbHJlY2VpdmVyIHByb2Nlc3MuICovCi0J CS8qIFN0YXJ0IGltbWVkaWF0ZWx5IGlmIHBvc3NpYmxlLCBlbHNlIHJlbWVtYmVyIHJlcXVl c3QgZm9yIGxhdGVyLiAqLwotCQlXYWxSZWNlaXZlclJlcXVlc3RlZCA9IHRydWU7Ci0JCU1h eWJlU3RhcnRXYWxSZWNlaXZlcigpOworCQkvKiBTdGFydHVwIFByb2Nlc3Mgd2FudHMgdXMg dG8gc3RhcnQgdGhlIHdhbHJlY2VpdmVyIHByb2Nlc3MuICovCisJCS8qIFN0YXJ0IGltbWVk aWF0ZWx5IGlmIHBvc3NpYmxlLCBlbHNlIHJlbWVtYmVyIHJlcXVlc3QgZm9yIGxhdGVyLiAq LworCQlXYWxSZWNlaXZlclJlcXVlc3RlZCA9IHRydWU7CisJCU1heWJlU3RhcnRXYWxSZWNl aXZlcigpOwogCX0KIAogCS8qCkBAIC01MjM3LDkzICs0NjI0LDIzIEBAIENvdW50Q2hpbGRy ZW4oaW50IHRhcmdldCkKICAqIHRvIHN0YXJ0IHN1YnByb2Nlc3MuCiAgKi8KIHN0YXRpYyBw aWRfdAotU3RhcnRDaGlsZFByb2Nlc3MoQXV4UHJvY1R5cGUgdHlwZSkKK1N0YXJ0Q2hpbGRQ cm9jZXNzKFBvc3RtYXN0ZXJDaGlsZFR5cGUgdHlwZSkKIHsKIAlwaWRfdAkJcGlkOwogCi0j aWZkZWYgRVhFQ19CQUNLRU5ECi0JewotCQljaGFyCSAgICphdlsxMF07Ci0JCWludAkJCWFj ID0gMDsKLQkJY2hhcgkJdHlwZWJ1ZlszMl07Ci0KLQkJLyoKLQkJICogU2V0IHVwIGNvbW1h bmQtbGluZSBhcmd1bWVudHMgZm9yIHN1YnByb2Nlc3MKLQkJICovCi0JCWF2W2FjKytdID0g InBvc3RncmVzIjsKLQkJYXZbYWMrK10gPSAiLS1mb3JrYXV4IjsKLQkJYXZbYWMrK10gPSBO VUxMOwkJLyogZmlsbGVkIGluIGJ5IHBvc3RtYXN0ZXJfZm9ya2V4ZWMgKi8KLQotCQlzbnBy aW50Zih0eXBlYnVmLCBzaXplb2YodHlwZWJ1ZiksICIlZCIsIHR5cGUpOwotCQlhdlthYysr XSA9IHR5cGVidWY7Ci0KLQkJYXZbYWNdID0gTlVMTDsKLQkJQXNzZXJ0KGFjIDwgbGVuZ3Ro b2YoYXYpKTsKLQotCQlwaWQgPSBwb3N0bWFzdGVyX2ZvcmtleGVjKGFjLCBhdik7Ci0JfQot I2Vsc2UJCQkJCQkJLyogIUVYRUNfQkFDS0VORCAqLwotCXBpZCA9IGZvcmtfcHJvY2Vzcygp OwotCi0JaWYgKHBpZCA9PSAwKQkJCQkvKiBjaGlsZCAqLwotCXsKLQkJSW5pdFBvc3RtYXN0 ZXJDaGlsZCgpOwotCi0JCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mgc29ja2V0cyAqLwot CQlDbG9zZVBvc3RtYXN0ZXJQb3J0cyhmYWxzZSk7Ci0KLQkJLyogUmVsZWFzZSBwb3N0bWFz dGVyJ3Mgd29ya2luZyBtZW1vcnkgY29udGV4dCAqLwotCQlNZW1vcnlDb250ZXh0U3dpdGNo VG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0JCU1lbW9yeUNvbnRleHREZWxldGUoUG9zdG1hc3Rl ckNvbnRleHQpOwotCQlQb3N0bWFzdGVyQ29udGV4dCA9IE5VTEw7Ci0KLQkJQXV4aWxpYXJ5 UHJvY2Vzc01haW4odHlwZSk7IC8qIGRvZXMgbm90IHJldHVybiAqLwotCX0KLSNlbmRpZgkJ CQkJCQkvKiBFWEVDX0JBQ0tFTkQgKi8KLQorCXBpZCA9IHBvc3RtYXN0ZXJfY2hpbGRfbGF1 bmNoKHR5cGUsIE5VTEwsIDAsIE5VTEwpOwogCWlmIChwaWQgPCAwKQogCXsKIAkJLyogaW4g cGFyZW50LCBmb3JrIGZhaWxlZCAqLwotCQlpbnQJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0K LQkJZXJybm8gPSBzYXZlX2Vycm5vOwotCQlzd2l0Y2ggKHR5cGUpCi0JCXsKLQkJCWNhc2Ug U3RhcnR1cFByb2Nlc3M6Ci0JCQkJZXJlcG9ydChMT0csCi0JCQkJCQkoZXJybXNnKCJjb3Vs ZCBub3QgZm9yayBzdGFydHVwIHByb2Nlc3M6ICVtIikpKTsKLQkJCQlicmVhazsKLQkJCWNh c2UgQXJjaGl2ZXJQcm9jZXNzOgotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygi Y291bGQgbm90IGZvcmsgYXJjaGl2ZXIgcHJvY2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwot CQkJY2FzZSBCZ1dyaXRlclByb2Nlc3M6Ci0JCQkJZXJlcG9ydChMT0csCi0JCQkJCQkoZXJy bXNnKCJjb3VsZCBub3QgZm9yayBiYWNrZ3JvdW5kIHdyaXRlciBwcm9jZXNzOiAlbSIpKSk7 Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIENoZWNrcG9pbnRlclByb2Nlc3M6Ci0JCQkJZXJlcG9y dChMT0csCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgZm9yayBjaGVja3BvaW50ZXIgcHJv Y2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXYWxXcml0ZXJQcm9jZXNzOgot CQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgV0FMIHdy aXRlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdhbFJlY2VpdmVy UHJvY2VzczoKLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBm b3JrIFdBTCByZWNlaXZlciBwcm9jZXNzOiAlbSIpKSk7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZh dWx0OgotCQkJCWVyZXBvcnQoTE9HLAotCQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsg cHJvY2VzczogJW0iKSkpOwotCQkJCWJyZWFrOwotCQl9CisJCS8qIFhYWDogdHJhbnNsYXRp b24/ICovCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrICVz IHByb2Nlc3M6ICVtIiwgUG9zdG1hc3RlckNoaWxkTmFtZSh0eXBlKSkpKTsKIAogCQkvKgog CQkgKiBmb3JrIGZhaWx1cmUgaXMgZmF0YWwgZHVyaW5nIHN0YXJ0dXAsIGJ1dCB0aGVyZSdz IG5vIG5lZWQgdG8gY2hva2UKIAkJICogaW1tZWRpYXRlbHkgaWYgc3RhcnRpbmcgb3RoZXIg Y2hpbGQgdHlwZXMgZmFpbHMuCiAJCSAqLwotCQlpZiAodHlwZSA9PSBTdGFydHVwUHJvY2Vz cykKKwkJaWYgKHR5cGUgPT0gUE1DX1NUQVJUVVApCiAJCQlFeGl0UG9zdG1hc3RlcigxKTsK IAkJcmV0dXJuIDA7CiAJfQpAQCAtNTU4NywzMiArNDkwNCw2IEBAIEJhY2tncm91bmRXb3Jr ZXJVbmJsb2NrU2lnbmFscyh2b2lkKQogCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmVW5C bG9ja1NpZywgTlVMTCk7CiB9CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLXN0YXRpYyBwaWRf dAotYmd3b3JrZXJfZm9ya2V4ZWMoQmFja2dyb3VuZFdvcmtlciAqd29ya2VyKQotewotCWNo YXIJICAgKmF2WzEwXTsKLQlpbnQJCQlhYyA9IDA7Ci0JY2hhcgkJZm9ya2F2W01BWFBHUEFU SF07Ci0JcGlkX3QJCXJlc3VsdDsKLQotCXNucHJpbnRmKGZvcmthdiwgTUFYUEdQQVRILCAi LS1mb3JrYmd3b3JrZXIiKTsKLQotCWF2W2FjKytdID0gInBvc3RncmVzIjsKLQlhdlthYysr XSA9IGZvcmthdjsKLQlhdlthYysrXSA9IE5VTEw7CQkJLyogZmlsbGVkIGluIGJ5IHBvc3Rt YXN0ZXJfZm9ya2V4ZWMgKi8KLQlhdlthY10gPSBOVUxMOwotCi0JQXNzZXJ0KGFjIDwgbGVu Z3Rob2YoYXYpKTsKLQotCU15Qmd3b3JrZXJFbnRyeSA9IHdvcmtlcjsKLQlyZXN1bHQgPSBw b3N0bWFzdGVyX2ZvcmtleGVjKGFjLCBhdik7Ci0JTXlCZ3dvcmtlckVudHJ5ID0gTlVMTDsK LQotCXJldHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQogLyoKICAqIFN0YXJ0IGEgbmV3IGJn d29ya2VyLgogICogU3RhcnRpbmcgdGltZSBjb25kaXRpb25zIG11c3QgaGF2ZSBiZWVuIGNo ZWNrZWQgYWxyZWFkeS4KQEAgLTU2NDksNjUgKzQ5NDAsMzIgQEAgZG9fc3RhcnRfYmd3b3Jr ZXIoUmVnaXN0ZXJlZEJnV29ya2VyICpydykKIAkJCShlcnJtc2dfaW50ZXJuYWwoInN0YXJ0 aW5nIGJhY2tncm91bmQgd29ya2VyIHByb2Nlc3MgXCIlc1wiIiwKIAkJCQkJCQkgcnctPnJ3 X3dvcmtlci5iZ3dfbmFtZSkpKTsKIAotI2lmZGVmIEVYRUNfQkFDS0VORAotCXN3aXRjaCAo KHdvcmtlcl9waWQgPSBiZ3dvcmtlcl9mb3JrZXhlYygmcnctPnJ3X3dvcmtlcikpKQotI2Vs c2UKLQlzd2l0Y2ggKCh3b3JrZXJfcGlkID0gZm9ya19wcm9jZXNzKCkpKQotI2VuZGlmCisJ d29ya2VyX3BpZCA9IHBvc3RtYXN0ZXJfY2hpbGRfbGF1bmNoKFBNQ19CR1dPUktFUiwgKGNo YXIgKikgJnJ3LT5yd193b3JrZXIsIHNpemVvZihCYWNrZ3JvdW5kV29ya2VyKSwgTlVMTCk7 CisJaWYgKHdvcmtlcl9waWQgPT0gLTEpCiAJewotCQljYXNlIC0xOgotCQkJLyogaW4gcG9z dG1hc3RlciwgZm9yayBmYWlsZWQgLi4uICovCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVy cm1zZygiY291bGQgbm90IGZvcmsgd29ya2VyIHByb2Nlc3M6ICVtIikpKTsKLQkJCS8qIHVu ZG8gd2hhdCBhc3NpZ25fYmFja2VuZGxpc3RfZW50cnkgZGlkICovCi0JCQlSZWxlYXNlUG9z dG1hc3RlckNoaWxkU2xvdChydy0+cndfY2hpbGRfc2xvdCk7Ci0JCQlydy0+cndfY2hpbGRf c2xvdCA9IDA7Ci0JCQlwZnJlZShydy0+cndfYmFja2VuZCk7Ci0JCQlydy0+cndfYmFja2Vu ZCA9IE5VTEw7Ci0JCQkvKiBtYXJrIGVudHJ5IGFzIGNyYXNoZWQsIHNvIHdlJ2xsIHRyeSBh Z2FpbiBsYXRlciAqLwotCQkJcnctPnJ3X2NyYXNoZWRfYXQgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7Ci0JCQlicmVhazsKLQotI2lmbmRlZiBFWEVDX0JBQ0tFTkQKLQkJY2FzZSAwOgot CQkJLyogaW4gcG9zdG1hc3RlciBjaGlsZCAuLi4gKi8KLQkJCUluaXRQb3N0bWFzdGVyQ2hp bGQoKTsKLQotCQkJLyogQ2xvc2UgdGhlIHBvc3RtYXN0ZXIncyBzb2NrZXRzICovCi0JCQlD bG9zZVBvc3RtYXN0ZXJQb3J0cyhmYWxzZSk7Ci0KLQkJCS8qCi0JCQkgKiBCZWZvcmUgYmxv d2luZyBhd2F5IFBvc3RtYXN0ZXJDb250ZXh0LCBzYXZlIHRoaXMgYmd3b3JrZXIncwotCQkJ ICogZGF0YSB3aGVyZSBpdCBjYW4gZmluZCBpdC4KLQkJCSAqLwotCQkJTXlCZ3dvcmtlckVu dHJ5ID0gKEJhY2tncm91bmRXb3JrZXIgKikKLQkJCQlNZW1vcnlDb250ZXh0QWxsb2MoVG9w TWVtb3J5Q29udGV4dCwgc2l6ZW9mKEJhY2tncm91bmRXb3JrZXIpKTsKLQkJCW1lbWNweShN eUJnd29ya2VyRW50cnksICZydy0+cndfd29ya2VyLCBzaXplb2YoQmFja2dyb3VuZFdvcmtl cikpOwotCi0JCQkvKiBSZWxlYXNlIHBvc3RtYXN0ZXIncyB3b3JraW5nIG1lbW9yeSBjb250 ZXh0ICovCi0JCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7Ci0J CQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3RtYXN0ZXJDb250ZXh0KTsKLQkJCVBvc3RtYXN0 ZXJDb250ZXh0ID0gTlVMTDsKLQotCQkJQmFja2dyb3VuZFdvcmtlck1haW4oKTsKKwkJLyog aW4gcG9zdG1hc3RlciwgZm9yayBmYWlsZWQgLi4uICovCisJCWVyZXBvcnQoTE9HLAorCQkJ CShlcnJtc2coImNvdWxkIG5vdCBmb3JrIHdvcmtlciBwcm9jZXNzOiAlbSIpKSk7CisJCS8q IHVuZG8gd2hhdCBhc3NpZ25fYmFja2VuZGxpc3RfZW50cnkgZGlkICovCisJCVJlbGVhc2VQ b3N0bWFzdGVyQ2hpbGRTbG90KHJ3LT5yd19jaGlsZF9zbG90KTsKKwkJcnctPnJ3X2NoaWxk X3Nsb3QgPSAwOworCQlwZnJlZShydy0+cndfYmFja2VuZCk7CisJCXJ3LT5yd19iYWNrZW5k ID0gTlVMTDsKKwkJLyogbWFyayBlbnRyeSBhcyBjcmFzaGVkLCBzbyB3ZSdsbCB0cnkgYWdh aW4gbGF0ZXIgKi8KKwkJcnctPnJ3X2NyYXNoZWRfYXQgPSBHZXRDdXJyZW50VGltZXN0YW1w KCk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKLQkJCWV4aXQoMSk7CQkJLyogc2hvdWxkIG5v dCBnZXQgaGVyZSAqLwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCS8qIGlu IHBvc3RtYXN0ZXIsIGZvcmsgc3VjY2Vzc2Z1bCAuLi4gKi8KLQkJCXJ3LT5yd19waWQgPSB3 b3JrZXJfcGlkOwotCQkJcnctPnJ3X2JhY2tlbmQtPnBpZCA9IHJ3LT5yd19waWQ7Ci0JCQlS ZXBvcnRCYWNrZ3JvdW5kV29ya2VyUElEKHJ3KTsKLQkJCS8qIGFkZCBuZXcgd29ya2VyIHRv IGxpc3RzIG9mIGJhY2tlbmRzICovCi0JCQlkbGlzdF9wdXNoX2hlYWQoJkJhY2tlbmRMaXN0 LCAmcnctPnJ3X2JhY2tlbmQtPmVsZW0pOworCS8qIGluIHBvc3RtYXN0ZXIsIGZvcmsgc3Vj Y2Vzc2Z1bCAuLi4gKi8KKwlydy0+cndfcGlkID0gd29ya2VyX3BpZDsKKwlydy0+cndfYmFj a2VuZC0+cGlkID0gcnctPnJ3X3BpZDsKKwlSZXBvcnRCYWNrZ3JvdW5kV29ya2VyUElEKHJ3 KTsKKwkvKiBhZGQgbmV3IHdvcmtlciB0byBsaXN0cyBvZiBiYWNrZW5kcyAqLworCWRsaXN0 X3B1c2hfaGVhZCgmQmFja2VuZExpc3QsICZydy0+cndfYmFja2VuZC0+ZWxlbSk7CiAjaWZk ZWYgRVhFQ19CQUNLRU5ECi0JCQlTaG1lbUJhY2tlbmRBcnJheUFkZChydy0+cndfYmFja2Vu ZCk7CisJU2htZW1CYWNrZW5kQXJyYXlBZGQocnctPnJ3X2JhY2tlbmQpOwogI2VuZGlmCi0J CQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7CiB9 CiAKIC8qCkBAIC01OTU5LDM1MSArNTIxNyw2IEBAIFBvc3RtYXN0ZXJNYXJrUElERm9yV29y a2VyTm90aWZ5KGludCBwaWQpCiAKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIAotLyoKLSAqIFRo ZSBmb2xsb3dpbmcgbmVlZCB0byBiZSBhdmFpbGFibGUgdG8gdGhlIHNhdmUvcmVzdG9yZV9i YWNrZW5kX3ZhcmlhYmxlcwotICogZnVuY3Rpb25zLiAgVGhleSBhcmUgbWFya2VkIE5PTl9F WEVDX1NUQVRJQyBpbiB0aGVpciBob21lIG1vZHVsZXMuCi0gKi8KLWV4dGVybiBzbG9ja190 ICpTaG1lbUxvY2s7Ci1leHRlcm4gc2xvY2tfdCAqUHJvY1N0cnVjdExvY2s7Ci1leHRlcm4g UEdQUk9DICpBdXhpbGlhcnlQcm9jczsKLWV4dGVybiBQTVNpZ25hbERhdGEgKlBNU2lnbmFs U3RhdGU7Ci1leHRlcm4gcGdfdGltZV90IGZpcnN0X3N5c2xvZ2dlcl9maWxlX3RpbWU7Ci0K LSNpZm5kZWYgV0lOMzIKLSNkZWZpbmUgd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0KGRlc3Qs IHNyYywgY2hpbGRwaWQpICgoKihkZXN0KSA9IChzcmMpKSwgdHJ1ZSkKLSNkZWZpbmUgcmVh ZF9pbmhlcml0YWJsZV9zb2NrZXQoZGVzdCwgc3JjKSAoKihkZXN0KSA9ICooc3JjKSkKLSNl bHNlCi1zdGF0aWMgYm9vbCB3cml0ZV9kdXBsaWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3Qs IEhBTkRMRSBzcmMsIEhBTkRMRSBjaGlsZCk7Ci1zdGF0aWMgYm9vbCB3cml0ZV9pbmhlcml0 YWJsZV9zb2NrZXQoSW5oZXJpdGFibGVTb2NrZXQgKmRlc3QsIFNPQ0tFVCBzcmMsCi0JCQkJ CQkJCQkgcGlkX3QgY2hpbGRQaWQpOwotc3RhdGljIHZvaWQgcmVhZF9pbmhlcml0YWJsZV9z b2NrZXQoU09DS0VUICpkZXN0LCBJbmhlcml0YWJsZVNvY2tldCAqc3JjKTsKLSNlbmRpZgot Ci0KLS8qIFNhdmUgY3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgaW50byB0aGUgQmFja2Vu ZFBhcmFtZXRlcnMgc3RydWN0ICovCi0jaWZuZGVmIFdJTjMyCi1zdGF0aWMgYm9vbAotc2F2 ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCi0jZWxzZQotc3RhdGljIGJvb2wKLXNhdmVfYmFja2VuZF92 YXJpYWJsZXMoQmFja2VuZFBhcmFtZXRlcnMgKnBhcmFtLCBDbGllbnRTb2NrZXQgKmNsaWVu dF9zb2NrLAotCQkJCQkgICBIQU5ETEUgY2hpbGRQcm9jZXNzLCBwaWRfdCBjaGlsZFBpZCkK LSNlbmRpZgotewotCW1lbWNweSgmcGFyYW0tPmNsaWVudF9zb2NrLCBjbGllbnRfc29jaywg c2l6ZW9mKENsaWVudFNvY2tldCkpOwotCWlmICghd3JpdGVfaW5oZXJpdGFibGVfc29ja2V0 KCZwYXJhbS0+c2VyaWFsaXplZF9zb2NrLCBjbGllbnRfc29jay0+c29jaywgY2hpbGRQaWQp KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzdHJsY3B5KHBhcmFtLT5EYXRhRGlyLCBEYXRhRGly LCBNQVhQR1BBVEgpOwotCi0JcGFyYW0tPk15Q2FuY2VsS2V5ID0gTXlDYW5jZWxLZXk7Ci0J cGFyYW0tPk15UE1DaGlsZFNsb3QgPSBNeVBNQ2hpbGRTbG90OwotCi0jaWZkZWYgV0lOMzIK LQlwYXJhbS0+U2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gU2htZW1Qcm90ZWN0aXZlUmVnaW9u OwotI2VuZGlmCi0JcGFyYW0tPlVzZWRTaG1lbVNlZ0lEID0gVXNlZFNobWVtU2VnSUQ7Ci0J cGFyYW0tPlVzZWRTaG1lbVNlZ0FkZHIgPSBVc2VkU2htZW1TZWdBZGRyOwotCi0JcGFyYW0t PlNobWVtTG9jayA9IFNobWVtTG9jazsKLQlwYXJhbS0+U2htZW1WYXJpYWJsZUNhY2hlID0g U2htZW1WYXJpYWJsZUNhY2hlOwotCXBhcmFtLT5TaG1lbUJhY2tlbmRBcnJheSA9IFNobWVt QmFja2VuZEFycmF5OwotCi0jaWZuZGVmIEhBVkVfU1BJTkxPQ0tTCi0JcGFyYW0tPlNwaW5s b2NrU2VtYUFycmF5ID0gU3BpbmxvY2tTZW1hQXJyYXk7Ci0jZW5kaWYKLQlwYXJhbS0+TmFt ZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHMgPSBOYW1lZExXTG9ja1RyYW5jaGVSZXF1ZXN0czsK LQlwYXJhbS0+TmFtZWRMV0xvY2tUcmFuY2hlQXJyYXkgPSBOYW1lZExXTG9ja1RyYW5jaGVB cnJheTsKLQlwYXJhbS0+TWFpbkxXTG9ja0FycmF5ID0gTWFpbkxXTG9ja0FycmF5OwotCXBh cmFtLT5Qcm9jU3RydWN0TG9jayA9IFByb2NTdHJ1Y3RMb2NrOwotCXBhcmFtLT5Qcm9jR2xv YmFsID0gUHJvY0dsb2JhbDsKLQlwYXJhbS0+QXV4aWxpYXJ5UHJvY3MgPSBBdXhpbGlhcnlQ cm9jczsKLQlwYXJhbS0+UHJlcGFyZWRYYWN0UHJvY3MgPSBQcmVwYXJlZFhhY3RQcm9jczsK LQlwYXJhbS0+UE1TaWduYWxTdGF0ZSA9IFBNU2lnbmFsU3RhdGU7Ci0KLQlwYXJhbS0+UG9z dG1hc3RlclBpZCA9IFBvc3RtYXN0ZXJQaWQ7Ci0JcGFyYW0tPlBnU3RhcnRUaW1lID0gUGdT dGFydFRpbWU7Ci0JcGFyYW0tPlBnUmVsb2FkVGltZSA9IFBnUmVsb2FkVGltZTsKLQlwYXJh bS0+Zmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZSA9IGZpcnN0X3N5c2xvZ2dlcl9maWxlX3Rp bWU7Ci0KLQlwYXJhbS0+cmVkaXJlY3Rpb25fZG9uZSA9IHJlZGlyZWN0aW9uX2RvbmU7Ci0J cGFyYW0tPklzQmluYXJ5VXBncmFkZSA9IElzQmluYXJ5VXBncmFkZTsKLQlwYXJhbS0+cXVl cnlfaWRfZW5hYmxlZCA9IHF1ZXJ5X2lkX2VuYWJsZWQ7Ci0JcGFyYW0tPm1heF9zYWZlX2Zk cyA9IG1heF9zYWZlX2ZkczsKLQotCXBhcmFtLT5NYXhCYWNrZW5kcyA9IE1heEJhY2tlbmRz OwotCi0jaWZkZWYgV0lOMzIKLQlwYXJhbS0+UG9zdG1hc3RlckhhbmRsZSA9IFBvc3RtYXN0 ZXJIYW5kbGU7Ci0JaWYgKCF3cml0ZV9kdXBsaWNhdGVkX2hhbmRsZSgmcGFyYW0tPmluaXRp YWxfc2lnbmFsX3BpcGUsCi0JCQkJCQkJCSBwZ3dpbjMyX2NyZWF0ZV9zaWduYWxfbGlzdGVu ZXIoY2hpbGRQaWQpLAotCQkJCQkJCQkgY2hpbGRQcm9jZXNzKSkKLQkJcmV0dXJuIGZhbHNl OwotI2Vsc2UKLQltZW1jcHkoJnBhcmFtLT5wb3N0bWFzdGVyX2FsaXZlX2ZkcywgJnBvc3Rt YXN0ZXJfYWxpdmVfZmRzLAotCQkgICBzaXplb2YocG9zdG1hc3Rlcl9hbGl2ZV9mZHMpKTsK LSNlbmRpZgotCi0JbWVtY3B5KCZwYXJhbS0+c3lzbG9nUGlwZSwgJnN5c2xvZ1BpcGUsIHNp emVvZihzeXNsb2dQaXBlKSk7Ci0KLQlzdHJsY3B5KHBhcmFtLT5teV9leGVjX3BhdGgsIG15 X2V4ZWNfcGF0aCwgTUFYUEdQQVRIKTsKLQotCXN0cmxjcHkocGFyYW0tPnBrZ2xpYl9wYXRo LCBwa2dsaWJfcGF0aCwgTUFYUEdQQVRIKTsKLQotCWlmIChNeUJnd29ya2VyRW50cnkpCi0J CW1lbWNweSgmcGFyYW0tPk15Qmd3b3JrZXJFbnRyeSwgTXlCZ3dvcmtlckVudHJ5LCBzaXpl b2YoQmFja2dyb3VuZFdvcmtlcikpOwotCWVsc2UKLQkJbWVtc2V0KCZwYXJhbS0+TXlCZ3dv cmtlckVudHJ5LCAwLCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOwotCi0JcmV0dXJuIHRy dWU7Ci19Ci0KLQotI2lmZGVmIFdJTjMyCi0vKgotICogRHVwbGljYXRlIGEgaGFuZGxlIGZv ciB1c2FnZSBpbiBhIGNoaWxkIHByb2Nlc3MsIGFuZCB3cml0ZSB0aGUgY2hpbGQKLSAqIHBy b2Nlc3MgaW5zdGFuY2Ugb2YgdGhlIGhhbmRsZSB0byB0aGUgcGFyYW1ldGVyIGZpbGUuCi0g Ki8KLXN0YXRpYyBib29sCi13cml0ZV9kdXBsaWNhdGVkX2hhbmRsZShIQU5ETEUgKmRlc3Qs IEhBTkRMRSBzcmMsIEhBTkRMRSBjaGlsZFByb2Nlc3MpCi17Ci0JSEFORExFCQloQ2hpbGQg PSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKLQotCWlmICghRHVwbGljYXRlSGFuZGxlKEdldEN1 cnJlbnRQcm9jZXNzKCksCi0JCQkJCQkgc3JjLAotCQkJCQkJIGNoaWxkUHJvY2VzcywKLQkJ CQkJCSAmaENoaWxkLAotCQkJCQkJIDAsCi0JCQkJCQkgVFJVRSwKLQkJCQkJCSBEVVBMSUNB VEVfQ0xPU0VfU09VUkNFIHwgRFVQTElDQVRFX1NBTUVfQUNDRVNTKSkKLQl7Ci0JCWVyZXBv cnQoTE9HLAotCQkJCShlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCBkdXBsaWNhdGUgaGFu ZGxlIHRvIGJlIHdyaXR0ZW4gdG8gYmFja2VuZCBwYXJhbWV0ZXIgZmlsZTogZXJyb3IgY29k ZSAlbHUiLAotCQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpKSk7Ci0JCXJldHVybiBmYWxzZTsK LQl9Ci0KLQkqZGVzdCA9IGhDaGlsZDsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIER1 cGxpY2F0ZSBhIHNvY2tldCBmb3IgdXNhZ2UgaW4gYSBjaGlsZCBwcm9jZXNzLCBhbmQgd3Jp dGUgdGhlIHJlc3VsdGluZwotICogc3RydWN0dXJlIHRvIHRoZSBwYXJhbWV0ZXIgZmlsZS4K LSAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBhIG51bWJlciBvZiBMU1BzIChMYXllcmVk IFNlcnZpY2UgUHJvdmlkZXJzKSB2ZXJ5Ci0gKiBjb21tb24gb24gV2luZG93cyAoYW50aXZp cnVzLCBmaXJld2FsbHMsIGRvd25sb2FkIG1hbmFnZXJzIGV0YykgYnJlYWsKLSAqIHN0cmFp Z2h0IHNvY2tldCBpbmhlcml0YW5jZS4KLSAqLwotc3RhdGljIGJvb2wKLXdyaXRlX2luaGVy aXRhYmxlX3NvY2tldChJbmhlcml0YWJsZVNvY2tldCAqZGVzdCwgU09DS0VUIHNyYywgcGlk X3QgY2hpbGRwaWQpCi17Ci0JZGVzdC0+b3JpZ3NvY2tldCA9IHNyYzsKLQlpZiAoc3JjICE9 IDAgJiYgc3JjICE9IFBHSU5WQUxJRF9TT0NLRVQpCi0JewotCQkvKiBBY3R1YWwgc29ja2V0 ICovCi0JCWlmIChXU0FEdXBsaWNhdGVTb2NrZXQoc3JjLCBjaGlsZHBpZCwgJmRlc3QtPndz YWluZm8pICE9IDApCi0JCXsKLQkJCWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJjb3Vs ZCBub3QgZHVwbGljYXRlIHNvY2tldCAlZCBmb3IgdXNlIGluIGJhY2tlbmQ6IGVycm9yIGNv ZGUgJWQiLAotCQkJCQkJCShpbnQpIHNyYywgV1NBR2V0TGFzdEVycm9yKCkpKSk7Ci0JCQly ZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBSZWFk IGEgZHVwbGljYXRlIHNvY2tldCBzdHJ1Y3R1cmUgYmFjaywgYW5kIGdldCB0aGUgc29ja2V0 IGRlc2NyaXB0b3IuCi0gKi8KLXN0YXRpYyB2b2lkCi1yZWFkX2luaGVyaXRhYmxlX3NvY2tl dChTT0NLRVQgKmRlc3QsIEluaGVyaXRhYmxlU29ja2V0ICpzcmMpCi17Ci0JU09DS0VUCQlz OwotCi0JaWYgKHNyYy0+b3JpZ3NvY2tldCA9PSBQR0lOVkFMSURfU09DS0VUIHx8IHNyYy0+ b3JpZ3NvY2tldCA9PSAwKQotCXsKLQkJLyogTm90IGEgcmVhbCBzb2NrZXQhICovCi0JCSpk ZXN0ID0gc3JjLT5vcmlnc29ja2V0OwotCX0KLQllbHNlCi0JewotCQkvKiBBY3R1YWwgc29j a2V0LCBzbyBjcmVhdGUgZnJvbSBzdHJ1Y3R1cmUgKi8KLQkJcyA9IFdTQVNvY2tldChGUk9N X1BST1RPQ09MX0lORk8sCi0JCQkJCSAgRlJPTV9QUk9UT0NPTF9JTkZPLAotCQkJCQkgIEZS T01fUFJPVE9DT0xfSU5GTywKLQkJCQkJICAmc3JjLT53c2FpbmZvLAotCQkJCQkgIDAsCi0J CQkJCSAgMCk7Ci0JCWlmIChzID09IElOVkFMSURfU09DS0VUKQotCQl7Ci0JCQl3cml0ZV9z dGRlcnIoImNvdWxkIG5vdCBjcmVhdGUgaW5oZXJpdGVkIHNvY2tldDogZXJyb3IgY29kZSAl ZFxuIiwKLQkJCQkJCSBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCQlleGl0KDEpOwotCQl9Ci0J CSpkZXN0ID0gczsKLQotCQkvKgotCQkgKiBUbyBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHR3 byByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIHNvY2tldCwgY2xvc2UKLQkJICogdGhlIG9yaWdp bmFsIG9uZS4gKFRoaXMgd291bGQgaGFwcGVuIHdoZW4gaW5oZXJpdGFuY2UgYWN0dWFsbHkK LQkJICogd29ya3MuLgotCQkgKi8KLQkJY2xvc2Vzb2NrZXQoc3JjLT5vcmlnc29ja2V0KTsK LQl9Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQKLXJlYWRfYmFja2VuZF92YXJpYWJsZXMo Y2hhciAqaWQsIENsaWVudFNvY2tldCAqY2xpZW50X3NvY2spCi17Ci0JQmFja2VuZFBhcmFt ZXRlcnMgcGFyYW07Ci0KLSNpZm5kZWYgV0lOMzIKLQkvKiBOb24td2luMzIgaW1wbGVtZW50 YXRpb24gcmVhZHMgZnJvbSBmaWxlICovCi0JRklMRQkgICAqZnA7Ci0KLQkvKiBPcGVuIGZp bGUgKi8KLQlmcCA9IEFsbG9jYXRlRmlsZShpZCwgUEdfQklOQVJZX1IpOwotCWlmICghZnAp Ci0JewotCQl3cml0ZV9zdGRlcnIoImNvdWxkIG5vdCBvcGVuIGJhY2tlbmQgdmFyaWFibGVz IGZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQkJIGlkLCBzdHJlcnJvcihlcnJubykpOwotCQll eGl0KDEpOwotCX0KLQotCWlmIChmcmVhZCgmcGFyYW0sIHNpemVvZihwYXJhbSksIDEsIGZw KSAhPSAxKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJjb3VsZCBub3QgcmVhZCBmcm9tIGJhY2tl bmQgdmFyaWFibGVzIGZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQkJIGlkLCBzdHJlcnJvcihl cnJubykpOwotCQlleGl0KDEpOwotCX0KLQotCS8qIFJlbGVhc2UgZmlsZSAqLwotCUZyZWVG aWxlKGZwKTsKLQlpZiAodW5saW5rKGlkKSAhPSAwKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJj b3VsZCBub3QgcmVtb3ZlIGZpbGUgXCIlc1wiOiAlc1xuIiwKLQkJCQkJIGlkLCBzdHJlcnJv cihlcnJubykpOwotCQlleGl0KDEpOwotCX0KLSNlbHNlCi0JLyogV2luMzIgdmVyc2lvbiB1 c2VzIG1hcHBlZCBmaWxlICovCi0JSEFORExFCQlwYXJhbUhhbmRsZTsKLQlCYWNrZW5kUGFy YW1ldGVycyAqcGFyYW1wOwotCi0jaWZkZWYgX1dJTjY0Ci0JcGFyYW1IYW5kbGUgPSAoSEFO RExFKSBfYXRvaTY0KGlkKTsKLSNlbHNlCi0JcGFyYW1IYW5kbGUgPSAoSEFORExFKSBhdG9s KGlkKTsKLSNlbmRpZgotCXBhcmFtcCA9IE1hcFZpZXdPZkZpbGUocGFyYW1IYW5kbGUsIEZJ TEVfTUFQX1JFQUQsIDAsIDAsIDApOwotCWlmICghcGFyYW1wKQotCXsKLQkJd3JpdGVfc3Rk ZXJyKCJjb3VsZCBub3QgbWFwIHZpZXcgb2YgYmFja2VuZCB2YXJpYWJsZXM6IGVycm9yIGNv ZGUgJWx1XG4iLAotCQkJCQkgR2V0TGFzdEVycm9yKCkpOwotCQlleGl0KDEpOwotCX0KLQot CW1lbWNweSgmcGFyYW0sIHBhcmFtcCwgc2l6ZW9mKEJhY2tlbmRQYXJhbWV0ZXJzKSk7Ci0K LQlpZiAoIVVubWFwVmlld09mRmlsZShwYXJhbXApKQotCXsKLQkJd3JpdGVfc3RkZXJyKCJj b3VsZCBub3QgdW5tYXAgdmlldyBvZiBiYWNrZW5kIHZhcmlhYmxlczogZXJyb3IgY29kZSAl bHVcbiIsCi0JCQkJCSBHZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JaWYg KCFDbG9zZUhhbmRsZShwYXJhbUhhbmRsZSkpCi0JewotCQl3cml0ZV9zdGRlcnIoImNvdWxk IG5vdCBjbG9zZSBoYW5kbGUgdG8gYmFja2VuZCBwYXJhbWV0ZXIgdmFyaWFibGVzOiBlcnJv ciBjb2RlICVsdVxuIiwKLQkJCQkJIEdldExhc3RFcnJvcigpKTsKLQkJZXhpdCgxKTsKLQl9 Ci0jZW5kaWYKLQotCXJlc3RvcmVfYmFja2VuZF92YXJpYWJsZXMoJnBhcmFtLCBjbGllbnRf c29jayk7Ci19Ci0KLS8qIFJlc3RvcmUgY3JpdGljYWwgYmFja2VuZCB2YXJpYWJsZXMgZnJv bSB0aGUgQmFja2VuZFBhcmFtZXRlcnMgc3RydWN0ICovCi1zdGF0aWMgdm9pZAotcmVzdG9y ZV9iYWNrZW5kX3ZhcmlhYmxlcyhCYWNrZW5kUGFyYW1ldGVycyAqcGFyYW0sIENsaWVudFNv Y2tldCAqY2xpZW50X3NvY2spCi17Ci0JbWVtY3B5KGNsaWVudF9zb2NrLCAmcGFyYW0tPmNs aWVudF9zb2NrLCBzaXplb2YoQ2xpZW50U29ja2V0KSk7Ci0JcmVhZF9pbmhlcml0YWJsZV9z b2NrZXQoJmNsaWVudF9zb2NrLT5zb2NrLCAmcGFyYW0tPnNlcmlhbGl6ZWRfc29jayk7Ci0K LQlTZXREYXRhRGlyKHBhcmFtLT5EYXRhRGlyKTsKLQotCU15Q2FuY2VsS2V5ID0gcGFyYW0t Pk15Q2FuY2VsS2V5OwotCU15UE1DaGlsZFNsb3QgPSBwYXJhbS0+TXlQTUNoaWxkU2xvdDsK LQotI2lmZGVmIFdJTjMyCi0JU2htZW1Qcm90ZWN0aXZlUmVnaW9uID0gcGFyYW0tPlNobWVt UHJvdGVjdGl2ZVJlZ2lvbjsKLSNlbmRpZgotCVVzZWRTaG1lbVNlZ0lEID0gcGFyYW0tPlVz ZWRTaG1lbVNlZ0lEOwotCVVzZWRTaG1lbVNlZ0FkZHIgPSBwYXJhbS0+VXNlZFNobWVtU2Vn QWRkcjsKLQotCVNobWVtTG9jayA9IHBhcmFtLT5TaG1lbUxvY2s7Ci0JU2htZW1WYXJpYWJs ZUNhY2hlID0gcGFyYW0tPlNobWVtVmFyaWFibGVDYWNoZTsKLQlTaG1lbUJhY2tlbmRBcnJh eSA9IHBhcmFtLT5TaG1lbUJhY2tlbmRBcnJheTsKLQotI2lmbmRlZiBIQVZFX1NQSU5MT0NL UwotCVNwaW5sb2NrU2VtYUFycmF5ID0gcGFyYW0tPlNwaW5sb2NrU2VtYUFycmF5OwotI2Vu ZGlmCi0JTmFtZWRMV0xvY2tUcmFuY2hlUmVxdWVzdHMgPSBwYXJhbS0+TmFtZWRMV0xvY2tU cmFuY2hlUmVxdWVzdHM7Ci0JTmFtZWRMV0xvY2tUcmFuY2hlQXJyYXkgPSBwYXJhbS0+TmFt ZWRMV0xvY2tUcmFuY2hlQXJyYXk7Ci0JTWFpbkxXTG9ja0FycmF5ID0gcGFyYW0tPk1haW5M V0xvY2tBcnJheTsKLQlQcm9jU3RydWN0TG9jayA9IHBhcmFtLT5Qcm9jU3RydWN0TG9jazsK LQlQcm9jR2xvYmFsID0gcGFyYW0tPlByb2NHbG9iYWw7Ci0JQXV4aWxpYXJ5UHJvY3MgPSBw YXJhbS0+QXV4aWxpYXJ5UHJvY3M7Ci0JUHJlcGFyZWRYYWN0UHJvY3MgPSBwYXJhbS0+UHJl cGFyZWRYYWN0UHJvY3M7Ci0JUE1TaWduYWxTdGF0ZSA9IHBhcmFtLT5QTVNpZ25hbFN0YXRl OwotCi0JUG9zdG1hc3RlclBpZCA9IHBhcmFtLT5Qb3N0bWFzdGVyUGlkOwotCVBnU3RhcnRU aW1lID0gcGFyYW0tPlBnU3RhcnRUaW1lOwotCVBnUmVsb2FkVGltZSA9IHBhcmFtLT5QZ1Jl bG9hZFRpbWU7Ci0JZmlyc3Rfc3lzbG9nZ2VyX2ZpbGVfdGltZSA9IHBhcmFtLT5maXJzdF9z eXNsb2dnZXJfZmlsZV90aW1lOwotCi0JcmVkaXJlY3Rpb25fZG9uZSA9IHBhcmFtLT5yZWRp cmVjdGlvbl9kb25lOwotCUlzQmluYXJ5VXBncmFkZSA9IHBhcmFtLT5Jc0JpbmFyeVVwZ3Jh ZGU7Ci0JcXVlcnlfaWRfZW5hYmxlZCA9IHBhcmFtLT5xdWVyeV9pZF9lbmFibGVkOwotCW1h eF9zYWZlX2ZkcyA9IHBhcmFtLT5tYXhfc2FmZV9mZHM7Ci0KLQlNYXhCYWNrZW5kcyA9IHBh cmFtLT5NYXhCYWNrZW5kczsKLQotI2lmZGVmIFdJTjMyCi0JUG9zdG1hc3RlckhhbmRsZSA9 IHBhcmFtLT5Qb3N0bWFzdGVySGFuZGxlOwotCXBnd2luMzJfaW5pdGlhbF9zaWduYWxfcGlw ZSA9IHBhcmFtLT5pbml0aWFsX3NpZ25hbF9waXBlOwotI2Vsc2UKLQltZW1jcHkoJnBvc3Rt YXN0ZXJfYWxpdmVfZmRzLCAmcGFyYW0tPnBvc3RtYXN0ZXJfYWxpdmVfZmRzLAotCQkgICBz aXplb2YocG9zdG1hc3Rlcl9hbGl2ZV9mZHMpKTsKLSNlbmRpZgotCi0JbWVtY3B5KCZzeXNs b2dQaXBlLCAmcGFyYW0tPnN5c2xvZ1BpcGUsIHNpemVvZihzeXNsb2dQaXBlKSk7Ci0KLQlz dHJsY3B5KG15X2V4ZWNfcGF0aCwgcGFyYW0tPm15X2V4ZWNfcGF0aCwgTUFYUEdQQVRIKTsK LQotCXN0cmxjcHkocGtnbGliX3BhdGgsIHBhcmFtLT5wa2dsaWJfcGF0aCwgTUFYUEdQQVRI KTsKLQotCWlmIChwYXJhbS0+TXlCZ3dvcmtlckVudHJ5LmJnd19uYW1lWzBdICE9ICdcMCcp Ci0JewotCQlNeUJnd29ya2VyRW50cnkgPSAoQmFja2dyb3VuZFdvcmtlciAqKQotCQkJTWVt b3J5Q29udGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihCYWNrZ3JvdW5kV29y a2VyKSk7Ci0JCW1lbWNweShNeUJnd29ya2VyRW50cnksICZwYXJhbS0+TXlCZ3dvcmtlckVu dHJ5LCBzaXplb2YoQmFja2dyb3VuZFdvcmtlcikpOwotCX0KLQotCS8qCi0JICogV2UgbmVl ZCB0byByZXN0b3JlIGZkLmMncyBjb3VudHMgb2YgZXh0ZXJuYWxseS1vcGVuZWQgRkRzOyB0 byBhdm9pZAotCSAqIGNvbmZ1c2lvbiwgYmUgc3VyZSB0byBkbyB0aGlzIGFmdGVyIHJlc3Rv cmluZyBtYXhfc2FmZV9mZHMuICAoTm90ZToKLQkgKiBCYWNrZW5kSW5pdGlhbGl6ZSB3aWxs IGhhbmRsZSB0aGlzIGZvciBwb3J0LT5zb2NrLikKLQkgKi8KLSNpZm5kZWYgV0lOMzIKLQlp ZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMF0gPj0gMCkKLQkJUmVzZXJ2ZUV4dGVybmFsRkQo KTsKLQlpZiAocG9zdG1hc3Rlcl9hbGl2ZV9mZHNbMV0gPj0gMCkKLQkJUmVzZXJ2ZUV4dGVy bmFsRkQoKTsKLSNlbmRpZgotfQotCi0KIFNpemUKIFNobWVtQmFja2VuZEFycmF5U2l6ZSh2 b2lkKQogewpAQCAtNjQyNSw2ICs1MzM4LDMyIEBAIHBnd2luMzJfZGVhZGNoaWxkX2NhbGxi YWNrKFBWT0lEIGxwUGFyYW1ldGVyLCBCT09MRUFOIFRpbWVyT3JXYWl0RmlyZWQpCiAJLyog UXVldWUgU0lHQ0hMRCBzaWduYWwuICovCiAJcGdfcXVldWVfc2lnbmFsKFNJR0NITEQpOwog fQorCisvKgorICogUXVldWUgYSB3YWl0ZXIgdG8gc2lnbmFsIHdoZW4gdGhpcyBjaGlsZCBk aWVzLiBUaGUgd2FpdCB3aWxsIGJlIGhhbmRsZWQKKyAqIGF1dG9tYXRpY2FsbHkgYnkgYW4g b3BlcmF0aW5nIHN5c3RlbSB0aHJlYWQgcG9vbC4gIFRoZSBtZW1vcnkgd2lsbCBiZQorICog ZnJlZWQgYnkgYSBsYXRlciBjYWxsIHRvIHdhaXRwaWQoKS4KKyAqLwordm9pZAorcGd3aW4z Ml9yZWdpc3Rlcl9kZWFkY2hpbGRfY2FsbGJhY2soSEFORExFIHByb2NIYW5kbGUsIERXT1JE IHByb2NJZCkKK3sKKwl3aW4zMl9kZWFkY2hpbGRfd2FpdGluZm8gKmNoaWxkaW5mbzsKKwor CWNoaWxkaW5mbyA9IHBhbGxvYyhzaXplb2Yod2luMzJfZGVhZGNoaWxkX3dhaXRpbmZvKSk7 CisJY2hpbGRpbmZvLT5wcm9jSGFuZGxlID0gcHJvY0hhbmRsZTsKKwljaGlsZGluZm8tPnBy b2NJZCA9IHByb2NJZDsKKworCWlmICghUmVnaXN0ZXJXYWl0Rm9yU2luZ2xlT2JqZWN0KCZj aGlsZGluZm8tPndhaXRIYW5kbGUsCisJCQkJCQkJCQkgcHJvY0hhbmRsZSwKKwkJCQkJCQkJ CSBwZ3dpbjMyX2RlYWRjaGlsZF9jYWxsYmFjaywKKwkJCQkJCQkJCSBjaGlsZGluZm8sCisJ CQkJCQkJCQkgSU5GSU5JVEUsCisJCQkJCQkJCQkgV1RfRVhFQ1VURU9OTFlPTkNFIHwgV1Rf RVhFQ1VURUlOV0FJVFRIUkVBRCkpCisJCWVyZXBvcnQoRkFUQUwsCisJCQkJKGVycm1zZ19p bnRlcm5hbCgiY291bGQgbm90IHJlZ2lzdGVyIHByb2Nlc3MgZm9yIHdhaXQ6IGVycm9yIGNv ZGUgJWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKSkpOworfQorCiAjZW5kaWYJCQkJ CQkJLyogV0lOMzIgKi8KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvc3RhcnR1cC5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMKaW5kZXgg MGU3ZGUyNmJjMjguLjZiMzhhY2Y5MjJhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3N0YXJ0dXAuYworKysgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N0YXJ0dXAu YwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9z dG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQu aCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N0YXJ0dXAuaCIKICNpbmNsdWRlICJzdG9yYWdl L2lwYy5oIgpAQCAtMjQyLDggKzI0MywxNCBAQCBTdGFydHVwUHJvY0V4aXQoaW50IGNvZGUs IERhdHVtIGFyZykKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAq Lwogdm9pZAotU3RhcnR1cFByb2Nlc3NNYWluKHZvaWQpCitTdGFydHVwUHJvY2Vzc01haW4o Y2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKKwlBc3Nl cnQoc3RhcnR1cF9kYXRhX2xlbiA9PSAwKTsKKworCU15QXV4UHJvY1R5cGUgPSBTdGFydHVw UHJvY2VzczsKKwlNeUJhY2tlbmRUeXBlID0gQl9TVEFSVFVQOworCUF1eGlsaWFyeVByb2Nl c3NJbml0KCk7CisKIAkvKiBBcnJhbmdlIHRvIGNsZWFuIHVwIGF0IHN0YXJ0dXAgcHJvY2Vz cyBleGl0ICovCiAJb25fc2htZW1fZXhpdChTdGFydHVwUHJvY0V4aXQsIDApOwogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3N5c2xvZ2dlci5jIGIvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYwppbmRleCA5NmRkMDNkOWUwNi4uYzkyMzg0MzUz MmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zeXNsb2dnZXIuYwpAQCAtMzksNyArMzksNiBA QAogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBndGltZS5oIgogI2luY2x1ZGUg InBvcnQvcGdfYml0dXRpbHMuaCIKLSNpbmNsdWRlICJwb3N0bWFzdGVyL2ZvcmtfcHJvY2Vz cy5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAjaW5jbHVkZSAicG9z dG1hc3Rlci9wb3N0bWFzdGVyLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9zeXNsb2dnZXIu aCIKQEAgLTUwLDYgKzQ5LDcgQEAKICNpbmNsdWRlICJzdG9yYWdlL3BnX3NobWVtLmgiCiAj aW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgi CiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1wLmgiCiAKQEAgLTEzNCwxMCArMTM0LDcgQEAg c3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCByb3RhdGlvbl9yZXF1ZXN0ZWQgPSBmYWxz ZTsKICNpZmRlZiBFWEVDX0JBQ0tFTkQKIHN0YXRpYyBpbnQJc3lzbG9nZ2VyX2ZkZ2V0KEZJ TEUgKmZpbGUpOwogc3RhdGljIEZJTEUgKnN5c2xvZ2dlcl9mZG9wZW4oaW50IGZkKTsKLXN0 YXRpYyBwaWRfdCBzeXNsb2dnZXJfZm9ya2V4ZWModm9pZCk7Ci1zdGF0aWMgdm9pZCBzeXNs b2dnZXJfcGFyc2VBcmdzKGludCBhcmdjLCBjaGFyICphcmd2W10pOwogI2VuZGlmCi1OT05f RVhFQ19TVEFUSUMgdm9pZCBTeXNMb2dnZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p IHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwogc3RhdGljIHZvaWQgcHJvY2Vzc19waXBlX2lu cHV0KGNoYXIgKmxvZ2J1ZmZlciwgaW50ICpieXRlc19pbl9sb2didWZmZXIpOwogc3RhdGlj IHZvaWQgZmx1c2hfcGlwZV9pbnB1dChjaGFyICpsb2didWZmZXIsIGludCAqYnl0ZXNfaW5f bG9nYnVmZmVyKTsKIHN0YXRpYyBGSUxFICpsb2dmaWxlX29wZW4oY29uc3QgY2hhciAqZmls ZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsCkBAIC0xNTYsMTMgKzE1MywxOSBAQCBzdGF0aWMg dm9pZCBzZXRfbmV4dF9yb3RhdGlvbl90aW1lKHZvaWQpOwogc3RhdGljIHZvaWQgc2lnVXNy MUhhbmRsZXIoU0lHTkFMX0FSR1MpOwogc3RhdGljIHZvaWQgdXBkYXRlX21ldGFpbmZvX2Rh dGFmaWxlKHZvaWQpOwogCit0eXBlZGVmIHN0cnVjdAoreworCWludAkJCXN5c2xvZ0ZpbGU7 CisJaW50CQkJY3N2bG9nRmlsZTsKKwlpbnQJCQlqc29ubG9nRmlsZTsKK30gc3lzbG9nZ2Vy X3N0YXJ0dXBfZGF0YTsKIAogLyoKICAqIE1haW4gZW50cnkgcG9pbnQgZm9yIHN5c2xvZ2dl ciBwcm9jZXNzCiAgKiBhcmdjL2FyZ3YgcGFyYW1ldGVycyBhcmUgdmFsaWQgb25seSBpbiBF WEVDX0JBQ0tFTkQgY2FzZS4KICAqLwotTk9OX0VYRUNfU1RBVElDIHZvaWQKLVN5c0xvZ2dl ck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3ZvaWQKK1N5c0xvZ2dlck1haW4oY2hh ciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKICNpZm5kZWYg V0lOMzIKIAljaGFyCQlsb2didWZmZXJbUkVBRF9CVUZfU0laRV07CkBAIC0xNzQsMTEgKzE3 NywzNCBAQCBTeXNMb2dnZXJNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJcGdfdGlt ZV90CW5vdzsKIAlXYWl0RXZlbnRTZXQgKndlczsKIAotCW5vdyA9IE15U3RhcnRUaW1lOwor CS8qIFJlbGVhc2UgcG9zdG1hc3RlcidzIHdvcmtpbmcgbWVtb3J5IGNvbnRleHQgKi8KKwlp ZiAoUG9zdG1hc3RlckNvbnRleHQpCisJeworCQlNZW1vcnlDb250ZXh0RGVsZXRlKFBvc3Rt YXN0ZXJDb250ZXh0KTsKKwkJUG9zdG1hc3RlckNvbnRleHQgPSBOVUxMOworCX0KIAorCS8q CisJICogUmUtb3BlbiB0aGUgZXJyb3Igb3V0cHV0IGZpbGVzIHRoYXQgd2VyZSBvcGVuZWQg YnkgU3lzTG9nZ2VyX1N0YXJ0KCkuCisJICoKKwkgKiBXZSBleHBlY3QgdGhpcyB3aWxsIGFs d2F5cyBzdWNjZWVkLCB3aGljaCBpcyB0b28gb3B0aW1pc3RpYywgYnV0IGlmIGl0CisJICog ZmFpbHMgdGhlcmUncyBub3QgYSBsb3Qgd2UgY2FuIGRvIHRvIHJlcG9ydCB0aGUgcHJvYmxl bSBhbnl3YXkuICBBcworCSAqIGNvZGVkLCB3ZSdsbCBqdXN0IGNyYXNoIG9uIGEgbnVsbCBw b2ludGVyIGRlcmVmZXJlbmNlIGFmdGVyIGZhaWx1cmUuLi4KKwkgKi8KICNpZmRlZiBFWEVD X0JBQ0tFTkQKLQlzeXNsb2dnZXJfcGFyc2VBcmdzKGFyZ2MsIGFyZ3YpOwotI2VuZGlmCQkJ CQkJCS8qIEVYRUNfQkFDS0VORCAqLworCXsKKwkJc3lzbG9nZ2VyX3N0YXJ0dXBfZGF0YSAq aW5mbyA9IChzeXNsb2dnZXJfc3RhcnR1cF9kYXRhICopIHN0YXJ0dXBfZGF0YTsKKworCQlB c3NlcnQoc3RhcnR1cF9kYXRhX2xlbiA9PSBzaXplb2YoKmluZm8pKTsKKwkJc3lzbG9nRmls ZSA9IHN5c2xvZ2dlcl9mZG9wZW4oaW5mby0+c3lzbG9nRmlsZSk7CisJCWNzdmxvZ0ZpbGUg PSBzeXNsb2dnZXJfZmRvcGVuKGluZm8tPmNzdmxvZ0ZpbGUpOworCQlqc29ubG9nRmlsZSA9 IHN5c2xvZ2dlcl9mZG9wZW4oaW5mby0+anNvbmxvZ0ZpbGUpOworCX0KKyNlbHNlCisJQXNz ZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisjZW5kaWYKKworCW5vdyA9IE15U3RhcnRU aW1lOwogCiAJTXlCYWNrZW5kVHlwZSA9IEJfTE9HR0VSOwogCWluaXRfcHNfZGlzcGxheShO VUxMKTsKQEAgLTU2OCw2ICs1OTQsOSBAQCBTeXNMb2dnZXJfU3RhcnQodm9pZCkKIHsKIAlw aWRfdAkJc3lzbG9nZ2VyUGlkOwogCWNoYXIJICAgKmZpbGVuYW1lOworI2lmZGVmIEVYRUNf QkFDS0VORAorCXN5c2xvZ2dlcl9zdGFydHVwX2RhdGEgc3RhcnR1cF9kYXRhOworI2VuZGlm CQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwogCiAJaWYgKCFMb2dnaW5nX2NvbGxlY3RvcikK IAkJcmV0dXJuIDA7CkBAIC02NjcsMTEyICs2OTYsOTUgQEAgU3lzTG9nZ2VyX1N0YXJ0KHZv aWQpCiAJfQogCiAjaWZkZWYgRVhFQ19CQUNLRU5ECi0Jc3dpdGNoICgoc3lzbG9nZ2VyUGlk ID0gc3lzbG9nZ2VyX2ZvcmtleGVjKCkpKQorCXN0YXJ0dXBfZGF0YS5zeXNsb2dGaWxlID0g c3lzbG9nZ2VyX2ZkZ2V0KHN5c2xvZ0ZpbGUpOworCXN0YXJ0dXBfZGF0YS5jc3Zsb2dGaWxl ID0gc3lzbG9nZ2VyX2ZkZ2V0KGNzdmxvZ0ZpbGUpOworCXN0YXJ0dXBfZGF0YS5qc29ubG9n RmlsZSA9IHN5c2xvZ2dlcl9mZGdldChqc29ubG9nRmlsZSk7CisJc3lzbG9nZ2VyUGlkID0g cG9zdG1hc3Rlcl9jaGlsZF9sYXVuY2goUE1DX1NZU0xPR0dFUiwgKGNoYXIgKikgJnN0YXJ0 dXBfZGF0YSwgc2l6ZW9mKHN0YXJ0dXBfZGF0YSksIE5VTEwpOwogI2Vsc2UKLQlzd2l0Y2gg KChzeXNsb2dnZXJQaWQgPSBmb3JrX3Byb2Nlc3MoKSkpCi0jZW5kaWYKLQl7Ci0JCWNhc2Ug LTE6Ci0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiY291bGQgbm90IGZvcmsgc3lz dGVtIGxvZ2dlcjogJW0iKSkpOwotCQkJcmV0dXJuIDA7Ci0KLSNpZm5kZWYgRVhFQ19CQUNL RU5ECi0JCWNhc2UgMDoKLQkJCS8qIGluIHBvc3RtYXN0ZXIgY2hpbGQgLi4uICovCi0JCQlJ bml0UG9zdG1hc3RlckNoaWxkKCk7Ci0KLQkJCS8qIENsb3NlIHRoZSBwb3N0bWFzdGVyJ3Mg c29ja2V0cyAqLwotCQkJQ2xvc2VQb3N0bWFzdGVyUG9ydHModHJ1ZSk7Ci0KLQkJCS8qIERy b3Agb3VyIGNvbm5lY3Rpb24gdG8gcG9zdG1hc3RlcidzIHNoYXJlZCBtZW1vcnksIGFzIHdl bGwgKi8KLQkJCWRzbV9kZXRhY2hfYWxsKCk7Ci0JCQlQR1NoYXJlZE1lbW9yeURldGFjaCgp OworCXN5c2xvZ2dlclBpZCA9IHBvc3RtYXN0ZXJfY2hpbGRfbGF1bmNoKFBNQ19TWVNMT0dH RVIsIE5VTEwsIDAsIE5VTEwpOworI2VuZGlmCQkJCQkJCS8qIEVYRUNfQkFDS0VORCAqLwog Ci0JCQkvKiBkbyB0aGUgd29yayAqLwotCQkJU3lzTG9nZ2VyTWFpbigwLCBOVUxMKTsKLQkJ CWJyZWFrOwotI2VuZGlmCisJaWYgKHN5c2xvZ2dlclBpZCA9PSAtMSkKKwl7CisJCWVyZXBv cnQoTE9HLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBmb3JrIHN5c3RlbSBsb2dnZXI6ICVt IikpKTsKKwkJcmV0dXJuIDA7CisJfQogCi0JCWRlZmF1bHQ6Ci0JCQkvKiBzdWNjZXNzLCBp biBwb3N0bWFzdGVyICovCisJLyogc3VjY2VzcywgaW4gcG9zdG1hc3RlciAqLwogCi0JCQkv KiBub3cgd2UgcmVkaXJlY3Qgc3RkZXJyLCBpZiBub3QgZG9uZSBhbHJlYWR5ICovCi0JCQlp ZiAoIXJlZGlyZWN0aW9uX2RvbmUpCi0JCQl7CisJLyogbm93IHdlIHJlZGlyZWN0IHN0ZGVy ciwgaWYgbm90IGRvbmUgYWxyZWFkeSAqLworCWlmICghcmVkaXJlY3Rpb25fZG9uZSkKKwl7 CiAjaWZkZWYgV0lOMzIKLQkJCQlpbnQJCQlmZDsKKwkJaW50CQkJZmQ7CiAjZW5kaWYKIAot CQkJCS8qCi0JCQkJICogTGVhdmUgYSBicmVhZGNydW1iIHRyYWlsIHdoZW4gcmVkaXJlY3Rp bmcsIGluIGNhc2UgdGhlIHVzZXIKLQkJCQkgKiBmb3JnZXRzIHRoYXQgcmVkaXJlY3Rpb24g aXMgYWN0aXZlIGFuZCBsb29rcyBvbmx5IGF0IHRoZQotCQkJCSAqIG9yaWdpbmFsIHN0ZGVy ciB0YXJnZXQgZmlsZS4KLQkJCQkgKi8KLQkJCQllcmVwb3J0KExPRywKLQkJCQkJCShlcnJt c2coInJlZGlyZWN0aW5nIGxvZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xsZWN0b3IgcHJvY2Vz cyIpLAotCQkJCQkJIGVycmhpbnQoIkZ1dHVyZSBsb2cgb3V0cHV0IHdpbGwgYXBwZWFyIGlu IGRpcmVjdG9yeSBcIiVzXCIuIiwKLQkJCQkJCQkJIExvZ19kaXJlY3RvcnkpKSk7CisJCS8q CisJCSAqIExlYXZlIGEgYnJlYWRjcnVtYiB0cmFpbCB3aGVuIHJlZGlyZWN0aW5nLCBpbiBj YXNlIHRoZSB1c2VyIGZvcmdldHMKKwkJICogdGhhdCByZWRpcmVjdGlvbiBpcyBhY3RpdmUg YW5kIGxvb2tzIG9ubHkgYXQgdGhlIG9yaWdpbmFsIHN0ZGVycgorCQkgKiB0YXJnZXQgZmls ZS4KKwkJICovCisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coInJlZGlyZWN0aW5nIGxv ZyBvdXRwdXQgdG8gbG9nZ2luZyBjb2xsZWN0b3IgcHJvY2VzcyIpLAorCQkJCSBlcnJoaW50 KCJGdXR1cmUgbG9nIG91dHB1dCB3aWxsIGFwcGVhciBpbiBkaXJlY3RvcnkgXCIlc1wiLiIs CisJCQkJCQkgTG9nX2RpcmVjdG9yeSkpKTsKIAogI2lmbmRlZiBXSU4zMgotCQkJCWZmbHVz aChzdGRvdXQpOwotCQkJCWlmIChkdXAyKHN5c2xvZ1BpcGVbMV0sIFNURE9VVF9GSUxFTk8p IDwgMCkKLQkJCQkJZXJlcG9ydChGQVRBTCwKLQkJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9h Y2Nlc3MoKSwKLQkJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVkaXJlY3Qgc3Rkb3V0OiAl bSIpKSk7Ci0JCQkJZmZsdXNoKHN0ZGVycik7Ci0JCQkJaWYgKGR1cDIoc3lzbG9nUGlwZVsx XSwgU1RERVJSX0ZJTEVOTykgPCAwKQotCQkJCQllcmVwb3J0KEZBVEFMLAotCQkJCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBy ZWRpcmVjdCBzdGRlcnI6ICVtIikpKTsKLQkJCQkvKiBOb3cgd2UgYXJlIGRvbmUgd2l0aCB0 aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlLiAqLwotCQkJCWNsb3NlKHN5c2xvZ1BpcGVbMV0p OwotCQkJCXN5c2xvZ1BpcGVbMV0gPSAtMTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCWlmIChk dXAyKHN5c2xvZ1BpcGVbMV0sIFNURE9VVF9GSUxFTk8pIDwgMCkKKwkJCWVyZXBvcnQoRkFU QUwsCisJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJj b3VsZCBub3QgcmVkaXJlY3Qgc3Rkb3V0OiAlbSIpKSk7CisJCWZmbHVzaChzdGRlcnIpOwor CQlpZiAoZHVwMihzeXNsb2dQaXBlWzFdLCBTVERFUlJfRklMRU5PKSA8IDApCisJCQllcmVw b3J0KEZBVEFMLAorCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCQkJIGVy cm1zZygiY291bGQgbm90IHJlZGlyZWN0IHN0ZGVycjogJW0iKSkpOworCQkvKiBOb3cgd2Ug YXJlIGRvbmUgd2l0aCB0aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlLiAqLworCQljbG9zZShz eXNsb2dQaXBlWzFdKTsKKwkJc3lzbG9nUGlwZVsxXSA9IC0xOwogI2Vsc2UKIAotCQkJCS8q Ci0JCQkJICogb3BlbiB0aGUgcGlwZSBpbiBiaW5hcnkgbW9kZSBhbmQgbWFrZSBzdXJlIHN0 ZGVyciBpcyBiaW5hcnkKLQkJCQkgKiBhZnRlciBpdCdzIGJlZW4gZHVwJ2VkIGludG8sIHRv IGF2b2lkIGRpc3R1cmJpbmcgdGhlIHBpcGUKLQkJCQkgKiBjaHVua2luZyBwcm90b2NvbC4K LQkJCQkgKi8KLQkJCQlmZmx1c2goc3RkZXJyKTsKLQkJCQlmZCA9IF9vcGVuX29zZmhhbmRs ZSgoaW50cHRyX3QpIHN5c2xvZ1BpcGVbMV0sCi0JCQkJCQkJCQkgX09fQVBQRU5EIHwgX09f QklOQVJZKTsKLQkJCQlpZiAoZHVwMihmZCwgU1RERVJSX0ZJTEVOTykgPCAwKQotCQkJCQll cmVwb3J0KEZBVEFMLAotCQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJ CQkJCSBlcnJtc2coImNvdWxkIG5vdCByZWRpcmVjdCBzdGRlcnI6ICVtIikpKTsKLQkJCQlj bG9zZShmZCk7Ci0JCQkJX3NldG1vZGUoU1RERVJSX0ZJTEVOTywgX09fQklOQVJZKTsKKwkJ LyoKKwkJICogb3BlbiB0aGUgcGlwZSBpbiBiaW5hcnkgbW9kZSBhbmQgbWFrZSBzdXJlIHN0 ZGVyciBpcyBiaW5hcnkgYWZ0ZXIKKwkJICogaXQncyBiZWVuIGR1cCdlZCBpbnRvLCB0byBh dm9pZCBkaXN0dXJiaW5nIHRoZSBwaXBlIGNodW5raW5nCisJCSAqIHByb3RvY29sLgorCQkg Ki8KKwkJZmZsdXNoKHN0ZGVycik7CisJCWZkID0gX29wZW5fb3NmaGFuZGxlKChpbnRwdHJf dCkgc3lzbG9nUGlwZVsxXSwKKwkJCQkJCQkgX09fQVBQRU5EIHwgX09fQklOQVJZKTsKKwkJ aWYgKGR1cDIoZmQsIFNUREVSUl9GSUxFTk8pIDwgMCkKKwkJCWVyZXBvcnQoRkFUQUwsCisJ CQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAorCQkJCQkgZXJybXNnKCJjb3VsZCBu b3QgcmVkaXJlY3Qgc3RkZXJyOiAlbSIpKSk7CisJCWNsb3NlKGZkKTsKKwkJX3NldG1vZGUo U1RERVJSX0ZJTEVOTywgX09fQklOQVJZKTsKIAotCQkJCS8qCi0JCQkJICogTm93IHdlIGFy ZSBkb25lIHdpdGggdGhlIHdyaXRlIGVuZCBvZiB0aGUgcGlwZS4KLQkJCQkgKiBDbG9zZUhh bmRsZSgpIG11c3Qgbm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoZSBwcmVjZWRpbmcKLQkJCQkg KiBjbG9zZSgpIGNsb3NlcyB0aGUgdW5kZXJseWluZyBoYW5kbGUuCi0JCQkJICovCi0JCQkJ c3lzbG9nUGlwZVsxXSA9IDA7CisJCS8qCisJCSAqIE5vdyB3ZSBhcmUgZG9uZSB3aXRoIHRo ZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUuICBDbG9zZUhhbmRsZSgpIG11c3QKKwkJICogbm90 IGJlIGNhbGxlZCBiZWNhdXNlIHRoZSBwcmVjZWRpbmcgY2xvc2UoKSBjbG9zZXMgdGhlIHVu ZGVybHlpbmcKKwkJICogaGFuZGxlLgorCQkgKi8KKwkJc3lzbG9nUGlwZVsxXSA9IDA7CiAj ZW5kaWYKLQkJCQlyZWRpcmVjdGlvbl9kb25lID0gdHJ1ZTsKLQkJCX0KLQotCQkJLyogcG9z dG1hc3RlciB3aWxsIG5ldmVyIHdyaXRlIHRoZSBmaWxlKHMpOyBjbG9zZSAnZW0gKi8KLQkJ CWZjbG9zZShzeXNsb2dGaWxlKTsKLQkJCXN5c2xvZ0ZpbGUgPSBOVUxMOwotCQkJaWYgKGNz dmxvZ0ZpbGUgIT0gTlVMTCkKLQkJCXsKLQkJCQlmY2xvc2UoY3N2bG9nRmlsZSk7Ci0JCQkJ Y3N2bG9nRmlsZSA9IE5VTEw7Ci0JCQl9Ci0JCQlpZiAoanNvbmxvZ0ZpbGUgIT0gTlVMTCkK LQkJCXsKLQkJCQlmY2xvc2UoanNvbmxvZ0ZpbGUpOwotCQkJCWpzb25sb2dGaWxlID0gTlVM TDsKLQkJCX0KLQkJCXJldHVybiAoaW50KSBzeXNsb2dnZXJQaWQ7CisJCXJlZGlyZWN0aW9u X2RvbmUgPSB0cnVlOwogCX0KIAotCS8qIHdlIHNob3VsZCBuZXZlciByZWFjaCBoZXJlICov Ci0JcmV0dXJuIDA7CisJLyogcG9zdG1hc3RlciB3aWxsIG5ldmVyIHdyaXRlIHRoZSBmaWxl KHMpOyBjbG9zZSAnZW0gKi8KKwlmY2xvc2Uoc3lzbG9nRmlsZSk7CisJc3lzbG9nRmlsZSA9 IE5VTEw7CisJaWYgKGNzdmxvZ0ZpbGUgIT0gTlVMTCkKKwl7CisJCWZjbG9zZShjc3Zsb2dG aWxlKTsKKwkJY3N2bG9nRmlsZSA9IE5VTEw7CisJfQorCWlmIChqc29ubG9nRmlsZSAhPSBO VUxMKQorCXsKKwkJZmNsb3NlKGpzb25sb2dGaWxlKTsKKwkJanNvbmxvZ0ZpbGUgPSBOVUxM OworCX0KKwlyZXR1cm4gKGludCkgc3lzbG9nZ2VyUGlkOwogfQogCiAKQEAgLTgzMSw2OSAr ODQzLDYgQEAgc3lzbG9nZ2VyX2Zkb3BlbihpbnQgZmQpCiAKIAlyZXR1cm4gZmlsZTsKIH0K LQotLyoKLSAqIHN5c2xvZ2dlcl9mb3JrZXhlYygpIC0KLSAqCi0gKiBGb3JtYXQgdXAgdGhl IGFyZ2xpc3QgZm9yLCB0aGVuIGZvcmsgYW5kIGV4ZWMsIGEgc3lzbG9nZ2VyIHByb2Nlc3MK LSAqLwotc3RhdGljIHBpZF90Ci1zeXNsb2dnZXJfZm9ya2V4ZWModm9pZCkKLXsKLQljaGFy CSAgICphdlsxMF07Ci0JaW50CQkJYWMgPSAwOwotCWNoYXIJCWZpbGVub2J1ZlszMl07Ci0J Y2hhcgkJY3N2ZmlsZW5vYnVmWzMyXTsKLQljaGFyCQlqc29uZmlsZW5vYnVmWzMyXTsKLQot CWF2W2FjKytdID0gInBvc3RncmVzIjsKLQlhdlthYysrXSA9ICItLWZvcmtsb2ciOwotCWF2 W2FjKytdID0gTlVMTDsJCQkvKiBmaWxsZWQgaW4gYnkgcG9zdG1hc3Rlcl9mb3JrZXhlYyAq LwotCi0JLyogc3RhdGljIHZhcmlhYmxlcyAodGhvc2Ugbm90IHBhc3NlZCBieSB3cml0ZV9i YWNrZW5kX3ZhcmlhYmxlcykgKi8KLQlzbnByaW50ZihmaWxlbm9idWYsIHNpemVvZihmaWxl bm9idWYpLCAiJWQiLAotCQkJIHN5c2xvZ2dlcl9mZGdldChzeXNsb2dGaWxlKSk7Ci0JYXZb YWMrK10gPSBmaWxlbm9idWY7Ci0Jc25wcmludGYoY3N2ZmlsZW5vYnVmLCBzaXplb2YoY3N2 ZmlsZW5vYnVmKSwgIiVkIiwKLQkJCSBzeXNsb2dnZXJfZmRnZXQoY3N2bG9nRmlsZSkpOwot CWF2W2FjKytdID0gY3N2ZmlsZW5vYnVmOwotCXNucHJpbnRmKGpzb25maWxlbm9idWYsIHNp emVvZihqc29uZmlsZW5vYnVmKSwgIiVkIiwKLQkJCSBzeXNsb2dnZXJfZmRnZXQoanNvbmxv Z0ZpbGUpKTsKLQlhdlthYysrXSA9IGpzb25maWxlbm9idWY7Ci0KLQlhdlthY10gPSBOVUxM OwotCUFzc2VydChhYyA8IGxlbmd0aG9mKGF2KSk7Ci0KLQlyZXR1cm4gcG9zdG1hc3Rlcl9m b3JrZXhlYyhhYywgYXYpOwotfQotCi0vKgotICogc3lzbG9nZ2VyX3BhcnNlQXJncygpIC0K LSAqCi0gKiBFeHRyYWN0IGRhdGEgZnJvbSB0aGUgYXJnbGlzdCBmb3IgZXhlYydlZCBzeXNs b2dnZXIgcHJvY2VzcwotICovCi1zdGF0aWMgdm9pZAotc3lzbG9nZ2VyX3BhcnNlQXJncyhp bnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWludAkJCWZkOwotCi0JQXNzZXJ0KGFyZ2Mg PT0gNik7Ci0JYXJndiArPSAzOwotCi0JLyoKLQkgKiBSZS1vcGVuIHRoZSBlcnJvciBvdXRw dXQgZmlsZXMgdGhhdCB3ZXJlIG9wZW5lZCBieSBTeXNMb2dnZXJfU3RhcnQoKS4KLQkgKgot CSAqIFdlIGV4cGVjdCB0aGlzIHdpbGwgYWx3YXlzIHN1Y2NlZWQsIHdoaWNoIGlzIHRvbyBv cHRpbWlzdGljLCBidXQgaWYgaXQKLQkgKiBmYWlscyB0aGVyZSdzIG5vdCBhIGxvdCB3ZSBj YW4gZG8gdG8gcmVwb3J0IHRoZSBwcm9ibGVtIGFueXdheS4gIEFzCi0JICogY29kZWQsIHdl J2xsIGp1c3QgY3Jhc2ggb24gYSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgYWZ0ZXIgZmFp bHVyZS4uLgotCSAqLwotCWZkID0gYXRvaSgqYXJndisrKTsKLQlzeXNsb2dGaWxlID0gc3lz bG9nZ2VyX2Zkb3BlbihmZCk7Ci0JZmQgPSBhdG9pKCphcmd2KyspOwotCWNzdmxvZ0ZpbGUg PSBzeXNsb2dnZXJfZmRvcGVuKGZkKTsKLQlmZCA9IGF0b2koKmFyZ3YrKyk7Ci0JanNvbmxv Z0ZpbGUgPSBzeXNsb2dnZXJfZmRvcGVuKGZkKTsKLX0KICNlbmRpZgkJCQkJCQkvKiBFWEVD X0JBQ0tFTkQgKi8KIAogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHdyaXRlci5jIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0ZXIuYwppbmRleCA0 OGJjOTIyMDViNS4uODk5NTAzNTBhZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvd2Fsd3JpdGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWx3cml0 ZXIuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgImxpYnBxL3Bxc2lnbmFsLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAi cG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1 cHQuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3dhbHdyaXRlci5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCkBAIC04OCwxMyArODksMTkgQEAgc3RhdGljIHZvaWQgSGFuZGxl V2FsV3JpdGVySW50ZXJydXB0cyh2b2lkKTsKICAqIGJhc2ljIGV4ZWN1dGlvbiBlbnZpcm9u bWVudCwgYnV0IG5vdCBlbmFibGVkIHNpZ25hbHMgeWV0LgogICovCiB2b2lkCi1XYWxXcml0 ZXJNYWluKHZvaWQpCitXYWxXcml0ZXJNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90 IHN0YXJ0dXBfZGF0YV9sZW4pCiB7CiAJc2lnam1wX2J1Zglsb2NhbF9zaWdqbXBfYnVmOwog CU1lbW9yeUNvbnRleHQgd2Fsd3JpdGVyX2NvbnRleHQ7CiAJaW50CQkJbGVmdF90aWxsX2hp YmVybmF0ZTsKIAlib29sCQloaWJlcm5hdGluZzsKIAorCUFzc2VydChzdGFydHVwX2RhdGFf bGVuID09IDApOworCisJTXlBdXhQcm9jVHlwZSA9IFdhbFdyaXRlclByb2Nlc3M7CisJTXlC YWNrZW5kVHlwZSA9IEJfV0FMX1dSSVRFUjsKKwlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOwor CiAJLyoKIAkgKiBQcm9wZXJseSBhY2NlcHQgb3IgaWdub3JlIHNpZ25hbHMgdGhlIHBvc3Rt YXN0ZXIgbWlnaHQgc2VuZCB1cwogCSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xhdW5jaGVyLmMKaW5kZXggNTAxOTEwYjQ0NTQuLmE0MDk4YzIzYjJiIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCkBAIC0zMCw3 ICszMCw2IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CiAjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dvcmtlci5oIgotI2luY2x1ZGUgInBvc3RtYXN0 ZXIvZm9ya19wcm9jZXNzLmgiCiAjaW5jbHVkZSAicG9zdG1hc3Rlci9pbnRlcnJ1cHQuaCIK ICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNh dGlvbi9sb2dpY2FsbGF1bmNoZXIuaCIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3dhbHJlY2VpdmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNl aXZlci5jCmluZGV4IDI2ZGVkOTI4YTcxLi45YjAxMTMyNzA0YiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAi bGlicHEvcHFzaWduYWwuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJw Z3N0YXQuaCIKKyNpbmNsdWRlICJwb3N0bWFzdGVyL2F1eHByb2Nlc3MuaCIKICNpbmNsdWRl ICJwb3N0bWFzdGVyL2ludGVycnVwdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJl Y2VpdmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCkBAIC0xODMs NyArMTg0LDcgQEAgUHJvY2Vzc1dhbFJjdkludGVycnVwdHModm9pZCkKIAogLyogTWFpbiBl bnRyeSBwb2ludCBmb3Igd2FscmVjZWl2ZXIgcHJvY2VzcyAqLwogdm9pZAotV2FsUmVjZWl2 ZXJNYWluKHZvaWQpCitXYWxSZWNlaXZlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXpl X3Qgc3RhcnR1cF9kYXRhX2xlbikKIHsKIAljaGFyCQljb25uaW5mb1tNQVhDT05OSU5GT107 CiAJY2hhcgkgICAqdG1wX2Nvbm5pbmZvOwpAQCAtMTk5LDYgKzIwMCwxMiBAQCBXYWxSZWNl aXZlck1haW4odm9pZCkKIAljaGFyCSAgICpzZW5kZXJfaG9zdCA9IE5VTEw7CiAJaW50CQkJ c2VuZGVyX3BvcnQgPSAwOwogCisJQXNzZXJ0KHN0YXJ0dXBfZGF0YV9sZW4gPT0gMCk7CisK KwlNeUF1eFByb2NUeXBlID0gV2FsUmVjZWl2ZXJQcm9jZXNzOworCU15QmFja2VuZFR5cGUg PSBCX1dBTF9SRUNFSVZFUjsKKwlBdXhpbGlhcnlQcm9jZXNzSW5pdCgpOworCiAJLyoKIAkg KiBXYWxSY3Ygc2hvdWxkIGJlIHNldCB1cCBhbHJlYWR5IChpZiB3ZSBhcmUgYSBiYWNrZW5k LCB3ZSBpbmhlcml0IHRoaXMKIAkgKiBieSBmb3JrKCkgb3IgRVhFQ19CQUNLRU5EIG1lY2hh bmlzbSBmcm9tIHRoZSBwb3N0bWFzdGVyKS4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3NobWVtLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1lbS5jCmlu ZGV4IDU0NjVmYTE5NjQ2Li5kNjVkNDYxMzQwYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvc2htZW0uYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaG1l bS5jCkBAIC0xNDQsNiArMTQ0LDggQEAgSW5pdFNobWVtQWxsb2NhdGlvbih2b2lkKQogCS8q CiAJICogSW5pdGlhbGl6ZSBTaG1lbVZhcmlhYmxlQ2FjaGUgZm9yIHRyYW5zYWN0aW9uIG1h bmFnZXIuIChUaGlzIGRvZXNuJ3QKIAkgKiByZWFsbHkgYmVsb25nIGhlcmUsIGJ1dCBub3Qg d29ydGggbW92aW5nLikKKwkgKgorCSAqIFhYWDogd2UgcmVhbGx5IHNob3VsZCBtb3ZlIHRo aXMKIAkgKi8KIAlTaG1lbVZhcmlhYmxlQ2FjaGUgPSAoVmFyaWFibGVDYWNoZSkKIAkJU2ht ZW1BbGxvYyhzaXplb2YoKlNobWVtVmFyaWFibGVDYWNoZSkpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0 L2dsb2JhbHMuYwppbmRleCA2MGJjMTIxN2ZiNC4uYjZjMzA1NTAyN2UgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2luaXQvZ2xvYmFscy5jCkBAIC00NCw2ICs0NCw3IEBAIHZvbGF0aWxlIHVpbnQzMiBD cml0U2VjdGlvbkNvdW50ID0gMDsKIGludAkJCU15UHJvY1BpZDsKIHBnX3RpbWVfdAlNeVN0 YXJ0VGltZTsKIFRpbWVzdGFtcFR6IE15U3RhcnRUaW1lc3RhbXA7CitzdHJ1Y3QgQ2xpZW50 U29ja2V0ICpNeUNsaWVudFNvY2tldDsKIHN0cnVjdCBQb3J0ICpNeVByb2NQb3J0OwogaW50 MzIJCU15Q2FuY2VsS2V5OwogaW50CQkJTXlQTUNoaWxkU2xvdDsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvbWlzY2luaXQuYwppbmRleCBjZmM1YWZhYTZmZC4uMGNlYzllNTQ4NjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYworKysgYi9zcmMvYmFja2Vu ZC91dGlscy9pbml0L21pc2Npbml0LmMKQEAgLTg1LDEzOSArODUsNiBAQCBib29sCQlJZ25v cmVTeXN0ZW1JbmRleGVzID0gZmFsc2U7CiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAotLyoKLSAq IEluaXRpYWxpemUgdGhlIGJhc2ljIGVudmlyb25tZW50IGZvciBhIHBvc3RtYXN0ZXIgY2hp bGQKLSAqCi0gKiBTaG91bGQgYmUgY2FsbGVkIGFzIGVhcmx5IGFzIHBvc3NpYmxlIGFmdGVy IHRoZSBjaGlsZCdzIHN0YXJ0dXAuIEhvd2V2ZXIsCi0gKiBvbiBFWEVDX0JBQ0tFTkQgYnVp bGRzIGl0IGRvZXMgbmVlZCB0byBiZSBhZnRlciByZWFkX2JhY2tlbmRfdmFyaWFibGVzKCku Ci0gKi8KLXZvaWQKLUluaXRQb3N0bWFzdGVyQ2hpbGQodm9pZCkKLXsKLQlJc1VuZGVyUG9z dG1hc3RlciA9IHRydWU7CS8qIHdlIGFyZSBhIHBvc3RtYXN0ZXIgc3VicHJvY2VzcyBub3cg Ki8KLQotCS8qCi0JICogU3RhcnQgb3VyIHdpbjMyIHNpZ25hbCBpbXBsZW1lbnRhdGlvbi4g VGhpcyBoYXMgdG8gYmUgZG9uZSBhZnRlciB3ZQotCSAqIHJlYWQgdGhlIGJhY2tlbmQgdmFy aWFibGVzLCBiZWNhdXNlIHdlIG5lZWQgdG8gcGljayB1cCB0aGUgc2lnbmFsIHBpcGUKLQkg KiBmcm9tIHRoZSBwYXJlbnQgcHJvY2Vzcy4KLQkgKi8KLSNpZmRlZiBXSU4zMgotCXBnd2lu MzJfc2lnbmFsX2luaXRpYWxpemUoKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBTZXQgcmVmZXJl bmNlIHBvaW50IGZvciBzdGFjay1kZXB0aCBjaGVja2luZy4gIFRoaXMgbWlnaHQgc2VlbQot CSAqIHJlZHVuZGFudCBpbiAhRVhFQ19CQUNLRU5EIGJ1aWxkczsgYnV0IGl0J3Mgbm90IGJl Y2F1c2UgdGhlIHBvc3RtYXN0ZXIKLQkgKiBsYXVuY2hlcyBpdHMgY2hpbGRyZW4gZnJvbSBz aWduYWwgaGFuZGxlcnMsIHNvIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgb24KLQkgKiBhbiBhbHRl cm5hdGl2ZSBzdGFjay4KLQkgKi8KLQkodm9pZCkgc2V0X3N0YWNrX2Jhc2UoKTsKLQotCUlu aXRQcm9jZXNzR2xvYmFscygpOwotCi0JLyoKLQkgKiBtYWtlIHN1cmUgc3RkZXJyIGlzIGlu IGJpbmFyeSBtb2RlIGJlZm9yZSBhbnl0aGluZyBjYW4gcG9zc2libHkgYmUKLQkgKiB3cml0 dGVuIHRvIGl0LCBpbiBjYXNlIGl0J3MgYWN0dWFsbHkgdGhlIHN5c2xvZ2dlciBwaXBlLCBz byB0aGUgcGlwZQotCSAqIGNodW5raW5nIHByb3RvY29sIGlzbid0IGRpc3R1cmJlZC4gTm9u LWxvZ3BpcGUgZGF0YSBnZXRzIHRyYW5zbGF0ZWQgb24KLQkgKiByZWRpcmVjdGlvbiAoZS5n LiB2aWEgcGdfY3RsIC1sKSBhbnl3YXkuCi0JICovCi0jaWZkZWYgV0lOMzIKLQlfc2V0bW9k ZShmaWxlbm8oc3RkZXJyKSwgX09fQklOQVJZKTsKLSNlbmRpZgotCi0JLyogV2UgZG9uJ3Qg d2FudCB0aGUgcG9zdG1hc3RlcidzIHByb2NfZXhpdCgpIGhhbmRsZXJzICovCi0Jb25fZXhp dF9yZXNldCgpOwotCi0JLyogSW4gRVhFQ19CQUNLRU5EIGNhc2Ugd2Ugd2lsbCBub3QgaGF2 ZSBpbmhlcml0ZWQgQmxvY2tTaWcgZXRjIHZhbHVlcyAqLwotI2lmZGVmIEVYRUNfQkFDS0VO RAotCXBxaW5pdG1hc2soKTsKLSNlbmRpZgotCi0JLyogSW5pdGlhbGl6ZSBwcm9jZXNzLWxv Y2FsIGxhdGNoIHN1cHBvcnQgKi8KLQlJbml0aWFsaXplTGF0Y2hTdXBwb3J0KCk7Ci0JSW5p dFByb2Nlc3NMb2NhbExhdGNoKCk7Ci0JSW5pdGlhbGl6ZUxhdGNoV2FpdFNldCgpOwotCi0J LyoKLQkgKiBJZiBwb3NzaWJsZSwgbWFrZSB0aGlzIHByb2Nlc3MgYSBncm91cCBsZWFkZXIs IHNvIHRoYXQgdGhlIHBvc3RtYXN0ZXIKLQkgKiBjYW4gc2lnbmFsIGFueSBjaGlsZCBwcm9j ZXNzZXMgdG9vLiBOb3QgYWxsIHByb2Nlc3NlcyB3aWxsIGhhdmUKLQkgKiBjaGlsZHJlbiwg YnV0IGZvciBjb25zaXN0ZW5jeSB3ZSBtYWtlIGFsbCBwb3N0bWFzdGVyIGNoaWxkIHByb2Nl c3NlcyBkbwotCSAqIHRoaXMuCi0JICovCi0jaWZkZWYgSEFWRV9TRVRTSUQKLQlpZiAoc2V0 c2lkKCkgPCAwKQotCQllbG9nKEZBVEFMLCAic2V0c2lkKCkgZmFpbGVkOiAlbSIpOwotI2Vu ZGlmCi0KLQkvKgotCSAqIEV2ZXJ5IHBvc3RtYXN0ZXIgY2hpbGQgcHJvY2VzcyBpcyBleHBl Y3RlZCB0byByZXNwb25kIHByb21wdGx5IHRvCi0JICogU0lHUVVJVCBhdCBhbGwgdGltZXMu ICBUaGVyZWZvcmUgd2UgY2VudHJhbGx5IHJlbW92ZSBTSUdRVUlUIGZyb20KLQkgKiBCbG9j a1NpZyBhbmQgaW5zdGFsbCBhIHN1aXRhYmxlIHNpZ25hbCBoYW5kbGVyLiAgKENsaWVudC1m YWNpbmcKLQkgKiBwcm9jZXNzZXMgbWF5IGNob29zZSB0byByZXBsYWNlIHRoaXMgZGVmYXVs dCBjaG9pY2Ugb2YgaGFuZGxlciB3aXRoCi0JICogcXVpY2tkaWUoKS4pICBBbGwgb3RoZXIg YmxvY2thYmxlIHNpZ25hbHMgcmVtYWluIGJsb2NrZWQgZm9yIG5vdy4KLQkgKi8KLQlwcXNp Z25hbChTSUdRVUlULCBTaWduYWxIYW5kbGVyRm9yQ3Jhc2hFeGl0KTsKLQotCXNpZ2RlbHNl dCgmQmxvY2tTaWcsIFNJR1FVSVQpOwotCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxv Y2tTaWcsIE5VTEwpOwotCi0JLyogUmVxdWVzdCBhIHNpZ25hbCBpZiB0aGUgcG9zdG1hc3Rl ciBkaWVzLCBpZiBwb3NzaWJsZS4gKi8KLQlQb3N0bWFzdGVyRGVhdGhTaWduYWxJbml0KCk7 Ci0KLQkvKiBEb24ndCBnaXZlIHRoZSBwaXBlIHRvIHN1YnByb2dyYW1zIHRoYXQgd2UgZXhl Y3V0ZS4gKi8KLSNpZm5kZWYgV0lOMzIKLQlpZiAoZmNudGwocG9zdG1hc3Rlcl9hbGl2ZV9m ZHNbUE9TVE1BU1RFUl9GRF9XQVRDSF0sIEZfU0VURkQsIEZEX0NMT0VYRUMpIDwgMCkKLQkJ ZXJlcG9ydChGQVRBTCwKLQkJCQkoZXJyY29kZV9mb3Jfc29ja2V0X2FjY2VzcygpLAotCQkJ CSBlcnJtc2dfaW50ZXJuYWwoImNvdWxkIG5vdCBzZXQgcG9zdG1hc3RlciBkZWF0aCBtb25p dG9yaW5nIHBpcGUgdG8gRkRfQ0xPRVhFQyBtb2RlOiAlbSIpKSk7Ci0jZW5kaWYKLX0KLQot LyoKLSAqIEluaXRpYWxpemUgdGhlIGJhc2ljIGVudmlyb25tZW50IGZvciBhIHN0YW5kYWxv bmUgcHJvY2Vzcy4KLSAqCi0gKiBhcmd2MCBoYXMgdG8gYmUgc3VpdGFibGUgdG8gZmluZCB0 aGUgcHJvZ3JhbSdzIGV4ZWN1dGFibGUuCi0gKi8KLXZvaWQKLUluaXRTdGFuZGFsb25lUHJv Y2Vzcyhjb25zdCBjaGFyICphcmd2MCkKLXsKLQlBc3NlcnQoIUlzUG9zdG1hc3RlckVudmly b25tZW50KTsKLQotCU15QmFja2VuZFR5cGUgPSBCX1NUQU5EQUxPTkVfQkFDS0VORDsKLQot CS8qCi0JICogU3RhcnQgb3VyIHdpbjMyIHNpZ25hbCBpbXBsZW1lbnRhdGlvbgotCSAqLwot I2lmZGVmIFdJTjMyCi0JcGd3aW4zMl9zaWduYWxfaW5pdGlhbGl6ZSgpOwotI2VuZGlmCi0K LQlJbml0UHJvY2Vzc0dsb2JhbHMoKTsKLQotCS8qIEluaXRpYWxpemUgcHJvY2Vzcy1sb2Nh bCBsYXRjaCBzdXBwb3J0ICovCi0JSW5pdGlhbGl6ZUxhdGNoU3VwcG9ydCgpOwotCUluaXRQ cm9jZXNzTG9jYWxMYXRjaCgpOwotCUluaXRpYWxpemVMYXRjaFdhaXRTZXQoKTsKLQotCS8q Ci0JICogRm9yIGNvbnNpc3RlbmN5IHdpdGggSW5pdFBvc3RtYXN0ZXJDaGlsZCwgaW5pdGlh bGl6ZSBzaWduYWwgbWFzayBoZXJlLgotCSAqIEJ1dCB3ZSBkb24ndCB1bmJsb2NrIFNJR1FV SVQgb3IgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlciBmb3IgaXQuCi0JICovCi0JcHFpbml0 bWFzaygpOwotCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmQmxvY2tTaWcsIE5VTEwpOwot Ci0JLyogQ29tcHV0ZSBwYXRocywgbm8gcG9zdG1hc3RlciB0byBpbmhlcml0IGZyb20gKi8K LQlpZiAobXlfZXhlY19wYXRoWzBdID09ICdcMCcpCi0JewotCQlpZiAoZmluZF9teV9leGVj KGFyZ3YwLCBteV9leGVjX3BhdGgpIDwgMCkKLQkJCWVsb2coRkFUQUwsICIlczogY291bGQg bm90IGxvY2F0ZSBteSBvd24gZXhlY3V0YWJsZSBwYXRoIiwKLQkJCQkgYXJndjApOwotCX0K LQotCWlmIChwa2dsaWJfcGF0aFswXSA9PSAnXDAnKQotCQlnZXRfcGtnbGliX3BhdGgobXlf ZXhlY19wYXRoLCBwa2dsaWJfcGF0aCk7Ci19Ci0KIHZvaWQKIFN3aXRjaFRvU2hhcmVkTGF0 Y2godm9pZCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYnBxL2xpYnBxLWJlLmgg Yi9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCmluZGV4IDliNmQ4ZmM1NTcxLi45NTlm ZWViYTAyNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbGlicHEvbGlicHEtYmUuaAorKysg Yi9zcmMvaW5jbHVkZS9saWJwcS9saWJwcS1iZS5oCkBAIC0xMzIsMTAgKzEzMiwxMSBAQCB0 eXBlZGVmIHN0cnVjdCBDbGllbnRDb25uZWN0aW9uSW5mbwogdHlwZWRlZiBzdHJ1Y3QgUG9y dAogewogCXBnc29ja2V0CXNvY2s7CQkJLyogRmlsZSBkZXNjcmlwdG9yICovCi0JYm9vbAkJ bm9ibG9jazsJCS8qIGlzIHRoZSBzb2NrZXQgaW4gbm9uLWJsb2NraW5nIG1vZGU/ICovCi0J UHJvdG9jb2xWZXJzaW9uIHByb3RvOwkJLyogRkUvQkUgcHJvdG9jb2wgdmVyc2lvbiAqLwog CVNvY2tBZGRyCWxhZGRyOwkJCS8qIGxvY2FsIGFkZHIgKHBvc3RtYXN0ZXIpICovCiAJU29j a0FkZHIJcmFkZHI7CQkJLyogcmVtb3RlIGFkZHIgKGNsaWVudCkgKi8KKworCWJvb2wJCW5v YmxvY2s7CQkvKiBpcyB0aGUgc29ja2V0IGluIG5vbi1ibG9ja2luZyBtb2RlPyAqLworCVBy b3RvY29sVmVyc2lvbiBwcm90bzsJCS8qIEZFL0JFIHByb3RvY29sIHZlcnNpb24gKi8KIAlj aGFyCSAgICpyZW1vdGVfaG9zdDsJLyogbmFtZSAob3IgaXAgYWRkcikgb2YgcmVtb3RlIGhv c3QgKi8KIAljaGFyCSAgICpyZW1vdGVfaG9zdG5hbWU7CS8qIG5hbWUgKG5vdCBpcCBhZGRy KSBvZiByZW1vdGUgaG9zdCwgaWYKIAkJCQkJCQkJCSAqIGF2YWlsYWJsZSAqLwpAQCAtMjE4 LDExICsyMTksMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgUG9ydAogICogQ2xpZW50U29ja2V0IGhv bGRzIGEgc29ja2V0IGZvciBhbiBhY2NlcHRlZCBjb25uZWN0aW9uLCBhbG9uZyB3aXRoIHRo ZQogICogaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVuZHBvaW50cy4KICAqLwotdHlwZWRlZiBz dHJ1Y3QgQ2xpZW50U29ja2V0IHsKK3N0cnVjdCBDbGllbnRTb2NrZXQKK3sKIAlwZ3NvY2tl dAlzb2NrOwkJCS8qIEZpbGUgZGVzY3JpcHRvciAqLwogCVNvY2tBZGRyCWxhZGRyOwkJCS8q IGxvY2FsIGFkZHIgKHBvc3RtYXN0ZXIpICovCiAJU29ja0FkZHIJcmFkZHI7CQkJLyogcmVt b3RlIGFkZHIgKGNsaWVudCkgKi8KLX0gQ2xpZW50U29ja2V0OworfTsKK3R5cGVkZWYgc3Ry dWN0IENsaWVudFNvY2tldCBDbGllbnRTb2NrZXQ7CiAKICNpZmRlZiBVU0VfU1NMCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNj YWRtaW4uaAppbmRleCBmMGNjNjUxNDM1Yy4uYTE3OWNiMzljNDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBA IC0zMTksNyArMzE5LDYgQEAgZXh0ZXJuIGludAl0cmFjZV9yZWNvdmVyeShpbnQgdHJhY2Vf bGV2ZWwpOwogZXh0ZXJuIFBHRExMSU1QT1JUIGNoYXIgKkRhdGFiYXNlUGF0aDsKIAogLyog bm93IGluIHV0aWxzL2luaXQvbWlzY2luaXQuYyAqLwotZXh0ZXJuIHZvaWQgSW5pdFBvc3Rt YXN0ZXJDaGlsZCh2b2lkKTsKIGV4dGVybiB2b2lkIEluaXRTdGFuZGFsb25lUHJvY2Vzcyhj b25zdCBjaGFyICphcmd2MCk7CiBleHRlcm4gdm9pZCBJbml0UHJvY2Vzc0xvY2FsTGF0Y2go dm9pZCk7CiBleHRlcm4gdm9pZCBTd2l0Y2hUb1NoYXJlZExhdGNoKHZvaWQpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmggYi9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL2F1dG92YWN1dW0uaAppbmRleCBiNTUzZTg1OGFkNC4uZWUxMmU0Nzdm MTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCisr KyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5oCkBAIC01NSwyMCArNTUs MTQgQEAgZXh0ZXJuIGJvb2wgSXNBdXRvVmFjdXVtV29ya2VyUHJvY2Vzcyh2b2lkKTsKICNk ZWZpbmUgSXNBbnlBdXRvVmFjdXVtUHJvY2VzcygpIFwKIAkoSXNBdXRvVmFjdXVtTGF1bmNo ZXJQcm9jZXNzKCkgfHwgSXNBdXRvVmFjdXVtV29ya2VyUHJvY2VzcygpKQogCi0vKiBGdW5j dGlvbnMgdG8gc3RhcnQgYXV0b3ZhY3V1bSBwcm9jZXNzLCBjYWxsZWQgZnJvbSBwb3N0bWFz dGVyICovCisvKiBjYWxsZWQgZnJvbSBwb3N0bWFzdGVyIGF0IHNlcnZlciBzdGFydHVwICov CiBleHRlcm4gdm9pZCBhdXRvdmFjX2luaXQodm9pZCk7Ci1leHRlcm4gaW50CVN0YXJ0QXV0 b1ZhY0xhdW5jaGVyKHZvaWQpOwotZXh0ZXJuIGludAlTdGFydEF1dG9WYWNXb3JrZXIodm9p ZCk7CiAKIC8qIGNhbGxlZCBmcm9tIHBvc3RtYXN0ZXIgd2hlbiBhIHdvcmtlciBjb3VsZCBu b3QgYmUgZm9ya2VkICovCiBleHRlcm4gdm9pZCBBdXRvVmFjV29ya2VyRmFpbGVkKHZvaWQp OwogCi0jaWZkZWYgRVhFQ19CQUNLRU5ECi1leHRlcm4gdm9pZCBBdXRvVmFjTGF1bmNoZXJN YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOwot ZXh0ZXJuIHZvaWQgQXV0b1ZhY1dvcmtlck1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkg cGdfYXR0cmlidXRlX25vcmV0dXJuKCk7Ci1leHRlcm4gdm9pZCBBdXRvdmFjdXVtV29ya2Vy SUFtKHZvaWQpOwotZXh0ZXJuIHZvaWQgQXV0b3ZhY3V1bUxhdW5jaGVySUFtKHZvaWQpOwot I2VuZGlmCitleHRlcm4gdm9pZCBBdXRvVmFjTGF1bmNoZXJNYWluKGNoYXIgKnN0YXJ0dXBf ZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0ZV9ub3JldHVybigp OworZXh0ZXJuIHZvaWQgQXV0b1ZhY1dvcmtlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBz aXplX3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiAKIGV4 dGVybiBib29sIEF1dG9WYWN1dW1SZXF1ZXN0V29yayhBdXRvVmFjdXVtV29ya0l0ZW1UeXBl IHR5cGUsCiAJCQkJCQkJCSAgT2lkIHJlbGF0aW9uSWQsIEJsb2NrTnVtYmVyIGJsa25vKTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYXV4cHJvY2Vzcy5oIGIvc3Jj L2luY2x1ZGUvcG9zdG1hc3Rlci9hdXhwcm9jZXNzLmgKaW5kZXggNWMyZDY1MjdmZjYuLjc1 Mzk0Y2EwMTU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHByb2Nl c3MuaAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2F1eHByb2Nlc3MuaApAQCAtMTMs OCArMTMsNiBAQAogI2lmbmRlZiBBVVhQUk9DRVNTX0gKICNkZWZpbmUgQVVYUFJPQ0VTU19I CiAKLSNpbmNsdWRlICJtaXNjYWRtaW4uaCIKLQotZXh0ZXJuIHZvaWQgQXV4aWxpYXJ5UHJv Y2Vzc01haW4oQXV4UHJvY1R5cGUgYXV4dHlwZSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7 CitleHRlcm4gdm9pZCBBdXhpbGlhcnlQcm9jZXNzSW5pdCh2b2lkKTsKIAogI2VuZGlmCQkJ CQkJCS8qIEFVWFBST0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9zdG1h c3Rlci9iZ3dvcmtlcl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3 b3JrZXJfaW50ZXJuYWxzLmgKaW5kZXggMzIzZjFlMDcyOTEuLjQwNTVkMmY1NjI2IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd29ya2VyX2ludGVybmFscy5oCisr KyBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3b3JrZXJfaW50ZXJuYWxzLmgKQEAgLTU1 LDYgKzU1LDYgQEAgZXh0ZXJuIHZvaWQgRm9yZ2V0VW5zdGFydGVkQmFja2dyb3VuZFdvcmtl cnModm9pZCk7CiBleHRlcm4gdm9pZCBSZXNldEJhY2tncm91bmRXb3JrZXJDcmFzaFRpbWVz KHZvaWQpOwogCiAvKiBFbnRyeSBwb2ludCBmb3IgYmFja2dyb3VuZCB3b3JrZXIgcHJvY2Vz c2VzICovCi1leHRlcm4gdm9pZCBCYWNrZ3JvdW5kV29ya2VyTWFpbih2b2lkKSBwZ19hdHRy aWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIEJhY2tncm91bmRXb3JrZXJNYWluKGNo YXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4pIHBnX2F0dHJpYnV0 ZV9ub3JldHVybigpOwogCiAjZW5kaWYJCQkJCQkJLyogQkdXT1JLRVJfSU5URVJOQUxTX0gg Ki8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuaCBiL3Ny Yy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIuaAppbmRleCBhNjY3MjI4NzNmNC4uZWU1 NGZjNDAxZWYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvYmd3cml0ZXIu aAorKysgYi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2Jnd3JpdGVyLmgKQEAgLTI3LDggKzI3 LDggQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBDaGVja1BvaW50VGltZW91dDsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgQ2hlY2tQb2ludFdhcm5pbmc7CiBleHRlcm4gUEdETExJTVBP UlQgZG91YmxlIENoZWNrUG9pbnRDb21wbGV0aW9uVGFyZ2V0OwogCi1leHRlcm4gdm9pZCBC YWNrZ3JvdW5kV3JpdGVyTWFpbih2b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKLWV4 dGVybiB2b2lkIENoZWNrcG9pbnRlck1haW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7CitleHRlcm4gdm9pZCBCYWNrZ3JvdW5kV3JpdGVyTWFpbihjaGFyICpzdGFydHVwX2Rh dGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsK K2V4dGVybiB2b2lkIENoZWNrcG9pbnRlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXpl X3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiAKIGV4dGVy biB2b2lkIFJlcXVlc3RDaGVja3BvaW50KGludCBmbGFncyk7CiBleHRlcm4gdm9pZCBDaGVj a3BvaW50V3JpdGVEZWxheShpbnQgZmxhZ3MsIGRvdWJsZSBwcm9ncmVzcyk7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5oIGIvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMTJkZWNjODEzM2IuLjAwMDAwMDAwMDAwCi0tLSBhL3NyYy9pbmNsdWRlL3Bvc3Rt YXN0ZXIvZm9ya19wcm9jZXNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0v Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBmb3JrX3Byb2Nlc3MuaAotICoJICBFeHBv cnRzIGZyb20gcG9zdG1hc3Rlci9mb3JrX3Byb2Nlc3MuYy4KLSAqCi0gKiBDb3B5cmlnaHQg KGMpIDE5OTYtMjAyMywgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKLSAq Ci0gKiBzcmMvaW5jbHVkZS9wb3N0bWFzdGVyL2ZvcmtfcHJvY2Vzcy5oCi0gKgotICotLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0gKi8KLSNpZm5kZWYgRk9SS19QUk9DRVNTX0gKLSNkZWZpbmUg Rk9SS19QUk9DRVNTX0gKLQotZXh0ZXJuIHBpZF90IGZvcmtfcHJvY2Vzcyh2b2lkKTsKLQot I2VuZGlmCQkJCQkJCS8qIEZPUktfUFJPQ0VTU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wb3N0bWFzdGVyL3BnYXJjaC5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci9wZ2Fy Y2guaAppbmRleCAzYmQ0ZmFjNzFlNS4uNTc3ZmMxNGUxZDAgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3Bvc3RtYXN0ZXIvcGdhcmNoLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9wZ2FyY2guaApAQCAtMjksNyArMjksNyBAQAogZXh0ZXJuIFNpemUgUGdBcmNoU2htZW1T aXplKHZvaWQpOwogZXh0ZXJuIHZvaWQgUGdBcmNoU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJu IGJvb2wgUGdBcmNoQ2FuUmVzdGFydCh2b2lkKTsKLWV4dGVybiB2b2lkIFBnQXJjaGl2ZXJN YWluKHZvaWQpIHBnX2F0dHJpYnV0ZV9ub3JldHVybigpOworZXh0ZXJuIHZvaWQgUGdBcmNo aXZlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikg cGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBleHRlcm4gdm9pZCBQZ0FyY2hXYWtldXAodm9p ZCk7CiBleHRlcm4gdm9pZCBQZ0FyY2hGb3JjZURpclNjYW4odm9pZCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvcG9zdG1hc3Rlci5oIGIvc3JjL2luY2x1ZGUv cG9zdG1hc3Rlci9wb3N0bWFzdGVyLmgKaW5kZXggM2IzODg5YzU4YzAuLjFkYmI1Yzk5MWY1 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9wb3N0bWFzdGVyL3Bvc3RtYXN0ZXIuaApAQCAtNTgsMTQgKzU4LDUy IEBAIGV4dGVybiBpbnQJTWF4TGl2ZVBvc3RtYXN0ZXJDaGlsZHJlbih2b2lkKTsKIAogZXh0 ZXJuIGJvb2wgUG9zdG1hc3Rlck1hcmtQSURGb3JXb3JrZXJOb3RpZnkoaW50KTsKIAotI2lm ZGVmIEVYRUNfQkFDS0VORAotZXh0ZXJuIHBpZF90IHBvc3RtYXN0ZXJfZm9ya2V4ZWMoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Ci1leHRlcm4gdm9pZCBTdWJQb3N0bWFzdGVyTWFpbihp bnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVy biB2b2lkIEJhY2tlbmRNYWluKGNoYXIgKnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBf ZGF0YV9sZW4pOwogCisjaWZkZWYgRVhFQ19CQUNLRU5ECiBleHRlcm4gU2l6ZSBTaG1lbUJh Y2tlbmRBcnJheVNpemUodm9pZCk7CiBleHRlcm4gdm9pZCBTaG1lbUJhY2tlbmRBcnJheUFs bG9jYXRpb24odm9pZCk7CiAjZW5kaWYKIAorLyogaW4gbGF1bmNoX2JhY2tlbmQuYyAqLwor CisvKiB0aGlzIGJldHRlciBtYXRjaCB0aGUgbGlzdCBpbiBsYXVuY2hfYmFja2VuZC5jICov Cit0eXBlZGVmIGVudW0gUG9zdG1hc3RlckNoaWxkVHlwZQoreworCVBNQ19CQUNLRU5EID0g MCwKKwlQTUNfQVZfTEFVTkNIRVIsCisJUE1DX0FWX1dPUktFUiwKKwlQTUNfQkdXT1JLRVIs CisJUE1DX1NZU0xPR0dFUiwKKworCS8qCisJICogc28tY2FsbGVkICJhdXggcHJvY2Vzc2Vz Ii4gIFRoZXNlIGFjY2VzcyBzaGFyZWQgbWVtb3J5LCBidXQgYXJlIG5vdAorCSAqIGF0dGFj aGVkIHRvIGFueSBwYXJ0aWN1bGFyIGRhdGFiYXNlLiAgT25seSBvbmUgb2YgZWFjaCBvZiB0 aGVzZSBjYW4gYmUKKwkgKiBydW5uaW5nIGF0IGEgdGltZS4KKwkgKi8KKwlQTUNfU1RBUlRV UCwKKwlQTUNfQkdXUklURVIsCisJUE1DX0FSQ0hJVkVSLAorCVBNQ19DSEVDS1BPSU5URVIs CisJUE1DX1dBTF9XUklURVIsCisJUE1DX1dBTF9SRUNFSVZFUiwKK30gUG9zdG1hc3RlckNo aWxkVHlwZTsKKworLyogZGVmaW5lZCBpbiBsaWJwcS1iZS5oICovCitleHRlcm4gc3RydWN0 IENsaWVudFNvY2tldCAqTXlDbGllbnRTb2NrZXQ7CisKK2V4dGVybiBwaWRfdCBwb3N0bWFz dGVyX2NoaWxkX2xhdW5jaChQb3N0bWFzdGVyQ2hpbGRUeXBlIGNoaWxkX3R5cGUsIGNoYXIg KnN0YXJ0dXBfZGF0YSwgc2l6ZV90IHN0YXJ0dXBfZGF0YV9sZW4sIHN0cnVjdCBDbGllbnRT b2NrZXQgKnNvY2spOworCisjaWZkZWYgRVhFQ19CQUNLRU5ECitleHRlcm4gdm9pZCBTdWJQ b3N0bWFzdGVyTWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBwZ19hdHRyaWJ1dGVfbm9y ZXR1cm4oKTsKKyNlbmRpZgorCisjaWZkZWYgV0lOMzIKK2V4dGVybiB2b2lkIHBnd2luMzJf cmVnaXN0ZXJfZGVhZGNoaWxkX2NhbGxiYWNrKEhBTkRMRSBwcm9jSGFuZGxlLCBEV09SRCBw cm9jSWQpOworI2VuZGlmCisKK2NvbnN0IGNoYXIgKlBvc3RtYXN0ZXJDaGlsZE5hbWUoUG9z dG1hc3RlckNoaWxkVHlwZSBjaGlsZF90eXBlKTsKKwogLyoKICAqIE5vdGU6IE1BWF9CQUNL RU5EUyBpcyBsaW1pdGVkIHRvIDJeMTgtMSBiZWNhdXNlIHRoYXQncyB0aGUgd2lkdGggcmVz ZXJ2ZWQKICAqIGZvciBidWZmZXIgcmVmZXJlbmNlcyBpbiBidWZfaW50ZXJuYWxzLmguICBU aGlzIGxpbWl0YXRpb24gY291bGQgYmUgbGlmdGVkCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9wb3N0bWFzdGVyL3N0YXJ0dXAuaCBiL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3RhcnR1 cC5oCmluZGV4IDZhMmU0YzQ1MjZiLi5lYzg4NTA2M2FhYiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvcG9zdG1hc3Rlci9zdGFydHVwLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9zdGFydHVwLmgKQEAgLTI2LDcgKzI2LDcgQEAKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQg bG9nX3N0YXJ0dXBfcHJvZ3Jlc3NfaW50ZXJ2YWw7CiAKIGV4dGVybiB2b2lkIEhhbmRsZVN0 YXJ0dXBQcm9jSW50ZXJydXB0cyh2b2lkKTsKLWV4dGVybiB2b2lkIFN0YXJ0dXBQcm9jZXNz TWFpbih2b2lkKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIFN0YXJ0 dXBQcm9jZXNzTWFpbihjaGFyICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFf bGVuKSBwZ19hdHRyaWJ1dGVfbm9yZXR1cm4oKTsKIGV4dGVybiB2b2lkIFByZVJlc3RvcmVD b21tYW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgUG9zdFJlc3RvcmVDb21tYW5kKHZvaWQpOwog ZXh0ZXJuIGJvb2wgSXNQcm9tb3RlU2lnbmFsZWQodm9pZCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9wb3N0bWFzdGVyL3N5c2xvZ2dlci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci9zeXNsb2dnZXIuaAppbmRleCAzNGRhNzc4ZjFlZi4uN2RjNDFiMzBlN2MgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3Bvc3RtYXN0ZXIvc3lzbG9nZ2VyLmgKKysrIGIvc3JjL2luY2x1 ZGUvcG9zdG1hc3Rlci9zeXNsb2dnZXIuaApAQCAtODYsOSArODYsNyBAQCBleHRlcm4gaW50 CVN5c0xvZ2dlcl9TdGFydCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgd3JpdGVfc3lzbG9nZ2Vy X2ZpbGUoY29uc3QgY2hhciAqYnVmZmVyLCBpbnQgY291bnQsIGludCBkZXN0aW5hdGlvbik7 CiAKLSNpZmRlZiBFWEVDX0JBQ0tFTkQKLWV4dGVybiB2b2lkIFN5c0xvZ2dlck1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7Ci0jZW5kaWYK K2V4dGVybiB2b2lkIFN5c0xvZ2dlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBzaXplX3Qg c3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiAKIGV4dGVybiBi b29sIENoZWNrTG9ncm90YXRlU2lnbmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgUmVtb3ZlTG9n cm90YXRlU2lnbmFsRmlsZXModm9pZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9wb3N0 bWFzdGVyL3dhbHdyaXRlci5oIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rlci93YWx3cml0ZXIu aAppbmRleCA2ZWJhN2FkNzljZi4uOTliN2NjMDdmYjIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3Bvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcG9zdG1hc3Rl ci93YWx3cml0ZXIuaApAQCAtMTgsNiArMTgsNiBAQAogZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBXYWxXcml0ZXJEZWxheTsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgV2FsV3JpdGVyRmx1 c2hBZnRlcjsKIAotZXh0ZXJuIHZvaWQgV2FsV3JpdGVyTWFpbih2b2lkKSBwZ19hdHRyaWJ1 dGVfbm9yZXR1cm4oKTsKK2V4dGVybiB2b2lkIFdhbFdyaXRlck1haW4oY2hhciAqc3RhcnR1 cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7CiAKICNlbmRpZgkJCQkJCQkvKiBfV0FMV1JJVEVSX0ggKi8KZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBs aWNhdGlvbi93YWxyZWNlaXZlci5oCmluZGV4IDA0YjQzOWRjNTAzLi40Yjc2MDYyMjU1YiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oCkBAIC00NTcsNyArNDU3 LDcgQEAgd2FscmN2X2NsZWFyX3Jlc3VsdChXYWxSY3ZFeGVjUmVzdWx0ICp3YWxyZXMpCiB9 CiAKIC8qIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiB3YWxyZWNlaXZlci5jICovCi1l eHRlcm4gdm9pZCBXYWxSZWNlaXZlck1haW4odm9pZCkgcGdfYXR0cmlidXRlX25vcmV0dXJu KCk7CitleHRlcm4gdm9pZCBXYWxSZWNlaXZlck1haW4oY2hhciAqc3RhcnR1cF9kYXRhLCBz aXplX3Qgc3RhcnR1cF9kYXRhX2xlbikgcGdfYXR0cmlidXRlX25vcmV0dXJuKCk7CiBleHRl cm4gdm9pZCBQcm9jZXNzV2FsUmN2SW50ZXJydXB0cyh2b2lkKTsKIGV4dGVybiB2b2lkIFdh bFJjdkZvcmNlUmVwbHkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5k ZXggMDA2NDk2MDhlNDYuLmNmYzNmMjU5Yzk1IDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdApAQCAtMjEyMSw2ICsyMTIxLDcgQEAgUG9ydGFsU3RyYXRlZ3kKIFBvc3RQYXJzZUNv bHVtblJlZkhvb2sKIFBvc3RncmVzUG9sbGluZ1N0YXR1c1R5cGUKIFBvc3RpbmdJdGVtCitQ b3N0bWFzdGVyQ2hpbGRUeXBlCiBQcmVQYXJzZUNvbHVtblJlZkhvb2sKIFByZWRDbGFzcwog UHJlZEl0ZXJJbmZvCkBAIC0zNzkzLDYgKzM3OTQsNyBAQCBzdWJzdGl0dXRlX2FjdHVhbF9w YXJhbWV0ZXJzX2NvbnRleHQKIHN1YnN0aXR1dGVfYWN0dWFsX3NyZl9wYXJhbWV0ZXJzX2Nv bnRleHQKIHN1YnN0aXR1dGVfcGh2X3JlbGlkc19jb250ZXh0CiBzeW1ib2wKK3N5c2xvZ2dl cl9zdGFydHVwX2RhdGEKIHRhYmxlc3BhY2VpbmZvCiB0ZVNlY3Rpb24KIHRlbXBfdGFibGVz cGFjZXNfZXh0cmEKLS0gCjIuMzkuMgoK --------------XHa7Rv0KAibWokVMBeQBHaZj--