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 lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 CE594C433EF for ; Fri, 11 Feb 2022 12:14:10 +0000 (UTC) Received: from list by lists.xenproject.org with outflank-mailman.270483.464785 (Exim 4.92) (envelope-from ) id 1nIUoC-0005gS-JN; Fri, 11 Feb 2022 12:13:52 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version Received: by outflank-mailman (output) from mailman id 270483.464785; Fri, 11 Feb 2022 12:13:52 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nIUoC-0005gJ-Fr; Fri, 11 Feb 2022 12:13:52 +0000 Received: by outflank-mailman (input) for mailman id 270483; Fri, 11 Feb 2022 12:13:51 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1nIUoB-0005gD-3e for xen-devel@lists.xenproject.org; Fri, 11 Feb 2022 12:13:51 +0000 Received: from mx0a-0039f301.pphosted.com (mx0a-0039f301.pphosted.com [148.163.133.242]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 109c6f1f-8b34-11ec-8f75-fffcc8bd4f1a; Fri, 11 Feb 2022 13:13:48 +0100 (CET) Received: from pps.filterd (m0174679.ppops.net [127.0.0.1]) by mx0a-0039f301.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 21BC8oii018966; Fri, 11 Feb 2022 12:13:44 GMT Received: from eur03-ve1-obe.outbound.protection.outlook.com (mail-ve1eur03lp2055.outbound.protection.outlook.com [104.47.9.55]) by mx0a-0039f301.pphosted.com (PPS) with ESMTPS id 3e5qhvr0yj-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Feb 2022 12:13:44 +0000 Received: from AM0PR03MB6324.eurprd03.prod.outlook.com (2603:10a6:20b:153::17) by DB7PR03MB4169.eurprd03.prod.outlook.com (2603:10a6:10:20::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4975.11; Fri, 11 Feb 2022 12:13:39 +0000 Received: from AM0PR03MB6324.eurprd03.prod.outlook.com ([fe80::fc4d:4749:5d1:eb73]) by AM0PR03MB6324.eurprd03.prod.outlook.com ([fe80::fc4d:4749:5d1:eb73%4]) with mapi id 15.20.4975.015; Fri, 11 Feb 2022 12:13:38 +0000 X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 109c6f1f-8b34-11ec-8f75-fffcc8bd4f1a ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jgK5VrIWitM6pqfPPF9QBJD7Ui7tIJ1dTe8YzyBuq/Y3Bvy5tedBIvUJ+jNfjR3upsFsDzwVm24SVc1RTexMfqkY1f/hRv8Mw7haEVQ1k86Y8T/Ffk3HEM3oDKwq4wf5rSFAjxy+mGVrOoKTNuhZifGzYs8FUmbbEE6dYvyMLPuSH+4e7AcqvrC8oYTAH2xtZvPfJ6jeM8f6MmrXEXoUg9I/BB0Ll9Vivlfu9iK5kiWRiTRF8nQz7FmDGnL92Vag5hG3s8PY31FltwWQFJVRNaLjwaexXDI6lM4FXPE3nAIW7DS5+cZ95aP1dsBmxAGx9mb8Kq+KueqVjPh3GpOD3A== 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=Z2oDGDdVmBcEEVO3cC0cRgN2Gjv4o4MwjSCJnIdkem0=; b=TKgiz5+QLrOE0AyjN2Wd8AUhN069Ed0SbHDELe2VUrznlm6LQ0Zk5frfET7l7a35YxOI8uGqpjof+NV5rBFMo2692BWX060TadsM3U1cavxDO3ZwQwvNfNDVLxzy9WO1M2aXy2Etahku2lZbhPm6SpN+bjvUgS0T2k6qXsRwUNxjHd/U9VzvKpQ7lur/DqHQX0HKkBTWJun6BB/0xrhrFId+ZE3u8CRgIJNuQ775c3o05jpc5IHsemVPshjtBZboz5OM5UpX65nkO9qa2xaq3C0jxyJEKBRmkX7PbgaCGs54Mgp2eYkdsgkcy9xqlmlwBHlt63JRIm6u8lpm+85G6A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=epam.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z2oDGDdVmBcEEVO3cC0cRgN2Gjv4o4MwjSCJnIdkem0=; b=nwESQ3lQXBbZBfGvtaOMkIj+UgSBKhqtQhWZ1gWDd5CMJ4EKSB8BG0efuzOec9RBSK1XUe+Prri6XY5ckqfGidlniAdKKrNx/e83VfO5kNfUJiG0K8wbZ6FPusColN7RT07/JP1A8zulnCUTWGQzX47ZdHvNTLBj2nakMET7dqDzilMqV3kLZEPpWZ84wPX2JBi1Ce/F7smksPi/SsHyoIz8/svzF3V+tQXFTioeGukRkwCZmyGccSB0RviO3vZ/BwGettacWsNLFg20NTDz1fmRx1JbVfsQNkoDs9/cRNJOjr/S7Ffj6/gkamFe7eGZ/7qiQHbJWYjcaI76ULbvrg== From: Oleksandr Andrushchenko To: =?utf-8?B?Um9nZXIgUGF1IE1vbm7DqQ==?= CC: "xen-devel@lists.xenproject.org" , "jbeulich@suse.com" , "julien@xen.org" , "sstabellini@kernel.org" , Oleksandr Tyshchenko , Volodymyr Babchuk , Artem Mygaiev , Bertrand Marquis , Rahul Singh , Oleksandr Andrushchenko Subject: Re: [PATCH] vpci: introduce per-domain lock to protect vpci structure Thread-Topic: [PATCH] vpci: introduce per-domain lock to protect vpci structure Thread-Index: AQHYHboQT3cBWYI1/EGunE7hOwop6ayM95MAgAD+qQCAAEaDAIAACWWA Date: Fri, 11 Feb 2022 12:13:38 +0000 Message-ID: <1dbd0f54-affb-1e67-215c-6e6c8fb8535b@epam.com> References: <20220209133627.959649-1-andr2000@gmail.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5fc06c84-e414-4175-dd2c-08d9ed57efa9 x-ms-traffictypediagnostic: DB7PR03MB4169:EE_ x-ld-processed: b41b72d0-4e9f-4c26-8a69-f949f367c91d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: FWxnLaFS1+03b8ygznt3B1NUPpmpCwZbmiK8OMGJoPlW058muKIH7x1Mkfs6PtpU1HcFGgScRn6Aw+ZgJuduzaQz8h+iWh2pDgQDZsexKLyiczJ63gd9VHZx71+Zz1QKWgSXX7aGeVqie4cELJHcZ74am8GwmIPlPJOmxiRPbmx991IX1wW/1x6zFW8wIy4VNl7kZWsTopkA7MpqYFJnvIJeu7yhUjmZ+RhkR6AluPyTYJiP6yC2owPO30XtgrpR4Lh92n/JgE2szKzmBoypNYG2cblqFfpoQC0cSlyeuxEJL2M6xxGscBzH+hfajz3x5mQtuQ0I/JyWgd/4HdAew5Ip5xTc7je0zaxiz+H6GrQV19rsUeVLd+NwJ2T9Fm2sbszFiShMuKfmpDEWB3Q1i2zHasaRAHAStQsZDAz3ps6r5ULn1NWeTw6p8J2sA5ndDre0R3H2TUlRlbCZSti1vd0QorsLoyzI4it8FwJ1WyXJPGZ1IMQUJK4DA3mgbVMqSAw9Znhtpy56zgrZ/vniouIWwzDKxLImu4/WH0eU9yw4tlo4UmqXMtJEQ+L9QfefctqYqZHENxLlxCndUV6lJy83mx+c2AI0zM8/5REogllGsvZTaObaFyM0+/0Iqz6OGYRFJYHKAgY1AeHckTmCPhSAG0u+oFFFHa8xTpOzNpAJmcMBElW61mkz9FfvFoFLyQfec8Ps7UXy8uMF2gOdn7V8KC22XaPkp/bdXz3m4bn1cIIaLA/Tt5eSHpME+uisziwrSteGu901mfWq4gjW2EJWIVCZ5i2Td4WXSJTwvIl3gxk5Gi7yE0XLXRgntrW+N91gxFv9DRiG0LvB2P/Pfw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR03MB6324.eurprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(55236004)(2616005)(316002)(71200400001)(6512007)(8936002)(54906003)(6506007)(36756003)(38070700005)(53546011)(91956017)(107886003)(966005)(31686004)(6916009)(6486002)(508600001)(64756008)(122000001)(26005)(83380400001)(86362001)(2906002)(66446008)(186003)(31696002)(4326008)(66476007)(66556008)(66946007)(76116006)(8676002)(5660300002)(38100700002)(45980500001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?NmZOYnB4RlM3Smp1a3RDenVFTUNnWndTd0RSQzlMQmZqMloxY3FqQXhsNW9t?= =?utf-8?B?Y01JSFVrcTE3TUxOelBDOXJaRllnY2JKd2NyMUo2R09xVUYrSWthN0pRMFk3?= =?utf-8?B?ajhPaWdHZlpXMXVUMWxkS09wT1I4bUxucS9aSlQwcklMS1d4MmhDcUVBWHJl?= =?utf-8?B?OXdiK1J5V3ozT1hTWURERDhLSDJJT0tyOG1VMkFzem1pbEJPVk1RY21Qd1gz?= =?utf-8?B?M1BJSWJobm96N3JyaGdvdk82dGlSNlkvZDF3dGN2SmFrQ0Vlak1oWWVERytw?= =?utf-8?B?RHhaY25ZdXVhTUxISFJ1Y3lqSmorUElhRjNpT2thWUVuY1ptRWVYWGx3OTFi?= =?utf-8?B?Z1o3bm93WlQxOEFkV1JlT1JLWk1oTGZ0dnZIVUphZTZGNVhTRW5vYXBWcVk1?= =?utf-8?B?OE9nRkNLdjJLbVpBVmVWRW10OFI3TEI5ZklJMUk1Ty9NRXBiWU1ZK0RKL05E?= =?utf-8?B?d2NmcjI2TFEvZzQzV2UvM29FMjNlWTkyYUxQd2YvNXVoVzByR3Y0TFNNSG95?= =?utf-8?B?dEd2aFAyRVN1Tk5sSE9saTJBU2lNWlE4bFJveUVZaFdvMTFoSHhmWUJEWkxa?= =?utf-8?B?R1JpbndIZGJML1BKcDRWRlF6cVFMazBQU3dHYUZwN09HS2NtWTQzcXVNc29P?= =?utf-8?B?d0Q5OXJXVng1eWhLWFlzQkFTaitrNXhML2tiZGExY0E0R0FKMFBKdkVmMGxw?= =?utf-8?B?bVFCanJySDgxN2EwMmdTZUlhQ0NqT0tvVmF6Wi8rWStuRWpsalA5U3JucjVp?= =?utf-8?B?M3c4dE5tSjNlNmhzR1ZJTDlaa2pkWGI5Z2JXdGdJbzhDUDRXQ0l0OGw1UXVo?= =?utf-8?B?VWxPc1FqRzhJZ0lBZ3dVMlUwK2trUmZyMk5SbEliRDkzc1hUVzlFQ2V1Z1M1?= =?utf-8?B?QWtZS0hIRVh3WjRYbnZkNGNKUjJBN28xRStzY01iUjZ3VkdKSDNjUVZuTXk1?= =?utf-8?B?eS84TmJmSXZDMUUvZ2hESktrSE40WGNwTEh4VS95M3JHMGVOcXV4aEJ0TzVB?= =?utf-8?B?NFVScjNrNklqS2FlVEoyYkRYUk51ZGhFWUZNZlBIenBqNyszczViRG1jV1Ew?= =?utf-8?B?L0dJMU5BdWllUUJ0N3B3WlV1VEwyNHE2THIvU2p2dCthNjcyNjFwelE0TDdZ?= =?utf-8?B?UW9XVHAxZFJBWE5Ub0lQS2oxRm5SZG54amk0c1B0WHZweldRcVpTRWR5a1kw?= =?utf-8?B?TlJVSU4yaGttMTVRa0h4K3JvM3F5NWdiQTRhZ043TW9FbEt6R3RvaThYNjcw?= =?utf-8?B?VTg4K01kVzBBQ0FhZkpZdEI3UTNwN1AwdDcxeEV2T0pJV3g3QmhFWGdlUlBi?= =?utf-8?B?ZkYweW9YdS8xTzRCbENEdVBvdERyVC9VR01ja3B5MW85RzFDN1JuT3JEOENh?= =?utf-8?B?S29Hc3FQdkRPajNVMUsza2NJMFFnSUVqZmVVN0xOUTZSbG9JMWFiaWNoOWVp?= =?utf-8?B?RFFqN3Uyc29nZ0xuMXc4L3VNQTBGZmpSdUNyTnhEVFAyN0tqMHJUMllaQjRX?= =?utf-8?B?aEd5cWZYaml3K0tZdVR1U2YycThsY3JXYUdSUkFSSlcvbndYL2JCWWNuTk0w?= =?utf-8?B?ZlZhdXU2VTlBYnpkTXYrWUV1OU0rWjRtMk5GajNFR1o1eVl3dklCQ0ZscUFo?= =?utf-8?B?enN0R0diMkMwQ0Q0NHFzZ2VYZ3BvcXZOeWh6SVZiTlRHa3VVZEN0Sy8xY3NL?= =?utf-8?B?OUhmVUhnYzhTbTRpYU9aL0p6Y3dwQkR0bmZZTS9tK0FXZy9VR0piMy9QdnM4?= =?utf-8?B?ZC9aT092SXpQaUQ5aGZnaTZ0VW1Pekd1TjZyckVXREJPcmhOK3VVcjR4azA3?= =?utf-8?B?cm1pa2xJcE1VQnpET0VFbGl1ZVdxQkh6NTZvVlpYdHVtanJMZmtTc2FsdTVh?= =?utf-8?B?NldEVld4WC9lRUMvV3Bteng2WEl5cGJqOTVLRURWQ0ZaTUxOSFJWWkFvemVw?= =?utf-8?B?YjFFVERHMEc4S1cxRHdsTHlSMUg2VWorOGx3dE9OOWsrM0FCQWNVSmN6aS90?= =?utf-8?B?S0xZVE1IQnN6KzRNTnBIU3FqN1ZkTC9xYTRBcFlQVndDUjNUVGJsTGVsN2U4?= =?utf-8?B?WWdSbXRFeEIwUkpTaFZrNkVua3hYaCtZZUh3WUtpYmQzeW5XeE5rRjhvZURu?= =?utf-8?B?SWlOMGJINlMwMVJTTHhOVGdmeno0Tmg2cEJvU2xMeW9ueXlKWnF3V0hrc2RE?= =?utf-8?B?RGNZR0NQQVE1dS9HL1EzRExjV1dWWlovRk5nZ21zL1VDTDYyeFZNNUI1QUlI?= =?utf-8?B?UWRYZForSzZEcmVFMEcxOHF4YXR1TnhhL2Vza0ZHKzV4RjBxRlQ0ZGJJSXRU?= =?utf-8?B?UlhLU3VJeGx0TGgyTzJVWi8raEZ3Qk1GNGQ5OUVPcEZhbC9mR0V6UT09?= Content-Type: text/plain; charset="utf-8" Content-ID: <40B93CFE2C6735408BDC419DC59D1E8C@eurprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM0PR03MB6324.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5fc06c84-e414-4175-dd2c-08d9ed57efa9 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Feb 2022 12:13:38.6741 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /71uxsIwXFDrW1EXPSbeduYsPYbCkd6UF0hpvXy9Ptl6ly60PEmerz+LxqIU/J85Rt6k1Q3a+vx6C2y32S4kgc/MxjwzIOPX3bZpQUmprK2TzaB97LIQPVqoS6zgNBq5 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR03MB4169 X-Proofpoint-GUID: mnqGVgUw6xI7PS3DhfZQ1grik_o-oVq9 X-Proofpoint-ORIG-GUID: mnqGVgUw6xI7PS3DhfZQ1grik_o-oVq9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-02-11_04,2022-02-11_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 phishscore=0 suspectscore=0 bulkscore=0 impostorscore=0 malwarescore=0 mlxlogscore=999 priorityscore=1501 mlxscore=0 adultscore=0 spamscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2201110000 definitions=main-2202110071 DQoNCk9uIDExLjAyLjIyIDEzOjQwLCBSb2dlciBQYXUgTW9ubsOpIHdyb3RlOg0KPiBPbiBGcmks IEZlYiAxMSwgMjAyMiBhdCAwNzoyNzozOUFNICswMDAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5r byB3cm90ZToNCj4+IEhpLCBSb2dlciENCj4+DQo+PiBPbiAxMC4wMi4yMiAxODoxNiwgUm9nZXIg UGF1IE1vbm7DqSB3cm90ZToNCj4+PiBPbiBXZWQsIEZlYiAwOSwgMjAyMiBhdCAwMzozNjoyN1BN ICswMjAwLCBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToNCj4+Pj4gRnJvbTogT2xla3Nh bmRyIEFuZHJ1c2hjaGVua28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPg0KPj4+ Pg0KPj4+PiBJbnRyb2R1Y2UgYSBwZXItZG9tYWluIHJlYWQvd3JpdGUgbG9jayB0byBjaGVjayB3 aGV0aGVyIHZwY2kgaXMgcHJlc2VudCwNCj4+Pj4gc28gd2UgYXJlIHN1cmUgdGhlcmUgYXJlIG5v IGFjY2Vzc2VzIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgdnBjaSBzdHJ1Y3QNCj4+Pj4gaWYgbm90 LiBUaGlzIGxvY2sgY2FuIGJlIHVzZWQgKGFuZCBpbiBhIGZldyBjYXNlcyBpcyB1c2VkIHJpZ2h0 IGF3YXkpDQo+Pj4+IHNvIHRoYXQgdnBjaSByZW1vdmFsIGNhbiBiZSBwZXJmb3JtZWQgd2hpbGUg aG9sZGluZyB0aGUgbG9jayBpbiB3cml0ZQ0KPj4+PiBtb2RlLiBQcmV2aW91c2x5IHN1Y2ggcmVt b3ZhbCBjb3VsZCByYWNlIHdpdGggdnBjaV9yZWFkIGZvciBleGFtcGxlLg0KPj4+IFNhZGx5IHRo ZXJlJ3Mgc3RpbGwgYSByYWNlIGluIHRoZSB1c2FnZSBvZiBwY2lfZ2V0X3BkZXZfYnlfZG9tYWlu IHdydA0KPj4+IHBjaV9yZW1vdmVfZGV2aWNlLCBhbmQgbGlrZWx5IHdoZW4gdlBDSSBnZXRzIGFs c28gdXNlZCBpbg0KPj4+IHtkZX1hc3NpZ25fZGV2aWNlIEkgdGhpbmsuDQo+PiBZZXMsIHRoaXMg aXMgaW5kZWVkIGFuIGlzc3VlLCBidXQgSSB3YXMgbm90IHRyeWluZyB0byBzb2x2ZSBpdCBpbg0K Pj4gY29udGV4dCBvZiB2UENJIGxvY2tpbmcgeWV0LiBJIHRoaW5rIHdlIHNob3VsZCBkaXNjdXNz IGhvdyBkbw0KPj4gd2UgYXBwcm9hY2ggcGRldiBsb2NraW5nLCBzbyBJIGNhbiBjcmVhdGUgYSBw YXRjaCBmb3IgdGhhdC4NCj4+IHRoYXQgYmVpbmcgc2FpZCwgSSB3b3VsZCBsaWtlIG5vdCB0byBz b2x2ZSBwZGV2IGluwqAgdGhpcyBwYXRjaCB5ZXQNCj4+DQo+PiAuLi5JIGRvIHVuZGVyc3RhbmQg d2UgZG8gd2FudCB0byBhdm9pZCB0aGF0LCBidXQgYXQgdGhlIG1vbWVudA0KPj4gYSBzaW5nbGUg cmVsaWFibGUgd2F5IGZvciBtYWtpbmcgc3VyZSBwZGV2IGlzIGFsaXZlIHNlZW1zIHRvDQo+PiBi ZSBwY2lkZXZzX2xvY2suLi4uDQo+IEkgdGhpbmsgd2Ugd2lsbCBuZWVkIHRvIG1ha2UgcGNpZGV2 c19sb2NrIGEgcndsb2NrIGFuZCB0YWtlIGl0IGluIHJlYWQNCj4gbW9kZSBmb3IgcGNpX2dldF9w ZGV2X2J5X2RvbWFpbi4NCj4NCj4gV2UgZGlkbid0IGhhdmUgdGhpcyBzY2VuYXJpbyBiZWZvcmUg d2hlcmUgUENJIGVtdWxhdGlvbiBpcyBkb25lIGluIHRoZQ0KPiBoeXBlcnZpc29yLCBhbmQgaGVu Y2UgdGhlIGxvY2tpbmcgYXJvdW5kIHRob3NlIGRhdGEgc3RydWN0dXJlcyBoYXMgbm90DQo+IGJl ZW4gZGVzaWduZWQgZm9yIHRob3NlIHVzZS1jYXNlcy4NClllcywgSSBkbyB1bmRlcnN0YW5kIHRo YXQuDQpJIGhvcGUgcGNpZGV2cyBsb2NrIG1vdmUgdG8gcndsb2NrIGNhbiBiZSBkb25lIGFzIGEg c2VwYXJhdGUNCnBhdGNoLiBXaGlsZSB0aGlzIGlzIG5vdCBkb25lLCBkbyB5b3UgdGhpbmsgd2Ug Y2FuIHByb2NlZWQgd2l0aA0KdlBDSSBzZXJpZXMgYW5kIHBjaWRldnMgbG9ja2luZyByZS13b3Jr IGJlaW5nIGRvbmUgYWZ0ZXI/DQoNCj4NCj4+Pj4gMS4gUGVyLWRvbWFpbidzIHZwY2lfcndsb2Nr IGlzIHVzZWQgdG8gcHJvdGVjdCBwZGV2LT52cGNpIHN0cnVjdHVyZQ0KPj4+PiBmcm9tIGJlaW5n IHJlbW92ZWQuDQo+Pj4+DQo+Pj4+IDIuIFdyaXRpbmcgdGhlIGNvbW1hbmQgcmVnaXN0ZXIgYW5k IFJPTSBCQVIgcmVnaXN0ZXIgbWF5IHRyaWdnZXINCj4+Pj4gbW9kaWZ5X2JhcnMgdG8gcnVuLCB3 aGljaCBpbiB0dXJuIG1heSBhY2Nlc3MgbXVsdGlwbGUgcGRldnMgd2hpbGUNCj4+Pj4gY2hlY2tp bmcgZm9yIHRoZSBleGlzdGluZyBCQVIncyBvdmVybGFwLiBUaGUgb3ZlcmxhcHBpbmcgY2hlY2ss IGlmIGRvbmUNCj4+Pj4gdW5kZXIgdGhlIHJlYWQgbG9jaywgcmVxdWlyZXMgdnBjaS0+bG9jayB0 byBiZSBhY3F1aXJlZCBvbiBib3RoIGRldmljZXMNCj4+Pj4gYmVpbmcgY29tcGFyZWQsIHdoaWNo IG1heSBwcm9kdWNlIGEgZGVhZGxvY2suIEl0IGlzIG5vdCBwb3NzaWJsZSB0bw0KPj4+PiB1cGdy YWRlIHJlYWQgbG9jayB0byB3cml0ZSBsb2NrIGluIHN1Y2ggYSBjYXNlLiBTbywgaW4gb3JkZXIg dG8gcHJldmVudA0KPj4+PiB0aGUgZGVhZGxvY2ssIGNoZWNrIHdoaWNoIHJlZ2lzdGVycyBhcmUg Z29pbmcgdG8gYmUgd3JpdHRlbiBhbmQgYWNxdWlyZQ0KPj4+PiB0aGUgbG9jayBpbiB0aGUgYXBw cm9wcmlhdGUgbW9kZSBmcm9tIHRoZSBiZWdpbm5pbmcuDQo+Pj4+DQo+Pj4+IEFsbCBvdGhlciBj b2RlLCB3aGljaCBkb2Vzbid0IGxlYWQgdG8gcGRldi0+dnBjaSBkZXN0cnVjdGlvbiBhbmQgZG9l cyBub3QNCj4+Pj4gYWNjZXNzIG11bHRpcGxlIHBkZXZzIGF0IHRoZSBzYW1lIHRpbWUsIGNhbiBz dGlsbCB1c2UgYSBjb21iaW5hdGlvbiBvZiB0aGUNCj4+Pj4gcmVhZCBsb2NrIGFuZCBwZGV2LT52 cGNpLT5sb2NrLg0KPj4+Pg0KPj4+PiAzLiBPcHRpbWl6ZSBpZiBST00gQkFSIHdyaXRlIGxvY2sg cmVxdWlyZWQgZGV0ZWN0aW9uIGJ5IGNhY2hpbmcgb2Zmc2V0DQo+Pj4+IG9mIHRoZSBST00gQkFS IHJlZ2lzdGVyIGluIHZwY2ktPmhlYWRlci0+cm9tX3JlZyB3aGljaCBkZXBlbmRzIG9uDQo+Pj4+ IGhlYWRlcidzIHR5cGUuDQo+Pj4+DQo+Pj4+IDQuIFJlZHVjZSBsb2NrZWQgcmVnaW9uIGluIHZw Y2lfcmVtb3ZlX2RldmljZSBhcyBpdCBpcyBub3cgcG9zc2libGUNCj4+Pj4gdG8gc2V0IHBkZXYt PnZwY2kgdG8gTlVMTCBlYXJseSByaWdodCBhZnRlciB0aGUgd3JpdGUgbG9jayBpcyBhY3F1aXJl ZC4NCj4+Pj4NCj4+Pj4gNS4gUmVkdWNlIGxvY2tlZCByZWdpb24gaW4gdnBjaV9hZGRfaGFuZGxl cnMgYXMgaXQgaXMgcG9zc2libGUgdG8NCj4+Pj4gaW5pdGlhbGl6ZSBtYW55IG1vcmUgZmllbGRz IG9mIHRoZSBzdHJ1Y3QgdnBjaSBiZWZvcmUgYXNzaWduaW5nIGl0IHRvDQo+Pj4+IHBkZXYtPnZw Y2kuDQo+Pj4+DQo+Pj4+IDYuIHZwY2lfe2FkZHxyZW1vdmV9X3JlZ2lzdGVyIGFyZSByZXF1aXJl ZCB0byBiZSBjYWxsZWQgd2l0aCB0aGUgd3JpdGUgbG9jaw0KPj4+PiBoZWxkLCBidXQgaXQgaXMg bm90IGZlYXNpYmxlIHRvIGFkZCBhbiBhc3NlcnQgdGhlcmUgYXMgaXQgcmVxdWlyZXMNCj4+Pj4g c3RydWN0IGRvbWFpbiB0byBiZSBwYXNzZWQgZm9yIHRoYXQuIFNvLCBhZGQgYSBjb21tZW50IGFi b3V0IHRoaXMgcmVxdWlyZW1lbnQNCj4+Pj4gdG8gdGhlc2UgYW5kIG90aGVyIGZ1bmN0aW9ucyB3 aXRoIHRoZSBlcXVpdmFsZW50IGNvbnN0cmFpbnRzLg0KPj4+Pg0KPj4+PiA3LiBEcm9wIGNvbnN0 IHF1YWxpZmllciB3aGVyZSB0aGUgbmV3IHJ3bG9jayBpcyB1c2VkIGFuZCB0aGlzIGlzIGFwcHJv cHJpYXRlLg0KPj4+Pg0KPj4+PiA4LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBkaXNjdXNzaW9uIGF0 IFsxXS4NCj4+Pj4NCj4+Pj4gWzFdIGh0dHBzOi8vdXJsZGVmZW5zZS5jb20vdjMvX19odHRwczov L2xvcmUua2VybmVsLm9yZy9hbGwvMjAyMjAyMDQwNjM0NTkuNjgwOTYxLTQtYW5kcjIwMDBAZ21h aWwuY29tL19fOyEhR0ZfMjlkYmNRSVVCUEEhZ09iU3lTek43czZ6U0tyY3BTRWk2dncxOGZSUGxz MTU3Y3VSb3FxNEtEZDdJY19OdmhfY0ZseVZYUFJwRVdCa0kzOHBnc3Z2ZmckIFtsb3JlWy5da2Vy bmVsWy5db3JnXQ0KPj4+Pg0KPj4+PiBTdWdnZXN0ZWQtYnk6IFJvZ2VyIFBhdSBNb25uw6kgPHJv Z2VyLnBhdUBjaXRyaXguY29tPg0KPj4+PiBTdWdnZXN0ZWQtYnk6IEphbiBCZXVsaWNoIDxqYmV1 bGljaEBzdXNlLmNvbT4NCj4+Pj4gU2lnbmVkLW9mZi1ieTogT2xla3NhbmRyIEFuZHJ1c2hjaGVu a28gPG9sZWtzYW5kcl9hbmRydXNoY2hlbmtvQGVwYW0uY29tPg0KPj4+Pg0KPj4+PiAtLS0NCj4+ Pj4gVGhpcyB3YXMgY2hlY2tlZCBvbiB4ODY6IHdpdGggYW5kIHdpdGhvdXQgUFZIIERvbTAuDQo+ Pj4+IC0tLQ0KPj4+PiAgICB4ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYyAgIHwgICAyICsNCj4+Pj4g ICAgeGVuL2NvbW1vbi9kb21haW4uYyAgICAgICB8ICAgMyArDQo+Pj4+ICAgIHhlbi9kcml2ZXJz L3ZwY2kvaGVhZGVyLmMgfCAgIDggKysrDQo+Pj4+ICAgIHhlbi9kcml2ZXJzL3ZwY2kvbXNpLmMg ICAgfCAgIDggKystDQo+Pj4+ICAgIHhlbi9kcml2ZXJzL3ZwY2kvbXNpeC5jICAgfCAgNDAgKysr KysrKysrKystLQ0KPj4+PiAgICB4ZW4vZHJpdmVycy92cGNpL3ZwY2kuYyAgIHwgMTE0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tDQo+Pj4+ICAgIHhlbi9pbmNsdWRlL3hl bi9zY2hlZC5oICAgfCAgIDMgKw0KPj4+PiAgICB4ZW4vaW5jbHVkZS94ZW4vdnBjaS5oICAgIHwg ICAyICsNCj4+Pj4gICAgOCBmaWxlcyBjaGFuZ2VkLCAxNDYgaW5zZXJ0aW9ucygrKSwgMzQgZGVs ZXRpb25zKC0pDQo+Pj4+DQo+Pj4+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvaHZtL3Ztc2ku YyBiL3hlbi9hcmNoL3g4Ni9odm0vdm1zaS5jDQo+Pj4+IGluZGV4IDEzZTJhMTkwYjQzOS4uMzUx Y2I5NjhhNDIzIDEwMDY0NA0KPj4+PiAtLS0gYS94ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYw0KPj4+ PiArKysgYi94ZW4vYXJjaC94ODYvaHZtL3Ztc2kuYw0KPj4+PiBAQCAtODkzLDYgKzg5Myw4IEBA IGludCB2cGNpX21zaXhfYXJjaF9wcmludChjb25zdCBzdHJ1Y3QgdnBjaV9tc2l4ICptc2l4KQ0K Pj4+PiAgICB7DQo+Pj4+ICAgICAgICB1bnNpZ25lZCBpbnQgaTsNCj4+Pj4gICAgDQo+Pj4+ICsg ICAgQVNTRVJUKCEhcndfaXNfbG9ja2VkKCZtc2l4LT5wZGV2LT5kb21haW4tPnZwY2lfcndsb2Nr KSk7DQo+Pj4gICAgICAgICAgICAgICAgIF4gbm8gbmVlZCBmb3IgdGhlIGRvdWJsZSBuZWdhdGlv bi4NCj4+IE9rLCB3aWxsIHVwZGF0ZSBhbGwgYXNzZXJ0cyB3aGljaCB1c2UgISENCj4+PiBBbHNv IHRoaXMgYXNzZXJ0cyB0aGF0IHRoZSBsb2NrIGlzIHRha2VuLCBidXQgY291bGQgYmUgYnkgYSBk aWZmZXJlbnQNCj4+PiBwQ1BVLiAgSSBndWVzcyBpdCdzIGJldHRlciB0aGFuIG5vdGhpbmcuDQo+ PiBGYWlyIGVub3VnaC4gRG8geW91IHN0aWxsIHdhbnQgdGhlIGFzc2VydHMgb3Igc2hvdWxkIEkg cmVtb3ZlIHRoZW0/DQo+IExpa2VseSBmaW5lIHRvIGxlYXZlIHRoZW0uDQpPaw0KPg0KPj4+PiAr DQo+Pj4+ICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG1zaXgtPm1heF9lbnRyaWVzOyBpKysgKQ0K Pj4+PiAgICAgICAgew0KPj4+PiAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2cGNpX21zaXhfZW50 cnkgKmVudHJ5ID0gJm1zaXgtPmVudHJpZXNbaV07DQo+Pj4gU2luY2UgdGhpcyBmdW5jdGlvbiBp cyBub3cgY2FsbGVkIHdpdGggdGhlIHBlci1kb21haW4gcndsb2NrIHJlYWQNCj4+PiBsb2NrZWQg aXQncyBsaWtlbHkgbm90IGFwcHJvcHJpYXRlIHRvIGNhbGwgcHJvY2Vzc19wZW5kaW5nX3NvZnRp cnFzDQo+Pj4gd2hpbGUgaG9sZGluZyBzdWNoIGxvY2sgKGNoZWNrIGJlbG93KS4NCj4+IFlvdSBh cmUgcmlnaHQsIGFzIGl0IGlzIHBvc3NpYmxlIHRoYXQ6DQo+Pg0KPj4gcHJvY2Vzc19wZW5kaW5n X3NvZnRpcnFzIC0+IHZwY2lfcHJvY2Vzc19wZW5kaW5nIC0+IHJlYWRfbG9jaw0KPj4NCj4+IEV2 ZW4gbW9yZSwgdnBjaV9wcm9jZXNzX3BlbmRpbmcgbWF5IGFsc28NCj4+DQo+PiByZWFkX3VubG9j ayAtPiB2cGNpX3JlbW92ZV9kZXZpY2UgLT4gd3JpdGVfbG9jaw0KPj4NCj4+IGluIGl0cyBlcnJv ciBwYXRoLiBTbywgYW55IGludm9jYXRpb24gb2YgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzDQo+ PiBtdXN0IG5vdCBob2xkIGQtPnZwY2lfcndsb2NrIGF0IGxlYXN0Lg0KPj4NCj4+IEFuZCBhbHNv IHdlIG5lZWQgdG8gY2hlY2sgdGhhdCBwZGV2LT52cGNpIHdhcyBub3QgcmVtb3ZlZA0KPj4gaW4g YmV0d2VlbiBvciAqcmUtY3JlYXRlZCoNCj4+PiBXZSB3aWxsIGxpa2VseSBuZWVkIHRvIHJlLWl0 ZXJhdGUgb3ZlciB0aGUgbGlzdCBvZiBwZGV2cyBhc3NpZ25lZCB0bw0KPj4+IHRoZSBkb21haW4g YW5kIGFzc2VydCB0aGF0IHRoZSBwZGV2IGlzIHN0aWxsIGFzc2lnbmVkIHRvIHRoZSBzYW1lDQo+ Pj4gZG9tYWluLg0KPj4gU28sIGRvIHlvdSBtZWFuIGEgcGF0dGVybiBsaWtlIHRoZSBiZWxvdyBz aG91bGQgYmUgdXNlZCBhdCBhbGwNCj4+IHBsYWNlcyB3aGVyZSB3ZSBuZWVkIHRvIGNhbGwgcHJv Y2Vzc19wZW5kaW5nX3NvZnRpcnFzPw0KPj4NCj4+IHJlYWRfdW5sb2NrDQo+PiBwcm9jZXNzX3Bl bmRpbmdfc29mdGlycXMNCj4+IHJlYWRfbG9jaw0KPj4gcGRldiA9IHBjaV9nZXRfcGRldl9ieV9k b21haW4oZCwgc2JkZi5zZWcsIHNiZGYuYnVzLCBzYmRmLmRldmZuKTsNCj4+IGlmICggcGRldiAm JiBwZGV2LT52cGNpICYmIGlzX3RoZV9zYW1lX3ZwY2kocGRldi0+dnBjaSkgKQ0KPj4gPGNvbnRp bnVlIHByb2Nlc3Npbmc+DQo+IFNvbWV0aGluZyBhbG9uZyB0aG9zZSBsaW5lcy4gWW91IGxpa2Vs eSBuZWVkIHRvIGNvbnRpbnVlIGl0ZXJhdGUgdXNpbmcNCj4gZm9yX2VhY2hfcGRldi4NCkknbGwg dHJ5IHRvIHBsYXkgYXJvdW5kIGl0IGFuZCBzZWUgd2hhdCB3aWxsIGl0IGxvb2sgbGlrZQ0KPg0K Pj4+PiArew0KPj4+PiArICAgIC8qDQo+Pj4+ICsgICAgICogV3JpdGluZyB0aGUgY29tbWFuZCBy ZWdpc3RlciBhbmQgUk9NIEJBUiByZWdpc3RlciBtYXkgdHJpZ2dlcg0KPj4+PiArICAgICAqIG1v ZGlmeV9iYXJzIHRvIHJ1biB3aGljaCBpbiB0dXJuIG1heSBhY2Nlc3MgbXVsdGlwbGUgcGRldnMg d2hpbGUNCj4+Pj4gKyAgICAgKiBjaGVja2luZyBmb3IgdGhlIGV4aXN0aW5nIEJBUidzIG92ZXJs YXAuIFRoZSBvdmVybGFwcGluZyBjaGVjaywgaWYgZG9uZQ0KPj4+PiArICAgICAqIHVuZGVyIHRo ZSByZWFkIGxvY2ssIHJlcXVpcmVzIHZwY2ktPmxvY2sgdG8gYmUgYWNxdWlyZWQgb24gYm90aCBk ZXZpY2VzDQo+Pj4+ICsgICAgICogYmVpbmcgY29tcGFyZWQsIHdoaWNoIG1heSBwcm9kdWNlIGEg ZGVhZGxvY2suIEl0IGlzIG5vdCBwb3NzaWJsZSB0bw0KPj4+PiArICAgICAqIHVwZ3JhZGUgcmVh ZCBsb2NrIHRvIHdyaXRlIGxvY2sgaW4gc3VjaCBhIGNhc2UuIFNvLCBpbiBvcmRlciB0byBwcmV2 ZW50DQo+Pj4+ICsgICAgICogdGhlIGRlYWRsb2NrLCBjaGVjayB3aGljaCByZWdpc3RlcnMgYXJl IGdvaW5nIHRvIGJlIHdyaXR0ZW4gYW5kIGFjcXVpcmUNCj4+Pj4gKyAgICAgKiB0aGUgbG9jayBp biB0aGUgYXBwcm9wcmlhdGUgbW9kZSBmcm9tIHRoZSBiZWdpbm5pbmcuDQo+Pj4+ICsgICAgICov DQo+Pj4+ICsgICAgaWYgKCAhdnBjaV9vZmZzZXRfY21wKHN0YXJ0LCBzaXplLCBQQ0lfQ09NTUFO RCwgMikgKQ0KPj4+PiArICAgICAgICByZXR1cm4gdHJ1ZTsNCj4+Pj4gKw0KPj4+PiArICAgIGlm ICggIXZwY2lfb2Zmc2V0X2NtcChzdGFydCwgc2l6ZSwgcGRldi0+dnBjaS0+aGVhZGVyLnJvbV9y ZWcsIDQpICkNCj4+PiBObyBuZWVkIGZvciB0aGUgY29tcGFyaXNvbiBpZiByb21fcmVnIGlzIHVu c2V0LiBBbHNvIHlvdSBjYW4gT1IgYm90aA0KPj4+IGNvbmRpdGlvbnMgaW50byBhIHNpbmdsZSBp Zi4NCj4+IElmIHdlIG9wZW4gY29kZSB2cGNpX29mZnNldF9jbXAgd2l0aCBhIHNpbmdsZSBpZiBh bGwgdGhpcyBpcyBnb2luZw0KPj4gdG8gYmUgYSBiaXQgY2x1bXN5Og0KPj4NCj4+ICAgwqDCoMKg IGlmICggcjFfb2Zmc2V0IDwgcjJfb2Zmc2V0ICsgcjJfc2l6ZSAmJg0KPj4gICDCoMKgwqDCoMKg wqDCoMKgIHIyX29mZnNldCA8IHIxX29mZnNldCArIHIxX3NpemUgKQ0KPj4gICDCoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsNCj4+IFRoaXMgaXMgYSBzaW5nbGUgY2hlY2suDQo+PiBOb3cgd2UgbmVl ZCB0byBjaGVjayB0d28gcmVnaXN0ZXJzIHdpdGggdGhlIGNvZGUgYWJvdmUgYW5kDQo+PiBhbHNv IGNoZWNrIHRoYXQgcGRldi0+dnBjaS0+aGVhZGVyLnJvbV9yZWcgIT0gMA0KPj4NCj4+IEkgdGhp bmsgaXQgd291bGQgYmUgbW9yZSByZWFkYWJsZSBpZiB3ZSBoYXZlIGEgdGlueSBoZWxwZXIgZnVu Y3Rpb24NCj4+DQo+PiBzdGF0aWMgYm9vbCB2cGNpX29mZnNldF9jbXAodW5zaWduZWQgaW50IHIx X29mZnNldCwgdW5zaWduZWQgaW50IHIxX3NpemUsDQo+PiAgIMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHIyX29mZnNldCwg dW5zaWduZWQgaW50IHIyX3NpemUpDQo+PiB7DQo+PiAgIMKgwqDCoCAvKiBSZXR1cm4gMCBpZiBy ZWdpc3RlcnMgb3ZlcmxhcC4gKi8NCj4+ICAgwqDCoMKgIGlmICggcjFfb2Zmc2V0IDwgcjJfb2Zm c2V0ICsgcjJfc2l6ZSAmJg0KPj4gICDCoMKgwqDCoMKgwqDCoMKgIHIyX29mZnNldCA8IHIxX29m ZnNldCArIHIxX3NpemUgKQ0KPj4gICDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7DQo+PiAg IMKgwqDCoCByZXR1cm4gdHJ1ZTsNCj4+IH0NCkRvIHlvdSBtZWFuIHRoaXMgaGVscGVyIHRvIGJl IGNvbnZlcnRlZCBpbnRvDQpzdGF0aWMgYm9vbCBvdmVybGFwcyh1bnNpZ25lZCBpbnQgcjFfb2Zm c2V0LCB1bnNpZ25lZCBpbnQgcjFfc2l6ZSwNCiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IHIyX29mZnNldCwgdW5zaWdu ZWQgaW50IHIyX3NpemUpDQo+Pg0KPj4gU28sIHRoZW4gd2UgY2FuIGhhdmUgc29tZXRoaW5nIGxp a2UNCj4+DQo+PiBzdGF0aWMgYm9vbCB2cGNpX2hlYWRlcl93cml0ZV9sb2NrKGNvbnN0IHN0cnVj dCBwY2lfZGV2ICpwZGV2LA0KPj4gICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgc3RhcnQsIHVu c2lnbmVkIGludCBzaXplKQ0KPj4gew0KPj4gICDCoMKgwqAgaWYgKCAhdnBjaV9vZmZzZXRfY21w KHN0YXJ0LCBzaXplLCBQQ0lfQ09NTUFORCwgMikgfHwNCj4+ICAgwqDCoMKgwqDCoMKgwqDCoCAo cGRldi0+dnBjaS0+aGVhZGVyLnJvbV9yZWcgJiYNCj4+ICAgwqDCoMKgwqDCoMKgwqDCoMKgICF2 cGNpX29mZnNldF9jbXAoc3RhcnQsIHNpemUsIHBkZXYtPnZwY2ktPmhlYWRlci5yb21fcmVnLCA0 KSkgKQ0KPj4gICDCoMKgwqDCoMKgwqDCoCByZXR1cm4gdHJ1ZTsNCj4+DQo+PiAgIMKgwqDCoCBy ZXR1cm4gZmFsc2U7DQo+PiB9DQo+IEp1c3QgY3JlYXRlIGFuICdvdmVybGFwcycgc3RhdGljIGZ1 bmN0aW9uIGluIGhlYWRlci5jLg0KUGxlYXNlIHNlZSBhYm92ZQ0KPg0KPiBUaGFua3MsIFJvZ2Vy Lg0KVGhhbmsgeW91LA0KT2xla3NhbmRy