Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp8239603rwb; Tue, 13 Dec 2022 04:08:29 -0800 (PST) X-Google-Smtp-Source: AA0mqf4GEfRBzHw9RmzTIucQcQmb31ZUNSc+wPaZgjE0E/5jOXucSQGHjYNgzTcXeWqtd2gnr3mL X-Received: by 2002:a05:6402:5508:b0:462:2e05:30ce with SMTP id fi8-20020a056402550800b004622e0530cemr15085285edb.42.1670933309054; Tue, 13 Dec 2022 04:08:29 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670933309; cv=pass; d=google.com; s=arc-20160816; b=BQ4/0j9zks3Dt1jQjsjZhb5H+bdAoI4F75Pmc0/f5yaFpRNbBIOEjVNpYtaJ3bTgUO /qCalQI8TmaZXoDzeNXLX8y56WOVRVf6VNBiVGMjayYY7/QTiEbADedSlQF8l4SCV4Ww /QC3ydnmOclj23FDL4co+eX9U7XF6vpjjQ6lkh2Gl5DXCiH5ejtIqeteaG3IyTNnv3I7 iEfoz66eD+LnmFDa8b6dWipJlHSBzMscBJHa7Y+OQCdCxckUgyPYaY6MNUplzotDSfuo tATehX7rf53UsshGot+qt+aGl2jrt8QTLD+zlB+nhmS1YY0H62VyDEzfr2z/Ul8zCktD +uVw== 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 :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=sAGpp+R80ZOSw/IEHWrkcmUefZJMqspdFWtWkJy5DIE=; b=DjxL5PlzP7fZUrUpaTPRs+uEoUkN/Gg28HHyJoC5bAgsDYSwsk1niKYbKUJWXr6pfK 2c5JdX59fFYecuJVOqOwHAPCGBrHjjDiEF5CCS/qaTDBIPlo5qTo8vp/iNHowDAfcSNt f4Kbil3Tf/EE30naBGyIry0YJuG1cVrQ6JlcIJOsEuAFtLdAz7XxoxsDXdKmw9Qm3fLN GqfDDiUeXubqsFIE2ndvg57oiGCmjBRsJOYCBHGM6EyzK7ClQ81bHSBGWWXEBqup4eZq FgE0IDZQhs+oZpdJT4jbNhoyKyWCLUjs8JbSIjSfNkTmE3x528i0y++cno7nxUxgHJOT MuFQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=jkNx5A6O; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m7-20020a056402430700b0046ca3d56ff5si10185032edc.571.2022.12.13.04.07.58; Tue, 13 Dec 2022 04:08:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=jkNx5A6O; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235448AbiLMMAt (ORCPT + 99 others); Tue, 13 Dec 2022 07:00:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49444 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235483AbiLMMAX (ORCPT ); Tue, 13 Dec 2022 07:00:23 -0500 Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01on2074.outbound.protection.outlook.com [40.107.13.74]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 10DD412AB1; Tue, 13 Dec 2022 03:59:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f6Wg5bUR8v8GFPaQjjnIkT0Bd97hnRrdD23Lwg0id088ih941tyR+3ntk3GQRa75RGwtoUZ3cD6LkBlivq7nqh0V8ssFGGIXA1jF1PgViYpMLTaW+5I4Qfk9/xvbkJPvaF58RLmA394+mX/im7dF2IolpPV76pVxCUe3B/OUSBPdoI3S9aKvrj4UiIXX7AHGkdw54aJQZ/scgj4rvfnRDgnMuvRjT1j6fTqApJW7V1ngTV2DHRKOgc/RD6Us4wGkev0L376/PvPWiC0DDwOailrdIOTKmWzMjqcQR8yf5/CO4wHaXHbGys8R/6yQkYF4C8H3lJQLLYdzT5C7dnQPKw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sAGpp+R80ZOSw/IEHWrkcmUefZJMqspdFWtWkJy5DIE=; b=TYwq/l0pLB72IihawtsOiboy3ZqdkNoIkPZi1P5FHL0OT/fCGCOBPMue0A0RytdZbvNBwFzO+9p9AC0b75LSMhI/IUVhIpoC9BJS+Uzj9/q/9uE/0YnSmjx2CImVM7FW7frYUAgRKi7garFKHDUWN7r6JABNM8ojxx1upeLrOYXazSWPMIG6ufbesG1+150rlR3dRtDCnoYa4pWFFOl4Q2Ou7nCM7mxt+PEaBXNHiGukyUZRZ7iGiIM8ZyTxL9AFDIbPFGXPn5/8Zb2cvc3ZRQfqj1//z3j2sl79F1x7zVKUQohG/Gu8ZvDQW5Kil4e/V0jIryhXGu/3qFTrFLHrHg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sAGpp+R80ZOSw/IEHWrkcmUefZJMqspdFWtWkJy5DIE=; b=jkNx5A6OCMMn14HvgiTR1z28N8ms3Az3x2ej7w3Q/ogRIpWm3cyKKuWqnMTQWnFkHBj3Q3q876BXj3XG+JFB+DAUqLfQH6x7UpZK08+ItRPh7nohHCzSqlQaxZdvlIe362ZGat7R0I2fxRWznplTxvKecPwkxKDW7bURDiMILy4= Received: from AM9PR04MB8603.eurprd04.prod.outlook.com (2603:10a6:20b:43a::10) by AM7PR04MB6824.eurprd04.prod.outlook.com (2603:10a6:20b:10e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.19; Tue, 13 Dec 2022 11:59:14 +0000 Received: from AM9PR04MB8603.eurprd04.prod.outlook.com ([fe80::7686:5382:16d5:c6de]) by AM9PR04MB8603.eurprd04.prod.outlook.com ([fe80::7686:5382:16d5:c6de%8]) with mapi id 15.20.5880.019; Tue, 13 Dec 2022 11:59:14 +0000 From: Neeraj sanjay kale To: Luiz Augusto von Dentz CC: "marcel@holtmann.org" , "johan.hedberg@gmail.com" , "pmenzel@molgen.mpg.de" , Amitkumar Karwar , Rohit Fule , Sherry Sun , "linux-kernel@vger.kernel.org" , "linux-bluetooth@vger.kernel.org" Subject: Re: [PATCH v3 1/2] Bluetooth: Add hci_nxp to hci_uart module to support NXP BT chipsets Thread-Topic: [PATCH v3 1/2] Bluetooth: Add hci_nxp to hci_uart module to support NXP BT chipsets Thread-Index: AQHZDupRngKCNRGcu0iPHR0XC6rHPw== Date: Tue, 13 Dec 2022 11:59:14 +0000 Message-ID: References: <1669207413-9637-1-git-send-email-neeraj.sanjaykale@nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AM9PR04MB8603:EE_|AM7PR04MB6824:EE_ x-ms-office365-filtering-correlation-id: 17fc8695-a118-46a5-256e-08dadd017456 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /G5j52gWjjairnalzNnUe56eNCKUYdUq3h8D+B1C705l/xV8jfJPN4gaSWjgnur6eL0Sx9+qa1h2CXj3oAp3NK0n1DuEyxlhOOpHLA7kjdawsBDgWWNCNizLv98cxyHXQioyrFrjwHXqFxacA7RUmVto9vzIkMDZo8KxNOsEyZpKVwyakXX9gqVAlEhHQvNcUdGwoyW38jgY+twDAmMLcnhR9NqQhlPe3dhVtx+MdA1rTBR5XA3kyhxtF2K41tVeHt3838R5wllAP67JUGkV0byVhcNhOOndZk9FNk1qPr5I5TQV4RIu7pgeqxM0n7WC+LETsxeE0QIvfDhB3gz/TLl3kpG5zp2iqhrsw4Wb4AIsjx6lOEuh0ApThPDgojQ0LGi+wRLS4JQq1u8rhwOzSVMuQfXkg43LLnN/Hw9Mj/KViSYxiEDOEEf/Vc6QTBJTDni5inI4smjLowIjKAA43JdI9e/GyaNug1LHOGLjtpDTvgVPoHZjCLenZraj9kjrp4PcrkfXgHHlU+ShyZcYgW7iEeAhtlmhVBCH9A6kHsp5OASE6RXk+UmMOWIhT8/NoB3HhSNUYuPfoeVmBueMNYtoVz8xaeZk5+WcBf1kG7hcUuR0JJ985VxQM/lEB49nYK9tquZ7NCv7M1Yc7NBG/6hk3xKIwCGU9qQvNyWh1hne1bCINQWoDt+znrm8+8rudy+2clySAivY4XidFXuc0h2XGeZUkda9MkHt4DTUAoo= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8603.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(366004)(376002)(396003)(136003)(346002)(39860400002)(451199015)(122000001)(2906002)(38100700002)(66946007)(64756008)(8676002)(66476007)(76116006)(4326008)(33656002)(55016003)(41300700001)(86362001)(66556008)(316002)(26005)(38070700005)(30864003)(6916009)(8936002)(54906003)(66446008)(83380400001)(52536014)(6506007)(5660300002)(9686003)(478600001)(71200400001)(7696005)(53546011)(186003)(55236004)(2004002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?aXNZU3d5NHR3VXNUNjF2VjQrTFUvR0VVWVdGaG5PdWtlUjA1SzFueHc2ZW51?= =?utf-8?B?YjFwMVIyYUJiOGpIMTlTSGRySTBlOEJYY0xZWFREVzlOSzlCOHBManAvUUNa?= =?utf-8?B?SlZUT1hFZUJvNVNveCtLNHpZUmtrMnA4Qm5xRkowTzM4anBDMVU3dWtEQ2JQ?= =?utf-8?B?bUEyREpaYkxWbUJud0RaZ2RZNkp2N0RHSC9pNTFmUmd0Ukk1WDFwdlVJQ0Rm?= =?utf-8?B?ZTdDTktDTkNUamVRNndDSlEwMExnbTBkSC9WMncxNHFLT0hjazVLaHBtL2Zw?= =?utf-8?B?NDdwUkpHUTRRQStjcXpPYVlFSFpEa2p1bkRiWlNITDJpcTg4SDB2K0lPeGJB?= =?utf-8?B?NlozdVhJQ0MwaXhvSVVvZVo0eHhVT0lydk5sMCtvMFpSWm1Oa1o2VUp5VEln?= =?utf-8?B?M1creS9lckpGRGlnWnl2WUpyNXc2cHBrbnBtMnZ2STBCanRFTGdyRG5RNE56?= =?utf-8?B?ckxRcFNQT2pHS2ZtS1lHSUNqYjJ0SXFzdmVTbU1DV2JxK2puUHAxOGJkalZz?= =?utf-8?B?QzMra3BkRTZiTG10V3E4TTM3L3RuVUtUbEMxYTNEVXVlM1RLZlVkeE00NG96?= =?utf-8?B?bk9UdTRwcjl0aFRrRlV2eWRsM3BtNUhGVVEvQVl1TkQyWEh1bkpJb3h4dGhz?= =?utf-8?B?ZWZOVUZ5QUJmQ3VuYjVQMDRmQUhVSGZnYzFPRTZCRlg5ZTVZdGNMZVJYaHIz?= =?utf-8?B?Vm9JMm4rOU5GRi9sUUtodGE5aEZEQjVLWWF0ZFQvOUR6QmovYjNLVnU0Vmo5?= =?utf-8?B?ZkFTcjl5TGVMVXl4Y2R0UjF2Q0RxNGM2a1F0dzdtOXhKWDV3YWlFSHJFSlZi?= =?utf-8?B?TEcyb3BVSEVlRVlzMXlwYVN6MGZaMzBmbk81TFVaV3JZLzhTUjFwemxXVTVI?= =?utf-8?B?YlRKdGxHOVorQXFxNVgrTXhYZWdYQTlnaEZuMXNRMjdIWEZ0YUFXWmU5ODdr?= =?utf-8?B?bXRRR0p4UmtTSmZyY3F1MFRpVXZicmxqcHE2U3hhenJBUk03V2FJbk1UR3hZ?= =?utf-8?B?NjNaZlhtV0NpMjN5Y0tUZVpZeXIzZ3d2UEJKYjVKQkJsUU5ZNThtSlZYbEFt?= =?utf-8?B?NXh4QUhPT3o3NWxScXlNZXhCTzgyVWFYRDkzQzBxSnY3Qk9QOGREai9adHk4?= =?utf-8?B?R2tMelRXYWlKenMvTkxGbU9rd3MxVGRVNkoyOXY2RmpIL2FxSXpVeUgyVFc0?= =?utf-8?B?Q0VlMUNWMTNjc3Z1WFBZTDN3K01MWS9UTGhtTktwMEhYSlpuNkhTS0hrb3p6?= =?utf-8?B?c2Jibm9WOWU2aFBGdExvL2RMR0U5b0N6Q0pHMFpDaGVENkpDMXlNSjQ5TGpI?= =?utf-8?B?bVN2NVBkR1ZWc0hRWXFTa1VLRW55dThNQVB5NVpVdW1Ldlp1cmdvUDF5YTZV?= =?utf-8?B?WStvc3pUT0VCYjVaeVRvZkFGdUdMcFF1YnpieDBObE5BcnBFaFBnTXU0Lyt3?= =?utf-8?B?VTkrUGhFY2xXTDZuS0YzQ1Jaak5UOENHb3JXQ3J5UWlmSUhLb3grWTUvcm9G?= =?utf-8?B?dDh2RitEMGdjNGxJdVFsc3FwTkc0R014Qnp6WEovRnVkL05mMnBNZ1JSNmxz?= =?utf-8?B?TWRURVpoelEzcDhnMFJLK25WVmV2aGxqZkw1WFAzQjk4N3dZbEZYbmdNTHhS?= =?utf-8?B?WDNFakJIbVBaSUZoWVBpejBsTFRSZmhKQVpDL0FiTG01RGNLZWttTmp6N3hs?= =?utf-8?B?eEN6L3NkdkNmakxGZkNPNXpsbHhiNTdOZlVQZWVmMGcrZE5wTzExVFF6bHVD?= =?utf-8?B?RVErQlVTblNvT2QrOGFTMjlRZkk3SWZzR1JxK0RnK2t6Y0NBMnZDSFdzZFNh?= =?utf-8?B?V2hTUlFGNmo3KzBFcHRpdXYzekdUTzdOeVI3S1hIbEVCYlR2TlRBaXNMRE9r?= =?utf-8?B?OE42RVpYNVVhY1pXSk1Pc3FnbWJONGVtVkJxcEFWOGhGZFFoMnhyM2lzVWZ5?= =?utf-8?B?Q2hESkRlWkxCamNobWR5OXpXVWhlR2w4K2lucXRqV091R21vR2F6eFV5bFJZ?= =?utf-8?B?Y3ZSU3lVY0V6cVZwTnVKbTdSZ0pDMWNmR3VMc2dORWZKbGgvUlFVL1hEUzJo?= =?utf-8?B?RnpFTDV5d3JHL2Rac3lweTMwbzhoMDFiV2xFbGlFajZiWXlZZ29WQnFmWGwz?= =?utf-8?Q?VnTAVDKvDZYRPYLWVfmWtX0W6?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM9PR04MB8603.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 17fc8695-a118-46a5-256e-08dadd017456 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Dec 2022 11:59:14.2542 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 2gjO442AKzNhyCLBx+37rSba6RmffwLmRsCfv/Bcc6V0Drs7CSmLWLyK0bp1SB/eANqS5X6LvqXTbC4Jbw4hqiY9Z2QuSxz5nrfQ67T4Duo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB6824 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org SGkgTHVpeiwNCg0KVGhhbmtzIGZvciByZXZpZXdpbmcgbXkgcGF0Y2guIEkgaGF2ZSBhZGRyZXNz ZWQgdGhlIGNvbW1lbnRzIGluIFY0IHBhdGNoLg0KUGxlYXNlIGZpbmQgbXkgcmVzcG9uc2UgaW4t bGluZSBiZWxvdy4NCg0KPiBGcm9tOiBMdWl6IEF1Z3VzdG8gdm9uIERlbnR6IDxsdWl6LmRlbnR6 QGdtYWlsLmNvbT4NCj4gU2VudDogRnJpZGF5LCBEZWNlbWJlciAyLCAyMDIyIDE6NDkgQU0NCj4g VG86IE5lZXJhaiBzYW5qYXkga2FsZSA8bmVlcmFqLnNhbmpheWthbGVAbnhwLmNvbT4NCj4gQ2M6 IG1hcmNlbEBob2x0bWFubi5vcmc7IGpvaGFuLmhlZGJlcmdAZ21haWwuY29tOw0KPiBwbWVuemVs QG1vbGdlbi5tcGcuZGU7IEFtaXRrdW1hciBLYXJ3YXINCj4gPGFtaXRrdW1hci5rYXJ3YXJAbnhw LmNvbT47IFJvaGl0IEZ1bGUgPHJvaGl0LmZ1bGVAbnhwLmNvbT47IFNoZXJyeQ0KPiBTdW4gPHNo ZXJyeS5zdW5AbnhwLmNvbT47IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LQ0K PiBibHVldG9vdGhAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMS8y XSBCbHVldG9vdGg6IEFkZCBoY2lfbnhwIHRvIGhjaV91YXJ0IG1vZHVsZQ0KPiB0byBzdXBwb3J0 IE5YUCBCVCBjaGlwc2V0cw0KPiANCj4gSGkgTmVlcmFqLA0KPiANCj4gT24gV2VkLCBOb3YgMjMs IDIwMjIgYXQgNDo0NCBBTSBOZWVyYWogU2FuamF5IEthbGUNCj4gPG5lZXJhai5zYW5qYXlrYWxl QG54cC5jb20+IHdyb3RlOg0KPiA+DQo+ID4gQWRkIGhjaV9ueHAgdG8gdGhlIGhjaV91YXJ0IG1v ZHVsZSB3aGljaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBOWFAgQlQNCj4gPiBjaGlwcy4gVGhpcyBk cml2ZXIgaGFzIFBvd2VyIFNhdmUgZmVhdHVyZSB0aGF0IHdpbGwgcHV0IHRoZSBOWFANCj4gPiBi bHVldG9vdGggY2hpcCBpbnRvIHNsZWVwIHN0YXRlLCB3aGVuZXZlciB0aGVyZSBpcyBubyBhY3Rp dml0eSBmb3INCj4gPiBjZXJ0YWluIGR1cmF0aW9uIG9mIHRpbWUgKDIwMDBtcyksIGFuZCB3aWxs IGJlIHdva2VuIHVwIHdoZW4gYW55DQo+ID4gYWN0aXZpdHkgaXMgdG8gYmUgaW5pdGlhdGVkLg0K PiA+DQo+ID4gVGhlIFBvd2VyIFNhdmUgZmVhdHVyZSBjYW4gKG9wdGlvbmFsbHkpIGJlIGNvbmZp Z3VyZWQgd2l0aCB0aGUNCj4gPiBmb2xsb3dpbmcgc2V0IG9mIGNvbW1hbmRzOg0KPiA+IGhjaXRv b2wgLWkgaGNpMCBjbWQgM0YgMjMgMDIgMDAgMDAgICAgKGRpc2FibGUgUG93ZXIgU2F2ZSkNCj4g PiBoY2l0b29sIC1pIGhjaTAgY21kIDNGIDIzIDAzIDAwIDAwICAgIChlbmFibGUgUG93ZXIgU2F2 ZSkNCkNvcnJlY3RlZCB0aGUgY29tbWVudHMgaW4gYWJvdmUgMiBsaW5lcy4gDQo+ID4gd2hlcmUs DQo+ID4gT0dGID0gMHgzRiAodmVuZG9yIHNwZWNpZmljIGNvbW1hbmQpDQo+ID4gT0NGID0gMHgy MyAoY29tbWFuZCB0byBzZXQgUG93ZXIgU2F2ZSBzdGF0ZSkgYXJnWzBdID0gMHgwMiAoZGlzYWJs ZQ0KPiA+IFBvd2VyIFNhdmUpIGFyZ1swXSA9IDB4MDMgKGVuYWJsZSBQb3dlciBTYXZlKSBhcmdb MSwyLC4uLl0gPSBYWCAoZG9uJ3QNCj4gPiBjYXJlKQ0KPiA+DQo+ID4gVGhlIHNsZWVwL3dha2Ut dXAgc291cmNlIGNhbiBiZSBjb25maWd1cmVkIHdpdGggdGhlIGZvbGxvd2luZyBzZXQgb2YNCj4g PiBjb21tYW5kczoNCj4gPiBoY2l0b29sIC1pIGhjaTAgY21kIDNGIDUzIDAzIDE0IDAxIEZGICAg IChzZXQgVUFSVCBicmVhayBtZXRob2QpDQo+ID4gaGNpdG9vbCAtaSBoY2kwIGNtZCAzRiA1MyAw MyAxNCAwMCBGRiAgICAoc2V0IFVBUlQgRFNSIG1ldGhvZCkNCj4gPiB3aGVyZSwNCj4gPiBPR0Yg PSAweDNGICh2ZW5kb3Igc3BlY2lmaWMgY29tbWFuZCkNCj4gPiBPQ0YgPSAweDUzIChjb21tYW5k IHRvIHNldCBzbGVlcCBhbmQgd2FrZS11cCBzb3VyY2UpIGFyZ1swXSA9IDB4MDANCj4gPiAoQ2hp cCB0byBob3N0IG1ldGhvZCBOT05FKSBhcmdbMF0gPSAweDAxIChDaGlwIHRvIGhvc3QgbWV0aG9k IFVBUlQNCj4gPiBEVFIpIGFyZ1swXSA9IDB4MDIgKENoaXAgdG8gaG9zdCBtZXRob2QgVUFSVCBC UkVBSykgYXJnWzBdID0gMHgwMw0KPiA+IChDaGlwIHRvIGhvc3QgbWV0aG9kIEdQSU8pIGFyZ1sx XSA9IDB4MTQgKENoaXAgdG8gaG9zdCBHUElPWzIwXSBpZg0KPiA+IGFyZ1swXSBpcyAweDAzLCBl bHNlIDB4RkYpIGFyZ1syXSA9IDB4MDAgKEhvc3QgdG8gY2hpcCBtZXRob2QgVUFSVA0KPiA+IERT UikgYXJnWzJdID0gMHgwMSAoSG9zdCB0byBjaGlwIG1ldGhvZCBVQVJUIEJSRUFLKSBhcmdbM10g PSAweFhYDQo+ID4gKFJlc2VydmVkIGZvciBmdXR1cmUgdXNlKQ0KPiA+DQo+ID4gQnkgZGVmYXVs dCwgdGhlIGhjaV9ueHAgc2V0cyBwb3dlciBzYXZlIGVuYWJsZSwgY2hpcCB0byBob3N0IHdha2Ut dXANCj4gPiBzb3VyY2UgYXMgR1BJTyBhbmQgaG9zdCB0byBjaGlwIHNsZWVwIGFuZCB3YWtlLXVw IHNvdXJjZSBhcyBVQVJUIGJyZWFrDQo+ID4gZHVyaW5nIGRyaXZlciBpbml0aWFsaXphdGlvbiwg Ynkgc2VuZGluZyB0aGUgcmVzcGVjdGl2ZSBjb21tYW5kcyB0bw0KPiA+IHRoZSBjaGlwLg0KPiA+ DQo+ID4gU2lnbmVkLW9mZi1ieTogTmVlcmFqIFNhbmpheSBLYWxlIDxuZWVyYWouc2FuamF5a2Fs ZUBueHAuY29tPg0KPiA+IC0tLQ0KPiA+IHYyOiBDaGFuZ2VkIHRoZSBzdWJqZWN0L3N1bW1hcnkg bGluZXMgYW5kIGFkZGVkIG1vcmUgZGV0YWlscyBpbiB0aGUNCj4gPiBkZXNjcmlwdGlvbi4gKFBh dWwgTWVuemVsKQ0KPiA+IHYzOiBNYWRlIGludGVybmFsIGZ1bmN0aW9ucyBzdGF0aWMsIG9wdGlt aXplZCB0aGUgY29kZSwgYWRkZWQgZmV3DQo+ID4gY29tbWVudHMuIChTaGVycnkgU3VuKQ0KPiA+ IC0tLQ0KPiA+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICB8ICAgNiArDQo+ID4gIGRy aXZlcnMvYmx1ZXRvb3RoL0tjb25maWcgICAgIHwgIDEwICsNCj4gPiAgZHJpdmVycy9ibHVldG9v dGgvTWFrZWZpbGUgICAgfCAgIDEgKw0KPiA+ICBkcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2Mu YyB8ICAgNiArDQo+ID4gIGRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9ueHAuYyAgIHwgNzY0DQo+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBkcml2ZXJzL2Js dWV0b290aC9oY2lfbnhwLmggICB8IDExMCArKysrKysNCj4gPiAgZHJpdmVycy9ibHVldG9vdGgv aGNpX3VhcnQuaCAgfCAgIDggKy0NCj4gPiAgNyBmaWxlcyBjaGFuZ2VkLCA5MDQgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gZHJpdmVycy9ibHVl dG9vdGgvaGNpX254cC5jICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gPiBkcml2ZXJzL2JsdWV0b290 aC9oY2lfbnhwLmgNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlO RVJTIGluZGV4IGU1NWE0ZDQuLjcwZjgwMmQgMTAwNjQ0DQo+ID4gLS0tIGEvTUFJTlRBSU5FUlMN Cj4gPiArKysgYi9NQUlOVEFJTkVSUw0KPiA+IEBAIC0yMjU5MSw2ICsyMjU5MSwxMiBAQCBMOiAg ICAgbGludXgtbW1Aa3ZhY2sub3JnDQo+ID4gIFM6ICAgICBNYWludGFpbmVkDQo+ID4gIEY6ICAg ICBtbS96c3dhcC5jDQo+ID4NCj4gPiArTlhQIEJMVUVUT09USCBXSVJFTEVTUyBEUklWRVJTDQo+ ID4gK006ICAgICBBbWl0a3VtYXIgS2Fyd2FyIDxhbWl0a3VtYXIua2Fyd2FyQG54cC5jb20+DQo+ ID4gK006ICAgICBOZWVyYWogS2FsZSA8bmVlcmFqLnNhbmpheWthbGVAbnhwLmNvPm0NCj4gPiAr UzogICAgIE1haW50YWluZWQNCj4gPiArRjogICAgIGRyaXZlcnMvYmx1ZXRvb3RoL2hjaV9ueHAq DQo+ID4gKw0KPiA+ICBUSEUgUkVTVA0KPiA+ICBNOiAgICAgTGludXMgVG9ydmFsZHMgPHRvcnZh bGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPg0KPiA+ICBMOiAgICAgbGludXgta2VybmVsQHZnZXIu a2VybmVsLm9yZw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9LY29uZmlnIGIv ZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZw0KPiA+IGluZGV4IDg5YjRkNDcuLjdmNmQxZGMgMTAw NjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZl cnMvYmx1ZXRvb3RoL0tjb25maWcNCj4gPiBAQCAtMjczLDYgKzI3MywxNiBAQCBjb25maWcgQlRf SENJVUFSVF9NUlZMDQo+ID4NCj4gPiAgICAgICAgICAgU2F5IFkgaGVyZSB0byBjb21waWxlIHN1 cHBvcnQgZm9yIEhDSSBNUlZMIHByb3RvY29sLg0KPiA+DQo+ID4gK2NvbmZpZyBCVF9IQ0lVQVJU X05YUA0KPiA+ICsgICAgICAgIGJvb2wgIk5YUCBwcm90b2NvbCBzdXBwb3J0Ig0KPiA+ICsgICAg ICAgIGRlcGVuZHMgb24gQlRfSENJVUFSVA0KPiA+ICsgICAgICAgIGhlbHANCj4gPiArICAgICAg ICAgIE5YUCBpcyBzZXJpYWwgcHJvdG9jb2wgZm9yIGNvbW11bmljYXRpb24gYmV0d2VlbiBCbHVl dG9vdGgNCj4gPiArICAgICAgICAgIGRldmljZSBhbmQgaG9zdC4gVGhpcyBwcm90b2NvbCBpcyBy ZXF1aXJlZCBmb3IgbW9zdCBOWFAgQmx1ZXRvb3RoDQo+ID4gKyAgICAgICAgICBkZXZpY2VzIHdp dGggVUFSVCBpbnRlcmZhY2UuDQo+ID4gKw0KPiA+ICsgICAgICAgICAgU2F5IFkgaGVyZSB0byBj b21waWxlIHN1cHBvcnQgZm9yIEhDSSBOWFAgcHJvdG9jb2wuDQo+ID4gKw0KPiA+ICBjb25maWcg QlRfSENJQkNNMjAzWA0KPiA+ICAgICAgICAgdHJpc3RhdGUgIkhDSSBCQ00yMDN4IFVTQiBkcml2 ZXIiDQo+ID4gICAgICAgICBkZXBlbmRzIG9uIFVTQg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2JsdWV0b290aC9NYWtlZmlsZSBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlDQo+ID4gaW5k ZXggMzMyMWE4YS4uYmM4MDMyOSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2JsdWV0b290aC9N YWtlZmlsZQ0KPiA+ICsrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL01ha2VmaWxlDQo+ID4gQEAgLTQ4 LDQgKzQ4LDUgQEAgaGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9CQ00pICAgICArPQ0KPiBo Y2lfYmNtLm8NCj4gPiAgaGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9RQ0EpICAgICAgKz0g aGNpX3FjYS5vDQo+ID4gIGhjaV91YXJ0LSQoQ09ORklHX0JUX0hDSVVBUlRfQUc2WFgpICAgICs9 IGhjaV9hZzZ4eC5vDQo+ID4gIGhjaV91YXJ0LSQoQ09ORklHX0JUX0hDSVVBUlRfTVJWTCkgICAg ICs9IGhjaV9tcnZsLm8NCj4gPiAraGNpX3VhcnQtJChDT05GSUdfQlRfSENJVUFSVF9OWFApICAg ICAgKz0gaGNpX254cC5vDQo+ID4gIGhjaV91YXJ0LW9ianMgICAgICAgICAgICAgICAgICAgICAg ICAgIDo9ICQoaGNpX3VhcnQteSkNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgv aGNpX2xkaXNjLmMNCj4gPiBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jIGluZGV4IDg2 NTExMmUuLmYzYzg1YzIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xk aXNjLmMNCj4gPiArKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYw0KPiA+IEBAIC04 ODIsNiArODgyLDkgQEAgc3RhdGljIGludCBfX2luaXQgaGNpX3VhcnRfaW5pdCh2b2lkKSAgI2lm ZGVmDQo+ID4gQ09ORklHX0JUX0hDSVVBUlRfTVJWTA0KPiA+ICAgICAgICAgbXJ2bF9pbml0KCk7 DQo+ID4gICNlbmRpZg0KPiA+ICsjaWZkZWYgQ09ORklHX0JUX0hDSVVBUlRfTlhQDQo+ID4gKyAg ICAgICBueHBfaW5pdCgpOw0KPiA+ICsjZW5kaWYNCj4gPg0KPiA+ICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gIH0NCj4gPiBAQCAtOTE4LDYgKzkyMSw5IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBoY2lf dWFydF9leGl0KHZvaWQpICAjaWZkZWYNCj4gPiBDT05GSUdfQlRfSENJVUFSVF9NUlZMDQo+ID4g ICAgICAgICBtcnZsX2RlaW5pdCgpOw0KPiA+ICAjZW5kaWYNCj4gPiArI2lmZGVmIENPTkZJR19C VF9IQ0lVQVJUX05YUA0KPiA+ICsgICAgICAgbnhwX2RlaW5pdCgpOw0KPiA+ICsjZW5kaWYNCj4g Pg0KPiA+ICAgICAgICAgdHR5X3VucmVnaXN0ZXJfbGRpc2MoJmhjaV91YXJ0X2xkaXNjKTsNCj4g PiAgfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbnhwLmMgYi9kcml2 ZXJzL2JsdWV0b290aC9oY2lfbnhwLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAw MDAwMDAwLi4xNTA4ZWRkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvYmx1 ZXRvb3RoL2hjaV9ueHAuYw0KPiA+IEBAIC0wLDAgKzEsNzY0IEBADQo+ID4gKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyDQo+ID4gKy8qDQo+ID4gKyAqDQo+ID4g KyAqICBCbHVldG9vdGggSENJIFVBUlQgZHJpdmVyDQo+ID4gKyAqICBDb3B5cmlnaHQgMjAxOC0y MDIyIE5YUA0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPiA+ICttb2RpZnkNCj4g PiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkDQo+ID4gK2J5DQo+ID4gKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcg0KPiA+ICsgKiAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4gPiArICoNCj4gPiArICogIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gPiArICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvdHlwZXMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG9sbC5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxp bnV4L3NsYWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R0eS5oPg0KPiA+ICsjaW5jbHVkZSA8 bGludXgvZXJybm8uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvc2lnbmFsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+DQo+ID4gKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVk Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4NCj4g PiArI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4NCj4gPiArDQo+ID4gKyNpbmNs dWRlICJoY2lfdWFydC5oIg0KPiA+ICsjaW5jbHVkZSAiaGNpX254cC5oIg0KPiA+ICsNCj4gPiAr LyoqIE5YUCBQb3dlciBTYXZlIEZlYXR1cmUgKiovDQo+ID4gK3N0cnVjdCBCVF9DTUQgew0KPiA+ ICsgICAgICAgdTE2ICAgICBvY2Zfb2dmOw0KPiA+ICsgICAgICAgdTggICAgICBsZW5ndGg7DQo+ ID4gKyAgICAgICB1OCAgICAgIGRhdGFbNF07DQo+ID4gK30gX19wYWNrZWQ7DQo+ID4gKw0KPiA+ ICsvKiBQb3dlciBTYXZlIGZlYXR1cmUgd2lsbCBiZSBlbmFibGVkIGFuZCB3YWtldXAgbWV0aG9k IHdpbGwgYmUgYnJlYWsNCj4gPiArc2lnbmFsIGJ5IGRlZmF1bHQgKi8gaW50IHdha2V1cG1vZGUg PSBXQUtFVVBfTUVUSE9EX0JSRUFLOyBpbnQNCj4gPiArcHNfbW9kZSA9IFBTX01PREVfRU5BQkxF Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBpc19kZXZpY2VfcmVhZHkoc3RydWN0IGhjaV91YXJ0 ICpodSkgew0KPiA+ICsgICAgICAgc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBOVUxMOw0KPiA+ICsN Cj4gPiArICAgICAgIGlmICghaHUpIHsNCj4gPiArICAgICAgICAgICAgICAgQlRfRVJSKCJodSBp cyBOVUxMIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOw0KPiA+ICsgICAg ICAgfQ0KPiA+ICsgICAgICAgaWYgKCFodS0+cHJvdG8gfHwgIWh1LT5oZGV2IHx8ICFodS0+dHR5 KSB7DQo+ID4gKyAgICAgICAgICAgICAgIEJUX0VSUigiRGV2aWNlIG5vdCByZWFkeSEgcHJvdG89 JXAsIGhkZXY9JXAsIHR0eT0lcCIsIGh1LQ0KPiA+cHJvdG8sIGh1LT5oZGV2LCBodS0+dHR5KTsN Cj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ID4gKyAgICAgICB9DQo+ID4g KyAgICAgICBoZGV2ID0gaHUtPmhkZXY7DQo+ID4gKyAgICAgICBpZiAoIXRlc3RfYml0KEhDSV9S VU5OSU5HLCAmaGRldi0+ZmxhZ3MpKSB7DQo+ID4gKyAgICAgICAgICAgICAgIEJUX0VSUigiSENJ X1JVTk5JTkcgaXMgbm90IHNldCIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZ Ow0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qIEJ1aWxkcyBhbmQgc2VuZHMgYSBQUyBjb21tYW5kIHBhY2tldCB0byBjaGlwICovIHN0 YXRpYyBpbnQNCj4gPiArc2VuZF9wc19jbWQodTggY21kLCBzdHJ1Y3QgaGNpX3VhcnQgKmh1KSB7 DQo+ID4gKyAgICAgICBpbnQgZXJyID0gMDsNCj4gPiArICAgICAgIHN0cnVjdCBza19idWZmICpz a2IgPSBOVUxMOw0KPiA+ICsgICAgICAgc3RydWN0IEJUX0NNRCAqcGNtZDsNCj4gDQo+IFdoeSBh cmUgeW91IHVzaW5nIEJUX0NNRCB3aGVuIHdlIGRvIGhhdmUgdGhlIGxpa2VzIGhjaV9zZW5kX2Nt ZCwgb3INCj4gX19oY2lfY21kX3N5bmMsIHRvIGVuY29kZSBIQ0kgY29tbWFuZHM/DQpJIGhhdmUg cmUtd3JpdHRlbiB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBfX2hjaV9jbWRfc3luYygpDQo+IA0KPiA+ ICsNCj4gPiArICAgICAgIC8qIGFsbG9jYXRlIHBhY2tldCAqLw0KPiA+ICsgICAgICAgc2tiID0g YnRfc2tiX2FsbG9jKHNpemVvZihzdHJ1Y3QgQlRfQ01EKSwgR0ZQX0FUT01JQyk7DQo+ID4gKyAg ICAgICBpZiAoIXNrYikgew0KPiA+ICsgICAgICAgICAgICAgICBCVF9FUlIoImNhbm5vdCBhbGxv Y2F0ZSBtZW1vcnkgZm9yIEhDSUxMIHBhY2tldCIpOw0KPiA+ICsgICAgICAgICAgICAgICBlcnIg PSAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBwY21kID0gKHN0cnVjdCBCVF9DTUQgKilza2ItPmRhdGE7DQo+ ID4gKyAgICAgICBwY21kLT5vY2Zfb2dmID0gIChPR0YgPDwgMTApIHwgQlRfQ01EX0FVVE9fU0xF RVBfTU9ERTsNCj4gPiArICAgICAgIHBjbWQtPmxlbmd0aCA9IDE7DQo+ID4gKyAgICAgICBpZiAo Y21kID09ICBQU19NT0RFX0VOQUJMRSkNCj4gPiArICAgICAgICAgICAgICAgcGNtZC0+ZGF0YVsw XSA9IEJUX1BTX0VOQUJMRTsNCj4gPiArICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAg cGNtZC0+ZGF0YVswXSA9IEJUX1BTX0RJU0FCTEU7DQo+ID4gKw0KPiA+ICsgICAgICAgYnRfY2Io c2tiKS0+cGt0X3R5cGUgPSBIQ0lfQ09NTUFORF9QS1Q7DQo+ID4gKyAgICAgICBza2JfcHV0KHNr Yiwgc2l6ZW9mKHN0cnVjdCBCVF9DTUQpIC0gNCArIHBjbWQtPmxlbmd0aCk7DQo+ID4gKyAgICAg ICBza2ItPmRldiA9ICh2b2lkICopaHUtPmhkZXY7DQo+ID4gKw0KPiA+ICsgICAgICAgLyogc2Vu ZCBwYWNrZXQgKi8NCj4gPiArICAgICAgIGh1LT5wcm90by0+ZW5xdWV1ZShodSwgc2tiKTsNCj4g PiArICAgICAgIGhjaV91YXJ0X3R4X3dha2V1cChodSk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4g KyAgICAgICByZXR1cm4gZXJyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBCdWlsZHMgYW5kIHNl bmRzIGFuIHdha2UgdXAgbWV0aG9kIGNvbW1hbmQgcGFja2V0IHRvIGNoaXAgKi8NCj4gPiArc3Rh dGljIGludCBzZW5kX3dha2V1cF9tZXRob2RfY21kKHU4IGNtZCwgc3RydWN0IGhjaV91YXJ0ICpo dSkgew0KPiA+ICsgICAgICAgaW50IGVyciA9IDA7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiID0gTlVMTDsNCj4gPiArICAgICAgIHN0cnVjdCBCVF9DTUQgKnBjbWQ7DQo+ID4gKw0K PiA+ICsgICAgICAgLyogYWxsb2NhdGUgcGFja2V0ICovDQo+ID4gKyAgICAgICBza2IgPSBidF9z a2JfYWxsb2Moc2l6ZW9mKHN0cnVjdCBCVF9DTUQpLCBHRlBfQVRPTUlDKTsNCj4gPiArICAgICAg IGlmICghc2tiKSB7DQo+ID4gKyAgICAgICAgICAgICAgIEJUX0VSUigiY2Fubm90IGFsbG9jYXRl IG1lbW9yeSBmb3IgSENJTEwgcGFja2V0Iik7DQo+ID4gKyAgICAgICAgICAgICAgIGVyciA9IC1F Tk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgIHBjbWQgPSAoc3RydWN0IEJUX0NNRCAqKXNrYi0+ZGF0YTsNCj4gPiAr ICAgICAgIHBjbWQtPm9jZl9vZ2YgPSAgKE9HRiA8PCAxMCkgfCBCVF9DTURfV0FLRVVQX01FVEhP RDsNCj4gPiArICAgICAgIHBjbWQtPmxlbmd0aCA9IDQ7DQo+ID4gKyAgICAgICBwY21kLT5kYXRh WzBdID0gQlRfSE9TVF9XQUtFVVBfTUVUSE9EX05PTkU7DQo+ID4gKyAgICAgICBwY21kLT5kYXRh WzFdID0gQlRfSE9TVF9XQUtFVVBfREVGQVVMVF9HUElPOw0KPiA+ICsgICAgICAgc3dpdGNoIChj bWQpIHsNCj4gPiArICAgICAgIGNhc2UgV0FLRVVQX01FVEhPRF9EVFI6DQo+ID4gKyAgICAgICAg ICAgICAgIHBjbWQtPmRhdGFbMl0gPSBCVF9DVFJMX1dBS0VVUF9NRVRIT0RfRFNSOw0KPiA+ICsg ICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIGNhc2UgV0FLRVVQX01FVEhPRF9CUkVB SzoNCj4gPiArICAgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICAgIHBjbWQtPmRhdGFb Ml0gPSBCVF9DVFJMX1dBS0VVUF9NRVRIT0RfQlJFQUs7DQo+ID4gKyAgICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcGNtZC0+ZGF0YVszXSA9IDB4RkY7DQo+ ID4gKw0KPiA+ICsgICAgICAgYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSBIQ0lfQ09NTUFORF9QS1Q7 DQo+ID4gKw0KPiA+ICsgICAgICAgc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgQlRfQ01EKSAt IDQgKyBwY21kLT5sZW5ndGgpOw0KPiA+ICsgICAgICAgc2tiLT5kZXYgPSAodm9pZCAqKWh1LT5o ZGV2Ow0KPiA+ICsNCj4gPiArICAgICAgIC8qIHNlbmQgcGFja2V0ICovDQo+ID4gKyAgICAgICBo dS0+cHJvdG8tPmVucXVldWUoaHUsIHNrYik7DQo+ID4gKyAgICAgICBoY2lfdWFydF90eF93YWtl dXAoaHUpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgICAgcmV0dXJuIGVycjsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcHNfc3RhcnRfdGltZXIoc3RydWN0IGhjaV91YXJ0 ICpodSkgew0KPiA+ICsgICAgICAgc3RydWN0IG54cF9zdHJ1Y3QgKm54cCA9IGh1LT5wcml2Ow0K PiA+ICsgICAgICAgc3RydWN0IHBzX2RhdGEgKnBzZGF0YSA9IG54cC0+cHNkYXRhOw0KPiA+ICsN Cj4gPiArICAgICAgIGlmIChwc2RhdGEtPmN1cl9wc21vZGUgPT0gIFBTX01PREVfRU5BQkxFKSB7 DQo+ID4gKyAgICAgICAgICAgICAgIHBzZGF0YS0+dGltZXJfb24gPSAxOw0KPiA+ICsgICAgICAg ICAgICAgICBtb2RfdGltZXIoJnBzZGF0YS0+cHNfdGltZXIsIGppZmZpZXMgKyAocHNkYXRhLT5p bnRlcnZhbCAqIEhaKSAvDQo+IDEwMDApOw0KPiA+ICsgICAgICAgfQ0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBwc190aW1lb3V0X2Z1bmMoc3RydWN0IHRpbWVyX2xpc3QgKnQpIHsN Cj4gPiArICAgICAgIHN0cnVjdCBwc19kYXRhICpkYXRhID0gZnJvbV90aW1lcihkYXRhLCB0LCBw c190aW1lcik7DQo+ID4gKyAgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gZGF0YS0+dHR5 Ow0KPiA+ICsgICAgICAgc3RydWN0IGhjaV91YXJ0ICpodSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsg ICAgICAgZGF0YS0+dGltZXJfb24gPSAwOw0KPiA+ICsgICAgICAgaWYgKCFkYXRhLT50dHkpDQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgICBodSA9IChzdHJ1 Y3QgaGNpX3VhcnQgKil0dHktPmRpc2NfZGF0YTsNCj4gPiArICAgICAgIGlmICghaHUpDQo+ID4g KyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAodGVzdF9iaXQo SENJX1VBUlRfU0VORElORywgJmh1LT50eF9zdGF0ZSkpIHsNCj4gPiArICAgICAgICAgICAgICAg cHNfc3RhcnRfdGltZXIoaHUpOw0KPiA+ICsgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg ICAgICAgZGF0YS0+cHNfY21kID0gUFNfQ01EX0VOVEVSX1BTOw0KPiA+ICsgICAgICAgICAgICAg ICBzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsNCj4gPiArICAgICAgIH0NCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgc2V0X2R0cihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQg b25fb2ZmKSB7DQo+ID4gKyAgICAgICB1MzIgb2xkX3N0YXRlID0gMDsNCj4gPiArICAgICAgIHUz MiBuZXdfc3RhdGUgPSAwOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChUVFlfRlVOQy0+dGlvY21n ZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgb2xkX3N0YXRlID0gVFRZX0ZVTkMtPnRpb2NtZ2V0 KHR0eSk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChvbl9vZmYpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgbmV3X3N0YXRlID0gb2xkX3N0YXRlIHwgVElPQ01fRFRSOw0KPiA+ICsgICAg ICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRlID0g b2xkX3N0YXRlICYgflRJT0NNX0RUUjsNCj4gPiArICAgICAgICAgICAgICAgaWYgKG5ld19zdGF0 ZSA9PSBvbGRfc3RhdGUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ ICsgICAgICAgICAgICAgICBpZiAoVFRZX0ZVTkMtPnRpb2Ntc2V0KSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgaWYgKG9uX29mZikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFRUWV9GVU5DLT50aW9jbXNldCh0dHksIFRJT0NNX0RUUiwgMCk7ICAvKiBEVFIgT04g Ki8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBUVFlfRlVOQy0+dGlvY21zZXQodHR5LCAwLCBUSU9DTV9EVFIpOyAg LyogRFRSIE9GRiAqLw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHNldF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5LCBpbnQgb25fb2ZmKSB7DQo+ID4gKyAgICAgICBpZiAoVFRZX0ZVTkMtPmJyZWFrX2N0bCkg ew0KPiA+ICsgICAgICAgICAgICAgICBpZiAob25fb2ZmKQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIFRUWV9GVU5DLT5icmVha19jdGwodHR5LCAtMSk7IC8qIHR1cm4gb24gYnJlYWsgKi8N Cj4gPiArICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIFRU WV9GVU5DLT5icmVha19jdGwodHR5LCAwKTsgIC8qIHR1cm4gb2ZmIGJyZWFrICovDQo+ID4gKyAg ICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZ2V0X2N0cyhzdHJ1Y3QgdHR5 X3N0cnVjdCAqdHR5KSB7DQo+ID4gKyAgICAgICB1MzIgc3RhdGUgPSAwOw0KPiA+ICsgICAgICAg aW50IHJldCA9IC0xOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChUVFlfRlVOQy0+dGlvY21nZXQp IHsNCj4gPiArICAgICAgICAgICAgICAgc3RhdGUgPSBUVFlfRlVOQy0+dGlvY21nZXQodHR5KTsN Cj4gPiArICAgICAgICAgICAgICAgaWYgKHN0YXRlICYgVElPQ01fQ1RTKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldCA9IDE7ICAgLyogQ1RTIExPVyAqLw0KPiA+ICsgICAgICAgICAg ICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsgICAvKiBDVFMg SElHSCAqLw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc2V0X3J0cyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBp bnQgb25fb2ZmKSB7DQo+ID4gKyAgICAgICB1MzIgb2xkX3N0YXRlID0gMDsNCj4gPiArICAgICAg IHUzMiBuZXdfc3RhdGUgPSAwOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChUVFlfRlVOQy0+dGlv Y21nZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgb2xkX3N0YXRlID0gVFRZX0ZVTkMtPnRpb2Nt Z2V0KHR0eSk7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChvbl9vZmYpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgbmV3X3N0YXRlID0gb2xkX3N0YXRlIHwgVElPQ01fUlRTOw0KPiA+ICsg ICAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbmV3X3N0YXRl ID0gb2xkX3N0YXRlICYgflRJT0NNX1JUUzsNCj4gPiArICAgICAgICAgICAgICAgaWYgKG5ld19z dGF0ZSA9PSBvbGRfc3RhdGUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0K PiA+ICsgICAgICAgICAgICAgICBpZiAoVFRZX0ZVTkMtPnRpb2Ntc2V0KSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKG9uX29mZikNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFRUWV9GVU5DLT50aW9jbXNldCh0dHksIFRJT0NNX1JUUywgMCk7ICAgIC8qIFJU UyBPTiAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFRUWV9GVU5DLT50aW9jbXNldCh0dHksIDAsIFRJT0NNX1JU Uyk7ICAgIC8qIFJUUyBPRkYgKi8NCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAg fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwc19jb250cm9sKHN0cnVjdCBwc19k YXRhICpkYXRhLCB1OCBwc19zdGF0ZSkgew0KPiA+ICsgICAgICAgc3RydWN0IGhjaV91YXJ0ICpo dSA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKGRhdGEtPnBzX3N0YXRlID09IHBzX3N0 YXRlKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ID4gKw0KPiA+ICsgICAgICAgaWYg KGRhdGEtPnR0eSkgew0KPiA+ICsgICAgICAgICAgICAgICBzd2l0Y2ggKGRhdGEtPmN1cl93YWtl dXBtb2RlKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgV0FLRVVQX01FVEhPRF9EVFI6DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBzX3N0YXRlID09IFBTX1NUQVRFX0FXQUtF KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2R0cihkYXRhLT50dHks IDEpOyAgLyogRFRSIE9OICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2R0cihkYXRhLT50dHksIDApOyAg LyogRFRSIE9GRiAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsg ICAgICAgICAgICAgICBjYXNlIFdBS0VVUF9NRVRIT0RfQlJFQUs6DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHBzX3N0YXRlID09IFBTX1NUQVRFX0FXQUtFKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2JyZWFrKGRhdGEtPnR0eSwgMCk7IC8qIGJyZWFr IE9GRiAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNldF9icmVhayhkYXRhLT50dHksIDEpOyAvKiBicmVhayBP TiAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAg ICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsg ICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgIGRhdGEtPnBzX3N0YXRlID0gcHNf c3RhdGU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAocHNfc3RhdGUgPT0gUFNfU1RB VEVfQVdBS0UpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBodSA9IChzdHJ1Y3QgaGNp X3VhcnQgKilkYXRhLT50dHktPmRpc2NfZGF0YTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBpZiAoaHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoY2lfdWFydF90 eF93YWtldXAoaHUpOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBzX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspIHsNCj4gPiArICAgICAgIHN0cnVjdCBwc19kYXRhICpkYXRhID0gY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCBwc19kYXRhLA0KPiA+ICt3b3JrKTsNCj4gPiArDQo+ID4gKyAgICAg ICBpZiAoZGF0YS0+dHR5KSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChkYXRhLT5wc19jbWQg PT0gUFNfQ01EX0VOVEVSX1BTICYmIGRhdGEtPmN1cl9wc21vZGUNCj4gPT0gUFNfTU9ERV9FTkFC TEUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHNfY29udHJvbChkYXRhLCBQU19TVEFU RV9TTEVFUCk7DQo+ID4gKyAgICAgICAgICAgICAgIGVsc2UgIGlmIChkYXRhLT5wc19jbWQgPT0g UFNfQ01EX0VYSVRfUFMpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHNfY29udHJvbChk YXRhLCBQU19TVEFURV9BV0FLRSk7DQo+ID4gKyAgICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgcHNfaW5pdF93b3JrKHN0cnVjdCBoY2lfdWFydCAqaHUpIHsNCj4gPiArICAg ICAgIHN0cnVjdCBwc19kYXRhICpwc2RhdGEgPSBremFsbG9jKHNpemVvZigqcHNkYXRhKSwgR0ZQ X0tFUk5FTCk7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnhwX3N0cnVjdCAqbnhwID0gaHUtPnByaXY7 DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCFwc2RhdGEpIHsNCj4gPiArICAgICAgICAgICAgICAg QlRfRVJSKCJDYW4ndCBhbGxvY2F0ZSBjb250cm9sIHN0cnVjdHVyZSIpOw0KPiA+ICsgICAgICAg ICAgICAgICByZXR1cm4gLUVORklMRTsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIG54cC0+ cHNkYXRhID0gcHNkYXRhOw0KPiA+ICsNCj4gPiArICAgICAgIG1lbXNldChwc2RhdGEsIDAsIHNp emVvZigqcHNkYXRhKSk7DQo+ID4gKyAgICAgICBwc2RhdGEtPmludGVydmFsID0gREVGQVVMVF9U SU1FX1BFUklPRDsNCj4gPiArICAgICAgIHBzZGF0YS0+dGltZXJfb24gICAgPSAwOw0KPiA+ICsg ICAgICAgcHNkYXRhLT50dHkgPSBOVUxMOw0KPiA+ICsgICAgICAgcHNkYXRhLT5wc19zdGF0ZSA9 IFBTX1NUQVRFX0FXQUtFOw0KPiA+ICsgICAgICAgcHNkYXRhLT5wc19tb2RlID0gcHNfbW9kZTsN Cj4gPiArICAgICAgIHBzZGF0YS0+cHNfY21kID0gMDsNCj4gPiArICAgICAgIHBzZGF0YS0+c2Vu ZF9jbWQgPSAwOw0KPiA+ICsgICAgICAgc3dpdGNoICh3YWtldXBtb2RlKSB7DQo+ID4gKyAgICAg ICBjYXNlIFdBS0VVUF9NRVRIT0RfRFRSOg0KPiA+ICsgICAgICAgICAgICAgICBwc2RhdGEtPndh a2V1cG1vZGUgPSAgV0FLRVVQX01FVEhPRF9EVFI7DQo+ID4gKyAgICAgICAgICAgICAgIGJyZWFr Ow0KPiA+ICsgICAgICAgY2FzZSAgV0FLRVVQX01FVEhPRF9CUkVBSzoNCj4gPiArICAgICAgIGRl ZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICAgIHBzZGF0YS0+d2FrZXVwbW9kZSA9ICBXQUtFVVBf TUVUSE9EX0JSRUFLOw0KPiA+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBwc2RhdGEtPmN1cl9wc21vZGUgPSBQU19NT0RFX0RJU0FCTEU7 DQo+ID4gKyAgICAgICBwc2RhdGEtPmN1cl93YWtldXBtb2RlID0gV0FLRVVQX01FVEhPRF9JTlZB TElEOw0KPiA+ICsNCj4gPiArICAgICAgIElOSVRfV09SSygmcHNkYXRhLT53b3JrLCBwc193b3Jr X2Z1bmMpOw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyB2b2lkIHBzX2luaXRfdGltZXIoc3RydWN0IGhjaV91YXJ0ICpodSkgew0KPiA+ICsgICAgICAg c3RydWN0IG54cF9zdHJ1Y3QgKm54cCA9IGh1LT5wcml2Ow0KPiA+ICsgICAgICAgc3RydWN0IHBz X2RhdGEgKnBzZGF0YSA9IG54cC0+cHNkYXRhOw0KPiA+ICsNCj4gPiArICAgICAgIHBzZGF0YS0+ dGltZXJfb24gPSAwOw0KPiA+ICsgICAgICAgcHNkYXRhLT50dHkgPSBodS0+dHR5Ow0KPiA+ICsg ICAgICAgdGltZXJfc2V0dXAoJnBzZGF0YS0+cHNfdGltZXIsIHBzX3RpbWVvdXRfZnVuYywgMCk7 IH0NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHBzX2NhbmNlbF90aW1lcihzdHJ1Y3QgaGNpX3Vh cnQgKmh1KSB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnhwX3N0cnVjdCAqbnhwID0gaHUtPnByaXY7 DQo+ID4gKyAgICAgICBzdHJ1Y3QgcHNfZGF0YSAqcHNkYXRhID0gbnhwLT5wc2RhdGE7DQo+ID4g Kw0KPiA+ICsgICAgICAgaWYgKHBzZGF0YSkgew0KPiA+ICsgICAgICAgICAgICAgICBmbHVzaF9z Y2hlZHVsZWRfd29yaygpOw0KPiA+ICsgICAgICAgaWYgKHBzZGF0YS0+dGltZXJfb24pDQo+ID4g KyAgICAgICAgICAgICAgIGRlbF90aW1lcigmcHNkYXRhLT5wc190aW1lcik7DQo+ID4gKyAgICAg ICBpZiAocHNkYXRhLT5jdXJfcHNtb2RlID09IFBTX01PREVfRU5BQkxFKSB7DQo+ID4gKyAgICAg ICAgICAgICAgIHN3aXRjaCAocHNkYXRhLT5jdXJfd2FrZXVwbW9kZSkgew0KPiA+ICsgICAgICAg ICAgICAgICBjYXNlIFdBS0VVUF9NRVRIT0RfQlJFQUs6DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgc2V0X2JyZWFrKHBzZGF0YS0+dHR5LCAwKTsgICAgICAvKiBzZXRfYnJlYWsgb2ZmICov DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAg IGNhc2UgV0FLRVVQX01FVEhPRF9EVFI6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0 X2R0cihwc2RhdGEtPnR0eSwgMSk7ICAgICAgICAvKiBkdHIgb24gKi8NCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgZGVmYXVsdDoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcHNkYXRhLT50dHkgPSBOVUxMOw0KPiA+ICsgICAgICAg a2ZyZWUocHNkYXRhKTsNCj4gPiArICAgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCBwc193YWtldXAoc3RydWN0IGhjaV91YXJ0ICpodSkgew0KPiA+ICsgICAgICAgc3RydWN0 IG54cF9zdHJ1Y3QgKm54cCA9IGh1LT5wcml2Ow0KPiA+ICsgICAgICAgc3RydWN0IHBzX2RhdGEg KnBzZGF0YSA9IG54cC0+cHNkYXRhOw0KPiA+ICsgICAgICAgaW50IHJldCA9IDE7DQo+ID4gKw0K PiA+ICsgICAgICAgaWYgKHBzZGF0YS0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfQVdBS0UpDQo+ID4g KyAgICAgICAgICAgICAgIHJldCA9IDA7DQo+ID4gKyAgICAgICBwc2RhdGEtPnBzX2NtZCA9IFBT X0NNRF9FWElUX1BTOw0KPiA+ICsgICAgICAgc2NoZWR1bGVfd29yaygmcHNkYXRhLT53b3JrKTsN Cj4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHBzX2luaXQoc3RydWN0IGhjaV91YXJ0ICpodSkgew0KPiA+ICsgICAgICAgc3RydWN0IG54cF9z dHJ1Y3QgKm54cCA9IGh1LT5wcml2Ow0KPiA+ICsgICAgICAgc3RydWN0IHBzX2RhdGEgKnBzZGF0 YSA9IG54cC0+cHNkYXRhOw0KPiA+ICsgICAgICAgaW50IG1vZGUgPSAwOw0KPiA+ICsgICAgICAg c3RydWN0IGt0ZXJtaW9zIG9sZF90ZXJtaW9zOw0KPiA+ICsNCj4gPiArICAgICAgIGlmICghcHNk YXRhIHx8ICFwc2RhdGEtPnR0eSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsg ICAgICAgaWYgKGdldF9jdHMocHNkYXRhLT50dHkpICE9IDEpIHsNCj4gPiArICAgICAgICAgICAg ICAgLyogQ1RTIGlzIG5vdCBsb3csIGNoaXAgaXMgZWl0aGVyIHNsZWVwaW5nICovDQo+ID4gKyAg ICAgICAgICAgICAgIC8qIG9yIGZsb3cgY29udHJvbCBpcyBub3QgZW5hYmxlZCAqLw0KPiA+ICsg ICAgICAgICAgICAgICBvbGRfdGVybWlvcyA9IHBzZGF0YS0+dHR5LT50ZXJtaW9zOw0KPiA+ICsg ICAgICAgICAgICAgICBwc2RhdGEtPnR0eS0+dGVybWlvcy5jX2NmbGFnICY9IH5DUlRTQ1RTOyAg LyogQ2xlYXIgdGhlIGZsb3cNCj4gY29udHJvbCAqLw0KPiA+ICsgICAgICAgICAgICAgICBwc2Rh dGEtPlRUWV9GVU5DLT5zZXRfdGVybWlvcyhwc2RhdGEtPnR0eSwgJm9sZF90ZXJtaW9zKTsNCj4g PiArICAgICAgICAgICAgICAgb2xkX3Rlcm1pb3MgPSBwc2RhdGEtPnR0eS0+dGVybWlvczsNCj4g PiArICAgICAgICAgICAgICAgcHNkYXRhLT50dHktPnRlcm1pb3MuY19jZmxhZyB8PSBDUlRTQ1RT OyAgLyogRW5hYmxlIHRoZSBmbG93DQo+IGNvbnRyb2wgKi8NCj4gPiArICAgICAgICAgICAgICAg cHNkYXRhLT5UVFlfRlVOQy0+c2V0X3Rlcm1pb3MocHNkYXRhLT50dHksDQo+ID4gKyAmb2xkX3Rl cm1pb3MpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgLyogV2FrZSB1cCB0aGUgY2hpcCAq Lw0KPiA+ICsgICAgICAgICAgICAgICBtb2RlID0gcHNkYXRhLT5jdXJfd2FrZXVwbW9kZTsNCj4g PiArICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gV0FLRVVQX01FVEhPRF9JTlZBTElEKQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAgd2FrZXVwbW9kZTsNCj4gPiArICAgICAg ICAgICAgICAgc3dpdGNoIChtb2RlKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgV0FLRVVQ X01FVEhPRF9CUkVBSzoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzZXRfcnRzKHBzZGF0 YS0+dHR5LCAxKTsgICAgICAgIC8qIHNldCBSVFMgKi8NCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBzZXRfYnJlYWsocHNkYXRhLT50dHksIDEpOyAgICAgIC8qIGJyZWFrIG9uICovDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgc2V0X2JyZWFrKHBzZGF0YS0+dHR5LCAwKTsgICAgICAv KiBicmVhayBvZmYgKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtZGVsYXkoNSk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIGNh c2UgV0FLRVVQX01FVEhPRF9EVFI6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X3J0 cyhwc2RhdGEtPnR0eSwgMSk7ICAgICAgICAvKiBzZXQgUlRTICovDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc2V0X2R0cihwc2RhdGEtPnR0eSwgMCk7ICAgICAgICAvKiBkdHIgb2ZmICov DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2V0X2R0cihwc2RhdGEtPnR0eSwgMSk7ICAg ICAgICAvKiBkdHIgb24gKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtZGVsYXkoNSk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAg IGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBwc2RhdGEtPnNl bmRfY21kID0gMDsNCj4gPiArICAgICAgIGlmICghaXNfZGV2aWNlX3JlYWR5KGh1KSkgew0KPiA+ ICsgICAgICAgICAgICAgICBpZiAocHNkYXRhLT5jdXJfd2FrZXVwbW9kZSAhPSBwc2RhdGEtPndh a2V1cG1vZGUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwc2RhdGEtPnNlbmRfY21k IHw9IFNFTkRfV0FLRVVQX01FVEhPRF9DTUQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg c2VuZF93YWtldXBfbWV0aG9kX2NtZChwc2RhdGEtPndha2V1cG1vZGUsIGh1KTsNCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBpZiAocHNkYXRhLT5jdXJfcHNtb2Rl ICE9IHBzZGF0YS0+cHNfbW9kZSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHBzZGF0 YS0+c2VuZF9jbWQgfD0gU0VORF9BVVRPX1NMRUVQX01PREVfQ01EOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHNlbmRfcHNfY21kKHBzZGF0YS0+cHNfbW9kZSwgaHUpOw0KPiA+ICsgICAg ICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIHBzX2NoZWNrX2V2ZW50X3BhY2tldChzdHJ1Y3QgaGNpX3VhcnQgKmh1LCBzdHJ1Y3Qgc2tf YnVmZg0KPiA+ICsqc2tiKSB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRy ID0gKHZvaWQgKilza2ItPmRhdGE7DQo+ID4gKyAgICAgICBzdHJ1Y3QgaGNpX2V2X2NtZF9jb21w bGV0ZSAqZXYgPSBOVUxMOw0KPiA+ICsgICAgICAgdTggZXZlbnQgPSBoZHItPmV2dDsNCj4gPiAr ICAgICAgIHUxNiBvcGNvZGU7DQo+ID4gKyAgICAgICB1OCBzdGF0dXMgPSAwOw0KPiA+ICsgICAg ICAgc3RydWN0IG54cF9zdHJ1Y3QgKm54cCA9IGh1LT5wcml2Ow0KPiA+ICsgICAgICAgc3RydWN0 IHBzX2RhdGEgKnBzZGF0YSA9IG54cC0+cHNkYXRhOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChl dmVudCA9PSBIQ0lfRVZfQ01EX0NPTVBMRVRFKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGV2ID0g KHZvaWQgKikoc2tiLT5kYXRhICsgc2l6ZW9mKHN0cnVjdA0KPiA+ICsgaGNpX2V2ZW50X2hkcikp Ow0KPiANCj4gRG9uJ3QgYWNjZXNzIHRoZSBza2ItPmRhdGEgbGlrZSB0aGF0LCB5b3UgcHJvYmFi bHkgd2FudCB0byB0YWtlIGEgbG9vayBhdA0KPiBza2JfcHVsbF9kYXRhIHdoaWNoIGRvZXMgY2hl Y2sgdGhlIGxlbmd0aC4NClJlbW92ZWQgdGhlIHBzX2NoZWNrX2V2ZW50X3BhY2tldCgpIGZ1bmN0 aW9uIGNvbXBsZXRlbHkuIFVzZWQgc2tiX3B1bGxfZGF0YSgpIGFmdGVyIF9faGNpX2NtZF9zeW5j KCkgaW4gc2VuZF9wc19jbWQoKSBhbmQgc2VuZF93YWtldXBfbWV0aG9kX2NtZCgpDQo+IA0KPiA+ ICsgICAgICAgICAgICAgICBvcGNvZGUgPSBfX2xlMTZfdG9fY3B1KGV2LT5vcGNvZGUpOw0KPiA+ ICsgICAgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgew0KPiA+ICsgICAgICAgICAgICAgICBj YXNlIEhDSV9PUF9BVVRPX1NMRUVQX01PREU6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg c3RhdHVzID0gKigodTggKilldiArIHNpemVvZihzdHJ1Y3QgaGNpX2V2X2NtZF9jb21wbGV0ZSkp Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHNkYXRhLT5jdXJfcHNtb2RlID0gcHNkYXRhLT5wc19t b2RlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHBzZGF0YS0+cHNfbW9kZSA9IHBzZGF0YS0+Y3VyX3BzbW9kZTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBkcml2ZXIgaGFzIHNlbnQgdGhlIGNv bW1hbmQgaW50ZXJuYWxseSAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChwc2Rh dGEtPnNlbmRfY21kKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNkYXRh LT5zZW5kX2NtZCAmPSB+U0VORF9BVVRPX1NMRUVQX01PREVfQ01EOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGlmIChwc2RhdGEtPmN1cl9wc21vZGUgPT0gUFNfTU9ERV9FTkFCTEUpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc19zdGFydF90aW1lcihodSk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHNfd2FrZXVwKGh1KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBC VF9JTkZPKCJQb3dlciBTYXZlIG1vZGUgcmVzcG9uc2U6IHN0YXR1cz0lZCwNCj4gcHNfbW9kZT0l ZCIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHBzZGF0YS0+ Y3VyX3BzbW9kZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAg ICAgICAgICAgICAgIGNhc2UgSENJX09QX1dBS0VVUF9NRVRIT0Q6DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3RhdHVzID0gKigodTggKilldiArIHNpemVvZihzdHJ1Y3QgaGNpX2V2X2Nt ZF9jb21wbGV0ZSkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzKQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNkYXRhLT5jdXJfd2FrZXVwbW9k ZSA9IHBzZGF0YS0+d2FrZXVwbW9kZTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBlbHNl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc2RhdGEtPndha2V1cG1vZGUg PSBwc2RhdGEtPmN1cl93YWtldXBtb2RlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIC8q IGlmIGRyaXZlciBoYXMgc2VudCB0aGUgY29tbWFuZCBpbnRlcm5hbGx5ICovDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHBzZGF0YS0+c2VuZF9jbWQpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwc2RhdGEtPnNlbmRfY21kICY9IH5TRU5EX1dBS0VVUF9NRVRI T0RfQ01EOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIEJUX0lORk8oIlNldCBXYWtldXAg TWV0aG9kIHJlc3BvbnNlOiBzdGF0dXM9JWQsDQo+IHdha2V1cG1vZGU9JWQiLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBwc2RhdGEtPmN1cl93YWtldXBtb2Rl KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAg ICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiogTlhQ IHByb3RvICoqLw0KPiA+ICsNCj4gPiArLyogSW5pdGlhbGl6ZSBwcm90b2NvbCAqLw0KPiA+ICtz dGF0aWMgaW50IG54cF9vcGVuKHN0cnVjdCBoY2lfdWFydCAqaHUpIHsNCj4gPiArICAgICAgIHN0 cnVjdCBueHBfc3RydWN0ICpueHA7DQo+ID4gKw0KPiA+ICsgICAgICAgQlRfREJHKCJodSAlcCIs IGh1KTsNCj4gPiArDQo+ID4gKyAgICAgICBueHAgPSBremFsbG9jKHNpemVvZigqbnhwKSwgR0ZQ X0tFUk5FTCk7DQo+ID4gKyAgICAgICBpZiAoIW54cCkNCj4gPiArICAgICAgICAgICAgICAgcmV0 dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgICAgc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbnhw LT50eHEpOw0KPiA+ICsNCj4gPiArICAgICAgIGh1LT5wcml2ID0gbnhwOw0KPiA+ICsNCj4gPiAr ICAgICAgIGlmIChwc19pbml0X3dvcmsoaHUpID09IDApDQo+ID4gKyAgICAgICAgICAgICAgIHBz X2luaXRfdGltZXIoaHUpOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKiBGbHVzaCBwcm90b2NvbCBkYXRhICovDQo+ID4gK3N0YXRpYyBpbnQgbnhw X2ZsdXNoKHN0cnVjdCBoY2lfdWFydCAqaHUpIHsNCj4gPiArICAgICAgIHN0cnVjdCBueHBfc3Ry dWN0ICpueHAgPSBodS0+cHJpdjsNCj4gPiArDQo+ID4gKyAgICAgICBCVF9EQkcoImh1ICVwIiwg aHUpOw0KPiA+ICsNCj4gPiArICAgICAgIHNrYl9xdWV1ZV9wdXJnZSgmbnhwLT50eHEpOw0KPiA+ ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBDbG9zZSBw cm90b2NvbCAqLw0KPiA+ICtzdGF0aWMgaW50IG54cF9jbG9zZShzdHJ1Y3QgaGNpX3VhcnQgKmh1 KSB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnhwX3N0cnVjdCAqbnhwID0gaHUtPnByaXY7DQo+ID4g Kw0KPiA+ICsgICAgICAgQlRfREJHKCJodSAlcCIsIGh1KTsNCj4gPiArDQo+ID4gKyAgICAgICBw c19jYW5jZWxfdGltZXIoaHUpOw0KPiA+ICsNCj4gPiArICAgICAgIHNrYl9xdWV1ZV9wdXJnZSgm bnhwLT50eHEpOw0KPiA+ICsNCj4gPiArICAgICAgIGtmcmVlX3NrYihueHAtPnJ4X3NrYik7DQo+ ID4gKw0KPiA+ICsgICAgICAgaHUtPnByaXYgPSBOVUxMOw0KPiA+ICsgICAgICAga2ZyZWUobnhw KTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog RW5xdWV1ZSBmcmFtZSBmb3IgdHJhbnNtaXNzaW9uIChwYWRkaW5nLCBjcmMsIGV0YykgKi8gc3Rh dGljIGludA0KPiA+ICtueHBfZW5xdWV1ZShzdHJ1Y3QgaGNpX3VhcnQgKmh1LCBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKSB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnhwX3N0cnVjdCAqbnhwID0gaHUtPnBy aXY7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcHNfZGF0YSAqcHNkYXRhID0gbnhwLT5wc2RhdGE7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgQlRfQ01EICpwY21kID0gKHN0cnVjdCBCVF9DTUQgKilza2ItPmRh dGE7DQo+ID4gKw0KPiA+ICsgICAgICAgQlRfREJHKCJodSAlcCBza2IgJXAiLCBodSwgc2tiKTsN Cj4gPiArDQo+ID4gKyAgICAgICBpZiAoYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPT0gSENJX0NPTU1B TkRfUEtUKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChwY21kLT5vY2Zfb2dmID09ICgoT0dG IDw8IDEwKSB8DQo+IEJUX0NNRF9BVVRPX1NMRUVQX01PREUpKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHBjbWQtPmRhdGFbMF0gPT0gQlRfUFNfRU5BQkxFKQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNkYXRhLT5wc19tb2RlID0gUFNfTU9ERV9FTkFC TEU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocGNtZC0+ZGF0YVswXSA9 PSBCVF9QU19ESVNBQkxFKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNk YXRhLT5wc19tb2RlID0gUFNfTU9ERV9ESVNBQkxFOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ ID4gKyAgICAgICAgICAgICAgIGlmIChwY21kLT5vY2Zfb2dmID09ICgoT0dGIDw8IDEwKSB8IEJU X0NNRF9XQUtFVVBfTUVUSE9EKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwc2RhdGEt Pndha2V1cG1vZGUgPSBwY21kLT5kYXRhWzJdOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICAgIC8qIFByZXBlbmQgc2tiIHdpdGggZnJhbWUgdHlwZSAqLw0KPiA+ICsgICAgICAgbWVt Y3B5KHNrYl9wdXNoKHNrYiwgMSksICZoY2lfc2tiX3BrdF90eXBlKHNrYiksIDEpOw0KPiA+ICsg ICAgICAgc2tiX3F1ZXVlX3RhaWwoJm54cC0+dHhxLCBza2IpOw0KPiA+ICsNCj4gPiArICAgICAg IHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGg0X3Jl Y3ZfcGt0IG54cF9yZWN2X3BrdHNbXSA9IHsNCj4gPiArICAgICAgIHsgSDRfUkVDVl9BQ0wsICAg LnJlY3YgPSBoY2lfcmVjdl9mcmFtZSB9LA0KPiA+ICsgICAgICAgeyBINF9SRUNWX1NDTywgICAu cmVjdiA9IGhjaV9yZWN2X2ZyYW1lIH0sDQo+ID4gKyAgICAgICB7IEg0X1JFQ1ZfRVZFTlQsIC5y ZWN2ID0gaGNpX3JlY3ZfZnJhbWUgfSwNCj4gPiArICAgICAgIHsgSDRfUkVDVl9JU08sICAgLnJl Y3YgPSBoY2lfcmVjdl9mcmFtZSB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVj dCBza19idWZmICpueHBfcmVjdl9idWYoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19i dWZmDQo+ICpza2IsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgY291bnQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGg0X3JlY3ZfcGt0 ICpwa3RzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBwa3RzX2NvdW50KSB7DQo+ID4gKyAgICAgICBzdHJ1Y3QgaGNpX3VhcnQgKmh1ID0g aGNpX2dldF9kcnZkYXRhKGhkZXYpOw0KPiA+ICsgICAgICAgdTggYWxpZ25tZW50ID0gaHUtPmFs aWdubWVudCA/IGh1LT5hbGlnbm1lbnQgOiAxOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIENoZWNr IGZvciBlcnJvciBmcm9tIHByZXZpb3VzIGNhbGwgKi8NCj4gPiArICAgICAgIGlmIChJU19FUlIo c2tiKSkNCj4gPiArICAgICAgICAgICAgICAgc2tiID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAg ICB3aGlsZSAoY291bnQpIHsNCj4gPiArICAgICAgICAgICAgICAgaW50IGksIGxlbjsNCj4gPiAr DQo+ID4gKyAgICAgICAgICAgICAgIC8qIHJlbW92ZSBwYWRkaW5nIGJ5dGVzIGZyb20gYnVmZmVy ICovDQo+ID4gKyAgICAgICAgICAgICAgIGZvciAoOyBodS0+cGFkZGluZyAmJiBjb3VudCA+IDA7 IGh1LT5wYWRkaW5nLS0pIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb3VudC0tOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcisrOw0KPiA+ICsgICAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgICAgICAgIGlmICghY291bnQpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIXNrYikgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwa3RzX2NvdW50OyBp KyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJbMF0g IT0gKCZwa3RzW2ldKS0+dHlwZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2tiID0gYnRfc2tiX2FsbG9jKCgmcGt0c1tpXSktPm1heGxlbiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfQVRPTUlDKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tiKQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoY2lfc2tiX3Br dF90eXBlKHNrYikgPSAoJnBrdHNbaV0pLT50eXBlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGNpX3NrYl9leHBlY3Qoc2tiKSA9ICgmcGt0c1tpXSktPmhsZW47DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNr IGZvciBpbnZhbGlkIHBhY2tldCB0eXBlICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg aWYgKCFza2IpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJS X1BUUigtRUlMU0VRKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgY291bnQg LT0gMTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gMTsNCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgbGVuID0gbWluX3QodWlu dCwgaGNpX3NrYl9leHBlY3Qoc2tiKSAtIHNrYi0+bGVuLCBjb3VudCk7DQo+ID4gKyAgICAgICAg ICAgICAgIHNrYl9wdXRfZGF0YShza2IsIGJ1ZmZlciwgbGVuKTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICAgIGNvdW50IC09IGxlbjsNCj4gPiArICAgICAgICAgICAgICAgYnVmZmVyICs9IGxl bjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBwYXJ0aWFsIHBhY2tl dCAqLw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoc2tiLT5sZW4gPCBoY2lfc2tiX2V4cGVjdChz a2IpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBrdHNfY291bnQ7IGkrKykgew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGlmIChoY2lfc2tiX3BrdF90eXBlKHNrYikgPT0gKCZwa3Rz W2ldKS0+dHlwZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoaSA+ PSBwa3RzX2NvdW50KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAga2ZyZWVfc2tiKHNr Yik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVJTFNFUSk7 DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChz a2ItPmxlbiA9PSAoJnBrdHNbaV0pLT5obGVuKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgdTE2IGRsZW47DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo KCZwa3RzW2ldKS0+bHNpemUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB2YXJpYWJsZSBkYXRh IGxlbmd0aCAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGxlbiA9IDA7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBjYXNlIDE6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvKiBTaW5nbGUgb2N0ZXQgdmFyaWFibGUgbGVuZ3RoICovDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkbGVuID0gc2tiLT5kYXRhWygmcGt0c1tpXSktPmxvZmZdOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGNpX3NrYl9leHBlY3Qoc2tiKSAr PSBkbGVuOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz a2JfdGFpbHJvb20oc2tiKSA8IGRsZW4pIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAga2ZyZWVfc2tiKHNrYik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBEb3VibGUgb2N0ZXQgdmFyaWFibGUg bGVuZ3RoICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbGVuID0gZ2V0 X3VuYWxpZ25lZF9sZTE2KHNrYi0+ZGF0YSArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgmcGt0c1tpXSktPmxvZmYpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGNpX3NrYl9leHBlY3Qoc2tiKSArPSBk bGVuOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChza2Jf dGFpbHJvb20oc2tiKSA8IGRsZW4pIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAga2ZyZWVfc2tiKHNrYik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTVNHU0laRSk7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5zdXBwb3J0ZWQgdmFyaWFibGUgbGVu Z3RoICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZV9za2Ioc2ti KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1F SUxTRVEpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCFkbGVuKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBodS0+cGFkZGluZyA9IChza2ItPmxlbiAtIDEpICUgYWxpZ25tZW50Ow0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHUtPnBhZGRpbmcgPSAoYWxpZ25tZW50 IC0NCj4gPiArIGh1LT5wYWRkaW5nKSAlIGFsaWdubWVudDsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBtb3JlIGRhdGEsIGNvbXBsZXRlIGZyYW1lICov DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGNpX3NrYl9wa3RfdHlw ZShza2IpID09IEhDSV9FVkVOVF9QS1QpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBzX2NoZWNrX2V2ZW50X3BhY2tldChodSwgc2tiKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgmcGt0c1tpXSktPnJlY3YoaGRldiwgc2tiKTsNCj4g DQo+IElmIHlvdSBhcmUgZ29pbmcgdG8gaGFuZGxlIGNlcnRhaW4gZXZlbnRzIGRpcmVjdGx5IGJ5 IHRoZSBkcml2ZXIgaXQgaXMgcHJvYmFibHkgYQ0KPiBnb29kIGlkZWEgdG8gY2xvbmUgaXQsIHRo YXQgc2FpZCB0aGVyZSBleGlzdHMgc29tZSBtZWFucyB0byBhY3R1YWxseSBoYW5kbGUNCj4gdGhl IGV2ZW50cyBnZW5lcmF0ZWQgYXMgcmVzcG9uc2UgdG8gY29tbWFuZHMsIGp1c3QgdXNlDQo+IGhj aV9jbWRfc3luY19xdWV1ZSB0aGVuIHVzZSBfX2hjaV9jbWRfc3luYyB3aGljaCB3aWxsIHJldHVy biB5b3UgdGhlIHNrYg0KPiBvZiB0aGUgZXZlbnQsIHRoYXQgd2F5IHlvdSBkb24ndCBoYXZlIHRv IGtlZXAgZXh0cmEgbG9naWMgdG8gaW50ZXJjZXB0IGNlcnRhaW4NCj4gZXZlbnRzLg0KVGhhbmtz IGZvciB0aGUgc3VnZ2VzdGlvbi4gSSByZS13cm90ZSB0aGUgZHJpdmVyIGNvZGUgdG8gdXNlIGhj aV9jbWRfc3luY19xdWV1ZSgpIGFuZCBfX2hjaV9jbWRfc3luYygpIGFuZCBjaGVja2VkIHRoZSBz dGF0dXMgZmllbGQgb2YgdGhlIGV2ZW50Lg0KSSByZW1vdmVkIHRoaXMgbnhwX3JlY3ZfYnVmKCkg d2hpY2ggY2hlY2tlZCBmb3IgY2VydGFpbiBldmVudHMsIGFuZCBjYWxsZWQgaDRfcmVjdiBidWYo KSBpbnN0ZWFkLiBUaGUgaGNpX254cCBkcml2ZXIgbm93IGhhcyBmZXdlciBsaW5lcyBvZiBjb2Rl IDopDQo+IA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiID0gTlVMTDsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgIH0gZWxz ZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaHUtPnBhZGRpbmcgPSAoc2tiLT5sZW4g LSAxKSAlIGFsaWdubWVudDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBodS0+cGFkZGlu ZyA9IChhbGlnbm1lbnQgLSBodS0+cGFkZGluZykgJQ0KPiA+ICsgYWxpZ25tZW50Ow0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAvKiBDb21wbGV0ZSBmcmFtZSAqLw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGlmIChoY2lfc2tiX3BrdF90eXBlKHNrYikgPT0gSENJX0VW RU5UX1BLVCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzX2NoZWNrX2V2 ZW50X3BhY2tldChodSwgc2tiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAoJnBrdHNb aV0pLT5yZWN2KGhkZXYsIHNrYik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc2tiID0g TlVMTDsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICAgIHJldHVybiBza2I7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbnhwX3Jl Y3Yoc3RydWN0IGhjaV91YXJ0ICpodSwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGNvdW50KQ0KPiA+ ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbnhwX3N0cnVjdCAqbnhwID0gaHUtPnByaXY7DQo+ID4g Kw0KPiA+ICsgICAgICAgaWYgKCF0ZXN0X2JpdChIQ0lfVUFSVF9SRUdJU1RFUkVELCAmaHUtPmZs YWdzKSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FVU5BVENIOw0KPiA+ICsNCj4gPiAr ICAgICAgIHBzX3N0YXJ0X3RpbWVyKGh1KTsNCj4gPiArDQo+ID4gKyAgICAgICBueHAtPnJ4X3Nr YiA9IG54cF9yZWN2X2J1ZihodS0+aGRldiwgbnhwLT5yeF9za2IsIGRhdGEsIGNvdW50LA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnhwX3JlY3ZfcGt0cywgQVJSQVlf U0laRShueHBfcmVjdl9wa3RzKSk7DQo+ID4gKyAgICAgICBpZiAoSVNfRVJSKG54cC0+cnhfc2ti KSkgew0KPiA+ICsgICAgICAgICAgICAgICBpbnQgZXJyID0gUFRSX0VSUihueHAtPnJ4X3NrYik7 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBidF9kZXZfZXJyKGh1LT5oZGV2LCAiRnJhbWUg cmVhc3NlbWJseSBmYWlsZWQgKCVkKSIsIGVycik7DQo+ID4gKyAgICAgICAgICAgICAgIG54cC0+ cnhfc2tiID0gTlVMTDsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiArICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gY291bnQ7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqbnhwX2RlcXVldWUoc3RydWN0IGhjaV91YXJ0ICpo dSkgew0KPiA+ICsgICAgICAgc3RydWN0IG54cF9zdHJ1Y3QgKm54cCA9IGh1LT5wcml2Ow0KPiA+ ICsNCj4gPiArICAgICAgIGlmIChwc193YWtldXAoaHUpKSB7DQo+ID4gKyAgICAgICAgICAgICAg IGNsZWFyX2JpdChIQ0lfVUFSVF9TRU5ESU5HLCAmaHUtPnR4X3N0YXRlKTsNCj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBwc19zdGFydF90 aW1lcihodSk7DQo+ID4gKyAgICAgICByZXR1cm4gc2tiX2RlcXVldWUoJm54cC0+dHhxKTsgfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBueHBfc2V0dXAoc3RydWN0IGhjaV91YXJ0ICpodSkgew0K PiA+ICsgICAgICAgcHNfaW5pdChodSk7DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBoY2lfdWFydF9wcm90byBueHBwID0gew0K PiA+ICsgICAgICAgLmlkICAgICAgICAgICAgID0gSENJX1VBUlRfTlhQLA0KPiA+ICsgICAgICAg Lm5hbWUgICAgICAgICAgID0gIk5YUCIsDQo+ID4gKyAgICAgICAub3BlbiAgICAgICAgICAgPSBu eHBfb3BlbiwNCj4gPiArICAgICAgIC5jbG9zZSAgICAgICAgICA9IG54cF9jbG9zZSwNCj4gPiAr ICAgICAgIC5yZWN2ICAgICAgICAgICA9IG54cF9yZWN2LA0KPiA+ICsgICAgICAgLmVucXVldWUg ICAgICAgID0gbnhwX2VucXVldWUsDQo+ID4gKyAgICAgICAuZGVxdWV1ZSAgICAgICAgPSBueHBf ZGVxdWV1ZSwNCj4gPiArICAgICAgIC5mbHVzaCAgICAgICAgICA9IG54cF9mbHVzaCwNCj4gPiAr ICAgICAgIC5zZXR1cCAgICAgICAgICA9IG54cF9zZXR1cCwNCj4gPiArfTsNCj4gPiArDQo+ID4g K2ludCBfX2luaXQgbnhwX2luaXQodm9pZCkNCj4gPiArew0KPiA+ICsgICAgICAgcmV0dXJuIGhj aV91YXJ0X3JlZ2lzdGVyX3Byb3RvKCZueHBwKTsgfQ0KPiA+ICsNCj4gPiAraW50IF9fZXhpdCBu eHBfZGVpbml0KHZvaWQpDQo+ID4gK3sNCj4gPiArICAgICAgIHJldHVybiBoY2lfdWFydF91bnJl Z2lzdGVyX3Byb3RvKCZueHBwKTsgfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290 aC9oY2lfbnhwLmggYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbnhwLmgNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwLi4wZWQ1MTU4DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9ueHAuaA0KPiA+IEBAIC0wLDAgKzEsMTEwIEBA DQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovDQo+ ID4gKy8qDQo+ID4gKyAqDQo+ID4gKyAqICBCbHVldG9vdGggSENJIFVBUlQgZHJpdmVyDQo+ID4g KyAqICBDb3B5cmlnaHQgMjAxOC0yMDIyIE5YUA0KPiA+ICsgKg0KPiA+ICsgKg0KPiA+ICsgKiAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcg0KPiA+ICttb2RpZnkNCj4gPiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkDQo+ID4gK2J5DQo+ID4gKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNl bnNlLCBvcg0KPiA+ICsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4g PiArICoNCj4gPiArICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiA+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gPiArICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4g PiArICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ID4g KyAqDQo+ID4gKyAqLw0KPiA+ICsjaWZuZGVmIF9IQ0lfTlhQX0hfDQo+ID4gKyNkZWZpbmUgX0hD SV9OWFBfSF8NCj4gPiArDQo+ID4gKyNkZWZpbmUgVFRZX0ZVTkMgdHR5LT5vcHMNCj4gPiArDQo+ ID4gK3N0cnVjdCBwc19kYXRhIHsNCj4gPiArICAgICAgIHUzMiAgICBwc19tb2RlOw0KPiA+ICsg ICAgICAgdTMyICAgIGN1cl9wc21vZGU7DQo+ID4gKyAgICAgICB1MzIgICAgcHNfc3RhdGU7DQo+ ID4gKyAgICAgICB1MzIgICAgcHNfY21kOw0KPiA+ICsgICAgICAgdTMyICAgIGludGVydmFsOw0K PiA+ICsgICAgICAgdTMyICAgIHdha2V1cG1vZGU7DQo+ID4gKyAgICAgICB1MzIgICAgY3VyX3dh a2V1cG1vZGU7DQo+ID4gKyAgICAgICB1MzIgICAgc2VuZF9jbWQ7DQo+ID4gKyAgICAgICBzdHJ1 Y3Qgd29ya19zdHJ1Y3Qgd29yazsNCj4gPiArICAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHk7 DQo+ID4gKyAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCBwc190aW1lcjsNCj4gPiArICAgICAgIHUz MiAgICB0aW1lcl9vbjsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBueHBfc3RydWN0IHsN Cj4gPiArICAgICAgIHN0cnVjdCBza19idWZmICpyeF9za2I7DQo+ID4gKyAgICAgICBzdHJ1Y3Qg c2tfYnVmZl9oZWFkIHR4cTsNCj4gPiArICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIG54 cF9saXN0X2hlYWQ7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBjaGFyICAgICAgICAgICBpZDsNCj4g PiArICAgICAgIHN0cnVjdCBwc19kYXRhICAgICAgICAgICpwc2RhdGE7DQo+ID4gK307DQo+ID4g Kw0KPiA+ICsvKiogRGVmYXVsdCBwcyB0aW1lb3V0IHBlcmlvZCBpbiBtaWxsaS1zZWNvbmQgKi8N Cj4gPiArI2RlZmluZSBERUZBVUxUX1RJTUVfUEVSSU9EICAgICAyMDAwDQo+ID4gKw0KPiA+ICsv Kiogd2FrZXVwIG1ldGhvZCBEVFIgKi8NCj4gPiArI2RlZmluZSBXQUtFVVBfTUVUSE9EX0RUUiAg ICAgICAwDQo+ID4gKy8qKiB3YWtldXAgbWV0aG9kIGJyZWFrICovDQo+ID4gKyNkZWZpbmUgV0FL RVVQX01FVEhPRF9CUkVBSyAgICAgMQ0KPiA+ICsvKiogd2FrZSB1cCBtZXRob2QgRVggYnJlYWsg Ki8NCj4gPiArI2RlZmluZSBXQUtFVVBfTUVUSE9EX0VYVF9CUkVBSyAgMg0KPiA+ICsvKiogd2Fr ZSB1cCBtZXRob2QgUlRTICovDQo+ID4gKyNkZWZpbmUgV0FLRVVQX01FVEhPRF9SVFMgICAgICAg Mw0KPiA+ICsvKiogd2FrZXVwIG1ldGhvZCBpbnZhbGlkICovDQo+ID4gKyNkZWZpbmUgIFdBS0VV UF9NRVRIT0RfSU5WQUxJRCAgMHhmZg0KPiA+ICsNCj4gPiArLyoqIHBzIG1vZGUgZGlzYWJsZSAq Lw0KPiA+ICsjZGVmaW5lIFBTX01PREVfRElTQUJMRSAgICAgICAgIDANCj4gPiArLyoqIHBzIG1v ZGUgZW5hYmxlICovDQo+ID4gKyNkZWZpbmUgUFNfTU9ERV9FTkFCTEUgICAgICAgICAgMQ0KPiA+ ICsNCj4gPiArLyoqIHBzIGNtZCBleGl0IHBzICAqLw0KPiA+ICsjZGVmaW5lIFBTX0NNRF9FWElU X1BTICAgICAgICAgIDENCj4gPiArLyoqIHBzIGNtZCBlbnRlciBwcyAqLw0KPiA+ICsjZGVmaW5l IFBTX0NNRF9FTlRFUl9QUyAgICAgICAgIDINCj4gPiArDQo+ID4gKy8qKiBwcyBzdGF0ZSBhd2Fr ZSAqLw0KPiA+ICsjZGVmaW5lIFBTX1NUQVRFX0FXQUtFICAgICAgICAgIDANCj4gPiArLyoqIHBz IHN0YXRlIFNMRUVQICovDQo+ID4gKyNkZWZpbmUgUFNfU1RBVEVfU0xFRVAgICAgICAgICAgMQ0K PiA+ICsNCj4gPiArLyoqIE9HRiAqLw0KPiA+ICsjZGVmaW5lIE9HRiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4M0YNCj4gPiArLyoqIEJsdWV0b290aCBjb21tYW5kIDogU2xl ZXAgbW9kZSAqLw0KPiA+ICsjZGVmaW5lIEJUX0NNRF9BVVRPX1NMRUVQX01PREUgICAgICAgICAw eDIzDQo+ID4gKy8qKiBCbHVldG9vdGggY29tbWFuZDogV2FrZXVwIG1ldGhvZCAqLw0KPiA+ICsj ZGVmaW5lIEJUX0NNRF9XQUtFVVBfTUVUSE9EICAgIDB4NTMNCj4gPiArDQo+ID4gKy8qKiBCbHVl dG9vdGggUG93ZXIgU3RhdGUgOiBFbmFibGUgKi8NCj4gPiArI2RlZmluZSBCVF9QU19FTkFCTEUg ICAgICAgICAgICAgICAgICAgMHgwMg0KPiA+ICsvKiogQmx1ZXRvb3RoIFBvd2VyIFN0YXRlIDog RGlzYWJsZSAqLw0KPiA+ICsjZGVmaW5lIEJUX1BTX0RJU0FCTEUgICAgICAgICAgICAgICAgICAw eDAzDQo+ID4gKw0KPiA+ICsvKiogQmx1ZXRvb3RoIEhvc3QgV2FrZXVwIE1ldGhvZHMgKiovDQo+ ID4gKyNkZWZpbmUgQlRfSE9TVF9XQUtFVVBfTUVUSE9EX05PTkUgICAgICAweDAwDQo+ID4gKyNk ZWZpbmUgQlRfSE9TVF9XQUtFVVBfTUVUSE9EX0RUUiAgICAgICAweDAxDQo+ID4gKyNkZWZpbmUg QlRfSE9TVF9XQUtFVVBfTUVUSE9EX0JSRUFLICAgICAweDAyDQo+ID4gKyNkZWZpbmUgQlRfSE9T VF9XQUtFVVBfTUVUSE9EX0dQSU8gICAgICAweDAzDQo+ID4gKyNkZWZpbmUgQlRfSE9TVF9XQUtF VVBfREVGQVVMVF9HUElPICAgICA1DQo+ID4gKw0KPiA+ICsvKiogQmx1ZXRvb3RoIENoaXAgV2Fr ZXVwIE1ldGhvZHMgKiovDQo+ID4gKyNkZWZpbmUgQlRfQ1RSTF9XQUtFVVBfTUVUSE9EX0RTUiAg ICAgICAweDAwDQo+ID4gKyNkZWZpbmUgQlRfQ1RSTF9XQUtFVVBfTUVUSE9EX0JSRUFLICAgICAw eDAxDQo+ID4gKyNkZWZpbmUgQlRfQ1RSTF9XQUtFVVBfTUVUSE9EX0dQSU8gICAgICAweDAyDQo+ ID4gKyNkZWZpbmUgQlRfQ1RSTF9XQUtFVVBfTUVUSE9EX0VYVF9CUkVBSyAgMHgwNA0KPiA+ICsj ZGVmaW5lIEJUX0NUUkxfV0FLRVVQX01FVEhPRF9SVFMgICAgICAgMHgwNQ0KPiA+ICsjZGVmaW5l IEJUX0NUUkxfV0FLRVVQX0RFRkFVTFRfR1BJTyAgICAgNA0KPiA+ICsNCj4gPiArI2RlZmluZSAg SENJX09QX0FVVE9fU0xFRVBfTU9ERSAgICAgICAgIDB4ZmMyMw0KPiA+ICsjZGVmaW5lICBIQ0lf T1BfV0FLRVVQX01FVEhPRCAgICAgICAgICAgMHhmYzUzDQo+ID4gKw0KPiA+ICsvKiogc2VuZCBj bWQgZmxhZ3MgKiovDQo+ID4gKyNkZWZpbmUgU0VORF9XQUtFVVBfTUVUSE9EX0NNRCAgICAgICAg ICAweDAxDQo+ID4gKyNkZWZpbmUgU0VORF9BVVRPX1NMRUVQX01PREVfQ01EICAgICAgICAweDAy DQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX0hDSV9VQVJUX0hfICovDQo+ID4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91YXJ0LmgNCj4gPiBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hj aV91YXJ0LmggaW5kZXggZmI0YTJkMC4uMTdkMjcxYyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L2JsdWV0b290aC9oY2lfdWFydC5oDQo+ID4gKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3Vh cnQuaA0KPiA+IEBAIC0yMCw3ICsyMCw3IEBADQo+ID4gICNkZWZpbmUgSENJVUFSVEdFVEZMQUdT ICAgICAgICAgICAgICAgIF9JT1IoJ1UnLCAyMDQsIGludCkNCj4gPg0KPiA+ICAvKiBVQVJUIHBy b3RvY29scyAqLw0KPiA+IC0jZGVmaW5lIEhDSV9VQVJUX01BWF9QUk9UTyAgICAgMTINCj4gPiAr I2RlZmluZSBIQ0lfVUFSVF9NQVhfUFJPVE8gICAgIDEzDQo+ID4NCj4gPiAgI2RlZmluZSBIQ0lf VUFSVF9INCAgICAwDQo+ID4gICNkZWZpbmUgSENJX1VBUlRfQkNTUCAgMQ0KPiA+IEBAIC0zNCw2 ICszNCw3IEBADQo+ID4gICNkZWZpbmUgSENJX1VBUlRfQUc2WFggOQ0KPiA+ICAjZGVmaW5lIEhD SV9VQVJUX05PS0lBIDEwDQo+ID4gICNkZWZpbmUgSENJX1VBUlRfTVJWTCAgMTENCj4gPiArI2Rl ZmluZSBIQ0lfVUFSVF9OWFAgICAxMg0KPiA+DQo+ID4gICNkZWZpbmUgSENJX1VBUlRfUkFXX0RF VklDRSAgICAwDQo+ID4gICNkZWZpbmUgSENJX1VBUlRfUkVTRVRfT05fSU5JVCAxDQo+ID4gQEAg LTIwMCwzICsyMDEsOCBAQCBpbnQgYWc2eHhfZGVpbml0KHZvaWQpOyAgaW50IG1ydmxfaW5pdCh2 b2lkKTsgIGludA0KPiA+IG1ydmxfZGVpbml0KHZvaWQpOyAgI2VuZGlmDQo+ID4gKw0KPiA+ICsj aWZkZWYgQ09ORklHX0JUX0hDSVVBUlRfTlhQDQo+ID4gK2ludCBueHBfaW5pdCh2b2lkKTsNCj4g PiAraW50IG54cF9kZWluaXQodm9pZCk7DQo+ID4gKyNlbmRpZg0KPiA+IC0tDQo+ID4gMi43LjQN Cj4gPg0KPiANCj4gDQo+IC0tDQo+IEx1aXogQXVndXN0byB2b24gRGVudHoNCg0KVGhhbmtzLA0K TmVlcmFqDQo=