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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2F495C433F5 for ; Tue, 23 Nov 2021 03:18:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233117AbhKWDVN (ORCPT ); Mon, 22 Nov 2021 22:21:13 -0500 Received: from esa.hc3962-90.iphmx.com ([216.71.140.77]:28705 "EHLO esa.hc3962-90.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229955AbhKWDVK (ORCPT ); Mon, 22 Nov 2021 22:21:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qccesdkim1; t=1637637482; x=1638242282; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=YyGNWRsS5B922rHSr4/4OE41VHmDjsX0GzYlikHOwn4=; b=hvhUSlQ2RvqYedLL4ecpTL8r17Jh79WOT0WtCAFvA3nFo1ku4HxXFsxB IAf2UEXXBpHM2PjTUn1fBe4F/jmSf/jQUMBCrilOZ8vSdtGIlRPZaSJdx mf+Iv9GJxo6t380CSYC0q59iGvgnzPFY12hPYF4u+XhAP0OLhbsgA1K6I 0=; Received: from mail-mw2nam12lp2045.outbound.protection.outlook.com (HELO NAM12-MW2-obe.outbound.protection.outlook.com) ([104.47.66.45]) by ob1.hc3962-90.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Nov 2021 03:18:01 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Kas9YL/0YT/y5B6pu0f1/S5B5TK5PmLDid3N0vvcXZF464+DI1xgAoKuUN1rixFDk6M1yx5Xxy6S0w3Q1CQEGdG5bBnJARqVVQxsMtvRYW6c25T7jANjloIeYpUwnpJJavPhZaUM+ZLvHVuZ8Gmxa1niU5Kguc3twe1PsiJwMOlSnIswKq5a1ux/yREpd5Ij4kB5T/7QJ7MQPl9SWDzwMn2wCOpW3YGLkpnraw8VGzFi3WucVIwlszZ5EX29oi+GL80ppSPgPVdBlffoc4FZrrrtNiZq8vUuiylZue0xQf/M59FWY5QeHS1BSg1kC5SJTthtFkfsQDixXeOW1d/VMg== 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=YyGNWRsS5B922rHSr4/4OE41VHmDjsX0GzYlikHOwn4=; b=iw+j7+F+HV/IMciOwkD/FGoBUZr6d5UeU4chMxjZ3bRLkq4HYduLQA3xCZxjuj3Dn2y3gxT0+rnRoJHc0k1V/YBDXxCXHoRH097rGf8R0zvlI5aFxNru5tSe9vUCWgmLsDnYi2ceVZLBEQpH7kpsMTZSeQzlEX8TJl7toyXyzWmecbKEYkHoIutyt8jwgjUichg9Ky9kJSslwW6kkwQvBI/XuW4n9E4yPrsOR8H84H2IXXnHJ8qnojIGLqcjHc+ZgSx+VtXNQaAy3DNn1MFhnisfi1kaUQNWfHuCSdIx6hz+3bSmDFoyGABR70z1uM2PIdUNFP5MdZfXeyhyy6ot8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=quicinc.com; dmarc=pass action=none header.from=quicinc.com; dkim=pass header.d=quicinc.com; arc=none Received: from DM8PR02MB8247.namprd02.prod.outlook.com (2603:10b6:8:d::19) by DM6PR02MB5946.namprd02.prod.outlook.com (2603:10b6:5:154::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4713.22; Tue, 23 Nov 2021 03:17:59 +0000 Received: from DM8PR02MB8247.namprd02.prod.outlook.com ([fe80::1584:d2b2:1ef7:6fb0]) by DM8PR02MB8247.namprd02.prod.outlook.com ([fe80::1584:d2b2:1ef7:6fb0%5]) with mapi id 15.20.4713.025; Tue, 23 Nov 2021 03:17:59 +0000 From: "JianGen Jiao (QUIC)" To: "JianGen Jiao (QUIC)" , Kaipeng Zeng , Dmitry Vyukov CC: syzkaller , "andreyknvl@gmail.com" , "kasan-dev@googlegroups.com" , LKML , Alexander Lochmann , "Likai Ding (QUIC)" , Hangbin Liu Subject: RE: [PATCH] kcov: add KCOV_PC_RANGE to limit pc range Thread-Topic: [PATCH] kcov: add KCOV_PC_RANGE to limit pc range Thread-Index: AQHX23vD2nRqghWy5Eq5zUX4/l1PcKwJUjYAgAC3OuCAAKLFAIAAC+bwgAAaW4CAAANPgIAED+WAgAAEWYCAAZBvUA== Date: Tue, 23 Nov 2021 03:17:58 +0000 Message-ID: References: <1637130234-57238-1-git-send-email-quic_jiangenj@quicinc.com> <062ffa8658124e089f17d73c2f523afb@quicinc.com> In-Reply-To: <062ffa8658124e089f17d73c2f523afb@quicinc.com> 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=quicinc.com; x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6a0255f2-2ddd-4cd3-4c63-08d9ae2fd9e6 x-ms-traffictypediagnostic: DM6PR02MB5946: x-ld-processed: 98e9ba89-e1a1-4e38-9007-8bdabc25de1d,ExtAddr x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: qE9usOE/8OdAJiM7QZjHMXLMgn3T1ZG3b0Xt1yydqgyQ9sckaPrn1j3tPwaB1fjXxoxDLDiV+6BUU4crAvF2tpUmXj2EA0jXvKsuDFwAbo0dVa/cgPYaqxwzKE4KZuLwewq2XHRrjJTe23z+A8wuxIOK/xlSO5otyOuLb17XbJsu7PPAFVaNohMEIEUVkTW0b2EoExEedaZEfnYqmBjRHJ9O5PaT6DgJ0sJV9vtSL2DUsZgNYBsSxrzTbqXlxdohh1FpIoObMIKEcOeEYBPy8JhIyJArP8G6i9b9PTyvVO3hS7kfZUs7nb0ncXKCC89Lqm+einBGXbjvXGBFOPVTKsZS+QF4z/Dndfw+XQQ2BJ365ArZ56edmPKjOubZ2VbygTn3gwHWf+3Llm00X3euZCtOpoGmN48pjrQdI1UJTsDBRgRv1sdPBOIpqF83b8xCsKxeurXL0531GzRkg0jR11FwxUDrtaFYOelKvt9tBo4nd4zykOvpz1GePEEvVQ5CmoUnOKZVPTgeYpd5UPgnipRQIXicLqIf5WhQrd1q+gIMPewPTaFi0yAI30LmrBVXS9oELHBiEEB22x2JUFaDdq3RNASwHmrkYV4fZCTMIsiVY5moG/H0QKdBTyGJ7X5qxG5S3wj3MekPLfptw+PYwVpRC+c7wo7bOWIwsqTA7bUdZdZ+4UfoXAlTQz2UJordYrp8h8ykgIldThdowdxq7AyHvUdAj6DeJ1v/FQ+g0FYwyfotvN9DXEr5hOgvalSAW5faW4lcaJmSSj0r7Cqe3X7u4BqKKszK7FneD7n+06Q= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM8PR02MB8247.namprd02.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(6506007)(54906003)(53546011)(110136005)(38070700005)(4326008)(8936002)(316002)(66446008)(122000001)(55016003)(8676002)(508600001)(186003)(26005)(966005)(71200400001)(64756008)(7696005)(76116006)(66476007)(66556008)(66946007)(2906002)(38100700002)(9686003)(33656002)(52536014)(30864003)(83380400001)(86362001)(5660300002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bnFVR3Q4ZDRxVHZOMlVOTmlxWVl2U0JEWWpPbjFVTG9RczUva0kvZjhDV3Jo?= =?utf-8?B?WHFBNVFSTlp3UXVuWlY4R2ZIYlZDOTNWdFZ4Q0tHbkIvWWo1QytUK1VWYncx?= =?utf-8?B?L2tvVUdlUGdNUDBFN2Y2d3hrdHhxZmxCajAyQ04xd3NzdXg0cUhVSnNvMGNp?= =?utf-8?B?ZHl6SmsxejFKNngxSkl4eS9BR05ZNTZHUXdENlIzLzMrazdKaVBFZG4rc2ty?= =?utf-8?B?Q0NKUlNPdEhlakppd0JkQnVzVE1JZ2ExeklEdkpBenFhcVg0RFNFTWwxL2Ni?= =?utf-8?B?YnRYZ3Y5Y2VLR3FQdVdGZWV5MEZnOVBZMWJNQTVHalJuSDdQT3YxaHdsOWpt?= =?utf-8?B?ZmxrdHEwWjdVTVZ6SlR2THoyb0VqTERMUW9GY0pXWmVFS1VWcGhHcnRDRUl0?= =?utf-8?B?TVFUQ2FucUl3cHh4eHlTWXVLZHZjbWY4aVM0SUVRdTFVQXliQ1hIVXoySGVV?= =?utf-8?B?eHVUMnlreUdGTVBxUEw3VGd4LzUrVmk5cmx2cFAyeEJpMnNoRHBTYkdJeEdp?= =?utf-8?B?M2p0N3VKbDVsWWRkSkNOK3RCZ2RxQ0FxZ0tqWWtQNUl1aUFhazlWRitvd0E2?= =?utf-8?B?VkxWQXJTUVlidzUxZHhXalJlTXowV2N2MVhJRXhOVUU4MHM5MjAwNEQyZ1Zy?= =?utf-8?B?Q1JxeTRLb0V5TGV1ekVPUVJsems2cDFaYXZGNGJjVUF0VVBZUUVYQ3o0cytC?= =?utf-8?B?Z0dTRDlZTVI2eTZhYlFJUFJKZTRORUxOMzdlL3JiNDhJTHZ4dFlqN3BGYkFp?= =?utf-8?B?THFCVXhqbjZrUE1BUXM0T0xkUGdMeHdvbEFYNTJCZENvNVZ5RG5nL3F0NHRm?= =?utf-8?B?c3hPc3AzVGhoTEJGTkRVREFBNEZWZk1oRWgwcEtlbFEza0pCaW9BbmczZUFX?= =?utf-8?B?TlFDTGhXbXhjOTZvOGY2cFB0bkNWcExZbnl5K1RkWUlOMFJGck1jWXpsemJM?= =?utf-8?B?SHZwZ0ZpU21CbW1yUE1BT1U2NGtpbDBtNzlmdWtpT1hnSTdSS0h6dUtibmZO?= =?utf-8?B?T09DaVFaSWNEeG54cHhQaENsaWptV3UvbFlrSjdYWE5tc1puNGFNZ0pZR2Rx?= =?utf-8?B?ODl5UDYxbUdUemNQMkNENmVRWEJSclBIbnM0MyszcjIweXVHbXROUVJTQmhL?= =?utf-8?B?Nmg1NHpKN01LQWxSY3BIcDhuQ1pZZUdDbzR4WlBRVW5iM0MwRGRlZi9WUVhy?= =?utf-8?B?bkNIMXZuSDNtdEo2YkcvdkhLemZwYUlqMjlaNzV0aUtYVWcyNXRqYVhCY2Zh?= =?utf-8?B?Wm5OOUFiTm5ZREpWdit3endFQzRjckhyY0NRcWtNbE5lTWdqNXVvYjlZeGJO?= =?utf-8?B?RDFpN2htc1VsdVRDbk9XNytjRlFWaEFISmRRbzVrYndiWWZnb2pIcUpYT1BB?= =?utf-8?B?SEwwcUhDTkZnUGh0KzVKV0UwNXo5bU43VTA1V0R2ZkpTaCtRd0c1MGRVenc5?= =?utf-8?B?YzBPQ2dCdFhwOWlyTVNlVU0vN1plVWNhRENreGdWcmxlMHUycTVITVZ0T1ZJ?= =?utf-8?B?eUtBaldQMm41U0oxQitVVE9jdzUvY3B2WkRUekh1YUxicXQwdXI1UGU5V0Uy?= =?utf-8?B?ZUs1WnFBaWRmWVYzYWZycm9WR1lOWTU2L1oxcld2dVZEQ09FSWQ0K2xSSEtB?= =?utf-8?B?SzlBMkkyME5SbTZuMGJNL0swbVpQZVVwS3pXRmx3T29SRGg1cWxoT0h6Y0tL?= =?utf-8?B?TjVYaSttWDkwUkk2YXU2TFhvZjhXaE5EaHJ1NWdRdnR4L0FGNlllN2Y0dnBV?= =?utf-8?B?V1A1R3BKWWFoanBSdG5DbE1Hb205ajlWRktUR0tTU2VyVjlOQXRDUGdiQ04v?= =?utf-8?B?L2pKdGo3a0VueWZNcXdCV0pUL1NjdUZZS1BmeFZTQyswMktVMkkzN21zRnJH?= =?utf-8?B?K0tCTGdGSUk3SmJuczBkSndBazNDWlFWTU81VnFBWVZKUmhseWFZdThEbmw3?= =?utf-8?B?UHZhVStxMDR2b092MmVUY1d0Z3F0ekhaL01iOWRreStwMTJKTE91SC9nUWlI?= =?utf-8?B?TW45ZGZ4VzZnY2xFMkNSRWJIZ2ZRZ3RyNXdUQm1wdjRsL0NmYjBmR2swa2lw?= =?utf-8?B?bDczZUQyK2lmQVh3cG5OYUxJYjBFSDFKSndMNENsZVpSRlZ6enA2aS9uQ0JL?= =?utf-8?B?WUJBa1NnVTVjUjE3Wkl1NDRUc21YREQ4UWJWVDdvQnlWZ0tnOFZONngrcDBW?= =?utf-8?B?SW5oNmRBdnhkN3RPK1RjbG5LVVh1T2tyN0MrNDhaQ0pVY2xyQjBxK0ZPTHU3?= =?utf-8?B?aHlBWHV5RUp2MDAxWUFxaFNDZ3dBPT0=?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: quicinc.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM8PR02MB8247.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6a0255f2-2ddd-4cd3-4c63-08d9ae2fd9e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2021 03:17:59.0507 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 98e9ba89-e1a1-4e38-9007-8bdabc25de1d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: YjxldXE1Js74ZsBI7Gzj4ZWYCuA/LJIe8hw+dxTHdxJCVFIrgYEJbii/wxQU1X+Zbt7GJvoSopdstPb6VugtP2tLbYAzxOLdeWGLxajnGNI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR02MB5946 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgRG1pdHJ5LA0KQmFzZWQgb24gdGhlc2UgaW5mbywgYW55IGZ1cnRoZXIgY29tbWVudCBhbmQg bmV4dCBhY3Rpb24/DQoNCiMgU3VtbWFyeQ0KKiBzaG91bGRuJ3QgZmlsdGVyIGluc2lkZSBrZXJu ZWwgd2hpY2ggd2lsbCBsb29zZSBlZGdlIGluZm8gKEthaXBlbmcpLg0KKiBmaWx0ZXIgc3RhcnQs IGVuZCBzaG91bGQgYmUgZW5vdWdoIChLYWlwZW5nKS4NCiogcHV0IGVkZ2UgaW5mbyBpbnRvIGtl cm5lbD8gKEthaXBlbmcpIF9fc2FuaXRpemVyX2Nvdl90cmFjZV9wY19ndWFyZCBtaWdodCBiZSBh biBvcHRpb24/IEJ1dCBpdCB3aWxsIGxvb3NlIFBDIGluZm8gZm9yIC9jb3ZlciBwYWdlIChwZXJo YXBzIG5lZWRzIGdjb3YpLCBhbHNvIG5vdCBmZWFzaWJsZSB0byBmaWx0ZXIgb3V0IHBjIGd1YXJk IHZhbHVlLiAoSm9leSkNCiogZUJQRiBpcyBmb3IgcmVhZC1vbmx5IHB1cnBvc2UsIG5vdCBzdWl0 YWJsZSB0byBvdmVyY29tZSBrY292LT5hcmVhIG92ZXJmbG93IChKb2V5KS4NCiogUEMgUkFOR0Ug KHN0YXJ0LCBlbmQpIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggY3VycmVudCBjb3ZlciBmaWx0 ZXIgKHN0YXJ0LCBzdGFydCtzaXplKSBpbiBzeXprYWxsZXIgdG8gZnV6emluZyBmaWxlIG9yIG1v ZHVsZSBpbnRlcmVzdGVkIChKb2V5KS4NCiogS0NPViB1bmlxIFBDIGlzIGZvciBhbm90aGVyIHB1 cnBvc2UgKGRyb3BwaW5nIGVkZ2UgaW5mbykgZXZlbiBpdCBhbHNvIG92ZXJjb21lcyBrY292LT5h cmVhIG92ZXJmbG93IChKb2V5KS4NCg0KVEhYDQpKb2V5DQoNCi0tLS0tT3JpZ2luYWwgTWVzc2Fn ZS0tLS0tDQpGcm9tOiBKaWFuR2VuIEppYW8gKFFVSUMpIDxxdWljX2ppYW5nZW5qQHF1aWNpbmMu Y29tPiANClNlbnQ6IE1vbmRheSwgTm92ZW1iZXIgMjIsIDIwMjEgMTE6MjUgQU0NClRvOiBLYWlw ZW5nIFplbmcgPGthaXBlbmc5NEBnbWFpbC5jb20+OyBEbWl0cnkgVnl1a292IDxkdnl1a292QGdv b2dsZS5jb20+DQpDYzogSmlhbkdlbiBKaWFvIChRVUlDKSA8cXVpY19qaWFuZ2VuakBxdWljaW5j LmNvbT47IHN5emthbGxlciA8c3l6a2FsbGVyQGdvb2dsZWdyb3Vwcy5jb20+OyBhbmRyZXlrbnZs QGdtYWlsLmNvbTsga2FzYW4tZGV2QGdvb2dsZWdyb3Vwcy5jb207IExLTUwgPGxpbnV4LWtlcm5l bEB2Z2VyLmtlcm5lbC5vcmc+OyBBbGV4YW5kZXIgTG9jaG1hbm4gPGluZm9AYWxleGFuZGVyLWxv Y2htYW5uLmRlPjsgTGlrYWkgRGluZyAoUVVJQykgPHF1aWNfbGlrYWlkQHF1aWNpbmMuY29tPjsg SGFuZ2JpbiBMaXUgPGxpdWhhbmdiaW5AZ21haWwuY29tPg0KU3ViamVjdDogUkU6IFtQQVRDSF0g a2NvdjogYWRkIEtDT1ZfUENfUkFOR0UgdG8gbGltaXQgcGMgcmFuZ2UNCg0KSGkgS2FpcGVuZywN Cj4gQlRXLCBvdXIgY292ZXJhZ2UgZmlsdGVyIGlzIGZvciBMaW51eC9hbWQ2NCBvbmx5LiBTZWVt cyB0aGUgYXV0aG9yIG5lZWRzIGEgY292ZXJhZ2UgZmlsdGVyIG9uIGFybS4NCg0KTGV0IHlvdSBr bm93IHRoYXQgY292IGZpbGVyIGZvciBhcm1bNjRdIGlzIGF2YWlsYWJsZSB0b28gaW4gc3l6a2Fs bGVyIGJhY2sgbW9udGhzLg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogS2Fp cGVuZyBaZW5nIDxrYWlwZW5nOTRAZ21haWwuY29tPiANClNlbnQ6IE1vbmRheSwgTm92ZW1iZXIg MjIsIDIwMjEgMTE6MDkgQU0NClRvOiBEbWl0cnkgVnl1a292IDxkdnl1a292QGdvb2dsZS5jb20+ DQpDYzogSmlhbkdlbiBKaWFvIChRVUlDKSA8cXVpY19qaWFuZ2VuakBxdWljaW5jLmNvbT47IHN5 emthbGxlciA8c3l6a2FsbGVyQGdvb2dsZWdyb3Vwcy5jb20+OyBhbmRyZXlrbnZsQGdtYWlsLmNv bTsga2FzYW4tZGV2QGdvb2dsZWdyb3Vwcy5jb207IExLTUwgPGxpbnV4LWtlcm5lbEB2Z2VyLmtl cm5lbC5vcmc+OyBBbGV4YW5kZXIgTG9jaG1hbm4gPGluZm9AYWxleGFuZGVyLWxvY2htYW5uLmRl PjsgTGlrYWkgRGluZyAoUVVJQykgPHF1aWNfbGlrYWlkQHF1aWNpbmMuY29tPjsgSGFuZ2JpbiBM aXUgPGxpdWhhbmdiaW5AZ21haWwuY29tPg0KU3ViamVjdDogUmU6IFtQQVRDSF0ga2NvdjogYWRk IEtDT1ZfUENfUkFOR0UgdG8gbGltaXQgcGMgcmFuZ2UNCg0KV0FSTklORzogVGhpcyBlbWFpbCBv cmlnaW5hdGVkIGZyb20gb3V0c2lkZSBvZiBRdWFsY29tbS4gUGxlYXNlIGJlIHdhcnkgb2YgYW55 IGxpbmtzIG9yIGF0dGFjaG1lbnRzLCBhbmQgZG8gbm90IGVuYWJsZSBtYWNyb3MuDQoNCkhpIERt aXRyeSwNCg0KT24gRnJpLCBOb3YgMTksIDIwMjEgYXQgOTowNyBQTSBEbWl0cnkgVnl1a292IDxk dnl1a292QGdvb2dsZS5jb20+IHdyb3RlOg0KPg0KPiBPbiBGcmksIDE5IE5vdiAyMDIxIGF0IDEz OjU1LCBEbWl0cnkgVnl1a292IDxkdnl1a292QGdvb2dsZS5jb20+IHdyb3RlOg0KPiA+DQo+ID4g K0thaXBlbmcsIEhhbmdiaW4gd2hvIGNvbnRyaWJ1dGVkIHRoZSBjb3ZlcmFnZSBmaWx0ZXIgdG8g c3l6a2FsbGVyLg0KPiA+IFRoaXMgaXMgYSBkaXNjdXNzaW9uIGFib3V0IGFkZGluZyBhIHNpbWls YXIgZmlsdGVyIHRvIHRoZSBrZXJuZWwuIA0KPiA+IFlvdSBjYW4gc2VlIHdob2xlIGRpc2N1c3Np b24gaGVyZToNCj4gPiBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2cva2FzYW4tZGV2L2MvVFFt WVVkVUMwOFkNCj4NCj4gSm9leSwgd2hhdCBkbyB5b3UgdGhpbmsgaW4gZ2VuZXJhbCBhYm91dCBw YXNzaW5nIGEgZmlsdGVyIGJpdG1hcCB0byB0aGUga2VybmVsPw0KPg0KPiBTaW5jZSB0aGUgYml0 bWFwIGlzIGxhcmdlLCBpdCBjYW4gbWFrZSBzZW5zZSB0byByZXVzZSBpdCBhY3Jvc3MgDQo+IGRp ZmZlcmVudCBLQ09WIGluc3RhbmNlcy4NCj4gSSBhbSB0aGlua2luZyBhYm91dCBzb21ldGhpbmcg YWxvbmcgdGhlIGZvbGxvd2luZyBsaW5lczoNCj4NCj4ga2Nvdl9mZCA9IG9wZW4oIi9kZWJ1Z2Zz L2tjb3YiKTsNCj4gZmlsdGVyX2ZkID0gaW9jdGwoa2Nvdl9mZCwgS0NPVl9DUkVBVEVfRklMVEVS LCAmey4uLiBzb21lIGFyZ3MgDQo+IHNwZWNpZnlpbmcgc3RhcnQvZW5kIC4uLn0pOyBmaWx0ZXIg PSBtbWFwKC4uLiwgZmlsdGVyX2ZkKTsgLi4uIHdyaXRlIA0KPiB0byB0aGUgZmlsdGVyIC4uLg0K Pg0KPiAuLi4NCj4ga2Nvdl9mZDIgPSBvcGVuKCIvZGVidWdmcy9rY292Iik7DQo+IGlvY3RsKGtj b3ZfZmQyLCBLQ09WX0FUVEFDSF9GSUxURVIsIGZpbHRlcl9mZCk7IGlvY3RsKGtjb3ZfZmQyLCAN Cj4gS0NPVl9FTkFCTEUpOw0KPg0KPg0KPiBUaGlzIHdvdWxkIGFsbG93IHVzIHRvIGNyZWF0ZSAy IGZpbHRlcnM6DQo+IDEuIE9uZSB0aGUgaW50ZXJlc3Rpbmcgc3Vic3lzdGVtcw0KPiAyLiBTZWNv bmQgb25seSBmb3IgeWV0IHVuY292ZXJlZCBQQ3MgaW4gdGhlIGludGVyZXN0aW5nIHN1YnN5c3Rl bXMgDQo+ICh1cGRhdGVkIGFzIHdlIGRpc2NvdmVyIG1vcmUgY292ZXJhZ2UpDQo+DQo+IER1cmlu ZyBmdXp6aW5nIHdlIGF0dGFjaCB0aGUgc2Vjb25kIGZpbHRlciB0byBLQ09WLg0KPiBCdXQgd2hl biB3ZSB3YW50IHRvIG9idGFpbiBmdWxsIHByb2dyYW0gY292ZXJhZ2UsIHdlIGF0dGFjaCB0aGUg Zmlyc3Qgb25lLg0KPg0KPiBUaGUgZmlsdGVycyAoYml0bWFwcykgYXJlIHJldXNlZCBhY3Jvc3Mg YWxsIHRocmVhZHMgaW4gYWxsIGV4ZWN1dG9yIA0KPiBwcm9jZXNzZXMgKHNvIHRoYXQgd2UgaGF2 ZSBvbmx5IDIgZmlsdGVycyBnbG9iYWxseSBwZXIgVk0pLg0KPg0KDQpJIHRoaW5rIGltcGxlbWVu dGluZyBzdWNoIGEgZmlsdGVyIGluIGtlcm5lbCB3b3VsZCBiZSBoYXJtZnVsIHRvIHN5emthbGxl ciBmdXp6aW5nOg0KMS4gQm90aCB0d28gYml0bWFwcyB3b3VsZCBpbXBlZGUgc3l6a2FsbGVyIGZy b20gZ2V0dGluZyBiYWNrd2FyZCBhbmQgZm9yd2FyZCBlZGdlIGJldHdlZW4gaW50ZXJlc3Rpbmcg YW5kIHVuaW50ZXJlc3RpbmcgY29kZS4NCkN1cnJlbnRseSwgc3l6a2FsbGVyIHVzZXMgZWRnZSBi dXQgbm90IGNvdmVyYWdlIHRvIGRlY2lkZSBpZiB0aGUgcHJvZyBzaG91bGQgYmUgY29sbGVjdGVk IHRvIHRoZSBjb3JwdXMuIEFuZCB0aGUgc2Vjb25kIGJpdG1hcCBhY3R1YWxseSBkZXN0cm95cyB0 aGUgQ0ZHIGluIHRoZSBpbnRlcmVzdGluZyBzdWJzeXN0ZW0uDQpJdCdzIGltcG9zc2libGUgdGhh dCBzeXprYWxsZXIgcmVzdG9yZXMgc3VjaCBpbmZvcm1hdGlvbiBieSBhbmFseXppbmcgdGhlIGZp bHRlcmVkIGNvdmVyYWdlLiBXaGlsZSBzeXprYWxsZXIgY292ZXJhZ2UgZmlsdGVyIGRvZXNuJ3Qg aGF2ZSB0aGlzIHByb2JsZW0uDQoyLiBUaGUgRmlyc3QgYml0bWFwIHdvdWxkIGltcGVkZSBzeXpr YWxsZXIgZnJvbSBnZXR0aW5nIGZ1bGwgY292ZXJhZ2Ugb2YgdGhlIHdob2xlIGtlcm5lbC4gU28g dGhhdCBpdCB3b3VsZCBiZSBoYXJkIHRvIGFuYWx5emUgaG93IHRoZSBrZXJuZWwgcGF0aCBnZXRz IGludG8gdGhlIGludGVyZXN0aW5nIHN1YnN5c3RlbS4NCkl0J3MgT0sgaWYgdGhlIHN5c2NhbGwg ZGVzY3JpcHRpb24gaXMgY29tcGxldGVkLiBCdXQsIHdlIGFsd2F5cyBuZWVkIHRvIGRvIHN1Y2gg YW5hbHlzaXMgaWYgd2UgdHJ5IHRvIGltcHJvdmUgc3lzY2FsbCBkZXNjcmlwdGlvbnMuDQozLiBD b3ZlcmFnZSBvZiBwcm9nIHdvdWxkIGJlIGltY29tcGxldGVkLg0KDQpJdCBzZWVtcyB0aGUgb25s eSByZWFzb24gdG8gaW50cm9kdWNlIGluLWtlcm5lbCBjb3ZlcmFnZSBmaWx0ZXIgaXMgdG8gZGVm ZW5zZSBLQ09WIGFyZWEgb3ZlcmZsb3cuIERvIG5vdGhpbmcgaW4gaW1wcm92aW5nIHRoZSBmdXp6 aW5nIGxvb3AuDQpJdCBpcyByZWFzb25hYmxlIHRoYXQgYSBmdXp6ZXIgc2hvdWxkIGNvbGxlY3Qg ZnVsbCBpbmZvcm1hdGlvbiBhcyBmZWVkYmFjaywgdGhlbiBhbmFseXplIGFuZCBkZWNpZGUgaG93 IHRvIHVzZSB0aGF0IGluZm9ybWF0aW9uIGFuZCB3aGljaCB0byBkcm9wLg0KSW4gdGhlIG90aGVy IGhhbmQsIGtlcm5lbCBzaG91bGQgdHJ5IGl0cyBiZXN0IHRvIHNlbmQgbW9yZSBpbmZvcm1hdGlv biB0byBmdXp6ZXIuIE9ubHkgaWYgdGhlIG1lbW9yeSBpcyBub3QgZW5vdWdoIHRvIHN0b3JlIHN1 Y2ggaW5mb3JtYXRpb24uDQpEb2luZyBzdWNoIGluLWtlcm5lbCBmaWx0ZXJpbmcgd291bGQgYmUg cmVhc29uYWJsZS4NCg0KQW4gYWx0ZXJuYXRpdmUgY2hvaWNlIGlzIGRvaW5nIGVkZ2UgYW5hbHl6 aW5nIGluIGtlcm5lbCBhbHNvLCBidXQgS0NPViB3b3VsZCBiZSBtb3JlIGFuZCBtb3JlIHJlc3Ry aWN0ZWQgYW5kIGxpbWl0ZWQuDQoNClNvLCBJIHRoaW5rIHRoZSBwY19yYW5nZSBpcyBlbm91Z2gg Zm9yIGRlZmVuc2UgS0NPViBhcmVhIG92ZXJmbG93LiBBbmQga2VlcCBpdCBmcm9tIHRoZSBzeXpr YWxsZXIgZnV6emluZyBsb29wLiBCdXQgbm90IGltcGxlbWVudCBzdWNoIGJpdG1hcCBpbnRvIGtl cm5lbC4NCkNvdmVyYWdlIGZpbHRlciBpbiBzeXprYWxsZXIgd291bGQgYmUgbW9yZSBmbGV4aWJs ZS4gQSB1c2VyIGNvdWxkIGVmZmVjdGl2ZWx5IGZ1enogdGhlaXIgb2JqZWN0aXZlIHN1YnN5c3Rl bXMgYW5kIGVhc2llciB0byBjdXN0b21pemUgZnV6emluZyBsb29wLg0KDQpCVFcsIG91ciBjb3Zl cmFnZSBmaWx0ZXIgaXMgZm9yIExpbnV4L2FtZDY0IG9ubHkuIFNlZW1zIHRoZSBhdXRob3IgbmVl ZHMgYSBjb3ZlcmFnZSBmaWx0ZXIgb24gYXJtLg0KDQoNCj4gS0NPVl9DUkVBVEVfRklMVEVSIGNv dWxkIGFsc28gYWNjZXB0IGhvdyBtYW55IGJ5dGVzIGVhY2ggYml0IA0KPiByZXByZXNlbnRzICh0 aGF0IHNjYWxpbmcgZmFjdG9yLCBhcyBoYXJkY29kaW5nIDQsIDgsIDE2IG1heSBiZSBiYWQgZm9y IA0KPiBhIHN0YWJsZSBrZXJuZWwgaW50ZXJmYWNlKS4NCj4NCj4gQnV0IEkgYW0gc3RpbGwgbm90 IHN1cmUgaG93IHRvIHN1cHBvcnQgYm90aCB0aGUgbWFpbiBrZXJuZWwgYW5kIA0KPiBtb2R1bGVz LiBXZSBjb3VsZCBhbGxvdyBzZXR0aW5nIHVwIG11bHRpcGxlIGZpbHRlcnMgZm9yIGRpZmZlcmVu dCBQQyANCj4gcmFuZ2VzLiBPciBtYXkgYmUganVzdCAyIChvbmUgZm9yIGtlcm5lbCBhbmQgb25l IGZvciBtb2R1bGVzIHJhbmdlKS4NCj4gT3IgbWF5YmUgMSBiaXRtYXAgY2FuIGNvdmVyIGJvdGgg a2VybmVsIGFuZCBtb2R1bGVzPw0KPg0KPiBUaG91Z2h0cz8NCj4NCj4NCj4gPiBPbiBGcmksIDE5 IE5vdiAyMDIxIGF0IDEyOjIxLCBKaWFuR2VuIEppYW8gKFFVSUMpIA0KPiA+IDxxdWljX2ppYW5n ZW5qQHF1aWNpbmMuY29tPiB3cm90ZToNCj4gPiA+DQo+ID4gPiBZZXMsIG9uIHg4Nl82NCwgbW9k dWxlIGFkZHJlc3Mgc3BhY2UgaXMgYWZ0ZXIga2VybmVsLiBCdXQgbGlrZSBiZWxvdyBvbiBhcm02 NCwgaXQncyBkaWZmZXJlbnQuDQo+ID4gPg0KPiA+ID4gIyBncmVwIHN0ZXh0IC9wcm9jL2thbGxz eW1zDQo+ID4gPiBmZmZmZmZjMDEwMDEwMDAwIFQgX3N0ZXh0DQo+ID4gPiAjIGNhdCAvcHJvYy9t b2R1bGVzIHxzb3J0IC1rIDYgfCB0YWlsIC0yDQo+ID4gPiBTb21lX21vZHVsZV8xIDU1Mjk2MCAw IC0gTGl2ZSAweGZmZmZmZmMwMGNhMDUwMDAgKE8pDQo+ID4gPiBTb21lX21vZHVsZV8xIDM2MDQ0 OCAwIC0gTGl2ZSAweGZmZmZmZmMwMGNiOGYwMDAgKE8pICMgY2F0IA0KPiA+ID4gL3Byb2MvbW9k dWxlcyB8c29ydCAtayA2IHwgaGVhZCAtMg0KPiA+ID4gU29tZV9tb2R1bGVfMyAxNjM4NCAxIC0g TGl2ZSAweGZmZmZmZmMwMDk0MzAwMDANCj4gPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiA+ID4gRnJvbTogRG1pdHJ5IFZ5dWtvdiA8ZHZ5dWtvdkBnb29nbGUuY29tPg0K PiA+ID4gU2VudDogRnJpZGF5LCBOb3ZlbWJlciAxOSwgMjAyMSA2OjM4IFBNDQo+ID4gPiBUbzog SmlhbkdlbiBKaWFvIChRVUlDKSA8cXVpY19qaWFuZ2VuakBxdWljaW5jLmNvbT4NCj4gPiA+IENj OiBhbmRyZXlrbnZsQGdtYWlsLmNvbTsga2FzYW4tZGV2QGdvb2dsZWdyb3Vwcy5jb207IExLTUwg DQo+ID4gPiA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz47IEFsZXhhbmRlciBMb2NobWFu biANCj4gPiA+IDxpbmZvQGFsZXhhbmRlci1sb2NobWFubi5kZT47IExpa2FpIERpbmcgKFFVSUMp IA0KPiA+ID4gPHF1aWNfbGlrYWlkQHF1aWNpbmMuY29tPg0KPiA+ID4gU3ViamVjdDogUmU6IFtQ QVRDSF0ga2NvdjogYWRkIEtDT1ZfUENfUkFOR0UgdG8gbGltaXQgcGMgcmFuZ2UNCj4gPiA+DQo+ ID4gPiBXQVJOSU5HOiBUaGlzIGVtYWlsIG9yaWdpbmF0ZWQgZnJvbSBvdXRzaWRlIG9mIFF1YWxj b21tLiBQbGVhc2UgYmUgd2FyeSBvZiBhbnkgbGlua3Mgb3IgYXR0YWNobWVudHMsIGFuZCBkbyBu b3QgZW5hYmxlIG1hY3Jvcy4NCj4gPiA+DQo+ID4gPiBPbiBGcmksIDE5IE5vdiAyMDIxIGF0IDA0 OjE3LCBKaWFuR2VuIEppYW8gKFFVSUMpIDxxdWljX2ppYW5nZW5qQHF1aWNpbmMuY29tPiB3cm90 ZToNCj4gPiA+ID4NCj4gPiA+ID4gSGkgRG1pdHJ5LA0KPiA+ID4gPiBJJ20gdXNpbmcgdGhlIHN0 YXJ0LCBlbmQgcGMgZnJvbSBjb3ZlciBmaWx0ZXIsIHdoaWNoIGN1cnJlbnRseSBpcyB0aGUgZmFz dCB3YXkgY29tcGFyZWQgdG8gdGhlIGJpZyBiaXRtYXAgcGFzc2luZyBmcm9tIHN5emthbGxlciBz b2x1dGlvbiwgYXMgSSBvbmx5IHNldCB0aGUgY292ZXIgZmlsdGVyIHRvIGRpcnMvZmlsZXMgSSBj YXJlIGFib3V0Lg0KPiA+ID4NCj4gPiA+IEkgc2VlLg0KPiA+ID4gQnV0IGlmIHdlIGFyZSB1bmx1 Y2t5IGFuZCBvdXIgZnVuY3Rpb25zIG9mIGludGVyZXN0IGFyZSBhdCB0aGUgdmVyeSBsb3cgYW5k IGhpZ2ggYWRkcmVzc2VzLCBzdGFydC9lbmQgd2lsbCBjb3ZlciBhbG1vc3QgYWxsIGtlcm5lbCBj b2RlLi4uDQo+ID4gPg0KPiA+ID4gPiBJIGNoZWNrZWQNCj4gPiA+ID4gaHR0cHM6Ly9ncm91cHMu Z29vZ2xlLmNvbS9nL2thc2FuLWRldi9jL29WejNaU1dhSzFRL20vOUFTenRkekNBQQ0KPiA+ID4g PiBBSiwgVGhlIGJpdG1hcCBzZWVtcyBub3QgdGhlIHNhbWUgYXMgc3l6a2FsbGVyIG9uZSwgd2hp Y2ggb25lIA0KPiA+ID4gPiB3aWxsIGJlIHVzZWQgZmluYWxseT8NCj4gPiA+DQo+ID4gPiBJIGRv bid0IGtub3cgeWV0LiBXZSBuZWVkIHRvIGRlY2lkZS4NCj4gPiA+IEluIHN5emthbGxlciB3ZSBh cmUgbW9yZSBmbGV4aWJsZSBhbmQgY2FuIGNoYW5nZSBjb2RlIGZhc3Rlciwgd2hpbGUga2VybmVs IGludGVyZmFjZXMgYXJlIHN0YWJsZSBhbmQgbmVlZCB0byBiZSBrZXB0IGZvcmV2ZXIuIFNvIEkg dGhpbmsgd2UgbmVlZCB0byBjb25jZW50cmF0ZSBtb3JlIG9uIHRoZSBnb29kIGtlcm5lbCBpbnRl cmZhY2UgYW5kIHRoZW4gc3VwcG9ydCBpdCBpbiBzeXprYWxsZXIuDQo+ID4gPg0KPiA+ID4gPiBg YGAgQWxleGFuZGVyJ3Mgb25lDQo+ID4gPiA+ICsgcG9zID0gKGlwIC0gY2Fub25pY2FsaXplX2lw KCh1bnNpZ25lZCBsb25nKSZfc3RleHQpKSAvIDQ7IGlkeCANCj4gPiA+ID4gKyA9IHBvcyAlIEJJ VFNfUEVSX0xPTkc7IHBvcyAvPSBCSVRTX1BFUl9MT05HOyBpZiAobGlrZWx5KHBvcyA8DQo+ID4g PiA+ICsgdC0+a2Nvdl9zaXplKSkgV1JJVEVfT05DRShhcmVhW3Bvc10sIFJFQURfT05DRShhcmVh W3Bvc10pIHwgMUwgDQo+ID4gPiA+ICsgdC0+PDwNCj4gPiA+ID4gKyBpZHgpOw0KPiA+ID4gPiBg YGANCj4gPiA+ID4gUGMgb2Zmc2V0IGlzIGRpdmlkZWQgYnkgNCBhbmQgc3RhcnQgaXMgX3N0ZXh0 LiBCdXQgZm9yIHNvbWUgYXJjaCwgcGMgaXMgbGVzcyB0aGFuIF9zdGV4dC4NCj4gPiA+DQo+ID4g PiBZb3UgbWVhbiB0aGF0IG1vZHVsZXMgY2FuIGhhdmUgUEMgPCBfc3RleHQ/DQo+ID4gPg0KPiA+ ID4gPiBgYGAgaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9zeXprYWxsZXIvYmxvYi9tYXN0ZXIv c3l6LW1hbmFnZXIvY292ZmlsdGVyLmdvI0wxMzktTDE1NA0KPiA+ID4gPiAgICAgICAgIGRhdGEg Oj0gbWFrZShbXWJ5dGUsIDgrKChzaXplPj40KS84KzEpKQ0KPiA+ID4gPiAgICAgICAgIG9yZGVy IDo9IGJpbmFyeS5CeXRlT3JkZXIoYmluYXJ5LkJpZ0VuZGlhbikNCj4gPiA+ID4gICAgICAgICBp ZiB0YXJnZXQuTGl0dGxlRW5kaWFuIHsNCj4gPiA+ID4gICAgICAgICAgICAgICAgIG9yZGVyID0g YmluYXJ5LkxpdHRsZUVuZGlhbg0KPiA+ID4gPiAgICAgICAgIH0NCj4gPiA+ID4gICAgICAgICBv cmRlci5QdXRVaW50MzIoZGF0YSwgc3RhcnQpDQo+ID4gPiA+ICAgICAgICAgb3JkZXIuUHV0VWlu dDMyKGRhdGFbNDpdLCBzaXplKQ0KPiA+ID4gPg0KPiA+ID4gPiAgICAgICAgIGJpdG1hcCA6PSBk YXRhWzg6XQ0KPiA+ID4gPiAgICAgICAgIGZvciBwYyA6PSByYW5nZSBwY3Mgew0KPiA+ID4gPiAg ICAgICAgICAgICAgICAgLy8gVGhlIGxvd2VzdCA0LWJpdCBpcyBkcm9wcGVkLg0KPiA+ID4gPiAg ICAgICAgICAgICAgICAgcGMgPSB1aW50MzIoYmFja2VuZC5OZXh0SW5zdHJ1Y3Rpb25QQyh0YXJn ZXQsIHVpbnQ2NChwYykpKQ0KPiA+ID4gPiAgICAgICAgICAgICAgICAgcGMgPSAocGMgLSBzdGFy dCkgPj4gNA0KPiA+ID4gPiAgICAgICAgICAgICAgICAgYml0bWFwW3BjLzhdIHw9ICgxIDw8IChw YyAlIDgpKQ0KPiA+ID4gPiAgICAgICAgIH0NCj4gPiA+ID4gICAgICAgICByZXR1cm4gZGF0YQ0K PiA+ID4gPiBgYGANCj4gPiA+ID4gUGMgb2Zmc2V0IGlzIGRpdmlkZWQgYnkgMTYgYW5kIHN0YXJ0 IGlzIGNvdmVyIGZpbHRlciBzdGFydCBwYy4NCj4gPiA+ID4NCj4gPiA+ID4gSSB0aGluayBkaXZp ZGVkIGJ5IDggaXMgbW9yZSByZWFzb25hYmxlPyBCZWNhdXNlIHRoZXJlIGlzIGF0IGxlYXN0IG9u ZSBpbnN0cnVjdGlvbiBiZWZvcmUgZWFjaCBfX3Nhbml0aXplcl9jb3ZfdHJhY2VfcGMgY2FsbC4N Cj4gPiA+ID4gMDAwMDAwMDAwMDAwMDE2MCBSX0FBUkNINjRfQ0FMTDI2ICBfX3Nhbml0aXplcl9j b3ZfdHJhY2VfcGMNCj4gPiA+ID4gMDAwMDAwMDAwMDAwMDE2OCBSX0FBUkNINjRfQ0FMTDI2ICBf X3Nhbml0aXplcl9jb3ZfdHJhY2VfcGMNCj4gPiA+ID4NCj4gPiA+ID4gSSB0aGluayB3ZSBzdGls bCBuZWVkIG15IHBhdGNoIGJlY2F1c2Ugd2Ugc3RpbGwgbmVlZCBhIHdheSB0byBrZWVwIHRoZSB0 cmFjZV9wYyBjYWxsIGFuZCBwb3N0LWZpbHRlciBpbiBzeXprYWxsZXIgZG9lc24ndCBzb2x2ZSB0 cmFjZV9wYyBkcm9wcGluZywgcmlnaHQ/DQo+ID4gPg0KPiA+ID4gWWVzLCB0aGUgaW4ta2VybmVs IGZpbHRlciBzb2x2ZXMgdGhlIHByb2JsZW0gb2YgdHJhY2UgY2FwYWNpdHkvb3ZlcmZsb3dzLg0K PiA+ID4NCj4gPiA+DQo+ID4gPiA+IEJ1dCBmb3Igc3VyZSBJIGNhbiB1c2UgdGhlIGJpdG1hcCBm cm9tIHN5emthbGxlci4NCj4gPiA+ID4NCj4gPiA+ID4gVEhYDQo+ID4gPiA+IEpvZXkNCj4gPiA+ ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gRnJvbTogRG1pdHJ5IFZ5dWtv diA8ZHZ5dWtvdkBnb29nbGUuY29tPg0KPiA+ID4gPiBTZW50OiBUaHVyc2RheSwgTm92ZW1iZXIg MTgsIDIwMjEgMTA6MDAgUE0NCj4gPiA+ID4gVG86IEppYW5HZW4gSmlhbyAoUVVJQykgPHF1aWNf amlhbmdlbmpAcXVpY2luYy5jb20+DQo+ID4gPiA+IENjOiBhbmRyZXlrbnZsQGdtYWlsLmNvbTsg a2FzYW4tZGV2QGdvb2dsZWdyb3Vwcy5jb207IExLTUwgDQo+ID4gPiA+IDxsaW51eC1rZXJuZWxA dmdlci5rZXJuZWwub3JnPjsgQWxleGFuZGVyIExvY2htYW5uIA0KPiA+ID4gPiA8aW5mb0BhbGV4 YW5kZXItbG9jaG1hbm4uZGU+DQo+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0hdIGtjb3Y6IGFk ZCBLQ09WX1BDX1JBTkdFIHRvIGxpbWl0IHBjIHJhbmdlDQo+ID4gPiA+DQo+ID4gPiA+IFdBUk5J Tkc6IFRoaXMgZW1haWwgb3JpZ2luYXRlZCBmcm9tIG91dHNpZGUgb2YgUXVhbGNvbW0uIFBsZWFz ZSBiZSB3YXJ5IG9mIGFueSBsaW5rcyBvciBhdHRhY2htZW50cywgYW5kIGRvIG5vdCBlbmFibGUg bWFjcm9zLg0KPiA+ID4gPg0KPiA+ID4gPiAsT24gV2VkLCAxNyBOb3YgMjAyMSBhdCAwNzoyNCwg Sm9leSBKaWFvIDxxdWljX2ppYW5nZW5qQHF1aWNpbmMuY29tPiB3cm90ZToNCj4gPiA+ID4gPg0K PiA+ID4gPiA+IFNvbWV0aW1lcyB3ZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIHBjcyB3aXRoaW4g c29tZSByYW5nZSwgDQo+ID4gPiA+ID4gd2hpbGUgdGhlcmUgYXJlIGNhc2VzIHRoZXNlIHBjcyBh cmUgZHJvcHBlZCBieSBrZXJuZWwgZHVlIHRvIA0KPiA+ID4gPiA+IGBwb3MgPj0NCj4gPiA+ID4g PiB0LT5rY292X3NpemVgLCBhbmQgYnkgaW5jcmVhc2luZyB0aGUgbWFwIGFyZWEgc2l6ZSBkb2Vz bid0IGhlbHAuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBUbyBhdm9pZCBkaXNhYmxpbmcgS0NPViBm b3IgdGhlc2Ugbm90IGludGVyZXNldGVkIHBjcyBkdXJpbmcgDQo+ID4gPiA+ID4gYnVpbGQgdGlt ZSwgYWRkaW5nIHRoaXMgbmV3IEtDT1ZfUENfUkFOR0UgY21kLg0KPiA+ID4gPg0KPiA+ID4gPiBI aSBKb2V5LA0KPiA+ID4gPg0KPiA+ID4gPiBIb3cgZG8geW91IHVzZSB0aGlzPyBJIGFtIGNvbmNl cm5lZCB0aGF0IGEgc2luZ2xlIHJhbmdlIG9mIFBDcyBpcyB0b28gcmVzdHJpY3RpdmUuIEkgY2Fu IG9ubHkgc2VlIGhvdyB0aGlzIGNhbiB3b3JrIGZvciBzaW5nbGUgbW9kdWxlIChjb250aW51b3Vz IGluIG1lbW9yeSkgb3IgYSBzaW5nbGUgZnVuY3Rpb24uIEJ1dCBmb3IgYW55dGhpbmcgZWxzZSAo c29tZXRoaW5nIGluIHRoZSBtYWluIGtlcm5lbCwgb3Igc2V2ZXJhbCBtb2R1bGVzKSwgaXQgd29u J3Qgd29yayBhcyBQQ3MgYXJlIG5vdCBjb250aW51b3VzLg0KPiA+ID4gPg0KPiA+ID4gPiBNYXli ZSB3ZSBzaG91bGQgdXNlIGEgY29tcHJlc3NlZCBiaXRtYXAgb2YgaW50ZXJlc3RpbmcgUENzPyBJ dCBhbGxvd3MgdG8gc3VwcG9ydCBhbGwgY2FzZXMgYW5kIHdlIGFscmVhZHkgaGF2ZSBpdCBpbiBz eXotZXhlY3V0b3IsIHRoZW4gc3l6LWV4ZWN1dG9yIGNvdWxkIHNpbXBseSBwYXNzIHRoZSBiaXRt YXAgdG8gdGhlIGtlcm5lbCByYXRoZXIgdGhhbiBwb3N0LWZpbHRlci4NCj4gPiA+ID4gSXQncyBh bHNvIG92ZXJsYXBzIHdpdGggdGhlIEtDT1ZfTU9ERV9VTklRVUUgbW9kZSB0aGF0ICtBbGV4YW5k ZXIgcHJvcG9zZWQgaGVyZToNCj4gPiA+ID4gaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9nL2th c2FuLWRldi9jL29WejNaU1dhSzFRL20vOUFTenRkekNBQQ0KPiA+ID4gPiBBSiBJdCB3b3VsZCBi ZSByZWFzb25hYmxlIGlmIGtlcm5lbCB1c2VzIHRoZSBzYW1lIGJpdG1hcCBmb3JtYXQgDQo+ID4g PiA+IGZvciB0aGVzZQ0KPiA+ID4gPiAyIGZlYXR1cmVzLg0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ ID4gPg0KPiA+ID4gPiA+IEFuIGV4YW1wbGUgdXNhZ2UgaXMgdG8gdXNlIHRvZ2V0aGVyIHN5emth bGxlcidzIGNvdiBmaWx0ZXIuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBDaGFuZ2UtSWQ6IEk5NTRm NmVmZTFiY2E2MDRmNWNlMzFmOGYyYjZmNjg5ZTM0YTI5ODFkDQo+ID4gPiA+ID4gU2lnbmVkLW9m Zi1ieTogSm9leSBKaWFvIDxxdWljX2ppYW5nZW5qQHF1aWNpbmMuY29tPg0KPiA+ID4gPiA+IC0t LQ0KPiA+ID4gPiA+ICBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdCB8IDEwICsrKysr KysrKysNCj4gPiA+ID4gPiAgaW5jbHVkZS91YXBpL2xpbnV4L2tjb3YuaCAgICAgICAgfCAgNyAr KysrKysrDQo+ID4gPiA+ID4gIGtlcm5lbC9rY292LmMgICAgICAgICAgICAgICAgICAgIHwgMTgg KysrKysrKysrKysrKysrKysrDQo+ID4gPiA+ID4gIDMgZmlsZXMgY2hhbmdlZCwgMzUgaW5zZXJ0 aW9ucygrKQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24v ZGV2LXRvb2xzL2tjb3YucnN0DQo+ID4gPiA+ID4gYi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9r Y292LnJzdA0KPiA+ID4gPiA+IGluZGV4IGQ4M2M5YWIuLmZiY2Q0MjIgMTAwNjQ0DQo+ID4gPiA+ ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva2Nvdi5yc3QNCj4gPiA+ID4gPiArKysg Yi9Eb2N1bWVudGF0aW9uL2Rldi10b29scy9rY292LnJzdA0KPiA+ID4gPiA+IEBAIC01Miw5ICs1 MiwxNSBAQCBwcm9ncmFtIHVzaW5nIGtjb3Y6DQo+ID4gPiA+ID4gICAgICAjaW5jbHVkZSA8ZmNu dGwuaD4NCj4gPiA+ID4gPiAgICAgICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gKyAgICBzdHJ1Y3Qga2Nvdl9wY19yYW5nZSB7DQo+ID4gPiA+ID4gKyAgICAg IHVpbnQzMiBzdGFydDsNCj4gPiA+ID4gPiArICAgICAgdWludDMyIGVuZDsNCj4gPiA+ID4gPiAr ICAgIH07DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICAgICAgI2RlZmluZSBLQ09WX0lOSVRfVFJB Q0UgICAgICAgICAgICAgICAgICAgIF9JT1IoJ2MnLCAxLCB1bnNpZ25lZCBsb25nKQ0KPiA+ID4g PiA+ICAgICAgI2RlZmluZSBLQ09WX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgIF9JTygn YycsIDEwMCkNCj4gPiA+ID4gPiAgICAgICNkZWZpbmUgS0NPVl9ESVNBQkxFICAgICAgICAgICAg ICAgICAgICAgICBfSU8oJ2MnLCAxMDEpDQo+ID4gPiA+ID4gKyAgICAjZGVmaW5lIEtDT1ZfVFJB Q0VfUkFOR0UgICAgICAgICAgICAgICAgICAgX0lPVygnYycsIDEwMywgc3RydWN0IGtjb3ZfcGNf cmFuZ2UpDQo+ID4gPiA+ID4gICAgICAjZGVmaW5lIENPVkVSX1NJWkUgICAgICAgICAgICAgICAg ICg2NDw8MTApDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICAgICNkZWZpbmUgS0NPVl9UUkFDRV9Q QyAgMA0KPiA+ID4gPiA+IEBAIC02NCw2ICs3MCw4IEBAIHByb2dyYW0gdXNpbmcga2NvdjoNCj4g PiA+ID4gPiAgICAgIHsNCj4gPiA+ID4gPiAgICAgICAgIGludCBmZDsNCj4gPiA+ID4gPiAgICAg ICAgIHVuc2lnbmVkIGxvbmcgKmNvdmVyLCBuLCBpOw0KPiA+ID4gPiA+ICsgICAgICAgIC8qIENo YW5nZSBzdGFydCBhbmQvb3IgZW5kIHRvIHlvdXIgaW50ZXJlc3RlZCBwYyByYW5nZS4gKi8NCj4g PiA+ID4gPiArICAgICAgICBzdHJ1Y3Qga2Nvdl9wY19yYW5nZSBwY19yYW5nZSA9IHsuc3RhcnQg PSAwLCAuZW5kID0gDQo+ID4gPiA+ID4gKyAodWludDMyKSh+KCh1aW50MzIpMCkpfTsNCj4gPiA+ ID4gPg0KPiA+ID4gPiA+ICAgICAgICAgLyogQSBzaW5nbGUgZmQgZGVzY3JpcHRvciBhbGxvd3Mg Y292ZXJhZ2UgY29sbGVjdGlvbiBvbiBhIHNpbmdsZQ0KPiA+ID4gPiA+ICAgICAgICAgICogdGhy ZWFkLg0KPiA+ID4gPiA+IEBAIC03OSw2ICs4Nyw4IEBAIHByb2dyYW0gdXNpbmcga2NvdjoNCj4g PiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwg UFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOw0KPiA+ID4gPiA+ICAgICAgICAgaWYgKCh2 b2lkKiljb3ZlciA9PSBNQVBfRkFJTEVEKQ0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICBwZXJy b3IoIm1tYXAiKSwgZXhpdCgxKTsNCj4gPiA+ID4gPiArICAgICAgICBpZiAoaW9jdGwoZmQsIEtD T1ZfUENfUkFOR0UsIHBjX3JhbmdlKSkNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgZHByaW50 ZigyLCAiaWdub3JlIEtDT1ZfUENfUkFOR0UgZXJyb3IuXG4iKTsNCj4gPiA+ID4gPiAgICAgICAg IC8qIEVuYWJsZSBjb3ZlcmFnZSBjb2xsZWN0aW9uIG9uIHRoZSBjdXJyZW50IHRocmVhZC4gKi8N Cj4gPiA+ID4gPiAgICAgICAgIGlmIChpb2N0bChmZCwgS0NPVl9FTkFCTEUsIEtDT1ZfVFJBQ0Vf UEMpKQ0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICBwZXJyb3IoImlvY3RsIiksIGV4aXQoMSk7 IGRpZmYgLS1naXQgDQo+ID4gPiA+ID4gYS9pbmNsdWRlL3VhcGkvbGludXgva2Nvdi5oIGIvaW5j bHVkZS91YXBpL2xpbnV4L2tjb3YuaCBpbmRleCANCj4gPiA+ID4gPiAxZDAzNTBlLi4zNTNmZjBh IDEwMDY0NA0KPiA+ID4gPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rY292LmgNCj4gPiA+ ID4gPiArKysgYi9pbmNsdWRlL3VhcGkvbGludXgva2Nvdi5oDQo+ID4gPiA+ID4gQEAgLTE2LDEy ICsxNiwxOSBAQCBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJnIHsNCj4gPiA+ID4gPiAgICAgICAgIF9f YWxpZ25lZF91NjQgICBoYW5kbGVzWzBdOw0KPiA+ID4gPiA+ICB9Ow0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gKyNkZWZpbmUgUENfUkFOR0VfTUFTSyAoKF9fdTMyKSh+KCh1MzIpIDApKSkgc3RydWN0 IGtjb3ZfcGNfcmFuZ2Ugew0KPiA+ID4gPiA+ICsgICAgICAgX191MzIgICAgICAgICAgIHN0YXJ0 OyAgICAgICAgICAvKiBzdGFydCBwYyAmIDB4RkZGRkZGRkYgKi8NCj4gPiA+ID4gPiArICAgICAg IF9fdTMyICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgLyogZW5kIHBjICYgMHhGRkZGRkZGRiAq Lw0KPiA+ID4gPiA+ICt9Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAgI2RlZmluZSBLQ09WX1JF TU9URV9NQVhfSEFORExFUyAgICAgICAgICAgICAgICAweDEwMA0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gICNkZWZpbmUgS0NPVl9JTklUX1RSQUNFICAgICAgICAgICAgICAgICAgICAgICAgX0lPUign YycsIDEsIHVuc2lnbmVkIGxvbmcpDQo+ID4gPiA+ID4gICNkZWZpbmUgS0NPVl9FTkFCTEUgICAg ICAgICAgICAgICAgICAgIF9JTygnYycsIDEwMCkNCj4gPiA+ID4gPiAgI2RlZmluZSBLQ09WX0RJ U0FCTEUgICAgICAgICAgICAgICAgICAgX0lPKCdjJywgMTAxKQ0KPiA+ID4gPiA+ICAjZGVmaW5l IEtDT1ZfUkVNT1RFX0VOQUJMRSAgICAgICAgICAgICBfSU9XKCdjJywgMTAyLCBzdHJ1Y3Qga2Nv dl9yZW1vdGVfYXJnKQ0KPiA+ID4gPiA+ICsjZGVmaW5lIEtDT1ZfUENfUkFOR0UgICAgICAgICAg ICAgICAgICBfSU9XKCdjJywgMTAzLCBzdHJ1Y3Qga2Nvdl9wY19yYW5nZSkNCj4gPiA+ID4gPg0K PiA+ID4gPiA+ICBlbnVtIHsNCj4gPiA+ID4gPiAgICAgICAgIC8qDQo+ID4gPiA+ID4gZGlmZiAt LWdpdCBhL2tlcm5lbC9rY292LmMgYi9rZXJuZWwva2Nvdi5jIGluZGV4IA0KPiA+ID4gPiA+IDM2 Y2E2NDAuLjU5NTUwNDUwDQo+ID4gPiA+ID4gMTAwNjQ0DQo+ID4gPiA+ID4gLS0tIGEva2VybmVs L2tjb3YuYw0KPiA+ID4gPiA+ICsrKyBiL2tlcm5lbC9rY292LmMNCj4gPiA+ID4gPiBAQCAtMzYs NiArMzYsNyBAQA0KPiA+ID4gPiA+ICAgKiAgLSBpbml0aWFsIHN0YXRlIGFmdGVyIG9wZW4oKQ0K PiA+ID4gPiA+ICAgKiAgLSB0aGVuIHRoZXJlIG11c3QgYmUgYSBzaW5nbGUgaW9jdGwoS0NPVl9J TklUX1RSQUNFKSBjYWxsDQo+ID4gPiA+ID4gICAqICAtIHRoZW4sIG1tYXAoKSBjYWxsIChzZXZl cmFsIGNhbGxzIGFyZSBhbGxvd2VkIGJ1dCBub3QgDQo+ID4gPiA+ID4gdXNlZnVsKQ0KPiA+ID4g PiA+ICsgKiAgLSB0aGVuLCBvcHRpb25hbCB0byBzZXQgdHJhY2UgcGMgcmFuZ2UNCj4gPiA+ID4g PiAgICogIC0gdGhlbiwgaW9jdGwoS0NPVl9FTkFCTEUsIGFyZyksIHdoZXJlIGFyZyBpcw0KPiA+ ID4gPiA+ICAgKiAgICAgS0NPVl9UUkFDRV9QQyAtIHRvIHRyYWNlIG9ubHkgdGhlIFBDcw0KPiA+ ID4gPiA+ICAgKiAgICAgb3INCj4gPiA+ID4gPiBAQCAtNjksNiArNzAsOCBAQCBzdHJ1Y3Qga2Nv diB7DQo+ID4gPiA+ID4gICAgICAgICAgKiBrY292X3JlbW90ZV9zdG9wKCksIHNlZSB0aGUgY29t bWVudCB0aGVyZS4NCj4gPiA+ID4gPiAgICAgICAgICAqLw0KPiA+ID4gPiA+ICAgICAgICAgaW50 ICAgICAgICAgICAgICAgICAgICAgc2VxdWVuY2U7DQo+ID4gPiA+ID4gKyAgICAgICAvKiB1MzIg VHJhY2UgUEMgcmFuZ2UgZnJvbSBzdGFydCB0byBlbmQuICovDQo+ID4gPiA+ID4gKyAgICAgICBz dHJ1Y3Qga2Nvdl9wY19yYW5nZSAgICBwY19yYW5nZTsNCj4gPiA+ID4gPiAgfTsNCj4gPiA+ID4g Pg0KPiA+ID4gPiA+ICBzdHJ1Y3Qga2Nvdl9yZW1vdGVfYXJlYSB7DQo+ID4gPiA+ID4gQEAgLTE5 Miw2ICsxOTUsNyBAQCBzdGF0aWMgbm90cmFjZSB1bnNpZ25lZCBsb25nIA0KPiA+ID4gPiA+IGNh bm9uaWNhbGl6ZV9pcCh1bnNpZ25lZCBsb25nIGlwKSAgdm9pZCBub3RyYWNlDQo+ID4gPiA+ID4g X19zYW5pdGl6ZXJfY292X3RyYWNlX3BjKHZvaWQpICB7DQo+ID4gPiA+ID4gICAgICAgICBzdHJ1 Y3QgdGFza19zdHJ1Y3QgKnQ7DQo+ID4gPiA+ID4gKyAgICAgICBzdHJ1Y3Qga2Nvdl9wY19yYW5n ZSBwY19yYW5nZTsNCj4gPiA+ID4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmFyZWE7DQo+ID4g PiA+ID4gICAgICAgICB1bnNpZ25lZCBsb25nIGlwID0gY2Fub25pY2FsaXplX2lwKF9SRVRfSVBf KTsNCj4gPiA+ID4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9zOw0KPiA+ID4gPiA+IEBAIC0x OTksNiArMjAzLDExIEBAIHZvaWQgbm90cmFjZSBfX3Nhbml0aXplcl9jb3ZfdHJhY2VfcGModm9p ZCkNCj4gPiA+ID4gPiAgICAgICAgIHQgPSBjdXJyZW50Ow0KPiA+ID4gPiA+ICAgICAgICAgaWYg KCFjaGVja19rY292X21vZGUoS0NPVl9NT0RFX1RSQUNFX1BDLCB0KSkNCj4gPiA+ID4gPiAgICAg ICAgICAgICAgICAgcmV0dXJuOw0KPiA+ID4gPiA+ICsgICAgICAgcGNfcmFuZ2UgPSB0LT5rY292 LT5wY19yYW5nZTsNCj4gPiA+ID4gPiArICAgICAgIGlmIChwY19yYW5nZS5zdGFydCA8IHBjX3Jh bmdlLmVuZCAmJg0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAoKGlwICYgUENfUkFOR0VfTUFT SykgPCBwY19yYW5nZS5zdGFydCB8fA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAoaXAgJiBQ Q19SQU5HRV9NQVNLKSA+IHBjX3JhbmdlLmVuZCkpDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAg IHJldHVybjsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAgICAgICAgYXJlYSA9IHQtPmtjb3ZfYXJl YTsNCj4gPiA+ID4gPiAgICAgICAgIC8qIFRoZSBmaXJzdCA2NC1iaXQgd29yZCBpcyB0aGUgbnVt YmVyIG9mIHN1YnNlcXVlbnQgDQo+ID4gPiA+ID4gUENzLiAqLyBAQCAtNTY4LDYgKzU3Nyw3IEBA IHN0YXRpYyBpbnQga2Nvdl9pb2N0bF9sb2NrZWQoc3RydWN0IGtjb3YgKmtjb3YsIHVuc2lnbmVk IGludCBjbWQsDQo+ID4gPiA+ID4gICAgICAgICBpbnQgbW9kZSwgaTsNCj4gPiA+ID4gPiAgICAg ICAgIHN0cnVjdCBrY292X3JlbW90ZV9hcmcgKnJlbW90ZV9hcmc7DQo+ID4gPiA+ID4gICAgICAg ICBzdHJ1Y3Qga2Nvdl9yZW1vdGUgKnJlbW90ZTsNCj4gPiA+ID4gPiArICAgICAgIHN0cnVjdCBr Y292X3BjX3JhbmdlICpwY19yYW5nZTsNCj4gPiA+ID4gPiAgICAgICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICAgICAgIHN3aXRjaCAoY21kKSB7DQo+ID4g PiA+ID4gQEAgLTU4OSw2ICs1OTksMTQgQEAgc3RhdGljIGludCBrY292X2lvY3RsX2xvY2tlZChz dHJ1Y3Qga2NvdiAqa2NvdiwgdW5zaWduZWQgaW50IGNtZCwNCj4gPiA+ID4gPiAgICAgICAgICAg ICAgICAga2Nvdi0+c2l6ZSA9IHNpemU7DQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgIGtjb3Yt Pm1vZGUgPSBLQ09WX01PREVfSU5JVDsNCj4gPiA+ID4gPiAgICAgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gPiA+ID4gKyAgICAgICBjYXNlIEtDT1ZfUENfUkFOR0U6DQo+ID4gPiA+ID4gKyAg ICAgICAgICAgICAgIC8qIExpbWl0IHRyYWNlIHBjIHJhbmdlLiAqLw0KPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICBwY19yYW5nZSA9IChzdHJ1Y3Qga2Nvdl9wY19yYW5nZSAqKWFyZzsNCj4gPiA+ ID4gPiArICAgICAgICAgICAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZrY292LT5wY19yYW5nZSwg cGNfcmFuZ2UsIHNpemVvZihrY292LT5wY19yYW5nZSkpKQ0KPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBp ZiAoa2Nvdi0+cGNfcmFuZ2Uuc3RhcnQgPj0ga2Nvdi0+cGNfcmFuZ2UuZW5kKQ0KPiA+ID4gPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICByZXR1cm4gMDsNCj4gPiA+ID4gPiAgICAgICAgIGNhc2UgS0NPVl9FTkFCTEU6 DQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgIC8qDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAg ICAqIEVuYWJsZSBjb3ZlcmFnZSBmb3IgdGhlIGN1cnJlbnQgdGFzay4NCj4gPiA+ID4gPiAtLQ0K PiA+ID4gPiA+IDIuNy40DQo=