From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E2DC0C05027 for ; Tue, 14 Mar 2023 18:03:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=EVGbgKGmq1uzR4kKCACHtJPWv7meqZmq67Y7iYL7Jqk=; b=QIQzTlSZJw8jBedAdJTKrg1Ntx eBDZ+6EXUqjFGVQVqakeVBwc4qYcsz4niqV2b2vfSHXycLH6nTiBWmlxtI2kCmHkClMkaBwqHY22f 8y2g/P5vWGuyHYw1RLrEkB9wH+6QEe1wsmsvW7Vf2UjGoo2cMn0kduz54e6TWBlVDLmwwIhjL7OZ6 5U98t/VJuc/j+0QVhEQXRC2eJO9TdmmYDj+bPaVGUsYs8dk/A091DtnsBdsOkjsHMPOqoGyPVnJoc WIpJh2MFrpH0OzLLsf3hUgLIbHVnTFVTONLc7iNHunG9GPFscVyZXFL+6kUmpYxCPMxxHzW0eu18a MENUV/Jg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pc8yX-00B66b-3D; Tue, 14 Mar 2023 18:02:18 +0000 Received: from mail-bn8nam04on20724.outbound.protection.outlook.com ([2a01:111:f400:7e8d::724] helo=NAM04-BN8-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pc8yH-00B64L-1u for linux-arm-kernel@lists.infradead.org; Tue, 14 Mar 2023 18:02:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jh1Pp0MYcSmPQ11aK3meuJEveO428KEjsHg1eg/0qGG0CGzQRE297viiw1rqOJj5Zj1yutU9EtPwo1xshS+L4yGqOWoPs6yTVo4VZQj9wBOKRVASsN1vENSx9WW00eqiOsw7AEYZj0SdolMRuCi/4MNSn9PL6npnyrmjwnHZZGdy33zImqlyU7NnZq2SlHtBGLnnrjoYhT/f+pGAYubym1Xpvbvv4IdU5hduoLZC+R7WuFDXK06aYFjeuLCTDV5MFtuKenIRHfRobqjrWwOkJ6oAQ8hJbJuZQG/f6GcvFYsNBM/S8pTZVpxrg0n8dpOuOhsXTD1loare5q5x+Vk9hw== 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=HVcDHPN40voJ/U3Otyqa/Ej+8VLqjWLQEoV0YXAMddM=; b=f2CtRPqSvhL7gUplfvnM6PZdtIS6GkTkTB4xs4JmN1SKl9dwPz9yIiIbu6PE7s+7Xyt6X5zmQDiQPusqdX4QLxVa+w5jkYlNsVwKKYddqF6c7eAUS2K5efeO4Ro0CVJctRQEJo1mqptI/dGsWgc9RcIjI6uisVhTo+SudN6E2PqA3pImhpqSbtbkiPcRcbCNldroS9AuJMnozu6r+AEEtxjk8xfqCwTqlND+ZKxRd4xlDd1LeN8QdBd+tDvE+BgSV1tMEITOKSEZ5jTr2cvbi01rDXQzJ0/PeoNwO+1raGN+A2Q46f+lo4nJVU8nZUQyP8V7QbRkSMyheOO+cwQymQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HVcDHPN40voJ/U3Otyqa/Ej+8VLqjWLQEoV0YXAMddM=; b=EvOiOW70HlOOMd5pSzt/iTpSGi3K0ejNORSVg6qyOVoPlGaY4GzLuKpbVxNlAws97ybhpHwYhR82zk2FS04VtOjelJpX4449iLAHKe0BaeoadCpCM/jyqB/nLxd0SZElyVOUlRpWlSaX724vbYFFUGm22lvxzG9rZv7gLe2BY6E= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from DM8PR01MB6824.prod.exchangelabs.com (2603:10b6:8:23::24) by BN6PR0101MB3028.prod.exchangelabs.com (2603:10b6:405:31::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.24; Tue, 14 Mar 2023 18:01:57 +0000 Received: from DM8PR01MB6824.prod.exchangelabs.com ([fe80::fc8b:5e5e:a850:7f0a]) by DM8PR01MB6824.prod.exchangelabs.com ([fe80::fc8b:5e5e:a850:7f0a%7]) with mapi id 15.20.6178.024; Tue, 14 Mar 2023 18:01:56 +0000 Message-ID: <43a25b72-f63c-63b3-d483-fd553af91aee@os.amperecomputing.com> Date: Tue, 14 Mar 2023 23:31:45 +0530 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: [PATCH v2 1/2] PCI/ATS: Add a helper function to configure ATS STU of a PF Content-Language: en-US To: Bjorn Helgaas , Sathyanarayanan Kuppuswamy Cc: linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, joro@8bytes.org, bhelgaas@google.com, robin.murphy@arm.com, will@kernel.org, jean-philippe@linaro.org, darren@os.amperecomputing.com, scott@os.amperecomputing.com References: <20230314171046.GA1655423@bhelgaas> From: Ganapatrao Kulkarni In-Reply-To: <20230314171046.GA1655423@bhelgaas> X-ClientProxiedBy: CH0PR13CA0040.namprd13.prod.outlook.com (2603:10b6:610:b2::15) To DM8PR01MB6824.prod.exchangelabs.com (2603:10b6:8:23::24) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM8PR01MB6824:EE_|BN6PR0101MB3028:EE_ X-MS-Office365-Filtering-Correlation-Id: 5c1ba596-f7f6-470f-10e0-08db24b63347 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YZoGm1ybx3Lq4tieyOyfj1zDhasuw0HID0IJMeSHuzJmfGwFL8dkzXTs5fZGXT20zquMpFaIWMOM54dOT9iichmNJJ3Fs0l4AKZi6IS11Nr0WRj41mItvhLGRRyDEkyOQ0xxyuA7/Sbe10pLBmDzJ6me2DYiIzUmLDaJaUV4gKYqwtcm4lgEOH8b10o/3XOmmiFHEgMt2Xfqm1wu8cYUbOGzgPhyTmnD3vgebtIJPVCs+/CkRaEnY/T/MqSbe+AclCO0ZuvIE97D1L4JvErIla/I583z7FGi5ISHGTGLf/iNuSR9iyvnsUprEFdHmb0JYCeFmGLnWuCbuzYASNF14vcWPwkjbwEH8myxi1YaThn5FdhkE/PGl7Pm16aFwuo7nBL54slghJXNtHR2XcmuDtmn+rc9sHzCOCv9s4ihidH4ZbSHTECpWZqUhOl0348wJWpBPr/4nLKPVh56atYj/sywWXu+WWj6gWhPs6wOFOMWpa+vGCieO9DHf5lhI5x2ebwPB2kYnCk7hkjFyMc2AGfjzNg6oPvMqPtIqzFL4rmB/07uwoIzUkkMCEz9OCmSILbxtCKs3pB7Cumtmq0ulSilHdgN/OxOpT/XE+QA6usi7At9qDi2xLNOLeGjbCpOBOxgQdhYDFKO1FmteF3NUrrVrilwTvIgulUWs/9ka7hPNz1LcP0ehQIC8VwRDdPY X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM8PR01MB6824.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(396003)(136003)(39850400004)(346002)(376002)(366004)(451199018)(31696002)(7416002)(6486002)(66946007)(66556008)(8676002)(4326008)(41300700001)(5660300002)(83380400001)(186003)(966005)(66476007)(8936002)(6666004)(6506007)(316002)(53546011)(6512007)(2616005)(107886003)(478600001)(110136005)(26005)(86362001)(2906002)(38100700002)(66899018)(31686004)(43740500002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?blAraFIrUDVmNGJ6V2VFUXV4M1QySjZ6eUFzd2pHcWpNYmVSbUlGVllhTzA5?= =?utf-8?B?cmNwL1JlblJidnBvdG91ODhnV3ZnK29MUDg3M1pvcFdqUytLZGhQNGNWa091?= =?utf-8?B?M1djTjJoYTIvRVlSUlQvdmJpNGRsd2RMVzhRZnA1aXZNZnl6eCtUUG0vdFZI?= =?utf-8?B?SVZyaTJMdS9Tb3Uxb0EySG43Tnk4dDlIOVdoa1VEOXlDY08xOUVOeVkvQmsx?= =?utf-8?B?bXBrQWZPLzJaZW1id2V1MEN4bGFHKzA4cmUyZFNhNkJLWEptMERxRGJzYVMx?= =?utf-8?B?anFEVkwxYWR1ejlmbzNta3ozeFhMcXF6VXJucHJzWHpnOVFXZzdvaHZMNWN5?= =?utf-8?B?eTI5SFZlbzR3MXFLOWQycmNLck9ML1lXZ2ZUWnYzTDZqTDI3WjhjVlJrOURV?= =?utf-8?B?SldmSkFBeWVxSS9rVWZ6RlprY2ZMWVp2TVpmcktncWYrN2VvRFArTTlPVlc5?= =?utf-8?B?ZG40b0NmR3dlNWtPTWhjem9JeWYvY2wzdXRxcmQvb2NXdm1SQ0Y3ekxIWEpr?= =?utf-8?B?aFNReEpCSWhYaStmZ1libE1xcERCamlMWUNJd1BFbGVOaGxvcC9jNGI4bjNo?= =?utf-8?B?NUNQY0hMZlJIcEpkV2hJRW9QTk03cmIxZmVBdE5wRHFiY2lyeTJNK1lKNWNQ?= =?utf-8?B?enN1WURDaUdLNzhrU0F4QkxEY3VkK0NneGZRb1pZeUQreDNmOW1TS1g3WXEr?= =?utf-8?B?Rm44WEk0OEpSb0xYWFpKS3JXWUlPcEFNcjhKWjc4akFxK0hIeUFwdHJvR1Ra?= =?utf-8?B?VVFnT3B1VlBnNWpPZ1VtblpiZ3VxcjFEN0NtZzNIeWU2aS9hUGxmN1RMRjd3?= =?utf-8?B?eU15b3RLYWE5Qk95QnBOVDVJaDZtdnFLdFlkaENYcHFCOUx1ZkF1K0tqRG5N?= =?utf-8?B?aUZ3RVR3MGtiZzBtYStBYi9lVWRuc2RKdEZ1SFduaHhyTUp3ampwWldHWS9l?= =?utf-8?B?Y2k4UVhoOHpoZnJMTEsrUGswR2xPZlNYTjBRT2NwdzFWRVYvUmJlT1FtV09N?= =?utf-8?B?Sys1VGF3aGFXd01GNVRiNFczLzdsdTRMQ1JwU0w4aGFJUm1TcVlxQ2I0aVlq?= =?utf-8?B?S1kyTC9hYTdLTzJZRzlSM2E4V1puNW5GWEhndCtzSWlMbnhXcXd6cXJJWXUv?= =?utf-8?B?Q2VTY2pXWHI3ZitNUTBLVmNMQlAzT3Bac3dBUWp1U1VseTMzM1dBZ01taVJo?= =?utf-8?B?M0R0cVlvZEhXV1loaGJmU243bVVKeVRWRi8vMmkxbXUxNEt4VEFINEVoSmhp?= =?utf-8?B?RE1nQ3IrSWQzS3VmNXpVNXkwZ2VIWHgrVXVLN2xTbXo3ajhVcVc1KzNySk5v?= =?utf-8?B?Y3lrcXBLZnFUWjNiM09TaFYxZW1HU3F0U0t6WitwWDlBbk9CcjcweEJ3ZHo4?= =?utf-8?B?VDNkQ2swZTFZeEorUkZOblcveXhnNkdSbVl0WVFnQUhMOGJsK0x2bU9IYVBr?= =?utf-8?B?andieUVSNG1Xcm9qRG5IcjVjNDc5bkw0ek1Pa0ZBRkZONDZmNUk3MW9vK0tK?= =?utf-8?B?YjRmMDhuOE1VNlhNZncyT0hLR3JWTkhKbVR6OW52Zk4xYXdsRm51a1JEVFBq?= =?utf-8?B?SGVSaVRaRmZkcjFJWVVQakxGNWhvU0FqY3k2ZnlTVStrTE8xU282TWVxclFJ?= =?utf-8?B?KzVoUFd5emJXMVpzTmQwdkdlYUswYnVVUk5iU0RwODB6TFVYWkhJdlFWMmE4?= =?utf-8?B?U0krVGpLdGNxWEYxZWVldnlDN002ZXJBMXI0d3c3Z1FWYUtEUDlQN0FZK01C?= =?utf-8?B?MThIay9MVUpseTNuQVpwZDR4dVdRMTE2RkNMMkc5Ry85dGhzZm1JREFtZmx4?= =?utf-8?B?OVhQNzJJUFAwdkJmUjJCVHlCanlDSmZyRTRpWnVRN2pKWWdkeVZpSlpnckRW?= =?utf-8?B?RlBzNzMyUHZpTjY2Z0dEUXNuSnNBN0g2c2hwc1dpVFhNbUkrMWJ5OENCY1pH?= =?utf-8?B?Y2lhMmxkRXZsQ2hWazEyOEd4MTJnakZRdllrRzZGMk5VS0JPTFpxNTBiam9r?= =?utf-8?B?aktSVnJPOTFSaS84Z2xHTlorYnplZDZYSmFDdVZCeDJJWXFKRUJHNndHem1q?= =?utf-8?B?OHd1Tm90cnJXNGozSU9CaUtpNmd5b1BHYS92cnhFK3pGc0lvb3FkUjRsTjdO?= =?utf-8?B?Sk9SbDA4dkF5enMzNWJmbkpWT0pKWkJuMkFPNEJWaEFSV040eWdxTTJYVkxp?= =?utf-8?Q?MSWVyQyM94rPUURfnfQgMWNqokzaaRSA5r92vthhWhOn?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5c1ba596-f7f6-470f-10e0-08db24b63347 X-MS-Exchange-CrossTenant-AuthSource: DM8PR01MB6824.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Mar 2023 18:01:56.7718 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UBN4SkdTrdrQszgUBEjsTWUqv+DGDVEglDli5BCMsp/HKa1bcX516hMY6J1RA23q9/fKGPNpyaIYHDzJu2B7At4yXK2q8rDcWayejPFrsP7P0DkzKp6OHThWCRW5G0kE X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR0101MB3028 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230314_110202_534601_68521FA5 X-CRM114-Status: GOOD ( 33.92 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAxNC0wMy0yMDIzIDEwOjQwIHBtLCBCam9ybiBIZWxnYWFzIHdyb3RlOgo+IE9uIFR1ZSwg TWFyIDE0LCAyMDIzIGF0IDA5OjUwOjA2QU0gLTA3MDAsIFNhdGh5YW5hcmF5YW5hbiBLdXBwdXN3 YW15IHdyb3RlOgo+PiBPbiAzLzE0LzIzIDk6MDIgQU0sIEJqb3JuIEhlbGdhYXMgd3JvdGU6Cj4+ PiBPbiBUdWUsIE1hciAxNCwgMjAyMyBhdCAwODowNjowN1BNICswNTMwLCBHYW5hcGF0cmFvIEt1 bGthcm5pIHdyb3RlOgo+Pj4+IE9uIDE0LTAzLTIwMjMgMDY6MjIgcG0sIFNhdGh5YW5hcmF5YW5h biBLdXBwdXN3YW15IHdyb3RlOgo+Pj4+PiBPbiAzLzE0LzIzIDM6MDggQU0sIEdhbmFwYXRyYW8g S3Vsa2Fybmkgd3JvdGU6Cj4+Pj4+PiBPbiAxNC0wMy0yMDIzIDA0OjAwIGFtLCBTYXRoeWFuYXJh eWFuYW4gS3VwcHVzd2FteSB3cm90ZToKPj4+Pj4+PiBPbiAzLzEzLzIzIDI6MTIgUE0sIEJqb3Ju IEhlbGdhYXMgd3JvdGU6Cj4+Pj4+Pj4+IE9uIE1vbiwgRmViIDI3LCAyMDIzIGF0IDA4OjIxOjM2 UE0gLTA4MDAsIEdhbmFwYXRyYW8gS3Vsa2Fybmkgd3JvdGU6Cj4+Pj4+Pj4+PiBBcyBwZXIgUENJ IHNwZWNpZmljYXRpb24gKFBDSSBFeHByZXNzIEJhc2UgU3BlY2lmaWNhdGlvbgo+Pj4+Pj4+Pj4g UmV2aXNpb24gNi4wLCBTZWN0aW9uIDEwLjUpIGJvdGggUEYgYW5kIFZGcyBvZiBhIFBDSSBFUAo+ Pj4+Pj4+Pj4gYXJlIHBlcm1pdHRlZCB0byBiZSBlbmFibGVkIGluZGVwZW5kZW50bHkgZm9yIEFU Uwo+Pj4+Pj4+Pj4gY2FwYWJpbGl0eSwgaG93ZXZlciB0aGUgU1RVKFNtYWxsZXN0IFRyYW5zbGF0 aW9uIFVuaXQpIGlzCj4+Pj4+Pj4+PiBzaGFyZWQgYmV0d2VlbiBQRiBhbmQgVkZzLiBGb3IgVkZz LCBpdCBpcyBoYXJkd2lyZWQgdG8KPj4+Pj4+Pj4+IFplcm8gYW5kIHRoZSBhc3NvY2lhdGVkIFBG J3MgdmFsdWUgYXBwbGllcyB0byBWRnMuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gSW4gdGhlIGN1cnJl bnQgY29kZSwgdGhlIFNUVSBpcyBiZWluZyBjb25maWd1cmVkIHdoaWxlCj4+Pj4+Pj4+PiBlbmFi bGluZyB0aGUgUEYgQVRTLiAgSGVuY2UsIGl0IGlzIG5vdCBhYmxlIHRvIGVuYWJsZSBBVFMKPj4+ Pj4+Pj4+IGZvciBWRnMsIGlmIGl0IGlzIG5vdCBlbmFibGVkIG9uIHRoZSBhc3NvY2lhdGVkIFBG Cj4+Pj4+Pj4+PiBhbHJlYWR5Lgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEFkZGluZyBhIGZ1bmN0aW9u IHBjaV9hdHNfc3R1X2NvbmZpZ3VyZSgpLCB3aGljaCBjYW4gYmUKPj4+Pj4+Pj4+IGNhbGxlZCB0 byBjb25maWd1cmUgdGhlIFNUVSBkdXJpbmcgUEYgZW51bWVyYXRpb24uICBMYXR0ZXIKPj4+Pj4+ Pj4+IGVudW1lcmF0aW9ucyBvZiBWRnMgY2FuIHN1Y2Nlc3NmdWxseSBlbmFibGUgQVRTCj4+Pj4+ Pj4+PiBpbmRlcGVuZGVudGx5Lgo+Pj4KPj4+Pj4+Pj4+IEBAIC00Niw2ICs0NiwzNSBAQCBib29s IHBjaV9hdHNfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCj4+Pj4+Pj4+PiAgIMKgIH0K Pj4+Pj4+Pj4+ICAgwqAgRVhQT1JUX1NZTUJPTF9HUEwocGNpX2F0c19zdXBwb3J0ZWQpOwo+Pj4+ Pj4+Pj4gICDCoCArLyoqCj4+Pj4+Pj4+PiArICogcGNpX2F0c19zdHVfY29uZmlndXJlIC0gQ29u ZmlndXJlIFNUVSBvZiBhIFBGLgo+Pj4+Pj4+Pj4gKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCj4+ Pj4+Pj4+PiArICogQHBzOiB0aGUgSU9NTVUgcGFnZSBzaGlmdAo+Pj4+Pj4+Pj4gKyAqCj4+Pj4+ Pj4+PiArICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCj4+ Pj4+Pj4+PiArICovCj4+Pj4+Pj4+PiAraW50IHBjaV9hdHNfc3R1X2NvbmZpZ3VyZShzdHJ1Y3Qg cGNpX2RldiAqZGV2LCBpbnQgcHMpCj4+Pj4+Pj4+PiArewo+Pj4+Pj4+Pj4gK8KgwqDCoCB1MTYg Y3RybDsKPj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+ICvCoMKgwqAgaWYgKGRldi0+YXRzX2VuYWJsZWQg fHwgZGV2LT5pc192aXJ0Zm4pCj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ Pj4+Pj4+Cj4+Pj4+Pj4+IEkgbWlnaHQgcmV0dXJuIGFuIGVycm9yIGZvciB0aGUgVkYgY2FzZSBv biB0aGUgYXNzdW1wdGlvbgo+Pj4+Pj4+PiB0aGF0IGl0J3MgbGlrZWx5IGFuIGVycm9yIGluIHRo ZSBjYWxsZXIuwqAgSSBndWVzcyBvbmUgY291bGQKPj4+Pj4+Pj4gYXJndWUgdGhhdCBpdCBzaW1w bGlmaWVzIHRoZSBjYWxsZXIgaWYgaXQgZG9lc24ndCBoYXZlIHRvCj4+Pj4+Pj4+IGNoZWNrIGZv ciBQRiB2cyBWRi7CoCBCdXQgdGhlIGZhY3QgdGhhdCBTVFUgaXMgc2hhcmVkIGJldHdlZW4KPj4+ Pj4+Pj4gUEYgYW5kIFZGcyBpcyBhbiBpbXBvcnRhbnQgcGFydCBvZiB1bmRlcnN0YW5kaW5nIGhv dyBBVFMKPj4+Pj4+Pj4gd29ya3MsIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGJlIGF3YXJlIG9mIHRo ZSBkaXN0aW5jdGlvbgo+Pj4+Pj4+PiBhbnl3YXkuCj4+Pj4+Pj4KPj4+Pj4+PiBJIGhhdmUgYWxy ZWFkeSBhc2tlZCB0aGlzIHF1ZXN0aW9uLiBCdXQgbGV0IG1lIHJlcGVhdCBpdC4KPj4+Pj4+Pgo+ Pj4+Pj4+IFdlIGRvbid0IGhhdmUgYW55IGNoZWNrcyBmb3IgdGhlIFBGIGNhc2UgaGVyZS4gVGhh dCBtZWFucyB5b3UKPj4+Pj4+PiBjYW4gcmUtY29uZmlndXJlIHRoZSBTVFUgYXMgbWFueSB0aW1l cyBhcyB5b3Ugd2FudCB1bnRpbCBBVFMKPj4+Pj4+PiBpcyBlbmFibGVkIGluIFBGLiBTbywgaWYg dGhlcmUgYXJlIGFjdGl2ZSBWRnMgd2hpY2ggdXNlcyB0aGlzCj4+Pj4+Pj4gU1RVLCBjYW4gUEYg cmUtY29uZmlndXJlIHRoZSBTVFUgYXQgd2lsbD8KPj4+Pj4+Cj4+Pj4+PiBJTU8sIFNpbmNlIFNU VSBpcyBzaGFyZWQsIHByb2dyYW1taW5nIGl0IG11bHRpcGxlIHRpbWVzIGlzIG5vdCBleHBlY3Rl ZCBmcm9tIGNhbGxlcnMgY29kZSBkbyBpdCwgaG93ZXZlciB3ZSBjYW4gYWRkIGJlbG93IGNoZWNr IHRvIGFsbG93IHRvIHByb2dyYW0gU1RVIG9uY2UgZnJvbSBhIFBGLgo+Pj4+Pj4KPj4+Pj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9hdHMuYyBiL2RyaXZlcnMvcGNpL2F0cy5jCj4+Pj4+PiBp bmRleCAxNjExYmZhMWQ1ZGEuLmY3YmIwMTA2OGUxOCAxMDA2NDQKPj4+Pj4+IC0tLSBhL2RyaXZl cnMvcGNpL2F0cy5jCj4+Pj4+PiArKysgYi9kcml2ZXJzL3BjaS9hdHMuYwo+Pj4+Pj4gQEAgLTYw LDYgKzYwLDEwIEBAIGludCBwY2lfYXRzX3N0dV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRl diwgaW50IHBzKQo+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoCBpZiAoZGV2LT5hdHNfZW5hYmxlZCB8 fCBkZXYtPmlzX3ZpcnRmbikKPj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHJldHVybiAwOwo+Pj4+Pj4KPj4+Pj4+ICvCoMKgwqDCoMKgwqAgLyogQ29uZmlndXJlZCBhbHJl YWR5ICovCj4+Pj4+PiArwqDCoMKgwqDCoMKgIGlmIChkZXYtPmF0c19zdHUpCj4+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+Pj4KPj4+Pj4gVGhlb3JldGlj YWxseSwgeW91IGNhbiByZS1jb25maWd1cmUgU1RVIGFzIGxvbmcgYXMgbm8gb25lIGlzIHVzaW5n Cj4+Pj4+IGl0LiBJbnN0ZWFkIG9mIHRoaXMgY2hlY2ssIGlzIHRoZXJlIGEgd2F5IHRvIGNoZWNr IHdoZXRoZXIgdGhlcmUKPj4+Pj4gYXJlIGFjdGl2ZSBWTXMgd2hpY2ggZW5hYmxlcyBBVFM/Cj4+ Pj4KPj4+PiBZZXMgSSBhZ3JlZSwgdGhlcmUgaXMgbm8gbGltaXRhdGlvbiBvbiBob3cgbWFueSB0 aW1lcyB5b3Ugd3JpdGUgU1RVCj4+Pj4gYml0cywgYnV0IHByYWN0aWNhbGx5IGl0IGlzIGhhcHBl bmluZyB3aGlsZSBQRiBpcyBlbnVtZXJhdGVkLgo+Pj4+Cj4+Pj4gVGhlIHVzYWdlIG9mIGZ1bmN0 aW9uIHBjaV9hdHNfc3R1X2NvbmZpZ3VyZSBpcyBhbG1vc3QKPj4+PiBzaW1pbGFyKHN1YnNldCkg dG8gcGNpX2VuYWJsZV9hdHMgYW5kIG9ubHkgZGlmZmVyZW5jZSBpcyBvbmUgZG9lcwo+Pj4+IEFU UyBlbmFibGUgKyBTVFUgcHJvZ3JhbSBhbmQgYW5vdGhlciBkb2VzIG9ubHkgU1RVIHByb2dyYW0u Cj4+Pgo+Pj4gV2hhdCB3b3VsZCB5b3UgdGhpbmsgb2YgcmVtb3ZpbmcgdGhlIFNUVSB1cGRhdGUg ZmVhdHVyZSBmcm9tCj4+PiBwY2lfZW5hYmxlX2F0cygpIHNvIGl0IGFsd2F5cyBmYWlscyBpZiBw Y2lfYXRzX3N0dV9jb25maWd1cmUoKSBoYXMgbm90Cj4+PiBiZWVuIGNhbGxlZCwgZXZlbiB3aGVu IGNhbGxlZCBvbiB0aGUgUEYsIGUuZy4sCj4+Pgo+Pj4gICAgaWYgKHBzICE9IHBjaV9waHlzZm4o ZGV2KS0+YXRzX3N0dSkKPj4+ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+Cj4+IElmIHdlIGFyZSBy ZW1vdmluZyB0aGUgU1RVIHVwZGF0ZSBmcm9tIHBjaV9lbmFibGVfYXRzKCksIHdoeQo+PiBldmVu IGFsbG93IHBhc3NpbmcgInBzIChwYWdlIHNoaWZ0KSIgcGFyYW1ldGVyPyBJTU8sIHdlIGNhbiBh c3N1bWUgdGhhdAo+PiBmb3IgU1RVIHJlY29uZmlndXJlLCB1c2VycyB3aWxsIGNhbGwgcGNpX2F0 c19zdHVfY29uZmlndXJlKCkuCj4gCj4gVGhlIHJlYXNvbiB0byBwYXNzICJwcyIgd291bGQgYmUg dG8gdmVyaWZ5IHRoYXQgdGhlIFNUVSB0aGUgY2FsbGVyCj4gcGxhbnMgdG8gdXNlIG1hdGNoZXMg dGhlIGFjdHVhbCBTVFUuCj4gCj4+IFNpbmNlIHplcm8gaXMgYSB2YWxpZCBTVFUsIGVuYWJsaW5n IEFUUyBjYW4gYmUgZGVjb3VwbGVkIGZyb20gU1RVCj4+IHVwZGF0ZS4KPj4KPj4+ICAgIHBjaV9y ZWFkX2NvbmZpZ193b3JkKGRldiwgZGV2LT5hdHNfY2FwICsgUENJX0FUU19DVFJMLCAmY3RybCk7 Cj4+PiAgICBjdHJsIHw9IFBDSV9BVFNfQ1RSTF9FTkFCTEU7Cj4+PiAgICBwY2lfd3JpdGVfY29u ZmlnX3dvcmQoZGV2LCBkZXYtPmF0c19jYXAgKyBQQ0lfQVRTX0NUUkwsIGN0cmwpOwo+Pj4KPj4+ IFdvdWxkIHByb2JhYmx5IGFsc28gaGF2ZSB0byBzZXQgImRldi0+YXRzX3N0dSA9IDAiIGluCj4+ PiBwY2lfZGlzYWJsZV9hdHMoKSB0byBhbGxvdyB0aGUgcG9zc2liaWxpdHkgb2YgY2FsbGluZwo+ Pj4gcGNpX2F0c19zdHVfY29uZmlndXJlKCkgYWdhaW4uCj4+Pgo+Pj4+IElNTywgSSBkb250IHRo aW5rLCB0aGVyZSBpcyBhbnkgbmVlZCB0byBmaW5kIGhvdyBtYW55IGFjdGl2ZSBWTXMKPj4+PiB3 aXRoIGF0dGFjaGVkIFZGcyBhbmQgaXQgaXMgbm90IGRvbmUgZm9yIHBjaV9lbmFibGVfYXRzIGFz IHdlbGwuCj4+Pgo+Pj4gRW5hYmxpbmcgb3IgZGlzYWJsaW5nIEFUUyBpbiBhIFBGIG9yIFZGIGhh cyBubyBlZmZlY3Qgb24gb3RoZXIKPj4+IGZ1bmN0aW9ucy4KPj4+Cj4+PiBCdXQgY2hhbmdpbmcg U1RVIHdoaWxlIGEgVkYgaGFzIEFUUyBlbmFibGVkIHdvdWxkIGRlZmluaXRlbHkgYnJlYWsgYW55 Cj4+PiB1c2VyIG9mIHRoYXQgVkYsIHNvIGlmIGl0J3MgcHJhY3RpY2FsIHRvIHZlcmlmeSB0aGF0 IG5vIFZGcyBoYXZlIEFUUwo+Pj4gZW5hYmxlZCwgSSB0aGluayB3ZSBzaG91bGQuCj4+Cj4+IEkg YWxzbyB0aGluayBpdCBpcyBiZXR0ZXIgdG8gY2hlY2sgZm9yIGEgYXRzX2VuYWJsZWQgc3RhdHVz IG9mIFZGIGJlZm9yZQo+PiBjb25maWd1cmluZyB0aGUgU1RVLgo+Pgo+PiBNYXkgYmUgc29tZXRo aW5nIGxpa2UgYmVsb3cgKHVudGVzdGVkKSwKPj4KPj4gc3RhdGljIGludCBpc19hdHNfZW5hYmxl ZF9pbl92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQo+PiB7Cj4+ICAgICAgICAgIHN0cnVjdCBwY2lf c3Jpb3YgKmlvdiA9IGRldi0+c3Jpb3Y7Cj4+ICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICp2ZGV2 Owo+Pgo+PiAgICAgICAgICBpZiAoZGV2LT5pc192aXJ0Zm4pCj4+ICAgICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4+Cj4+ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwY2lfc3Jpb3Zf Z2V0X3RvdGFsdmZzKHBkZXYpOyBpKyspIHsKPj4gICAgICAgICAgICAgICAgICB2ZGV2ID0gcGNp X2dldF9kb21haW5fYnVzX2FuZF9zbG90KHBjaV9kb21haW5fbnIoZGV2LT5idXMpLAo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNpX2lvdl92aXJ0Zm5f YnVzKGRldiwgaSksCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwY2lfaW92X3ZpcnRmbl9kZXZmbihkZXYsIGkpKTsKPiAKPiBJIHdvdWxkIHRyeSBoYXJk IHRvIGF2b2lkIHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdCgpLiAgVGhhdCdzCj4gZXhwZW5z aXZlIChzZWFyY2hlcyAqYWxsKiBQQ0kgZGV2cyB3aXRoIGZvcl9lYWNoX3BjaV9kZXYoKSkgYW5k Cj4gcmVxdWlyZXMgZGVhbGluZyB3aXRoIHJlZmVyZW5jZSBjb3VudHMuCj4gCgpUaGFua3MgQmpv cm4gYW5kIFNhdGh5YW5hcmF5YW5hbiBmb3IgdGhlIHN1Z2dlc3Rpb25zLgoKPiBNYXliZSBhbiBh dG9taWMgY291bnQgaW4gdGhlIFBGIG9mIFZGcyB3aXRoIEFUUyBlbmFibGVkLgoKWWVzIHRoaXMg bWFrZXMgc2ltcGxlLCBhdG9taWMgY291bnRlciBoZWxwcyB0byBmaW5kIHRoZSBhY3RpdmUgVkZz LgoKSSBhbSBhbHNvIHRoaW5raW5nLCBjYW4gd2UgcHV0IHRoaXMgY29uZGl0aW9uIG9uIGNhbGxl ciB0byBtYWtlIHN1cmUgdG8gCipub3QqIGhhdmUgYW55IGFjdGl2ZSBWRnMgYmVmb3JlIGNhbGxp bmcgdGhpcyBoZWxwZXI/ClNvIHRoYXQgdGhlIHRyYWNraW5nIGFuZCByYWNlIGlzc3VlcyBzaG91 bGQgYmUgdGFrZW4gY2FyZSBieSB0aGUgY2FsbGVyIS4KClNNTVV2MyBkcml2ZXIoZmlyc3QgY29u c3VtZXIgb2YgdGhpcyBoZWxwZXIpIGlzIGFscmVhZHkgdHJhY2tpbmcgdGhlIAphY3RpdmUgYXRz IGNvdW50KG5yX2F0c19tYXN0ZXJzKSBhdG9taWNhbGx5LCBpdCBjYW4gYmUgbGV2ZXJhZ2VkIHdo aWxlIApjYWxsaW5nLgoKPiAKPj4gICAgICAgICAgICAgICAgICBpZiAodmRldiAmJiB2ZGV2LT5h dHNfZW5hYmxlZCkKPj4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwo+PiAgICAg ICAgICB9Cj4+Cj4+ICAgICAgICAgIHJldHVybiAwOwo+Pgo+PiB9Cj4+Cj4+IGludCBwY2lfYXRz X3N0dV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBzKQo+PiB7Cj4+IC4uLgo+ PiBpZiAoaXNfYXRzX2VuYWJsZWRfaW5fdmYoZGV2KSkKPj4gICAgIHJldHVybiAtRUJVU1k7Cj4+ Cj4+Pgo+Pj4+IEFsc28gdGhlIGNhbGxlciBoYXMgdGhlIHJlcXVpcmVtZW50IHRvIGNhbGwgZWl0 aGVyCj4+Pj4gcGNpX2F0c19zdHVfY29uZmlndXJlIG9yIHBjaV9lbmFibGVfYXRzIHdoaWxlIGVu dW1lcmF0aW5nIHRoZSBQRi4KPj4+Pgo+Pj4+Pj4gICDCoMKgwqDCoMKgwqDCoCBpZiAoIXBjaV9h dHNfc3VwcG9ydGVkKGRldikpCj4+Pj4+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4+Pj4KPj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+ICvCoMKgwqAg aWYgKCFwY2lfYXRzX3N1cHBvcnRlZChkZXYpKQo+Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4gK8KgwqDCoCBpZiAocHMgPCBQQ0lf QVRTX01JTl9TVFUpCj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ Pj4+Pj4+PiArCj4+Pj4+Pj4+PiArwqDCoMKgIGRldi0+YXRzX3N0dSA9IHBzOwo+Pj4+Pj4+Pj4g K8KgwqDCoCBwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGRldi0+YXRzX2NhcCArIFBDSV9BVFNf Q1RSTCwgJmN0cmwpOwo+Pj4+Pj4+Pj4gK8KgwqDCoCBjdHJsIHw9IFBDSV9BVFNfQ1RSTF9TVFUo ZGV2LT5hdHNfc3R1IC0gUENJX0FUU19NSU5fU1RVKTsKPj4+Pj4+Pj4+ICvCoMKgwqAgcGNpX3dy aXRlX2NvbmZpZ193b3JkKGRldiwgZGV2LT5hdHNfY2FwICsgUENJX0FUU19DVFJMLCBjdHJsKTsK Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+Pj4+PiArfQo+Pj4+ Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9hdHNfc3R1X2NvbmZpZ3VyZSk7Cj4+Pj4+Pj4+ PiArCj4+Pj4+Pj4+PiAgIMKgIC8qKgo+Pj4+Pj4+Pj4gICDCoMKgICogcGNpX2VuYWJsZV9hdHMg LSBlbmFibGUgdGhlIEFUUyBjYXBhYmlsaXR5Cj4+Pj4+Pj4+PiAgIMKgwqAgKiBAZGV2OiB0aGUg UENJIGRldmljZQo+Pj4+Pj4+Pj4gQEAgLTY4LDggKzk3LDggQEAgaW50IHBjaV9lbmFibGVfYXRz KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwcykKPj4+Pj4+Pj4+ICAgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAtRUlOVkFMOwo+Pj4+Pj4+Pj4gICDCoCDCoMKgwqDCoMKgIC8qCj4+Pj4+Pj4+ PiAtwqDCoMKgwqAgKiBOb3RlIHRoYXQgZW5hYmxpbmcgQVRTIG9uIGEgVkYgZmFpbHMgdW5sZXNz IGl0J3MgYWxyZWFkeSBlbmFibGVkCj4+Pj4+Pj4+PiAtwqDCoMKgwqAgKiB3aXRoIHRoZSBzYW1l IFNUVSBvbiB0aGUgUEYuCj4+Pj4+Pj4+PiArwqDCoMKgwqAgKiBOb3RlIHRoYXQgZW5hYmxpbmcg QVRTIG9uIGEgVkYgZmFpbHMgdW5sZXNzIGl0J3MgYWxyZWFkeQo+Pj4+Pj4+Pj4gK8KgwqDCoMKg ICogY29uZmlndXJlZCB3aXRoIHRoZSBzYW1lIFNUVSBvbiB0aGUgUEYuCj4+Pj4+Pj4+PiAgIMKg wqDCoMKgwqDCoCAqLwo+Pj4+Pj4+Pj4gICDCoMKgwqDCoMKgIGN0cmwgPSBQQ0lfQVRTX0NUUkxf RU5BQkxFOwo+Pj4+Pj4+Pj4gICDCoMKgwqDCoMKgIGlmIChkZXYtPmlzX3ZpcnRmbikgewo+Pj4+ Pj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWF0cy5oIGIvaW5jbHVkZS9saW51 eC9wY2ktYXRzLmgKPj4+Pj4+Pj4+IGluZGV4IGRmNTRjZDViMTVkYi4uN2Q2MmE5MmFhZjIzIDEw MDY0NAo+Pj4+Pj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktYXRzLmgKPj4+Pj4+Pj4+ICsr KyBiL2luY2x1ZGUvbGludXgvcGNpLWF0cy5oCj4+Pj4+Pj4+PiBAQCAtOCw2ICs4LDcgQEAKPj4+ Pj4+Pj4+ICAgwqAgLyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTZXJ2aWNlICovCj4+Pj4+Pj4+PiAg IMKgIGJvb2wgcGNpX2F0c19zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldik7Cj4+Pj4+Pj4+ PiAgIMKgIGludCBwY2lfZW5hYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHMpOwo+ Pj4+Pj4+Pj4gK2ludCBwY2lfYXRzX3N0dV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwg aW50IHBzKTsKPj4+Pj4+Pj4+ICAgwqAgdm9pZCBwY2lfZGlzYWJsZV9hdHMoc3RydWN0IHBjaV9k ZXYgKmRldik7Cj4+Pj4+Pj4+PiAgIMKgIGludCBwY2lfYXRzX3F1ZXVlX2RlcHRoKHN0cnVjdCBw Y2lfZGV2ICpkZXYpOwo+Pj4+Pj4+Pj4gICDCoCBpbnQgcGNpX2F0c19wYWdlX2FsaWduZWQoc3Ry dWN0IHBjaV9kZXYgKmRldik7Cj4+Pj4+Pj4+PiBAQCAtMTYsNiArMTcsOCBAQCBzdGF0aWMgaW5s aW5lIGJvb2wgcGNpX2F0c19zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmQpCj4+Pj4+Pj4+PiAg IMKgIHsgcmV0dXJuIGZhbHNlOyB9Cj4+Pj4+Pj4+PiAgIMKgIHN0YXRpYyBpbmxpbmUgaW50IHBj aV9lbmFibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkLCBpbnQgcHMpCj4+Pj4+Pj4+PiAgIMKgIHsg cmV0dXJuIC1FTk9ERVY7IH0KPj4+Pj4+Pj4+ICtzdGF0aWMgaW5saW5lIGludCBwY2lfYXRzX3N0 dV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmQsIGludCBwcykKPj4+Pj4+Pj4+ICt7IHJldHVy biAtRU5PREVWOyB9Cj4+Pj4+Pj4+PiAgIMKgIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZGlzYWJs ZV9hdHMoc3RydWN0IHBjaV9kZXYgKmQpIHsgfQo+Pj4+Pj4+Pj4gICDCoCBzdGF0aWMgaW5saW5l IGludCBwY2lfYXRzX3F1ZXVlX2RlcHRoKHN0cnVjdCBwY2lfZGV2ICpkKQo+Pj4+Pj4+Pj4gICDC oCB7IHJldHVybiAtRU5PREVWOyB9Cj4+Cj4+IC0tIAo+PiBTYXRoeWFuYXJheWFuYW4gS3VwcHVz d2FteQo+PiBMaW51eCBLZXJuZWwgRGV2ZWxvcGVyCj4+Cj4+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+IGxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBs aXN0Cj4+IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+PiBodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwKClRoYW5r cywKR2FuYXBhdAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5p bmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8v bGludXgtYXJtLWtlcm5lbAo=