Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3292652pxf; Mon, 15 Mar 2021 06:27:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOLO2Lo8AbPPTPv4ecz62gjoMFb62VAKq1gkq/sN2kc+BAC0PLKPSzIWC0y8dT1VwYO4i+ X-Received: by 2002:aa7:c4cc:: with SMTP id p12mr29250341edr.325.1615814864204; Mon, 15 Mar 2021 06:27:44 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1615814864; cv=pass; d=google.com; s=arc-20160816; b=GyED0JPyMd7Vw7xvEmlXXo/WRZzbLYp41dYX8eZ8HUBFDtRz3pVqzFBgaOdSNWhL69 X4fMeNX9LPVdA68nFaGwXgAgyuudjIPBYaFldSkjPWrLNdoRxeZDDZPjFA0Lx8fyc2du VMWrnxrzJBnJb+PKQOZ/YxfclGy+9INCNm7mdE3gwOENtRVBdKX3g5fo5LMeGd0ZWDV5 JuhJQVo89/Uw4ZIOJbH4S1XseUKj6LdREhrJIUE1cR1T7Rs77Ke6104r6TwYmtTBw2kL lR0jg6mWNY7gyEPHrgWF1plRG8sJS9XC3nToV3erT/lN+ZfzIs0hficIGEROQbP2zh62 1pVA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JhgofaDjR3edzjRyJD9ADR8SjIuBFD8ag2Akkucouxc=; b=FFnnz44jr1nKr35mvnfH5PzJC/99GPp+uFhNCg0S8wD0B4ONHRp2BXIyvjtDQVLYxT ab1RPvloDykxSqhTTbvbEkcYFgxZva8XkwsA2N3JnZsFbPA5hd3lKg8oWvZRhTmsenlb H1uDHqG4THtvBp3XIWo3g+PUpSjysi8wBQqkJni7EMQUOkR/YqJi0UTzt8hHs1pQMToM +IGpH0XVW2svQEfxGFbIdj0krUniL8DtB91Pt0SFn8fiXJgIicDt60POWgBT26lNJyg3 XwSa4xoY1tsYmwI42CSGIoDVklPFT4VJUEl3vFTMOkcShIkX64n8GgAl06C0gDDb/erv qlSg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=f0VenobM; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id hq38si10924834ejc.350.2021.03.15.06.27.19; Mon, 15 Mar 2021 06:27:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@silabs.onmicrosoft.com header.s=selector2-silabs-onmicrosoft-com header.b=f0VenobM; arc=pass (i=1 spf=pass spfdomain=silabs.com dkim=pass dkdomain=silabs.com dmarc=pass fromdomain=silabs.com); spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231438AbhCON0u (ORCPT + 99 others); Mon, 15 Mar 2021 09:26:50 -0400 Received: from mail-co1nam11on2080.outbound.protection.outlook.com ([40.107.220.80]:9473 "EHLO NAM11-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S231201AbhCON0W (ORCPT ); Mon, 15 Mar 2021 09:26:22 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=dtvMirYevTGGLqXJMYik+PZsGm33fGwcha1Zbx6IDPfNOxXBpFTvieLaESxvTWULM4qrmD+rT6rbbZ301kAxGOhmmRoD7+HclzN7lNMRGilNrsmNWfkCP/uh+zGDj38sMwXlHsf70ruRhznNvVIb1+T+XeYvlUSM2QmyGiaQpc9PAO0hCfVIvgTjZDiRfZPQgamMGVNKTerBezibA1toUWH2Pa4WqJIyLofPrZazFEfZCyHqILlK3gpistoWzAuFzsD5Kl4XufhcxG5PM+hIp28VCdGF7KE/P2X7l1T6dBBtf/13YxZnnd8i2b0fa7jL7qrRne8fEQgr/IayAearSA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JhgofaDjR3edzjRyJD9ADR8SjIuBFD8ag2Akkucouxc=; b=TzmJc0Pa1F9icMURXZgAcClYJ9VBtWtOKs5j2pZ84q3rFYKUlSCyAOLwBy+aBjn2/HA+SrdBCPQItJZ/MVjeZL047MJObkb3WeCclT3URllamfibcLYQusaqVkC+VFN78vkUcS0quHAC6vIqpl5XvS2be1rt+NYSe/cKab+FeM2EAVehrMmNxbWQAZmTM4F9Q2gKuvB88XA0zMLaWQPZ3VCC6dnI3yfGnF/UIWb/X7pmZGHj1IhQwcpHKzBLyVOyHvuGzXTAStMqJm2eEsXG3Ehv2T0NuKEkzS2gfTPXAlqXHkde40TwHry8+wY3+PTNnmk6Zw5MYliPllNLoTSKFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=JhgofaDjR3edzjRyJD9ADR8SjIuBFD8ag2Akkucouxc=; b=f0VenobMIkxGOW2jzSIN0B4RrLpowd/AJ6yEkpAkEzm+UmzpgCCsODsRXVa3plYX53cBU6ly7o7tJ44UQ1jROUfwJd7anoFlF/Pkzl4wIJbgKzlP7G9sTQ32uLdaHAVRA7EqlJ8JG1GWyh976Qpj6aXQn5i2iOc7OIFVxK6f6JU= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SN6PR11MB3216.namprd11.prod.outlook.com (2603:10b6:805:c1::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32; Mon, 15 Mar 2021 13:26:15 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::41bc:5ce:dfa0:9701%7]) with mapi id 15.20.3933.032; Mon, 15 Mar 2021 13:26:15 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v5 19/24] wfx: add sta.c/sta.h Date: Mon, 15 Mar 2021 14:24:56 +0100 Message-Id: <20210315132501.441681-20-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> References: <20210315132501.441681-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Originating-IP: [2a01:e35:2435:66a0:544b:f17b:7ae8:fb7] X-ClientProxiedBy: SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.silabs.com (2a01:e35:2435:66a0:544b:f17b:7ae8:fb7) by SN4PR0801CA0014.namprd08.prod.outlook.com (2603:10b6:803:29::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3933.32 via Frontend Transport; Mon, 15 Mar 2021 13:26:12 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d2c86c68-9f81-4b10-54b5-08d8e7b5e859 X-MS-TrafficTypeDiagnostic: SN6PR11MB3216: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1388; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gy0/ysSzsAydLmOS6AVAB8FJBvwRW8hxeUcdz+Gy6QRubzMsJRxj+mnzlpPo0xu+2hGATrAMCr8ey7H/i6lpjpRd7FCdM0PKhhQfJeiMlRh6XLO3ykL/iADXQ3YZfUnAw9QdRJG7cNZ9IU1Iu1lbv4nXs2pkIMBQN697nrMDRVMDuohx0xcj3f4xxbjGSxB7NpVZUIvxvzhlybz75cIIatu9I+99ZRJfju2gE9W5ZpwEJ9OaGSTR7vOmnpoJLXCgqUMLKJlT4PTd2ccXvSBxG/easSql9iA9NnyXOLziiCNoEh5a07/PrfV905U4DHYla1weFckdl079lL4bxOxodgz+re6svc9QlXL8zjNX3iokBLNkkornSsLdJsyHEPSPMZVXq/DhIUnYXz5r4liv+cd/LEO5BXSAFHhVmfMZjBHC2upRvsLGc48+wHf/Gjt/J8sA68/Tnqxxqvk0hO0aqd7ukk1p+DJkdt8GA+bWJmLma9ipr0Gbkn1d7PIALkog75J+90SsuM+SN3DzXbUy+ggw/WY/0JWx/vcF/fIOT9kKLZ9h63Z46LrfciZ/fVgT X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SN6PR11MB2718.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(376002)(346002)(396003)(366004)(39850400004)(136003)(86362001)(107886003)(2616005)(186003)(1076003)(4326008)(316002)(30864003)(66556008)(478600001)(8676002)(66476007)(6486002)(7696005)(5660300002)(66946007)(2906002)(54906003)(83380400001)(6666004)(8936002)(36756003)(52116002)(7416002)(66574015)(16526019);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?utf-8?B?YkxMdENQcXMzblJYSkZYN0RMWFNDbWFJMUlSR05sc1BXZGkrT2lIZzNtblpQ?= =?utf-8?B?MHhDUVBkQmZlU2ZmdkNJUCtUK2J6aFRRTE9RemNIcFBJaDhja2NRUDJZQ1Ja?= =?utf-8?B?YzVqaENwdlpqTkJsL0dQcDNVNWo1am1GNmh2RjByYnBTblRHQmJOVll0WW4x?= =?utf-8?B?Tysvb0tlR1RpcDVRa3paeXZCRXNURjdseStndjYxYVZXMFdyaGpYbk95S1l5?= =?utf-8?B?V1RjNHBYL2o3dUd1WHVOMTdNLzBqQ1pneW5lUk43cDlpUURzRWh1OGhxYjVL?= =?utf-8?B?TTlRQ3QvTGR0Y0FQWUtWa3N4aiswWEd0MDZXMVZOUXZobUdXWWthaG5oVG9K?= =?utf-8?B?UUJMZmJhejRzcjQ4eGxQZ1JGem9pSTFzK29SYXRzdzA4elRUVkZ2ODIyWlh3?= =?utf-8?B?TlVwWUlUbmJSR25pYzE2N2VUNWw3V1hJdzhzZzEyWXRlTUl6ZlJlRTgzUUhP?= =?utf-8?B?NE5LTVZqdXVDaTc4WUdhTE1oSG1jK2EyRW1LMHRZQ3F0ZlE3OFZGUUxlSHJk?= =?utf-8?B?Zk9YWklzb1ZhdzdwcWkzWHhRRzMzL2Ywa1V0S3NvQ3U5NTBnUFVXNFpDKzVB?= =?utf-8?B?cFFVbFlhN2dLbDAyaXBTMC9LbFMzV3NNOTVTbDlZMjFSeHJpT2RldDBPWC9F?= =?utf-8?B?NUowQkpOU1BpcUJhWmNLZGs2MEE1U05lNTlqZ2l3K25OQUoxSlozYkNZSUlU?= =?utf-8?B?Qjd5QWJRbFVXendqZmdINXdsbHU3YmVzMUYrZzE4WkFsNTZWcE1wendPRVNL?= =?utf-8?B?ZEZ6Z3dDU2xkWGZQbEZHZTRrR1VielY4UVlWdXRHUk1PaUdkQUtucFpLNGtV?= =?utf-8?B?ckExQW81Zk51US9ZcnJoMUhTQWpFYUlWYnB6YXhRRGsrUVRmUXprUWNoTUZv?= =?utf-8?B?ekRnYmVRUWI5OExlQ2NHT2hPdFY5SjRTbFpSU3Z6TE9qQnd2WTg4blRPQjZI?= =?utf-8?B?SlJHdHhXUURuTDNIUGR0OElQSzlTREZ4RElzNDdPWWdIRmVvQU5BbHBsM1A4?= =?utf-8?B?RzZacHNESEVpNGdHUXc4NGorVXJrOHJ0VElMeXE4NlE3clZEeVJZMFF6cWw1?= =?utf-8?B?ei8zTDcxTDhQYWlBcW56akpQSjJQVllJR2RWcW1VL1VERXBySmFOMEFzblZY?= =?utf-8?B?dGdIOXBLazZZOVQrWHhEYlh6ZjlQMGlWeWhzWEY0WEtPUEV0RFNncUtvR1h5?= =?utf-8?B?WXkwdnlMVGNVMDBHTGhRWW5FR3h3d01wTnJEV0ZjUVlWMnZ5WE1CcjdUMkdr?= =?utf-8?B?S2N2TlJ3MEZhVWhnUHRIaFJ1L2xudHpzRzVlbHc3VU43ZCs3QzhVNXVPSlUx?= =?utf-8?B?QlJycjVHZk92cEhqTVpQQldPUFIzVUttb2JMZWdDbVk2MWtUYVFnbjRzcEZ5?= =?utf-8?B?K3JQaVplMFg2ZjREaXZoYzBzMnJxc0tZMGM0U05YRDlSaVpWdUJZRmxzUll1?= =?utf-8?B?b0daZTJBNjdWUzYraFlieHI3OWowWU4vZEVBL2VuWmpqVzhqMHJ0TDRjcUZQ?= =?utf-8?B?eERyNkxtdDZRUXptNjU0aTlHZTlIREFwSjZiN1l2NXdsY1FUdUJOQXNhUGNY?= =?utf-8?B?KzFPRWdCeG5naWczZE1mUFMwdG5MM0IyNS95S2ZlVXBWWVFjRUJSV1pmb2VB?= =?utf-8?B?WG9uNjhNdHdSUVNsUHFZbC9wbmxFMS9YSWdQN1lXREdmR3JKL292MWlLdFNv?= =?utf-8?B?TnRtWVFEb0xvWjRONnZuSlBVeFQ0VS9hamV6NzRheFB2Kys0TlNLclAzR09x?= =?utf-8?B?QzdYaDA1R1IwQnFCYVNHdGpHTk5NRHlySEFSd1lua1RWTVZ2NWllTy9tQlpG?= =?utf-8?B?VVhLWUpOS2JpZXdYTzlwZHNnQjQwbHZ2NGtubCtJWmNOL2JNeW5wdHhjUVh4?= =?utf-8?Q?iFbIybQdchi4w?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2c86c68-9f81-4b10-54b5-08d8e7b5e859 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2021 13:26:15.1727 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3b8THwhq6Rzl7gDGMlXh4KFjUIEDOUb5wBSwEeNbUTocPxGC4X7lxB983Tdrtd/ZnZ8CRMBQUmFb0jcRmcs7EQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB3216 Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMgfCA4MDkgKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3Rh LmggfCAgNzMgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDg4MiBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjgxYmZjYThmYWZmZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMKQEAgLTAsMCArMSw4MDkgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgorCisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiZndpby5o IgorI2luY2x1ZGUgImJoLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgorCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKKwor dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK K3sKKwlpbnQgaTsKKwl1MzIgcmV0ID0gMDsKKwkvKiBXRjIwMCBvbmx5IHN1cHBvcnQgMkdIeiAq LworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gd2Rldi0+aHctPndp cGh5LT5iYW5kc1tOTDgwMjExX0JBTkRfMkdIWl07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQt Pm5fYml0cmF0ZXM7IGkrKykgeworCQlpZiAocmF0ZXMgJiBCSVQoaSkpIHsKKwkJCWlmIChpID49 IHNiYW5kLT5uX2JpdHJhdGVzKQorCQkJCWRldl93YXJuKHdkZXYtPmRldiwgInVuc3VwcG9ydGVk IGJhc2ljIHJhdGVcbiIpOworCQkJZWxzZQorCQkJCXJldCB8PSBCSVQoc2JhbmQtPmJpdHJhdGVz W2ldLmh3X3ZhbHVlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdmeF9jb29s aW5nX3RpbWVvdXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdm eF9kZXYgKndkZXYgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAorCQkJCQkg ICAgc3RydWN0IHdmeF9kZXYsCisJCQkJCSAgICBjb29saW5nX3RpbWVvdXRfd29yayk7CisKKwl3 ZGV2LT5jaGlwX2Zyb3plbiA9IHRydWU7CisJd2Z4X3R4X3VubG9jayh3ZGV2KTsKK30KKwordm9p ZCB3Znhfc3VzcGVuZF9ob3RfZGV2KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0YV9ub3Rp ZnlfY21kIGNtZCkKK3sKKwlpZiAoY21kID09IFNUQV9OT1RJRllfQVdBS0UpIHsKKwkJLyogRGV2 aWNlIHJlY292ZXIgbm9ybWFsIHRlbXBlcmF0dXJlICovCisJCWlmIChjYW5jZWxfZGVsYXllZF93 b3JrKCZ3ZGV2LT5jb29saW5nX3RpbWVvdXRfd29yaykpCisJCQl3ZnhfdHhfdW5sb2NrKHdkZXYp OworCX0gZWxzZSB7CisJCS8qIERldmljZSBpcyB0b28gaG90ICovCisJCXNjaGVkdWxlX2RlbGF5 ZWRfd29yaygmd2Rldi0+Y29vbGluZ190aW1lb3V0X3dvcmssIDEwICogSFopOworCQl3ZnhfdHhf bG9jayh3ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9maWx0ZXJfYmVhY29uKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGZpbHRlcl9iZWFjb24pCit7CisJc3RhdGljIGNvbnN0IHN0 cnVjdCBoaWZfaWVfdGFibGVfZW50cnkgZmlsdGVyX2llc1tdID0geworCQl7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDLAorCQkJLmhhc19jaGFuZ2VkICA9IDEs CisJCQkubm9fbG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQkJLm91aSAg ICAgICAgICA9IHsgMHg1MCwgMHg2RiwgMHg5QSB9LAorCQl9LCB7CisJCQkuaWVfaWQgICAgICAg ID0gV0xBTl9FSURfSFRfT1BFUkFUSU9OLAorCQkJLmhhc19jaGFuZ2VkICA9IDEsCisJCQkubm9f bG9uZ2VyICAgID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQl9LCB7CisJCQkuaWVfaWQg ICAgICAgID0gV0xBTl9FSURfRVJQX0lORk8sCisJCQkuaGFzX2NoYW5nZWQgID0gMSwKKwkJCS5u b19sb25nZXIgICAgPSAxLAorCQkJLmhhc19hcHBlYXJlZCA9IDEsCisJCX0KKwl9OworCisJaWYg KCFmaWx0ZXJfYmVhY29uKSB7CisJCWhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgMCwg MSk7CisJfSBlbHNlIHsKKwkJaGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHd2aWYsIDMsIGZp bHRlcl9pZXMpOworCQloaWZfYmVhY29uX2ZpbHRlcl9jb250cm9sKHd2aWYsIEhJRl9CRUFDT05f RklMVEVSX0VOQUJMRSwgMCk7CisJfQorfQorCit2b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAg dW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVudXNlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiA9IE5VTEw7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlib29s IGZpbHRlcl9ic3NpZCwgZmlsdGVyX3ByYnJlcSwgZmlsdGVyX2JlYWNvbjsKKworCS8qIE5vdGVz OgorCSAqICAgLSBQcm9iZSByZXNwb25zZXMgKEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSBhcmUg bmV2ZXIgZmlsdGVyZWQKKwkgKiAgIC0gUFMtUG9sbCAoRklGX1BTUE9MTCkgYXJlIG5ldmVyIGZp bHRlcmVkCisJICogICAtIFJUUywgQ1RTIGFuZCBBY2sgKEZJRl9DT05UUk9MKSBhcmUgYWx3YXlz IGZpbHRlcmVkCisJICogICAtIEJyb2tlbiBmcmFtZXMgKEZJRl9GQ1NGQUlMIGFuZCBGSUZfUExD UEZBSUwpIGFyZSBhbHdheXMgZmlsdGVyZWQKKwkgKiAgIC0gRmlybXdhcmUgZG9lcyAoeWV0KSBh bGxvdyB0byBmb3J3YXJkIHVuaWNhc3QgdHJhZmZpYyBzZW50IHRvCisJICogICAgIG90aGVyIHN0 YXRpb25zIChha2EuIHByb21pc2N1b3VzIG1vZGUpCisJICovCisJKnRvdGFsX2ZsYWdzICY9IEZJ Rl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0FMTE1VTFRJIHwgRklGX09USEVSX0JTUyB8CisJ CQlGSUZfUFJPQkVfUkVRIHwgRklGX1BTUE9MTDsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZf bXV0ZXgpOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVM TCkgeworCQltdXRleF9sb2NrKCZ3dmlmLT5zY2FuX2xvY2spOworCisJCS8qIE5vdGU6IEZJRl9C Q05fUFJCUkVTUF9QUk9NSVNDIGNvdmVycyBwcm9iZSByZXNwb25zZSBhbmQKKwkJICogYmVhY29u cyBmcm9tIG90aGVyIEJTUworCQkgKi8KKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJC UkVTUF9QUk9NSVNDKQorCQkJZmlsdGVyX2JlYWNvbiA9IGZhbHNlOworCQllbHNlCisJCQlmaWx0 ZXJfYmVhY29uID0gdHJ1ZTsKKwkJd2Z4X2ZpbHRlcl9iZWFjb24od3ZpZiwgZmlsdGVyX2JlYWNv bik7CisKKwkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9PVEhFUl9CU1MpCisJCQlmaWx0ZXJfYnNz aWQgPSBmYWxzZTsKKwkJZWxzZQorCQkJZmlsdGVyX2Jzc2lkID0gdHJ1ZTsKKworCQkvKiBJbiBB UCBtb2RlLCBjaGlwIGNhbiByZXBseSB0byBwcm9iZSByZXF1ZXN0IGl0c2VsZiAqLworCQlpZiAo KnRvdGFsX2ZsYWdzICYgRklGX1BST0JFX1JFUSAmJgorCQkgICAgd3ZpZi0+dmlmLT50eXBlID09 IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQlkZXZfZGJnKHdkZXYtPmRldiwgImRvIG5vdCBmb3J3 YXJkIHByb2JlIHJlcXVlc3QgaW4gQVAgbW9kZVxuIik7CisJCQkqdG90YWxfZmxhZ3MgJj0gfkZJ Rl9QUk9CRV9SRVE7CisJCX0KKworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX1BST0JFX1JFUSkK KwkJCWZpbHRlcl9wcmJyZXEgPSBmYWxzZTsKKwkJZWxzZQorCQkJZmlsdGVyX3ByYnJlcSA9IHRy dWU7CisJCWhpZl9zZXRfcnhfZmlsdGVyKHd2aWYsIGZpbHRlcl9ic3NpZCwgZmlsdGVyX3ByYnJl cSk7CisKKwkJbXV0ZXhfdW5sb2NrKCZ3dmlmLT5zY2FuX2xvY2spOworCX0KKwltdXRleF91bmxv Y2soJndkZXYtPmNvbmZfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdmeF9nZXRfcHNfdGltZW91 dChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCAqZW5hYmxlX3BzKQoreworCXN0cnVjdCBpZWVl ODAyMTFfY2hhbm5lbCAqY2hhbjAgPSBOVUxMLCAqY2hhbjEgPSBOVUxMOworCXN0cnVjdCBpZWVl ODAyMTFfY29uZiAqY29uZiA9ICZ3dmlmLT53ZGV2LT5ody0+Y29uZjsKKworCVdBUk4oIXd2aWYt PnZpZi0+YnNzX2NvbmYuYXNzb2MgJiYgZW5hYmxlX3BzLAorCSAgICAgImVuYWJsZV9wcyBpcyBy ZWxpYWJsZSBvbmx5IGlmIGFzc29jaWF0ZWQiKTsKKwlpZiAod2Rldl90b193dmlmKHd2aWYtPndk ZXYsIDApKQorCQljaGFuMCA9IHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAwKS0+dmlmLT5ic3Nf Y29uZi5jaGFuZGVmLmNoYW47CisJaWYgKHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAxKSkKKwkJ Y2hhbjEgPSB3ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMSktPnZpZi0+YnNzX2NvbmYuY2hhbmRl Zi5jaGFuOworCWlmIChjaGFuMCAmJiBjaGFuMSAmJiBjaGFuMC0+aHdfdmFsdWUgIT0gY2hhbjEt Pmh3X3ZhbHVlICYmCisJICAgIHd2aWYtPnZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkg eworCQkvKiBJdCBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHBvd2Vyc2F2ZSBpZiBjaGFubmVscyBh cmUgZGlmZmVyZW50ICovCisJCWlmIChlbmFibGVfcHMpCisJCQkqZW5hYmxlX3BzID0gdHJ1ZTsK KwkJaWYgKHd2aWYtPndkZXYtPmZvcmNlX3BzX3RpbWVvdXQgPiAtMSkKKwkJCXJldHVybiB3dmlm LT53ZGV2LT5mb3JjZV9wc190aW1lb3V0OworCQllbHNlIGlmICh3ZnhfYXBpX29sZGVyX3RoYW4o d3ZpZi0+d2RldiwgMywgMikpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIDMwOwor CX0KKwlpZiAoZW5hYmxlX3BzKQorCQkqZW5hYmxlX3BzID0gd3ZpZi0+dmlmLT5ic3NfY29uZi5w czsKKwlpZiAod3ZpZi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dCA+IC0xKQorCQlyZXR1cm4gd3Zp Zi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dDsKKwllbHNlIGlmICh3dmlmLT52aWYtPmJzc19jb25m LmFzc29jICYmIHd2aWYtPnZpZi0+YnNzX2NvbmYucHMpCisJCXJldHVybiBjb25mLT5keW5hbWlj X3BzX3RpbWVvdXQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK2ludCB3ZnhfdXBkYXRlX3Bt KHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCWludCBwc190aW1lb3V0OworCWJvb2wgcHM7CisK KwlpZiAoIXd2aWYtPnZpZi0+YnNzX2NvbmYuYXNzb2MpCisJCXJldHVybiAwOworCXBzX3RpbWVv dXQgPSB3ZnhfZ2V0X3BzX3RpbWVvdXQod3ZpZiwgJnBzKTsKKwlpZiAoIXBzKQorCQlwc190aW1l b3V0ID0gMDsKKwlXQVJOX09OKHBzX3RpbWVvdXQgPCAwKTsKKwlpZiAod3ZpZi0+dWFwc2RfbWFz aykKKwkJcHNfdGltZW91dCA9IDA7CisKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91 dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsCisJCQkJCSBUVV9UT19KSUZGSUVTKDUxMikp KQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsCisJCQkgInRpbWVvdXQgd2hpbGUgd2FpdGlu ZyBvZiBzZXRfcG1fbW9kZV9jb21wbGV0ZVxuIik7CisJcmV0dXJuIGhpZl9zZXRfcG0od3ZpZiwg cHMsIHBzX3RpbWVvdXQpOworfQorCitpbnQgd2Z4X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCXUxNiBxdWV1ZSwgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd2Z4X2Rl diAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhf dmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgb2xkX3VhcHNkID0gd3ZpZi0+dWFwc2RfbWFzazsK KworCVdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcyk7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5j b25mX211dGV4KTsKKwlhc3NpZ25fYml0KHF1ZXVlLCAmd3ZpZi0+dWFwc2RfbWFzaywgcGFyYW1z LT51YXBzZCk7CisJaGlmX3NldF9lZGNhX3F1ZXVlX3BhcmFtcyh3dmlmLCBxdWV1ZSwgcGFyYW1z KTsKKwlpZiAod3ZpZi0+dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkg ICAgb2xkX3VhcHNkICE9IHd2aWYtPnVhcHNkX21hc2spIHsKKwkJaGlmX3NldF91YXBzZF9pbmZv KHd2aWYsIHd2aWYtPnVhcHNkX21hc2spOworCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOworCX0KKwlt dXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCXJldHVybiAwOworfQorCitpbnQgd2Z4 X3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IE5VTEw7CisKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9 IE5VTEwpCisJCWhpZl9ydHNfdGhyZXNob2xkKHd2aWYsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30K Kwordm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3RydWN0IHdmeF92aWYgKnd2aWYsIHU4IHJh d19yY3BpX3Jzc2kpCit7CisJLyogUlNTSTogc2lnbmVkIFE4LjAsIFJDUEk6IHVuc2lnbmVkIFE3 LjEKKwkgKiBSU1NJID0gUkNQSSAvIDIgLSAxMTAKKwkgKi8KKwlpbnQgcmNwaV9yc3NpOworCWlu dCBjcW1fZXZ0OworCisJcmNwaV9yc3NpID0gcmF3X3JjcGlfcnNzaSAvIDIgLSAxMTA7CisJaWYg KHJjcGlfcnNzaSA8PSB3dmlmLT52aWYtPmJzc19jb25mLmNxbV9yc3NpX3Rob2xkKQorCQljcW1f ZXZ0ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfTE9XOworCWVsc2UKKwkJY3Ft X2V2dCA9IE5MODAyMTFfQ1FNX1JTU0lfVEhSRVNIT0xEX0VWRU5UX0hJR0g7CisJaWVlZTgwMjEx X2NxbV9yc3NpX25vdGlmeSh3dmlmLT52aWYsIGNxbV9ldnQsIHJjcGlfcnNzaSwgR0ZQX0tFUk5F TCk7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9iZWFjb25fbG9zc193b3JrKHN0cnVjdCB3b3JrX3N0 cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih0b19k ZWxheWVkX3dvcmsod29yayksCisJCQkJCSAgICBzdHJ1Y3Qgd2Z4X3ZpZiwgYmVhY29uX2xvc3Nf d29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmd3ZpZi0+dmlm LT5ic3NfY29uZjsKKworCWllZWU4MDIxMV9iZWFjb25fbG9zcyh3dmlmLT52aWYpOworCXNjaGVk dWxlX2RlbGF5ZWRfd29yayh0b19kZWxheWVkX3dvcmsod29yayksCisJCQkgICAgICBtc2Vjc190 b19qaWZmaWVzKGJzc19jb25mLT5iZWFjb25faW50KSk7Cit9CisKK3ZvaWQgd2Z4X3NldF9kZWZh dWx0X3VuaWNhc3Rfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLCBpbnQgaWR4KQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCWhpZl93ZXBfZGVmYXVsdF9rZXlfaWQo d3ZpZiwgaWR4KTsKK30KKwordm9pZCB3ZnhfcmVzZXQoc3RydWN0IHdmeF92aWYgKnd2aWYpCit7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSB3dmlmLT53ZGV2OworCisJd2Z4X3R4X2xvY2tfZmx1 c2god2Rldik7CisJaGlmX3Jlc2V0KHd2aWYsIGZhbHNlKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQo d3ZpZik7CisJaWYgKHd2aWZfY291bnQod2RldikgPD0gMSkKKwkJaGlmX3NldF9ibG9ja19hY2tf cG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOworCXdmeF90eF91bmxvY2sod2Rldik7CisJd3ZpZi0+ am9pbl9pbl9wcm9ncmVzcyA9IGZhbHNlOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3Zp Zi0+YmVhY29uX2xvc3Nfd29yayk7CisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2 aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsK K30KKworaW50IHdmeF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVl ZTgwMjExX3ZpZiAqdmlmLAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1 Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ ZHJ2X3ByaXY7CisKKwlzdGFfcHJpdi0+dmlmX2lkID0gd3ZpZi0+aWQ7CisKKwlpZiAodmlmLT50 eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWhpZl9zZXRfbWZwKHd2aWYsIHN0YS0+ bWZwLCBzdGEtPm1mcCk7CisKKwkvKiBJbiBzdGF0aW9uIG1vZGUsIHRoZSBmaXJtd2FyZSBpbnRl cnByZXRzIG5ldyBsaW5rLWlkIGFzIGEgVERMUyBwZWVyICovCisJaWYgKHZpZi0+dHlwZSA9PSBO TDgwMjExX0lGVFlQRV9TVEFUSU9OICYmICFzdGEtPnRkbHMpCisJCXJldHVybiAwOworCXN0YV9w cml2LT5saW5rX2lkID0gZmZ6KHd2aWYtPmxpbmtfaWRfbWFwKTsKKwl3dmlmLT5saW5rX2lkX21h cCB8PSBCSVQoc3RhX3ByaXYtPmxpbmtfaWQpOworCVdBUk5fT04oIXN0YV9wcml2LT5saW5rX2lk KTsKKwlXQVJOX09OKHN0YV9wcml2LT5saW5rX2lkID49IEhJRl9MSU5LX0lEX01BWCk7CisJaGlm X21hcF9saW5rKHd2aWYsIGZhbHNlLCBzdGEtPmFkZHIsIHN0YV9wcml2LT5saW5rX2lkLCBzdGEt Pm1mcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdmeF9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICBzdHJ1Y3QgaWVl ZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhf dmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChz dHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXY7CisKKwkvKiBTZWUgbm90ZSBpbiB3 Znhfc3RhX2FkZCgpICovCisJaWYgKCFzdGFfcHJpdi0+bGlua19pZCkKKwkJcmV0dXJuIDA7CisJ LyogRklYTUUgYWRkIGEgbXV0ZXg/ICovCisJaGlmX21hcF9saW5rKHd2aWYsIHRydWUsIHN0YS0+ YWRkciwgc3RhX3ByaXYtPmxpbmtfaWQsIGZhbHNlKTsKKwl3dmlmLT5saW5rX2lkX21hcCAmPSB+ QklUKHN0YV9wcml2LT5saW5rX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3Znhf dXBsb2FkX2FwX3RlbXBsYXRlcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlzdHJ1Y3Qgc2tf YnVmZiAqc2tiOworCisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcs IHd2aWYtPnZpZik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCWhpZl9zZXRfdGVt cGxhdGVfZnJhbWUod3ZpZiwgc2tiLCBISUZfVE1QTFRfQkNOLAorCQkJICAgICAgIEFQSV9SQVRF X0lOREVYX0JfMU1CUFMpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXNrYiA9IGllZWU4MDIx MV9wcm9iZXJlc3BfZ2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOworCWlmICghc2tiKQor CQlyZXR1cm4gLUVOT01FTTsKKwloaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHNrYiwgSElG X1RNUExUX1BSQlJFUywKKwkJCSAgICAgICBBUElfUkFURV9JTkRFWF9CXzFNQlBTKTsKKwlkZXZf a2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9zZXRfbWZw X2FwKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBpZWVl ODAyMTFfYmVhY29uX2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKKwljb25zdCBpbnQg aWVvZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlh YmxlKTsKKwljb25zdCB1MTYgKnB0ciA9ICh1MTYgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlE X1JTTiwKKwkJCQkJCSBza2ItPmRhdGEgKyBpZW9mZnNldCwKKwkJCQkJCSBza2ItPmxlbiAtIGll b2Zmc2V0KTsKKwljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50X29mZnNldCA9 IDggLyBzaXplb2YodTE2KTsKKwljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUg PSA0IC8gc2l6ZW9mKHUxNik7CisJY29uc3QgaW50IGFrbV9zdWl0ZV9zaXplID0gNCAvIHNpemVv Zih1MTYpOworCisJaWYgKHB0cikgeworCQlwdHIgKz0gcGFpcndpc2VfY2lwaGVyX3N1aXRlX2Nv dW50X29mZnNldDsKKwkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIo c2tiKSkpCisJCQlyZXR1cm47CisJCXB0ciArPSAxICsgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3Np emUgKiAqcHRyOworCQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihz a2IpKSkKKwkJCXJldHVybjsKKwkJcHRyICs9IDEgKyBha21fc3VpdGVfc2l6ZSAqICpwdHI7CisJ CWlmIChXQVJOX09OKHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQorCQkJcmV0 dXJuOworCQloaWZfc2V0X21mcCh3dmlmLCAqcHRyICYgQklUKDcpLCAqcHRyICYgQklUKDYpKTsK Kwl9Cit9CisKK2ludCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVj dCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0 IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+ d2RldjsKKwlpbnQgcmV0OworCisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZf aXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKwl3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwl3ZnhfdXBsb2FkX2FwX3Rl bXBsYXRlcyh3dmlmKTsKKwlyZXQgPSBoaWZfc3RhcnQod3ZpZiwgJnZpZi0+YnNzX2NvbmYsIHd2 aWYtPmNoYW5uZWwpOworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gLUVJTzsKKwl3Znhfc2V0X21m cF9hcCh3dmlmKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdmeF9y ZXNldCh3dmlmKTsKK30KKworc3RhdGljIHZvaWQgd2Z4X2pvaW4oc3RydWN0IHdmeF92aWYgKnd2 aWYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJnd2 aWYtPnZpZi0+YnNzX2NvbmY7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKKwl1 OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCWNvbnN0IHU4ICpzc2lkaWUgPSBOVUxM OworCWludCBzc2lkbGVuID0gMDsKKworCXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYtPndkZXYpOwor CisJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNo YW5uZWwsCisJCQkgICAgICAgY29uZi0+YnNzaWQsIE5VTEwsIDAsCisJCQkgICAgICAgSUVFRTgw MjExX0JTU19UWVBFX0FOWSwgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKKwlpZiAoIWJzcyAmJiAh Y29uZi0+aWJzc19qb2luZWQpIHsKKwkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKKwkJcmV0 dXJuOworCX0KKworCXJjdV9yZWFkX2xvY2soKTsgLyogcHJvdGVjdCBzc2lkaWUgKi8KKwlpZiAo YnNzKQorCQlzc2lkaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NTSUQp OworCWlmIChzc2lkaWUpIHsKKwkJc3NpZGxlbiA9IHNzaWRpZVsxXTsKKwkJaWYgKHNzaWRsZW4g PiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQorCQkJc3NpZGxlbiA9IElFRUU4MDIxMV9NQVhfU1NJ RF9MRU47CisJCW1lbWNweShzc2lkLCAmc3NpZGllWzJdLCBzc2lkbGVuKTsKKwl9CisJcmN1X3Jl YWRfdW5sb2NrKCk7CisKKwljZmc4MDIxMV9wdXRfYnNzKHd2aWYtPndkZXYtPmh3LT53aXBoeSwg YnNzKTsKKworCXd2aWYtPmpvaW5faW5fcHJvZ3Jlc3MgPSB0cnVlOworCXJldCA9IGhpZl9qb2lu KHd2aWYsIGNvbmYsIHd2aWYtPmNoYW5uZWwsIHNzaWQsIHNzaWRsZW4pOworCWlmIChyZXQpIHsK KwkJaWVlZTgwMjExX2Nvbm5lY3Rpb25fbG9zcyh3dmlmLT52aWYpOworCQl3ZnhfcmVzZXQod3Zp Zik7CisJfSBlbHNlIHsKKwkJLyogRHVlIHRvIGJlYWNvbiBmaWx0ZXJpbmcgaXQgaXMgcG9zc2li bGUgdGhhdCB0aGUKKwkJICogQVAncyBiZWFjb24gaXMgbm90IGtub3duIGZvciB0aGUgbWFjODAy MTEgc3RhY2suCisJCSAqIERpc2FibGUgZmlsdGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUg dGhlIHN0YWNrCisJCSAqIHJlY2VpdmVzIGF0IGxlYXN0IG9uZQorCQkgKi8KKwkJd2Z4X2ZpbHRl cl9iZWFjb24od3ZpZiwgZmFsc2UpOworCX0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOwor fQorCitzdGF0aWMgdm9pZCB3Znhfam9pbl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwK KwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCit7CisJc3RydWN0IGll ZWU4MDIxMV9zdGEgKnN0YSA9IE5VTEw7CisJaW50IGFtcGR1X2RlbnNpdHkgPSAwOworCWJvb2wg Z3JlZW5maWVsZCA9IGZhbHNlOworCisJcmN1X3JlYWRfbG9jaygpOyAvKiBwcm90ZWN0IHN0YSAq LworCWlmIChpbmZvLT5ic3NpZCAmJiAhaW5mby0+aWJzc19qb2luZWQpCisJCXN0YSA9IGllZWU4 MDIxMV9maW5kX3N0YSh3dmlmLT52aWYsIGluZm8tPmJzc2lkKTsKKwlpZiAoc3RhICYmIHN0YS0+ aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJYW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1 X2RlbnNpdHk7CisJaWYgKHN0YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYKKwkgICAg IShpbmZvLT5odF9vcGVyYXRpb25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9T VEFfUFJTTlQpKQorCQlncmVlbmZpZWxkID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjEx X0hUX0NBUF9HUk5fRkxEKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXd2aWYtPmpvaW5faW5f cHJvZ3Jlc3MgPSBmYWxzZTsKKwloaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUod3ZpZiwgYW1wZHVf ZGVuc2l0eSwgZ3JlZW5maWVsZCwKKwkJCQkgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKKwlo aWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgMCk7CisJLyogYmVhY29uX2xvc3NfY291bnQgaXMg ZGVmaW5lZCB0byA3IGluIG5ldC9tYWM4MDIxMS9tbG1lLmMuIExldCdzIHVzZQorCSAqIHRoZSBz YW1lIHZhbHVlLgorCSAqLworCWhpZl9zZXRfYnNzX3BhcmFtcyh3dmlmLCBpbmZvLT5haWQsIDcp OworCWhpZl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgMSwgMSk7CisJd2Z4X3VwZGF0 ZV9wbSh3dmlmKTsKK30KKworaW50IHdmeF9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJd2Z4X3VwbG9hZF9hcF90ZW1w bGF0ZXMod3ZpZik7CisJd2Z4X2pvaW4od3ZpZik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4 X2xlYXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYt PmRydl9wcml2OworCisJd2Z4X3Jlc2V0KHd2aWYpOworfQorCitzdGF0aWMgdm9pZCB3ZnhfZW5h YmxlX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBlbmFibGUpCit7CisJLyogRHJp dmVyIGhhcyBDb250ZW50IEFmdGVyIERUSU0gQmVhY29uIGluIHF1ZXVlLiBEcml2ZXIgaXMgd2Fp dGluZyBmb3IKKwkgKiBhIHNpZ25hbCBmcm9tIHRoZSBmaXJtd2FyZS4gU2luY2Ugd2UgYXJlIGdv aW5nIHRvIHN0b3AgdG8gc2VuZAorCSAqIGJlYWNvbnMsIHRoaXMgc2lnbmFsIHdpbGwgbmV2ZXIg aGFwcGVucy4gU2VlIGFsc28KKwkgKiB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoKQorCSAqLworCWlm ICghZW5hYmxlICYmIHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSkgeworCQl3dmlmLT5hZnRl cl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOworCQl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2 KTsKKwl9CisJaGlmX2JlYWNvbl90cmFuc21pdCh3dmlmLCBlbmFibGUpOworfQorCit2b2lkIHdm eF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgw MjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIg Y2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgaTsK KworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJaWYgKGNoYW5nZWQgJiBCU1Nf Q0hBTkdFRF9CQVNJQ19SQVRFUyB8fAorCSAgICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09O X0lOVCB8fAorCSAgICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKKwkJaWYgKHZpZi0+ dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJd2Z4X2pvaW4od3ZpZik7CisJfQor CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgeworCQlpZiAoaW5mby0+YXNzb2Mg fHwgaW5mby0+aWJzc19qb2luZWQpCisJCQl3Znhfam9pbl9maW5hbGl6ZSh3dmlmLCBpbmZvKTsK KwkJZWxzZSBpZiAoIWluZm8tPmFzc29jICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9T VEFUSU9OKQorCQkJd2Z4X3Jlc2V0KHd2aWYpOworCQllbHNlCisJCQlkZXZfd2Fybih3ZGV2LT5k ZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFuZ2U6IEFTU09DXG4iLAorCQkJCSBfX2Z1bmNfXyk7 CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fSU5GTykgeworCQlpZiAo dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlkZXZfd2Fybih3ZGV2LT5k ZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFuZ2U6IEJFQUNPTl9JTkZPXG4iLAorCQkJCSBfX2Z1 bmNfXyk7CisJCWhpZl9zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Qod3ZpZiwgaW5mby0+ZHRpbV9w ZXJpb2QsCisJCQkJCSAgICAgaW5mby0+ZHRpbV9wZXJpb2QpOworCQkvKiBXZSB0ZW1wb3Jhcnkg Zm9yd2FyZGVkIGJlYWNvbiBmb3Igam9pbiBwcm9jZXNzLiBJdCBpcyBub3cgbm8KKwkJICogbW9y ZSBuZWNlc3NhcnkuCisJCSAqLworCQl3ZnhfZmlsdGVyX2JlYWNvbih3dmlmLCB0cnVlKTsKKwl9 CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FSUF9GSUxURVIpIHsKKwkJZm9yIChpID0g MDsgaSA8IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTOyBpKyspIHsKKwkJCV9fYmUz MiAqYXJwX2FkZHIgPSAmaW5mby0+YXJwX2FkZHJfbGlzdFtpXTsKKworCQkJaWYgKGluZm8tPmFy cF9hZGRyX2NudCA+IEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTKQorCQkJCWFycF9h ZGRyID0gTlVMTDsKKwkJCWlmIChpID49IGluZm8tPmFycF9hZGRyX2NudCkKKwkJCQlhcnBfYWRk ciA9IE5VTEw7CisJCQloaWZfc2V0X2FycF9pcHY0X2ZpbHRlcih3dmlmLCBpLCBhcnBfYWRkcik7 CisJCX0KKwl9CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FQX1BST0JFX1JFU1AgfHwK KwkgICAgY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTikKKwkJd2Z4X3VwbG9hZF9hcF90ZW1w bGF0ZXMod3ZpZik7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVE KQorCQl3ZnhfZW5hYmxlX2JlYWNvbih3dmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsKKworCWlm IChjaGFuZ2VkICYgQlNTX0NIQU5HRURfS0VFUF9BTElWRSkKKwkJaGlmX2tlZXBfYWxpdmVfcGVy aW9kKHd2aWYsIGluZm8tPm1heF9pZGxlX3BlcmlvZCAqCisJCQkJCSAgICBVU0VDX1BFUl9UVSAv IFVTRUNfUEVSX01TRUMpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BS T1QpCisJCWhpZl9lcnBfdXNlX3Byb3RlY3Rpb24od3ZpZiwgaW5mby0+dXNlX2N0c19wcm90KTsK KworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpCisJCWhpZl9zbG90X3RpbWUo d3ZpZiwgaW5mby0+dXNlX3Nob3J0X3Nsb3QgPyA5IDogMjApOworCisJaWYgKGNoYW5nZWQgJiBC U1NfQ0hBTkdFRF9DUU0pCisJCWhpZl9zZXRfcmNwaV9yc3NpX3RocmVzaG9sZCh3dmlmLCBpbmZv LT5jcW1fcnNzaV90aG9sZCwKKwkJCQkJICAgIGluZm8tPmNxbV9yc3NpX2h5c3QpOworCisJaWYg KGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9UWFBPV0VSKQorCQloaWZfc2V0X291dHB1dF9wb3dlcih3 dmlmLCBpbmZvLT50eHBvd2VyKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfUFMpCisJ CXdmeF91cGRhdGVfcG0od3ZpZik7CisKKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgp OworfQorCitzdGF0aWMgaW50IHdmeF91cGRhdGVfdGltKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQor eworCXN0cnVjdCBza19idWZmICpza2I7CisJdTE2IHRpbV9vZmZzZXQsIHRpbV9sZW5ndGg7CisJ dTggKnRpbV9wdHI7CisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0od3ZpZi0+d2Rl di0+aHcsIHd2aWYtPnZpZiwKKwkJCQkgICAgICAgJnRpbV9vZmZzZXQsICZ0aW1fbGVuZ3RoKTsK KwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9FTlQ7CisJdGltX3B0ciA9IHNrYi0+ZGF0YSArIHRp bV9vZmZzZXQ7CisKKwlpZiAodGltX29mZnNldCAmJiB0aW1fbGVuZ3RoID49IDYpIHsKKwkJLyog SWdub3JlIERUSU0gY291bnQgZnJvbSBtYWM4MDIxMToKKwkJICogZmlybXdhcmUgaGFuZGxlcyBE VElNIGludGVybmFsbHkuCisJCSAqLworCQl0aW1fcHRyWzJdID0gMDsKKworCQkvKiBTZXQvcmVz ZXQgYWlkMCBiaXQgKi8KKwkJaWYgKHdmeF90eF9xdWV1ZXNfaGFzX2NhYih3dmlmKSkKKwkJCXRp bV9wdHJbNF0gfD0gMTsKKwkJZWxzZQorCQkJdGltX3B0cls0XSAmPSB+MTsKKwl9CisKKwloaWZf dXBkYXRlX2llX2JlYWNvbih3dmlmLCB0aW1fcHRyLCB0aW1fbGVuZ3RoKTsKKwlkZXZfa2ZyZWVf c2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Z4X3VwZGF0ZV90aW1f d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYg PSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIHVwZGF0ZV90aW1fd29yayk7CisK Kwl3ZnhfdXBkYXRlX3RpbSh3dmlmKTsKK30KKworaW50IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBib29sIHNldCkKK3sKKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3Znhfc3RhX3ByaXYgKnN0 YV9kZXYgPSAoc3RydWN0IHdmeF9zdGFfcHJpdiAqKSZzdGEtPmRydl9wcml2OworCXN0cnVjdCB3 ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdkZXYsIHN0YV9kZXYtPnZpZl9pZCk7CisKKwlp ZiAoIXd2aWYpIHsKKwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiJXM6IHJlY2VpdmVkIGV2ZW50IGZv ciBub24tZXhpc3RlbnQgdmlmXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlPOworCX0KKwlz Y2hlZHVsZV93b3JrKCZ3dmlmLT51cGRhdGVfdGltX3dvcmspOworCXJldHVybiAwOworfQorCit2 b2lkIHdmeF9zdXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFf bm90aWZ5X2NtZCBub3RpZnlfY21kKQoreworCWlmIChub3RpZnlfY21kICE9IFNUQV9OT1RJRllf QVdBS0UpCisJCXJldHVybjsKKwlXQVJOKCF3ZnhfdHhfcXVldWVzX2hhc19jYWIod3ZpZiksICJp bmNvcnJlY3Qgc2VxdWVuY2UiKTsKKwlXQVJOKHd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCwg ImluY29ycmVjdCBzZXF1ZW5jZSIpOworCXd2aWYtPmFmdGVyX2R0aW1fdHhfYWxsb3dlZCA9IHRy dWU7CisJd2Z4X2JoX3JlcXVlc3RfdHgod3ZpZi0+d2Rldik7Cit9CisKK2ludCB3ZnhfYW1wZHVf YWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYsCisJCSAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcykK K3sKKwkvKiBBZ2dyZWdhdGlvbiBpcyBpbXBsZW1lbnRlZCBmdWxseSBpbiBmaXJtd2FyZSAqLwor CXN3aXRjaCAocGFyYW1zLT5hY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFS VDoKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgorCQkvKiBKdXN0IGFja25vd2xlZGdl IGl0IHRvIGVuYWJsZSBmcmFtZSByZS1vcmRlcmluZyAqLworCQlyZXR1cm4gMDsKKwlkZWZhdWx0 OgorCQkvKiBMZWF2ZSB0aGUgZmlybXdhcmUgZG9pbmcgaXRzIGJ1c2luZXNzIGZvciB0eCBhZ2dy ZWdhdGlvbiAqLworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KK30KKworaW50IHdmeF9hZGRfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hh bmN0eF9jb25mICpjb25mKQoreworCXJldHVybiAwOworfQorCit2b2lkIHdmeF9yZW1vdmVfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0 eF9jb25mICpjb25mKQoreworfQorCit2b2lkIHdmeF9jaGFuZ2VfY2hhbmN0eChzdHJ1Y3QgaWVl ZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mLAor CQkJdTMyIGNoYW5nZWQpCit7Cit9CisKK2ludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgc3Ry dWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2 aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBpZWVlODAyMTFf Y2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKKworCVdBUk4od3ZpZi0+Y2hhbm5lbCwgImNo YW5uZWwgb3ZlcndyaXRlIik7CisJd3ZpZi0+Y2hhbm5lbCA9IGNoOworCisJcmV0dXJuIDA7Cit9 CisKK3ZvaWQgd2Z4X3VuYXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBp ZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0g KHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5u ZWwgKmNoID0gY29uZi0+ZGVmLmNoYW47CisKKwlXQVJOKHd2aWYtPmNoYW5uZWwgIT0gY2gsICJj aGFubmVsIG1pc21hdGNoIik7CisJd3ZpZi0+Y2hhbm5lbCA9IE5VTEw7Cit9CisKK2ludCB3Znhf Y29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlyZXR1cm4g MDsKK30KKworaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBz dHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCWludCBpLCByZXQgPSAwOworCXN0cnVjdCB3 ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0 IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJdmlmLT5kcml2ZXJfZmxhZ3MgfD0gSUVFRTgw MjExX1ZJRl9CRUFDT05fRklMVEVSIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19V QVBTRCB8CisJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FNX1JTU0k7CisKKwltdXRl eF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2Fz ZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJ Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5s b2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCS8q IEZJWE1FOiBwcmVmZXIgdXNlIG9mIGNvbnRhaW5lcl9vZigpIHRvIGdldCB2aWYgKi8KKwl3dmlm LT52aWYgPSB2aWY7CisJd3ZpZi0+d2RldiA9IHdkZXY7CisKKwl3dmlmLT5saW5rX2lkX21hcCA9 IDE7IC8qIGxpbmstaWQgMCBpcyByZXNlcnZlZCBmb3IgbXVsdGljYXN0ICovCisJSU5JVF9XT1JL KCZ3dmlmLT51cGRhdGVfdGltX3dvcmssIHdmeF91cGRhdGVfdGltX3dvcmspOworCUlOSVRfREVM QVlFRF9XT1JLKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrLCB3ZnhfYmVhY29uX2xvc3Nfd29yayk7 CisKKwlpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlKTsKKwljb21w bGV0ZSgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOworCUlOSVRfV09SSygmd3ZpZi0+dHhf cG9saWN5X3VwbG9hZF93b3JrLCB3ZnhfdHhfcG9saWN5X3VwbG9hZF93b3JrKTsKKworCW11dGV4 X2luaXQoJnd2aWYtPnNjYW5fbG9jayk7CisJaW5pdF9jb21wbGV0aW9uKCZ3dmlmLT5zY2FuX2Nv bXBsZXRlKTsKKwlJTklUX1dPUksoJnd2aWYtPnNjYW5fd29yaywgd2Z4X2h3X3NjYW5fd29yayk7 CisKKwl3ZnhfdHhfcXVldWVzX2luaXQod3ZpZik7CisJd2Z4X3R4X3BvbGljeV9pbml0KHd2aWYp OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7CisJCWlm ICghd2Rldi0+dmlmW2ldKSB7CisJCQl3ZGV2LT52aWZbaV0gPSB2aWY7CisJCQl3dmlmLT5pZCA9 IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlXQVJOKGkgPT0gQVJSQVlfU0laRSh3ZGV2LT52aWYp LCAidHJ5IHRvIGluc3RhbnRpYXRlIG1vcmUgdmlmIHRoYW4gc3VwcG9ydGVkIik7CisKKwloaWZf c2V0X21hY2FkZHIod3ZpZiwgdmlmLT5hZGRyKTsKKworCW11dGV4X3VubG9jaygmd2Rldi0+Y29u Zl9tdXRleCk7CisKKwl3dmlmID0gTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUo d2Rldiwgd3ZpZikpICE9IE5VTEwpIHsKKwkJLyogQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0 IEJsb2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLworCQlpZiAod3ZpZl9jb3VudCh3 ZGV2KSA9PSAxKQorCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYp OworCQllbHNlCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7 CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2Z4X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0 IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0 IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1 Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVv dXQoJnd2aWYtPnNldF9wbV9tb2RlX2NvbXBsZXRlLCBtc2Vjc190b19qaWZmaWVzKDMwMCkpOwor CXdmeF90eF9xdWV1ZXNfY2hlY2tfZW1wdHkod3ZpZik7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5j b25mX211dGV4KTsKKwlXQVJOKHd2aWYtPmxpbmtfaWRfbWFwICE9IDEsICJjb3JydXB0ZWQgc3Rh dGUiKTsKKworCWhpZl9yZXNldCh3dmlmLCBmYWxzZSk7CisJaGlmX3NldF9tYWNhZGRyKHd2aWYs IE5VTEwpOworCXdmeF90eF9wb2xpY3lfaW5pdCh3dmlmKTsKKworCWNhbmNlbF9kZWxheWVkX3dv cmtfc3luYygmd3ZpZi0+YmVhY29uX2xvc3Nfd29yayk7CisJd2Rldi0+dmlmW3d2aWYtPmlkXSA9 IE5VTEw7CisJd3ZpZi0+dmlmID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9t dXRleCk7CisKKwl3dmlmID0gTlVMTDsKKwl3aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rl diwgd3ZpZikpICE9IE5VTEwpIHsKKwkJLyogQ29tYm8gbW9kZSBkb2VzIG5vdCBzdXBwb3J0IEJs b2NrIEFja3MuIFdlIGNhbiByZS1lbmFibGUgdGhlbSAqLworCQlpZiAod3ZpZl9jb3VudCh3ZGV2 KSA9PSAxKQorCQkJaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHd2aWYsIDB4RkYsIDB4RkYpOwor CQllbHNlCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHgwMCwgMHgwMCk7CisJ fQorfQorCitpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVy biAwOworfQorCit2b2lkIHdmeF9zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0 cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisKKwlXQVJOX09OKCFza2JfcXVldWVfZW1w dHlfbG9ja2xlc3MoJndkZXYtPnR4X3BlbmRpbmcpKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxh YnMvd2Z4L3N0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTY5 Zjg0MGQ4YzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9zdGEuaApAQCAtMCwwICsxLDczIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMC1vbmx5ICovCisvKgorICogSW1wbGVtZW50YXRpb24gb2YgbWFjODAyMTEgQVBJLgor ICoKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5j LgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICovCisjaWZuZGVmIFdGWF9T VEFfSAorI2RlZmluZSBXRlhfU1RBX0gKKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorCitz dHJ1Y3Qgd2Z4X2RldjsKK3N0cnVjdCB3ZnhfdmlmOworCitzdHJ1Y3Qgd2Z4X3N0YV9wcml2IHsK KwlpbnQgbGlua19pZDsKKwlpbnQgdmlmX2lkOworfTsKKworLyogbWFjODAyMTEgaW50ZXJmYWNl ICovCitpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgd2Z4X3N0 b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKK2ludCB3Znhfc2V0X3J0c190aHJlc2hvbGQoc3Ry dWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSk7Cit2b2lkIHdmeF9zZXRfZGVmYXVsdF91 bmljYXN0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgc3RydWN0IGllZWU4MDIx MV92aWYgKnZpZiwgaW50IGlkeCk7Cit2b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWdu ZWQgaW50ICp0b3RhbF9mbGFncywgdTY0IHVudXNlZCk7CisKK2ludCB3ZnhfYWRkX2ludGVyZmFj ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2 b2lkIHdmeF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwordm9pZCB3Znhfc3RvcF9hcChzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgd2Z4 X2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYg KnZpZik7Cit2b2lkIHdmeF9sZWF2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1 Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3ZnhfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJdTE2IHF1ZXVlLCBjb25zdCBz dHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgd2Z4X2Jzc19p bmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sIHUzMiBjaGFuZ2Vk KTsKK2ludCB3Znhfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4 MDIxMV92aWYgKnZpZiwKKwkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7CitpbnQgd2Z4X3N0 YV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCisJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOwordm9pZCB3Znhfc3RhX25vdGlm eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJ ICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsK K2ludCB3Znhfc2V0X3RpbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIx MV9zdGEgKnN0YSwgYm9vbCBzZXQpOworaW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgICAgc3RydWN0IGll ZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcyk7CitpbnQgd2Z4X2FkZF9jaGFuY3R4KHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYg KmNvbmYpOwordm9pZCB3ZnhfcmVtb3ZlX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZik7Cit2b2lkIHdmeF9jaGFu Z2VfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBpZWVlODAyMTFf Y2hhbmN0eF9jb25mICpjb25mLCB1MzIgY2hhbmdlZCk7CitpbnQgd2Z4X2Fzc2lnbl92aWZfY2hh bmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwK KwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsKK3ZvaWQgd2Z4X3Vu YXNzaWduX3ZpZl9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0 eF9jb25mICpjb25mKTsKKworLyogV1NNIENhbGxiYWNrcyAqLwordm9pZCB3ZnhfY29vbGluZ190 aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgd2Z4X3N1c3BlbmRf aG90X2RldihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQpOwor dm9pZCB3Znhfc3VzcGVuZF9yZXN1bWVfbWMoc3RydWN0IHdmeF92aWYgKnd2aWYsIGVudW0gc3Rh X25vdGlmeV9jbWQgY21kKTsKK3ZvaWQgd2Z4X2V2ZW50X3JlcG9ydF9yc3NpKHN0cnVjdCB3Znhf dmlmICp3dmlmLCB1OCByYXdfcmNwaV9yc3NpKTsKK2ludCB3ZnhfdXBkYXRlX3BtKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKTsKKworLyogT3RoZXIgSGVscGVycyAqLwordm9pZCB3ZnhfcmVzZXQoc3Ry dWN0IHdmeF92aWYgKnd2aWYpOwordTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHUzMiByYXRlcyk7CisKKyNlbmRpZgotLSAKMi4zMC4yCgo=