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.gnu.org (lists.gnu.org [209.51.188.17]) (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 2E21CC433F5 for ; Tue, 10 May 2022 02:19:56 +0000 (UTC) Received: from localhost ([::1]:35418 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1noFTf-00081R-73 for qemu-devel@archiver.kernel.org; Mon, 09 May 2022 22:19:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:38990) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1noFS3-0006go-Rh for qemu-devel@nongnu.org; Mon, 09 May 2022 22:18:15 -0400 Received: from mx0a-0064b401.pphosted.com ([205.220.166.238]:2756) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1noFRy-0006Ry-Vs for qemu-devel@nongnu.org; Mon, 09 May 2022 22:18:15 -0400 Received: from pps.filterd (m0250810.ppops.net [127.0.0.1]) by mx0a-0064b401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 24A1Ssva003655; Mon, 9 May 2022 19:17:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=windriver.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=PPS06212021; bh=DSxaNgKJqrHuksgOfMp5EC79wqIvM5Qp8TMnBUwLHIo=; b=Z0qFlRmZ58KV5UlHfQHyz9GmJNZxcVIrgbO91lxXSTGGb4/0Yj2SddnbAe86tnl6ntmX Xegvp/Ayvoizc55Pqq0L3MS4iGWDi2bGLLDxa8UKqjZti76YgrwsiXt/hXASnXTrkWIS 4Dh92PiXJxEjQSIxLITt2OL8fwbw/oOHQbT5NyLexDpsGphiX3YXcqemXw0GNyslUhWY TajM6KA/dl5vJ6qAQRE/gvaWEdsCp0/pgfLSXWDOG9j7E6BsVnxItHwqNEaZl9yX78u9 LVxWYYkXQCYTTP01ESTvFeeMr46AJpytiy/kK0HsMtYl6PnYo/ARvABpADXMHhCh+36M ow== Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2049.outbound.protection.outlook.com [104.47.66.49]) by mx0a-0064b401.pphosted.com (PPS) with ESMTPS id 3fxde5h3gq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 09 May 2022 19:17:48 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oRDeecwjHT4/+e+goTpnboM00/dvrr9803tuV1kPWtQT4jXF8eO6yxku+fvWBBz2eLfVBQYrDyuR/NyjoIEsNRN74PT6dFkcUpwd+xfDwX02KeaSef1FzrxemQt/2LNaak3w13pn3yRB2bYrXbcuuERbY/ehFx9fhZDequM4gAKCQo1p+d30TuEZUKasnysP2t8m9n5n/tubIagozWDu50n9t5L8YITltd/IMoOBXS0uWyvIrhWXMLI1E0XR278ukg4+c4F6NxlQp4LUexVZ/3sd/bMcdkzvKwDMl29vjZEiTKQlf8N94ce+d0TQ/EnJ9XIuNKFI/S9MWDoKLExIvQ== 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=DSxaNgKJqrHuksgOfMp5EC79wqIvM5Qp8TMnBUwLHIo=; b=XZ2iAk7R/Hz9VzbUk9hBbKdz8qc37Rh9P7W3pWAu8KpQge1hdF/w8DeCpik0EthcxYVPkMErLBGegRLpDg2OzpFEKBsz7UqUy8haGja7c2jTJJnrdQ+GLaiu7MtAbM1fGNuUr6OKxg4I7nEt2Jtsi1msfGngAbGXUEBu+kYP3FngmiHV5AQnLWHb+DvkXaZX8eyOER5YuarndYAxkUVufDylHHX5fhv2QlQ/z6rML9IBbEMB09qsbUBU/mvfkzbgaLHihePdxqIEfGmzElyk5X5Wr0s1eymTwizpxDNbU38wln1XuG9VrJRr86IEhmdxcL0oGymiu/0h71FEJKUPDA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=windriver.com; dmarc=pass action=none header.from=windriver.com; dkim=pass header.d=windriver.com; arc=none Received: from MN2PR11MB4173.namprd11.prod.outlook.com (2603:10b6:208:137::20) by DM6PR11MB4514.namprd11.prod.outlook.com (2603:10b6:5:2a3::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5227.21; Tue, 10 May 2022 02:17:44 +0000 Received: from MN2PR11MB4173.namprd11.prod.outlook.com ([fe80::bd41:bd4b:f230:3725]) by MN2PR11MB4173.namprd11.prod.outlook.com ([fe80::bd41:bd4b:f230:3725%6]) with mapi id 15.20.5227.023; Tue, 10 May 2022 02:17:44 +0000 From: "Shi, Guohuai" To: Greg Kurz CC: Bin Meng , Christian Schoenebeck , "qemu-devel@nongnu.org" , "Meng, Bin" Subject: RE: [PATCH 5/9] hw/9pfs: Add a 'local' file system backend driver for Windows Thread-Topic: [PATCH 5/9] hw/9pfs: Add a 'local' file system backend driver for Windows Thread-Index: AQHYWLCcWsfI4/Y1i0icMWaeEyy3Ca0WsPoAgAAF9MCAABkNAIAAnX7AgAAJSRA= Date: Tue, 10 May 2022 02:17:44 +0000 Message-ID: References: <20220425142705.2099270-1-bmeng.cn@gmail.com> <20220425142705.2099270-6-bmeng.cn@gmail.com> <20220509162924.6f70626d@bahia> <20220509182022.3fedeb7e@bahia> In-Reply-To: Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: bb80950e-0019-426b-5010-08da322b44b3 x-ms-traffictypediagnostic: DM6PR11MB4514:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: iXvJnPPjlOmFc1yQqVEMJsLLaPSN7eKH78aqFGhwebaR4+bHmhTzQx2DTkxE/1NEXwmUgLzQaX3vqDvEvKjzwI/dVMKVAe/P/P2yoiT3E/CZyI20O8OmTbgWa4Nuiv/whOtFwbX5hGhsz7/dx4p64vWO73i9Xt8mEZs9RK2MTpfu5JngHW4gCp9yM+98JZfAUZlmq3WlKTDIYVwZdjgWGWiZhBGFDAN3kVq/StlSYeCF29wQ8q7jExbCzhaa8THrxEXLp1W7lQfXEiDO091X48hgkfvfB09RmHcQJt4khs1KhsEb46f+z9ki4bCiOpDF/yU/jpoCeb5uVg359TNtoEVrJ61lAflGGPEp241adVnz0vYWNrTIulznNsb76vLOyCoBBDkVuNHYwVO89N2Vg+Moi8SLqzYRZUISHyxU3aX1iV3Kx7txxJxxE7iBM1IM9a3BP18S9+YnGZDjkD47Hz2NjnIHeFzzE2qSRQNZ3K6msSVxh5H56lTEKNV+WIZcNFRBzypdjkTewPLVJ2T/HmlpiZXGf/pquOgiJ5nAlDy1PnWfKA3qhSlX8oJB+sNneuG2JRzDPMU/rV2D3p+s2ATP4F5z9n4pPw4InJo4IlV9Q5zq0B0J2MGOfEngACZp9F6+9CHwe+xyBjfF3xTAu8+KIML+2OMeVQzJOb2bPQtRZf+cjQadXQEtVpPCVFlr0x1Xi/3DE4w+dcxETHuN/vIMQA9zFiGASgwPBAii0zPUXvxvxGiTlvI08swxuWfKqUIbOnVcQC2JDyCAKzJv0LzyWWFD5kN00YDAx0B/PuI83zh3XENlu408tSiVedUCXw4vfmWzxa4diUYUZxXIaw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MN2PR11MB4173.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(508600001)(316002)(66946007)(66556008)(76116006)(55016003)(66446008)(9686003)(30864003)(966005)(64756008)(66476007)(26005)(2906002)(86362001)(7696005)(186003)(4326008)(54906003)(8676002)(6916009)(71200400001)(2940100002)(38100700002)(122000001)(33656002)(38070700005)(6506007)(8936002)(83380400001)(52536014)(107886003)(53546011)(5660300002)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MlNUOFBDTFZFNzExVkFHNDJSSXZVOERtV1pDUnAzbXJRU05yREdYNTEwemVt?= =?utf-8?B?NE1CQ1M2TStsK09BYm80b21ZYTVoQWIxdHh1WHB5UGtKK3dPbGZnaUJ1cWU3?= =?utf-8?B?YTBhaUpqWmNYb2NzenZaeEdINlFJYjBLSDVrOGRJMWw3MUlvUTFmYm8ybnY1?= =?utf-8?B?TmdMMG9haEtCOTErSzJiRHV5L2JhdjQ0eTFqbDZYS3JCeU9uM1IrTzBSMkxC?= =?utf-8?B?SkZLVXJFeFZkeVVLOVZLcWxKUm1EaFZNcEl3aXlFU0YxNm9Lai8zRGRJWm1w?= =?utf-8?B?eUpnUVFYOUE5emY2OGpqU25MQ012REFpa3dSc3JtWTFxNWRWSUd5dTJsWWMx?= =?utf-8?B?N1BjM0U5T2JrMVl5Y3VLYXNLUW1IVk8zNTNjYU1rTHhxeXAzUzZObjBYdEt3?= =?utf-8?B?YVBEcjdRSjZsZFJXei9maXdPYzNIbVZoM0w4azE1RE9kUm8wOTU4Y0ZHRUdi?= =?utf-8?B?MTJRLzZJOGVqZFRGdlRSSnRMQXhLNm9ET0pqUHhQNDlpQWs4U1NQeEplRUdv?= =?utf-8?B?Q0NVS2JvNGQybjFsUUxuZ0pmSEk0ZlFlaUowMUxWK01LbEFyc2dVdVVSaCtn?= =?utf-8?B?M01pQmhjOVh1bnM2VFVrdEtJcldRUVlUL2R1M2tQc01xeU5YSHZvV0UxQ3J0?= =?utf-8?B?dS84M3NUN2k4clhNRmdqQW1FcnRmRHBJUERFM2RpUXFNL3hxK2JXMDd2dFNp?= =?utf-8?B?NE9FaVlvMERvVDhOemtwTjc1NU0xS21XWC9kdEdGY00waVVNWnQzbjBwYU9p?= =?utf-8?B?ZEtkVHJtbURnd3hBOTlxWXZRZ1A2NTVHMUwrMnBpaURvRFIyT1pCSHpLWit1?= =?utf-8?B?d1pZRmJjSmx6RFRObWY5aXBGZTNFWkE5Mm1wVTh0Um5sbGc0aDZEZ0NkYkxT?= =?utf-8?B?bzN1UmZWblhWN1ZDazVHRTlFQTRnVHREV3pXU29HMXFia3dRb25rY3k2VU8v?= =?utf-8?B?eDZSd0Zod2R0RmRraE1GYTZvMFNERTJZeGpYZ2x1NldKQlQzZVFFSlY3bXBw?= =?utf-8?B?QUZhK3A4RjBOck5IZEcwVmlHd2lJR3ZLZ08xNHhIRjJuTzFCREh1ZUxjMzVR?= =?utf-8?B?ZjRiQXp6ZVhCazRWdlpyN0dPOEtVZUtJdTJGZDNMWm5MdHZCL0t6R1RXcVZQ?= =?utf-8?B?eTh0TWh1N2svUFExdi90Uzc3aCtuWFZtMkhiOVNEVmh2cVhUSTBXY250eHA4?= =?utf-8?B?KytUdlMycUFtdXVuWjQyaURwalR2RERRdlAxbDhYVHBIakd2ZW5KUDFoS1JT?= =?utf-8?B?eDhjRzJYbzZQczFDRlBrMzNmVFhBREVmM3IrdjRHUm9ROWJvR0NhcnkzMzVB?= =?utf-8?B?RTNydU9WQ3Rad2FyTW1GeTcwWGtRSzRpMXZyVUFsVFdlNHRMUldMcTRuRUpW?= =?utf-8?B?NS95N1cwTkJlSldXc2o5TDRidlRuZzNRQlQ2M0NzRXlTM0NRMFJMeU9kUlpP?= =?utf-8?B?QTdpRUxHNmR4cmlEQ253enJjL3JkSCt3bXpwL1NuVDNqRzJpaEVWUmRMWTE5?= =?utf-8?B?K3FGNlY3bG9xdWtuUUlCTXZjVVc3L21PQ0g3SWlWYnVxVEhlNjNZV25ZYW5Z?= =?utf-8?B?N1htRTBnSVg3QW5jSkw0amExM1kxZm50WkpOWTRxWStObUp4WmxKdnR4YTFV?= =?utf-8?B?V2ZtbWdVS3dmMFRnRHNscjFtNTFzT3BSemJQRCtrYStJUGtkQWcreEpBU2lt?= =?utf-8?B?YXc1RlR1TER4bzByTTltNUlTRmIxTk9pZkcyWmpKeDNyRWx4ejNodU1zYzBm?= =?utf-8?B?di9aQSthWDM3djcxWkZxNjZENHd5aXlUYTltQlIrQ05vQjhnZmZheU5ydFc0?= =?utf-8?B?QWhFSHVUK0s5eDFCMDVQZkFvSEk3UFEwY000NXdEVU9SakhBSlA0RGE4YTAy?= =?utf-8?B?RmhWTEVCeGlsNXBQMEp5N3lqcEh2V2IydGxjdUNISEIyYU40VDVOeUF2ZU9v?= =?utf-8?B?UXlKWTFOcXBhcGlET3BZdGxGaE9rUit4Zm90TGJUQ21aZ2tRUEI3aWVzOURl?= =?utf-8?B?bDRKdk4xaTcrSkxsaFIzdXBHTE8zWXVWQWpzRTZpb3l3cHJZMmgzV2RPZVhQ?= =?utf-8?B?NzFkQWFKL2t1UDNYUVJDeEx3VSswblRXcGFETDl0b1U1VTYwbEVkcm9OQmxG?= =?utf-8?B?WitEcWlNZnFiQnpnTXRFbndQWkt2Y3VwSC85ak8yVy9LYkRvTExPaU5FbU5U?= =?utf-8?B?TCtIUGpFcC9BUU5hZ1c3SFZ5Z05tOUw3a1ZMOWs0Wm5ra2xKV2E1OTJ0RGQ5?= =?utf-8?B?cmNQQWtSU0J5M2ZDYVM5Y2JMK2p2RFROVCtsLzkxTlE2RmhsU2FJTDRLWDM0?= =?utf-8?B?VE5KOVBuMThMalc5R2ViUUdQMjE1bTlDZ3lnWVJjTGV5Y0pza1dkdEVEVXdV?= =?utf-8?Q?45F0GYF60fcAYP9w=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: windriver.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB4173.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb80950e-0019-426b-5010-08da322b44b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 10 May 2022 02:17:44.3462 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8ddb2873-a1ad-4a18-ae4e-4644631433be X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Gqa76xRWLovL1hL3LhfZC1+/4btJfK8kvbwlCUzxXB/xSeN6GKcviFmmLEjBhmyyaYHYYqlgF+RHJZ60/98hIotbCmEnkUis1k+nj76t8tE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4514 X-Proofpoint-GUID: tVJWpXGFzSxfF4SzhPsav8iyK4ozqR2O X-Proofpoint-ORIG-GUID: tVJWpXGFzSxfF4SzhPsav8iyK4ozqR2O X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.858,Hydra:6.0.486,FMLib:17.11.64.514 definitions=2022-05-09_06,2022-05-09_02,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 phishscore=0 mlxscore=0 malwarescore=0 clxscore=1015 bulkscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 impostorscore=0 spamscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2205100008 Received-SPF: pass client-ip=205.220.166.238; envelope-from=prvs=212901e239=guohuai.shi@windriver.com; helo=mx0a-0064b401.pphosted.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_OTHER_BAD_TLD=1.997, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2hpLCBHdW9odWFpDQo+ IFNlbnQ6IDIwMjLlubQ15pyIMTDml6UgMTA6MTMNCj4gVG86IEdyZWcgS3VyeiA8Z3JvdWdAa2Fv ZC5vcmc+DQo+IENjOiBCaW4gTWVuZyA8Ym1lbmcuY25AZ21haWwuY29tPjsgQ2hyaXN0aWFuIFNj aG9lbmViZWNrIDxxZW11X29zc0BjcnVkZWJ5dGUuY29tPjsNCj4gcWVtdS1kZXZlbEBub25nbnUu b3JnOyBNZW5nLCBCaW4gPEJpbi5NZW5nQHdpbmRyaXZlci5jb20+DQo+IFN1YmplY3Q6IFJFOiBb UEFUQ0ggNS85XSBody85cGZzOiBBZGQgYSAnbG9jYWwnIGZpbGUgc3lzdGVtIGJhY2tlbmQgZHJp dmVyIGZvcg0KPiBXaW5kb3dzDQo+IA0KPiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gPiBGcm9tOiBHcmVnIEt1cnogPGdyb3VnQGthb2Qub3JnPg0KPiA+IFNlbnQ6IDIw MjLlubQ15pyIMTDml6UgMDoyMA0KPiA+IFRvOiBTaGksIEd1b2h1YWkgPEd1b2h1YWkuU2hpQHdp bmRyaXZlci5jb20+DQo+ID4gQ2M6IEJpbiBNZW5nIDxibWVuZy5jbkBnbWFpbC5jb20+OyBDaHJp c3RpYW4gU2Nob2VuZWJlY2sNCj4gPHFlbXVfb3NzQGNydWRlYnl0ZS5jb20+Ow0KPiA+IHFlbXUt ZGV2ZWxAbm9uZ251Lm9yZzsgTWVuZywgQmluIDxCaW4uTWVuZ0B3aW5kcml2ZXIuY29tPg0KPiA+ IFN1YmplY3Q6IFJlOiBbUEFUQ0ggNS85XSBody85cGZzOiBBZGQgYSAnbG9jYWwnIGZpbGUgc3lz dGVtIGJhY2tlbmQgZHJpdmVyIGZvcg0KPiA+IFdpbmRvd3MNCj4gPg0KPiA+IFtQbGVhc2Ugbm90 ZTogVGhpcyBlLW1haWwgaXMgZnJvbSBhbiBFWFRFUk5BTCBlLW1haWwgYWRkcmVzc10NCj4gPg0K PiA+IE9uIE1vbiwgOSBNYXkgMjAyMiAxNTowOTo0NiArMDAwMA0KPiA+ICJTaGksIEd1b2h1YWki IDxHdW9odWFpLlNoaUB3aW5kcml2ZXIuY29tPiB3cm90ZToNCj4gPg0KPiA+ID4NCj4gPiA+DQo+ ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+IEZyb206IEdyZWcgS3Vy eiA8Z3JvdWdAa2FvZC5vcmc+DQo+ID4gPiA+IFNlbnQ6IDIwMjLlubQ15pyIOeaXpSAyMjoyOQ0K PiA+ID4gPiBUbzogQmluIE1lbmcgPGJtZW5nLmNuQGdtYWlsLmNvbT4NCj4gPiA+ID4gQ2M6IENo cmlzdGlhbiBTY2hvZW5lYmVjayA8cWVtdV9vc3NAY3J1ZGVieXRlLmNvbT47IHFlbXUtZGV2ZWxA bm9uZ251Lm9yZzsNCj4gPiBTaGksDQo+ID4gPiA+IEd1b2h1YWkgPEd1b2h1YWkuU2hpQHdpbmRy aXZlci5jb20+OyBNZW5nLCBCaW4gPEJpbi5NZW5nQHdpbmRyaXZlci5jb20+DQo+ID4gPiA+IFN1 YmplY3Q6IFJlOiBbUEFUQ0ggNS85XSBody85cGZzOiBBZGQgYSAnbG9jYWwnIGZpbGUgc3lzdGVt IGJhY2tlbmQgZHJpdmVyDQo+ID4gZm9yDQo+ID4gPiA+IFdpbmRvd3MNCj4gPiA+ID4NCj4gPiA+ ID4gW1BsZWFzZSBub3RlOiBUaGlzIGUtbWFpbCBpcyBmcm9tIGFuIEVYVEVSTkFMIGUtbWFpbCBh ZGRyZXNzXQ0KPiA+ID4gPg0KPiA+ID4gPiBPbiBNb24sIDI1IEFwciAyMDIyIDIyOjI3OjAxICsw ODAwDQo+ID4gPiA+IEJpbiBNZW5nIDxibWVuZy5jbkBnbWFpbC5jb20+IHdyb3RlOg0KPiA+ID4g Pg0KPiA+ID4gPiA+IEZyb206IEd1b2h1YWkgU2hpIDxndW9odWFpLnNoaUB3aW5kcml2ZXIuY29t Pg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gQWRkIGEgOXAgbG9jYWwgZmlsZSBzeXN0ZW0gYmFja2Vu ZCBkcml2ZXIgdG8gc3VwcG9ydCBXaW5kb3dzLA0KPiA+ID4gPiA+IGluY2x1ZGluZyBvcGVuLCBy ZWFkLCB3cml0ZSwgY2xvc2UsIHJlbmFtZSwgcmVtb3ZlLCBldGMuDQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBBbGwgc2VjdXJpdHkgbW9kZWxzIGFyZSBzdXBwb3J0ZWQuIFRoZSBtYXBwZWQgKG1hcHBl ZC14YXR0cikNCj4gPiA+ID4gPiBzZWN1cml0eSBtb2RlbCBpcyBpbXBsZW1lbnRlZCB1c2luZyBO VEZTIEFsdGVybmF0ZSBEYXRhIFN0cmVhbQ0KPiA+ID4gPiA+IChBRFMpIHNvIHRoZSA5cCBleHBv cnQgcGF0aCBzaGFsbCBiZSBvbiBhbiBOVEZTIHBhcnRpdGlvbi4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+IFNpZ25lZC1vZmYtYnk6IEd1b2h1YWkgU2hpIDxndW9odWFpLnNoaUB3aW5kcml2ZXIuY29t Pg0KPiA+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEJpbiBNZW5nIDxiaW4ubWVuZ0B3aW5kcml2ZXIu Y29tPg0KPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IEhpICENCj4g PiA+ID4NCj4gPiA+ID4gSSB0ZW5kIHRvIGFncmVlIHdpdGggQ2hyaXN0aWFuJ3MgcmVtYXJrcyB0 aGF0IHRoaXMgcGF0Y2ggaXMgdG9vIGJpZw0KPiA+ID4gPiBhbmQgdGhhdCB0aGUgY2hvaWNlIG9m IGludHJvZHVjaW5nIHJpZ2h0IGF3YXkgYSBuZXcgaW1wbGVtZW50YXRpb24NCj4gPiA+ID4gb2Yg OXAtbG9jYWwgZm9yIHdpbmRvd3MgaG9zdHMgaXMgdG9vIGJvbGQgdG8gc3RhcnQgd2l0aC4gV2Ug bmVlZCB0bw0KPiA+ID4gPiBjbGVhcmx5IHVuZGVyc3RhbmQgd2hhdCdzIGRpdmVyZ2luZyBiZXR3 ZWVuIHdpbmRvd3MgYW5kIGxpbnV4IGluIG9yZGVyDQo+ID4gPiA+IHRvIG1ha2Ugc3VjaCBhIGRl Y2lzaW9uLiBZb3Ugc2hvdWxkIGZpcnN0IHRyeSB0byBpbnRyb2R1Y2UgdGhlIHJlcXVpcmVkDQo+ ID4gPiA+IGFic3RyYWN0aW9ucyB0byBjb3BlIHdpdGggdGhlc2UgZGlmZmVyZW5jZXMsIHNvIHRo YXQgd2UgY2FuIHJldmlldy4NCj4gPiA+ID4NCj4gPiA+DQo+ID4gPiBIZXJlIGlzIHRoZSBiYXNp YyBpbnRyb2R1Y3Rpb25zIG9mIDlQRlMgZm9yIFdpbmRvd3MgZGV2ZWxvcG1lbnQ6DQo+ID4gPg0K PiA+ID4gV2luZG93cyBhbHdheXMgcmV0dXJucyAtMSB3aGVuIHRyeSB0byBjYWxsIG9wZW4oKSBm b3IgYSBkaXJlY3RvcnkuDQo+ID4gPiBXaW5kb3dzIChhY3R1YWxseSBNaW5HVyBsaWJyYXJ5KSBv bmx5IGFsbG93cyBvcGVuZGlyKCkgZm9yIGEgZGlyZWN0b3J5Lg0KPiA+DQo+ID4gRG9lcyBNaW5H VyBoYXZlIGRpcmZkKCkgPw0KPiANCj4gTm8uDQo+IE1pbkdXIGRvZXMgbm90IG9wZW4gYW55IGRp cmVjdG9yeS4NCj4gSGVyZSBpcyBvcGVuZGlyKCkgc291cmNlIGNvZGUgb2YgTWluR1c6DQo+IGh0 dHBzOi8vZ2l0aHViLmNvbS9taXJyb3IvbWluZ3ctdzY0L2Jsb2IvbWFzdGVyL21pbmd3LXc2NC1j cnQvbWlzYy9kaXJlbnQuYyNMDQo+IDQyDQo+IA0KPiBTbyBNaW5HVyBkbyBub3QgaGF2ZSBhIGZk IGFzc29jaWF0ZWQgdG8gYSBkaXJlY3RvcnkuDQo+IA0KPiANCj4gPg0KPiA+ID4gV2luZG93cyBk b2VzIG5vdCBzdXBwb3J0IEFQSXMgbGlrZSAiKmF0IiAob3BlbmF0KCksIHJlbmFtZWF0KCksIGV0 Yy4pDQo+ID4NCj4gPiBPdWNoLi4uDQo+ID4NCj4gPiA+IFNvIDlQRlMgY2FuIG5vdCB1c2UgYW55 IG9wZW5hdCgpIGZvciBvcGVuaW5nIGEgc3ViIGZpbGUgb3IgZGlyZWN0b3J5IGluIDlQDQo+IG1v dW50DQo+ID4gZGlyZWN0b3J5Lg0KPiA+ID4gVGhpcyBjb21taXQgdXNlIG1lcmdlX2ZzX3BhdGgo KSB0byBidWlsZCB1cCBmdWxsIGZpbGVuYW1lIGJ5IHN0cmluZw0KPiBjb25jYXRlbmF0aW9uLg0K PiA+ID4gSSBrbm93IHRoYXQgbWF5IGhhdmUgYSByaXNrIG9mIHNlY3VyaXR5LCBidXQgV2luZG93 cyBkb2VzIGZ1bGx5IHN1cHBvcnQgUE9TSVgNCj4gPiBBUElzLg0KPiA+ID4NCj4gPg0KPiA+IHMv ZG9lcy9kb2Vzbid0ID8NCj4gPg0KPiA+IEkgdW5kZXJzdGFuZCBmcm9tIHlvdXIgdmFyaW91cyBh bnN3ZXJzIHRoYXQgc3ltbGlua3MgYXJlbid0DQo+ID4gY3VycmVudGx5IHN1cHBvcnRlZCBieSB3 aW5kb3cncyBQT1NJWCBBUEkuIElzIHRoaXMgZm9yZXZlciA/DQo+ID4gR29vZ2xlIGRvIG1lbnRp b25zIHN5bWxpbmtzIGluIHdpbmRvd3MgMTAuIFdoYXQncyB0aGUgc3RvcnkNCj4gPiB0aGVyZSA/ IEhvdyBkbyB0aGV5IGJlaGF2ZSA/IEhvdyB3b3VsZCB0aGV5IGJlIGV4cG9zZWQgdG8gdGhlDQo+ ID4gY2xpZW50ID8gQmUgYXdhcmUgdGhhdCwgZXZlbiBpZiB0aGUgY2xpZW50IGNhbm5vdCBjcmVh dGUgc3ltbGlua3MsDQo+ID4gYW4gZXhpc3Rpbmcgc3ltbGluayBjb3VsZCBiZSB1c2VkIHRvIGVz Y2FwZSB3aXRoIHJlbmFtZSgpLg0KPiA+DQo+ID4gSWYgdGhlIGNvZGUgIm1heSBoYXZlIGEgcmlz ayBvZiBzZWN1cml0eSIgdGhlbiBpdCBtdXN0IGJlDQo+ID4gZml4ZWQgb3IgYXZvaWRlZCBpbiBz b21lIHdheSBiZWZvcmUgYmVpbmcgbWVyZ2VkIHVwc3RyZWFtLg0KPiA+DQo+ID4gT3RoZXIgdGhp bmcgdGhhdCBjb21lcyB0byBtaW5kIGlzIHRoYXQgd2luZG93cyBob3N0cyBzaG91bGQNCj4gPiBt YXliZSB1c2UgdGhlIG1hcHBlZCBvciBtYXBwZWQtZmlsZSBzZWN1cml0eSBtb2RlcyBzaW5jZQ0K PiA+IHRoZXkgZW11bGF0ZSBzeW1saW5rcyB3aXRoIGEgc2ltcGxlIGZpbGUgaGlkZGVuIGluIHRo ZQ0KPiA+IFZJUlRGU19NRVRBX0RJUiBkaXJlY3RvcnkuDQo+ID4NCj4gPiBDaGVlcnMsDQo+ID4N Cj4gPiAtLQ0KPiA+IEdyZWcNCj4gPg0KPiANCj4gV2luZG93cyBuYXRpdmUgQVBJIHN1cHBvcnQg c3ltYm9saWMgbGluayBmaWxlIHN0YXJ0IGZyb20gV2luZG93cyBWaXN0YToNCj4gaHR0cHM6Ly9k b2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9hcGkvd2luYmFzZS9uZi13aW5i YXNlLWNyZWF0ZXMNCj4geW1ib2xpY2xpbmthDQo+IA0KPiBJIG1lYW4gV2luZG93cyBQT1NJWCBB UElzIGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmsgKE1pbkdXIHVzZSBXaW4zMiBQT1NJWCBB UElzKQ0KPiBTbyB3ZSBjYW4gbm90IGNyZWF0ZSBzeW1ib2xpYyBsaW5rIGJ5IE1pbkdXLg0KPiAN Cj4gQW55d2F5LCB0aGVyZSBpcyBhbm90aGVyIHNvbHV0aW9uOiByZS13b3JrIHdob2xlIDlQRlMg Y29kZTogbm90IG9ubHkgOXAtbG9jYWwuYywNCj4gYnV0IGFsc28gZXZlcnkgZmlsZSBpbiA5cCBk cml2ZXIuDQo+IFJlcGxhY2UgZXZlcnkgTWluR1cvUE9TSVggQVBJcyAoZS5nLiBvcGVuLCBsc2Vl aywgcmVhZCwgd3JpdGUsIGNsb3NlKSwNCj4gYnkgV2luZG93cyBOYXRpdmUgQVBJcyAoZS5nLiBv cGVuIC0+IENyZWF0ZUZpbGUsIGxzZWVrIC0+IFNldEZpbGVQb2ludGVyLCByZWFkDQo+IC0+IFJl YWRGaWxlLCB3cml0ZSAtPiBXcml0ZUZpbGUsIGNsb3NlIC0+IENsb3NlSGFuZGxlLCBldGMuKQ0K PiBUaGVuIDlQIGNhbiB1c2UgV2luZG93cyBzeW1ib2xpYyBsaW5rIGZlYXR1cmUuDQo+IEhvd2V2 ZXIsIEkgZG8gdGhpbmsgaXQgaXMgYSBnb29kIGlkZWEgdG8gcmVwbGFjZSBldmVyeXRoaW5nLg0K DQpUWVBPOiBpdCBOT1QgaXMgYSBnb29kIGlkZWEgdG8gcmVwbGFjZSBldmVyeXRoaW5nLg0KDQo+ IA0KPiBUaGFua3MNCj4gR3VvaHVhaQ0KPiANCj4gPiA+ID4gU29tZSBpbmxpbmVkIHJlbWFya3Mg YmVsb3cgYW55d2F5Lg0KPiA+ID4gPg0KPiA+ID4gPiA+ICBody85cGZzLzlwLWxpbnV4LWVycm5v LmggfCAgMTUxICsrKysrDQo+ID4gPiA+ID4gIGh3LzlwZnMvOXAtbG9jYWwuaCAgICAgICB8ICAg IDQgKw0KPiA+ID4gPiA+ICBody85cGZzLzlwLXV0aWwuaCAgICAgICAgfCAgIDQxICsrDQo+ID4g PiA+ID4gIGh3LzlwZnMvOXAuaCAgICAgICAgICAgICB8ICAgMjMgKw0KPiA+ID4gPiA+ICBody85 cGZzLzlwLWxvY2FsLXdpbjMyLmMgfCAxMjQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrDQo+ID4gPiA+ID4gIGh3LzlwZnMvOXAtdXRpbC13aW4zMi5jICB8ICAzMDMgKysr KysrKysrKw0KPiA+ID4gPiA+ICBody85cGZzLzlwLXhhdHRyLmMgICAgICAgfCAgMTEzICsrKysN Cj4gPiA+ID4gPiAgaHcvOXBmcy85cC5jICAgICAgICAgICAgIHwgICA5MSArKy0NCj4gPiA+ID4g PiAgaHcvOXBmcy9jb2Rpci5jICAgICAgICAgIHwgICAxNSArDQo+ID4gPiA+ID4gIDkgZmlsZXMg Y2hhbmdlZCwgMTk4MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+ID4gPiA+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBody85cGZzLzlwLWxpbnV4LWVycm5vLmgNCj4gPiA+ID4gPiAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGh3LzlwZnMvOXAtbG9jYWwtd2luMzIuYw0KPiA+ID4gPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgaHcvOXBmcy85cC11dGlsLXdpbjMyLmMNCj4gPiA+ID4gPg0KPiA+ID4g PiA+IGRpZmYgLS1naXQgYS9ody85cGZzLzlwLWxpbnV4LWVycm5vLmggYi9ody85cGZzLzlwLWxp bnV4LWVycm5vLmgNCj4gPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiA+IGlu ZGV4IDAwMDAwMDAwMDAuLmIwZDZhYzQ1YWMNCj4gPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4g PiA+ID4gKysrIGIvaHcvOXBmcy85cC1saW51eC1lcnJuby5oDQo+ID4gPiA+ID4gQEAgLTAsMCAr MSwxNTEgQEANCj4gPiA+ID4gPiArLyoNCj4gPiA+ID4gPiArICogOXAgTGludXggZXJybm8gdHJh bnNsYXRpb24gZGVmaW5pdGlvbg0KPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ICsgKiBUaGlzIHdv cmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIg b3INCj4gbGF0ZXIuDQo+ID4gPiA+ID4gKyAqIFNlZSB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0 b3AtbGV2ZWwgZGlyZWN0b3J5Lg0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lmbmRlZiBR RU1VXzlQX0xJTlVYX0VSUk5PX0gNCj4gPiA+ID4gPiArI2RlZmluZSBRRU1VXzlQX0xJTlVYX0VS Uk5PX0gNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gKyAqIFRoaXMgZmls ZSBjb250YWlucyB0aGUgTGludXggZXJybm8gZGVmaW5pdGlvbnMgdG8gdHJhbnNsYXRlIGVycm5v cw0KPiBzZXQNCj4gPiBieQ0KPiA+ID4gPiA+ICsgKiB0aGUgOVAgc2VydmVyIChydW5uaW5nIG9u IFdpbmRvd3MpIHRvIGEgY29ycmVzcG9uZGluZyBlcnJubyB2YWx1ZS4NCj4gPiA+ID4gPiArICoN Cj4gPiA+ID4gPiArICogVGhpcyBsaXN0IHNob3VsZCBiZSBwZXJpb2RpY2FsbHkgcmV2aWV3ZWQg YW5kIHVwZGF0ZWQ7IHBhcnRpY3VsYXJseQ0KPiBmb3INCj4gPiA+ID4gPiArICogZXJybm9zIHRo YXQgbWlnaHQgYmUgc2V0IGFzIGEgcmVzdWx0IG9mIGEgZmlsZSBzeXN0ZW0gb3BlcmF0aW9uLg0K PiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FUEVSTSAg ICAgICAgICAgICAxICAgLyogT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQgKi8NCj4gPiA+ID4gPiAr I2RlZmluZSBMX0VOT0VOVCAgICAgICAgICAgIDIgICAvKiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0 b3J5ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FU1JDSCAgICAgICAgICAgICAzICAgLyogTm8g c3VjaCBwcm9jZXNzICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FSU5UUiAgICAgICAgICAgICA0 ICAgLyogSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VJ TyAgICAgICAgICAgICAgIDUgICAvKiBJL08gZXJyb3IgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBM X0VOWElPICAgICAgICAgICAgIDYgICAvKiBObyBzdWNoIGRldmljZSBvciBhZGRyZXNzICovDQo+ ID4gPiA+ID4gKyNkZWZpbmUgTF9FMkJJRyAgICAgICAgICAgICA3ICAgLyogQXJndW1lbnQgbGlz dCB0b28gbG9uZyAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PRVhFQyAgICAgICAgICAgOCAg IC8qIEV4ZWMgZm9ybWF0IGVycm9yICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FQkFERiAgICAg ICAgICAgICA5ICAgLyogQmFkIGZpbGUgbnVtYmVyICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9F Q0hJTEQgICAgICAgICAgICAxMCAgLyogTm8gY2hpbGQgcHJvY2Vzc2VzICovDQo+ID4gPiA+ID4g KyNkZWZpbmUgTF9FQUdBSU4gICAgICAgICAgICAxMSAgLyogVHJ5IGFnYWluICovDQo+ID4gPiA+ ID4gKyNkZWZpbmUgTF9FTk9NRU0gICAgICAgICAgICAxMiAgLyogT3V0IG9mIG1lbW9yeSAqLw0K PiA+ID4gPiA+ICsjZGVmaW5lIExfRUFDQ0VTICAgICAgICAgICAgMTMgIC8qIFBlcm1pc3Npb24g ZGVuaWVkICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FRkFVTFQgICAgICAgICAgICAxNCAgLyog QmFkIGFkZHJlc3MgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VOT1RCTEsgICAgICAgICAgIDE1 ICAvKiBCbG9jayBkZXZpY2UgcmVxdWlyZWQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VCVVNZ ICAgICAgICAgICAgIDE2ICAvKiBEZXZpY2Ugb3IgcmVzb3VyY2UgYnVzeSAqLw0KPiA+ID4gPiA+ ICsjZGVmaW5lIExfRUVYSVNUICAgICAgICAgICAgMTcgIC8qIEZpbGUgZXhpc3RzICovDQo+ID4g PiA+ID4gKyNkZWZpbmUgTF9FWERFViAgICAgICAgICAgICAxOCAgLyogQ3Jvc3MtZGV2aWNlIGxp bmsgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VOT0RFViAgICAgICAgICAgIDE5ICAvKiBObyBz dWNoIGRldmljZSAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PVERJUiAgICAgICAgICAgMjAg IC8qIE5vdCBhIGRpcmVjdG9yeSAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRUlTRElSICAgICAg ICAgICAgMjEgIC8qIElzIGEgZGlyZWN0b3J5ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FSU5W QUwgICAgICAgICAgICAyMiAgLyogSW52YWxpZCBhcmd1bWVudCAqLw0KPiA+ID4gPiA+ICsjZGVm aW5lIExfRU5GSUxFICAgICAgICAgICAgMjMgIC8qIEZpbGUgdGFibGUgb3ZlcmZsb3cgKi8NCj4g PiA+ID4gPiArI2RlZmluZSBMX0VNRklMRSAgICAgICAgICAgIDI0ICAvKiBUb28gbWFueSBvcGVu IGZpbGVzICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9UVFkgICAgICAgICAgICAyNSAgLyog Tm90IGEgdHlwZXdyaXRlciAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRVRYVEJTWSAgICAgICAg ICAgMjYgIC8qIFRleHQgZmlsZSBidXN5ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FRkJJRyAg ICAgICAgICAgICAyNyAgLyogRmlsZSB0b28gbGFyZ2UgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBM X0VOT1NQQyAgICAgICAgICAgIDI4ICAvKiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSAqLw0KPiA+ ID4gPiA+ICsjZGVmaW5lIExfRVNQSVBFICAgICAgICAgICAgMjkgIC8qIElsbGVnYWwgc2VlayAq Lw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRVJPRlMgICAgICAgICAgICAgMzAgIC8qIFJlYWQtb25s eSBmaWxlIHN5c3RlbSAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU1MSU5LICAgICAgICAgICAg MzEgIC8qIFRvbyBtYW55IGxpbmtzICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FUElQRSAgICAg ICAgICAgICAzMiAgLyogQnJva2VuIHBpcGUgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VET00g ICAgICAgICAgICAgIDMzICAvKiBNYXRoIGFyZ3VtZW50IG91dCBvZiBkb21haW4gb2YgZnVuYyAq Lw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRVJBTkdFICAgICAgICAgICAgMzQgIC8qIE1hdGggcmVz dWx0IG5vdCByZXByZXNlbnRhYmxlICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FREVBRExLICAg ICAgICAgICAzNSAgLyogUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIgKi8NCj4gPiA+ID4g PiArI2RlZmluZSBMX0VOQU1FVE9PTE9ORyAgICAgIDM2ICAvKiBGaWxlIG5hbWUgdG9vIGxvbmcg Ki8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VOT0xDSyAgICAgICAgICAgIDM3ICAvKiBObyByZWNv cmQgbG9ja3MgYXZhaWxhYmxlICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9TWVMgICAgICAg ICAgICAzOCAgLyogRnVuY3Rpb24gbm90IGltcGxlbWVudGVkICovDQo+ID4gPiA+ID4gKyNkZWZp bmUgTF9FTk9URU1QVFkgICAgICAgICAzOSAgLyogRGlyZWN0b3J5IG5vdCBlbXB0eSAqLw0KPiA+ ID4gPiA+ICsjZGVmaW5lIExfRUxPT1AgICAgICAgICAgICAgNDAgIC8qIFRvbyBtYW55IHN5bWJv bGljIGxpbmtzIGVuY291bnRlcmVkICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9NU0cgICAg ICAgICAgICA0MiAgLyogTm8gbWVzc2FnZSBvZiBkZXNpcmVkIHR5cGUgKi8NCj4gPiA+ID4gPiAr I2RlZmluZSBMX0VJRFJNICAgICAgICAgICAgIDQzICAvKiBJZGVudGlmaWVyIHJlbW92ZWQgKi8N Cj4gPiA+ID4gPiArI2RlZmluZSBMX0VDSFJORyAgICAgICAgICAgIDQ0ICAvKiBDaGFubmVsIG51 bWJlciBvdXQgb2YgcmFuZ2UgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VMMk5TWU5DICAgICAg ICAgIDQ1ICAvKiBMZXZlbCAyIG5vdCBzeW5jaHJvbml6ZWQgKi8NCj4gPiA+ID4gPiArI2RlZmlu ZSBMX0VMM0hMVCAgICAgICAgICAgIDQ2ICAvKiBMZXZlbCAzIGhhbHRlZCAqLw0KPiA+ID4gPiA+ ICsjZGVmaW5lIExfRUwzUlNUICAgICAgICAgICAgNDcgIC8qIExldmVsIDMgcmVzZXQgKi8NCj4g PiA+ID4gPiArI2RlZmluZSBMX0VMTlJORyAgICAgICAgICAgIDQ4ICAvKiBMaW5rIG51bWJlciBv dXQgb2YgcmFuZ2UgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VVTkFUQ0ggICAgICAgICAgIDQ5 ICAvKiBQcm90b2NvbCBkcml2ZXIgbm90IGF0dGFjaGVkICovDQo+ID4gPiA+ID4gKyNkZWZpbmUg TF9FTk9DU0kgICAgICAgICAgICA1MCAgLyogTm8gQ1NJIHN0cnVjdHVyZSBhdmFpbGFibGUgKi8N Cj4gPiA+ID4gPiArI2RlZmluZSBMX0VMMkhMVCAgICAgICAgICAgIDUxICAvKiBMZXZlbCAyIGhh bHRlZCAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRUJBREUgICAgICAgICAgICAgNTIgIC8qIElu dmFsaWQgZXhjaGFuZ2UgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VCQURSICAgICAgICAgICAg IDUzICAvKiBJbnZhbGlkIHJlcXVlc3QgZGVzY3JpcHRvciAqLw0KPiA+ID4gPiA+ICsjZGVmaW5l IExfRVhGVUxMICAgICAgICAgICAgNTQgIC8qIEV4Y2hhbmdlIGZ1bGwgKi8NCj4gPiA+ID4gPiAr I2RlZmluZSBMX0VOT0FOTyAgICAgICAgICAgIDU1ICAvKiBObyBhbm9kZSAqLw0KPiA+ID4gPiA+ ICsjZGVmaW5lIExfRUJBRFJRQyAgICAgICAgICAgNTYgIC8qIEludmFsaWQgcmVxdWVzdCBjb2Rl ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FQkFEU0xUICAgICAgICAgICA1NyAgLyogSW52YWxp ZCBzbG90ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FQkZPTlQgICAgICAgICAgICA1OCAgLyog QmFkIGZvbnQgZmlsZSBmb3JtYXQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VOT1NUUiAgICAg ICAgICAgIDU5ICAvKiBEZXZpY2Ugbm90IGEgc3RyZWFtICovDQo+ID4gPiA+ID4gKyNkZWZpbmUg TF9FTk9EQVRBICAgICAgICAgICA2MSAgLyogTm8gZGF0YSBhdmFpbGFibGUgKi8NCj4gPiA+ID4g PiArI2RlZmluZSBMX0VUSU1FICAgICAgICAgICAgIDYyICAvKiBUaW1lciBleHBpcmVkICovDQo+ ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9TUiAgICAgICAgICAgICA2MyAgLyogT3V0IG9mIHN0cmVh bXMgcmVzb3VyY2VzICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9ORVQgICAgICAgICAgICA2 NCAgLyogTWFjaGluZSBpcyBub3Qgb24gdGhlIG5ldHdvcmsgKi8NCj4gPiA+ID4gPiArI2RlZmlu ZSBMX0VOT1BLRyAgICAgICAgICAgIDY1ICAvKiBQYWNrYWdlIG5vdCBpbnN0YWxsZWQgKi8NCj4g PiA+ID4gPiArI2RlZmluZSBMX0VSRU1PVEUgICAgICAgICAgIDY2ICAvKiBPYmplY3QgaXMgcmVt b3RlICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9MSU5LICAgICAgICAgICA2NyAgLyogTGlu ayBoYXMgYmVlbiBzZXZlcmVkICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FQURWICAgICAgICAg ICAgICA2OCAgLyogQWR2ZXJ0aXNlIGVycm9yICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FU1JN TlQgICAgICAgICAgICA2OSAgLyogU3Jtb3VudCBlcnJvciAqLw0KPiA+ID4gPiA+ICsjZGVmaW5l IExfRUNPTU0gICAgICAgICAgICAgNzAgIC8qIENvbW11bmljYXRpb24gZXJyb3Igb24gc2VuZCAq Lw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRVBST1RPICAgICAgICAgICAgNzEgIC8qIFByb3RvY29s IGVycm9yICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTVVMVElIT1AgICAgICAgICA3MiAgLyog TXVsdGlob3AgYXR0ZW1wdGVkICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FRE9URE9UICAgICAg ICAgICA3MyAgLyogUkZTIHNwZWNpZmljIGVycm9yICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9F QkFETVNHICAgICAgICAgICA3NCAgLyogTm90IGEgZGF0YSBtZXNzYWdlICovDQo+ID4gPiA+ID4g KyNkZWZpbmUgTF9FT1ZFUkZMT1cgICAgICAgICA3NSAgLyogVmFsdWUgdG9vIGxhcmdlIGZvciBk ZWZpbmVkIGRhdGEgdHlwZQ0KPiAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PVFVOSVEgICAg ICAgICAgNzYgIC8qIE5hbWUgbm90IHVuaXF1ZSBvbiBuZXR3b3JrICovDQo+ID4gPiA+ID4gKyNk ZWZpbmUgTF9FQkFERkQgICAgICAgICAgICA3NyAgLyogRmlsZSBkZXNjcmlwdG9yIGluIGJhZCBz dGF0ZSAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRVJFTUNIRyAgICAgICAgICAgNzggIC8qIFJl bW90ZSBhZGRyZXNzIGNoYW5nZWQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VMSUJBQ0MgICAg ICAgICAgIDc5ICAvKiBDYW4gbm90IGFjY2VzcyBhIG5lZWRlZCBzaGFyZWQgbGlicmFyeQ0KPiA+ ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTElCQkFEICAgICAgICAgICA4MCAgLyogQWNjZXNz aW5nIGEgY29ycnVwdGVkIHNoYXJlZCBsaWJyYXJ5DQo+ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUg TF9FTElCU0NOICAgICAgICAgICA4MSAgLyogLmxpYiBzZWN0aW9uIGluIGEub3V0IGNvcnJ1cHRl ZCAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRUxJQk1BWCAgICAgICAgICAgODIgIC8qIEF0dGVt cHRpbmcgdG8gbGluayBpbiB0b28gbWFueSBzaGFyZWQNCj4gbGlicw0KPiA+ID4gPiAqLw0KPiA+ ID4gPiA+ICsjZGVmaW5lIExfRUxJQkVYRUMgICAgICAgICAgODMgIC8qIENhbm5vdCBleGVjIGEg c2hhcmVkIGxpYnJhcnkgZGlyZWN0bHkNCj4gKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VJTFNF USAgICAgICAgICAgIDg0ICAvKiBJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UgKi8NCj4gPiA+ID4gPiAr I2RlZmluZSBMX0VSRVNUQVJUICAgICAgICAgIDg1ICAvKiBJbnRlcnJ1cHRlZCBzeXN0ZW0gY2Fs bCBzaG91bGQgYmUNCj4gcmVzdGFydGVkDQo+ID4gPiA+ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUg TF9FU1RSUElQRSAgICAgICAgICA4NiAgLyogU3RyZWFtcyBwaXBlIGVycm9yICovDQo+ID4gPiA+ ID4gKyNkZWZpbmUgTF9FVVNFUlMgICAgICAgICAgICA4NyAgLyogVG9vIG1hbnkgdXNlcnMgKi8N Cj4gPiA+ID4gPiArI2RlZmluZSBMX0VOT1RTT0NLICAgICAgICAgIDg4ICAvKiBTb2NrZXQgb3Bl cmF0aW9uIG9uIG5vbi1zb2NrZXQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VERVNUQUREUlJF USAgICAgIDg5ICAvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkICovDQo+ID4gPiA+ID4g KyNkZWZpbmUgTF9FTVNHU0laRSAgICAgICAgICA5MCAgLyogTWVzc2FnZSB0b28gbG9uZyAqLw0K PiA+ID4gPiA+ICsjZGVmaW5lIExfRVBST1RPVFlQRSAgICAgICAgOTEgIC8qIFByb3RvY29sIHdy b25nIHR5cGUgZm9yIHNvY2tldCAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PUFJPVE9PUFQg ICAgICAgOTIgIC8qIFByb3RvY29sIG5vdCBhdmFpbGFibGUgKi8NCj4gPiA+ID4gPiArI2RlZmlu ZSBMX0VQUk9UT05PU1VQUE9SVCAgIDkzICAvKiBQcm90b2NvbCBub3Qgc3VwcG9ydGVkICovDQo+ ID4gPiA+ID4gKyNkZWZpbmUgTF9FU09DS1ROT1NVUFBPUlQgICA5NCAgLyogU29ja2V0IHR5cGUg bm90IHN1cHBvcnRlZCAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU9QTk9UU1VQUCAgICAgICAg OTUgIC8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIG9uIHRyYW5zcG9ydA0KPiA+IGVuZHBvaW50 DQo+ID4gPiA+ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FUEZOT1NVUFBPUlQgICAgICA5NiAg LyogUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBM X0VBRk5PU1VQUE9SVCAgICAgIDk3ICAvKiBBZGRyZXNzIGZhbWlseSBub3Qgc3VwcG9ydGVkIGJ5 IHByb3RvY29sDQo+ID4gKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VBRERSSU5VU0UgICAgICAg IDk4ICAvKiBBZGRyZXNzIGFscmVhZHkgaW4gdXNlICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9F QUREUk5PVEFWQUlMICAgICA5OSAgLyogQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyAq Lw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5FVERPV04gICAgICAgICAgMTAwIC8qIE5ldHdvcmsg aXMgZG93biAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5FVFVOUkVBQ0ggICAgICAgMTAxIC8q IE5ldHdvcmsgaXMgdW5yZWFjaGFibGUgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VORVRSRVNF VCAgICAgICAgIDEwMiAvKiBOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mDQo+ ID4gcmVzZXQNCj4gPiA+ID4gKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VDT05OQUJPUlRFRCAg ICAgIDEwMyAvKiBTb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCAqLw0KPiA+ID4gPiA+ ICsjZGVmaW5lIExfRUNPTk5SRVNFVCAgICAgICAgMTA0IC8qIENvbm5lY3Rpb24gcmVzZXQgYnkg cGVlciAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PQlVGUyAgICAgICAgICAgMTA1IC8qIE5v IGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VJU0NPTk4g ICAgICAgICAgIDEwNiAvKiBUcmFuc3BvcnQgZW5kcG9pbnQgaXMgYWxyZWFkeSBjb25uZWN0ZWQN Cj4gPiAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PVENPTk4gICAgICAgICAgMTA3IC8qIFRy YW5zcG9ydCBlbmRwb2ludCBpcyBub3QgY29ubmVjdGVkICovDQo+ID4gPiA+ID4gKyNkZWZpbmUg TF9FU0hVVERPV04gICAgICAgICAxMDggLyogQ2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVu ZHBvaW50DQo+ID4gc2h1dGRvd24NCj4gPiA+ID4gKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VU T09NQU5ZUkVGUyAgICAgIDEwOSAvKiBUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNl ICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FVElNRURPVVQgICAgICAgICAxMTAgLyogQ29ubmVj dGlvbiB0aW1lZCBvdXQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VDT05OUkVGVVNFRCAgICAg IDExMSAvKiBDb25uZWN0aW9uIHJlZnVzZWQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VIT1NU RE9XTiAgICAgICAgIDExMiAvKiBIb3N0IGlzIGRvd24gKi8NCj4gPiA+ID4gPiArI2RlZmluZSBM X0VIT1NUVU5SRUFDSCAgICAgIDExMyAvKiBObyByb3V0ZSB0byBob3N0ICovDQo+ID4gPiA+ID4g KyNkZWZpbmUgTF9FQUxSRUFEWSAgICAgICAgICAxMTQgLyogT3BlcmF0aW9uIGFscmVhZHkgaW4g cHJvZ3Jlc3MgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VJTlBST0dSRVNTICAgICAgIDExNSAv KiBPcGVyYXRpb24gbm93IGluIHByb2dyZXNzICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FU1RB TEUgICAgICAgICAgICAxMTYgLyogU3RhbGUgTkZTIGZpbGUgaGFuZGxlICovDQo+ID4gPiA+ID4g KyNkZWZpbmUgTF9FVUNMRUFOICAgICAgICAgICAxMTcgLyogU3RydWN0dXJlIG5lZWRzIGNsZWFu aW5nICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9UTkFNICAgICAgICAgICAxMTggLyogTm90 IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlICovDQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTkFWQUlM ICAgICAgICAgICAxMTkgLyogTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUgKi8NCj4gPiA+ ID4gPiArI2RlZmluZSBMX0VJU05BTSAgICAgICAgICAgIDEyMCAvKiBJcyBhIG5hbWVkIHR5cGUg ZmlsZSAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRVJFTU9URUlPICAgICAgICAgMTIxIC8qIFJl bW90ZSBJL08gZXJyb3IgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VEUVVPVCAgICAgICAgICAg IDEyMiAvKiBRdW90YSBleGNlZWRlZCAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU5PTUVESVVN ICAgICAgICAgMTIzIC8qIE5vIG1lZGl1bSBmb3VuZCAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExf RU1FRElVTVRZUEUgICAgICAgMTI0IC8qIFdyb25nIG1lZGl1bSB0eXBlICovDQo+ID4gPiA+ID4g KyNkZWZpbmUgTF9FQ0FOQ0VMRUQgICAgICAgICAxMjUgLyogT3BlcmF0aW9uIENhbmNlbGVkICov DQo+ID4gPiA+ID4gKyNkZWZpbmUgTF9FTk9LRVkgICAgICAgICAgICAxMjYgLyogUmVxdWlyZWQg a2V5IG5vdCBhdmFpbGFibGUgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VLRVlFWFBJUkVEICAg ICAgIDEyNyAvKiBLZXkgaGFzIGV4cGlyZWQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VLRVlS RVZPS0VEICAgICAgIDEyOCAvKiBLZXkgaGFzIGJlZW4gcmV2b2tlZCAqLw0KPiA+ID4gPiA+ICsj ZGVmaW5lIExfRUtFWVJFSkVDVEVEICAgICAgMTI5IC8qIEtleSB3YXMgcmVqZWN0ZWQgYnkgc2Vy dmljZSAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIExfRU9XTkVSREVBRCAgICAgICAgMTMwIC8qIE93 bmVyIGRpZWQgKi8NCj4gPiA+ID4gPiArI2RlZmluZSBMX0VOT1RSRUNPVkVSQUJMRSAgIDEzMSAv KiBTdGF0ZSBub3QgcmVjb3ZlcmFibGUgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNlbmRp ZiAvKiBRRU1VXzlQX0xJTlVYX0VSUk5PX0ggKi8NCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaHcv OXBmcy85cC1sb2NhbC5oIGIvaHcvOXBmcy85cC1sb2NhbC5oDQo+ID4gPiA+ID4gaW5kZXggNTVl YTRiNzg4My4uNGM3NTg3NmUxOSAxMDA2NDQNCj4gPiA+ID4gPiAtLS0gYS9ody85cGZzLzlwLWxv Y2FsLmgNCj4gPiA+ID4gPiArKysgYi9ody85cGZzLzlwLWxvY2FsLmgNCj4gPiA+ID4gPiBAQCAt MzEsNiArMzEsMTAgQEAgc3RhdGljIGlubGluZSBib29sDQo+IGxvY2FsX2lzX21hcHBlZF9maWxl X21ldGFkYXRhKEZzQ29udGV4dA0KPiA+ID4gPiAqZnNfY3R4LA0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gIGludCBsb2NhbF9vcGVuX25vZm9sbG93KEZzQ29udGV4dCAqZnNfY3R4LCBjb25zdCBjaGFy ICpwYXRoLCBpbnQgZmxhZ3MsDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgIG1v ZGVfdCBtb2RlKTsNCj4gPiA+ID4gPiArI2lmbmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAg aW50IGxvY2FsX29wZW5kaXJfbm9mb2xsb3coRnNDb250ZXh0ICpmc19jdHgsIGNvbnN0IGNoYXIg KnBhdGgpOw0KPiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiA+ICtESVIgKmxvY2FsX29wZW5kaXJf bm9mb2xsb3coRnNDb250ZXh0ICpmc19jdHgsIGNvbnN0IGNoYXIgKnBhdGgpOw0KPiA+ID4gPiA+ ICsjZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBIcm0uLi4gUmV0dXJuaW5nIGEg RElSICogaW5zdGVhZCBvZiBhIGZpbGUgZGVzY3JpcHRvciBsb29rcyBsaWtlIHRoaXMNCj4gPiA+ ID4gaXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBmdW5jdGlvbiB3aXRoIGRpZmZlcmVudCB1c2Vy cywgYnV0IHlvdSdyZQ0KPiA+ID4gPiBrZWVwaW5nIHRoZSBzYW1lIG5hbWUuIFdoYXQncyBoYXBw ZW5pbmcgaGVyZSA/DQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gQXMgSSBtZW50aW9uZWQgYWJvdmUs IFdpbmRvd3MgZG9lcyBub3QgYWxsb3cgb3BlbigpIGZvciBhIGRpcmVjdG9yeSAocmV0dXJuDQo+ IGludA0KPiA+IHR5cGUgZmlsZSBkZXNjcmlwdG9yKSwgb25seSBhbGxvd3Mgb3BlbmRpcigpIGZv ciBhIGRpcmVjdG9yeSAocmV0dXJuIERJUiopDQo+ID4gPg0KPiA+ID4gPiA+ICAjZW5kaWYNCj4g PiA+ID4gPiBkaWZmIC0tZ2l0IGEvaHcvOXBmcy85cC11dGlsLmggYi9ody85cGZzLzlwLXV0aWwu aA0KPiA+ID4gPiA+IGluZGV4IDk3ZTY4MWUxNjcuLjZlYWRiMzhlMWQgMTAwNjQ0DQo+ID4gPiA+ ID4gLS0tIGEvaHcvOXBmcy85cC11dGlsLmgNCj4gPiA+ID4gPiArKysgYi9ody85cGZzLzlwLXV0 aWwuaA0KPiA+ID4gPiA+IEBAIC00Myw2ICs0Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbG9z ZV9wcmVzZXJ2ZV9lcnJubyhpbnQgZmQpDQo+ID4gPiA+ID4gICAgICBlcnJubyA9IHNlcnJubzsN Cj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gKyNpZm5kZWYgQ09ORklHX1dJTjMy DQo+ID4gPiA+ID4gIHN0YXRpYyBpbmxpbmUgaW50IG9wZW5hdF9kaXIoaW50IGRpcmZkLCBjb25z dCBjaGFyICpuYW1lKQ0KPiA+ID4gPiA+ICB7DQo+ID4gPiA+ID4gICAgICByZXR1cm4gb3BlbmF0 KGRpcmZkLCBuYW1lLA0KPiA+ID4gPiA+IEBAIC04OSw3ICs5MCw5IEBAIGFnYWluOg0KPiA+ID4g PiA+ICAgICAgZXJybm8gPSBzZXJybm87DQo+ID4gPiA+ID4gICAgICByZXR1cm4gZmQ7DQo+ID4g PiA+ID4gIH0NCj4gPiA+ID4gPiArI2VuZGlmIC8qICFDT05GSUdfV0lOMzIgKi8NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICBzc2l6ZV90IGZn ZXR4YXR0cmF0X25vZm9sbG93KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hh ciAqbmFtZSwNCj4gPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp2 YWx1ZSwgc2l6ZV90IHNpemUpOw0KPiA+ID4gPiA+ICBpbnQgZnNldHhhdHRyYXRfbm9mb2xsb3co aW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpuYW1lLA0KPiA+ID4gPiA+ IEBAIC05OCw3ICsxMDEsMzggQEAgc3NpemVfdCBmbGlzdHhhdHRyYXRfbm9mb2xsb3coaW50IGRp cmZkLCBjb25zdCBjaGFyDQo+ID4gPiA+ICpmaWxlbmFtZSwNCj4gPiA+ID4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGlzdCwgc2l6ZV90IHNpemUpOw0KPiA+ID4gPiA+ ICBzc2l6ZV90IGZyZW1vdmV4YXR0cmF0X25vZm9sbG93KGludCBkaXJmZCwgY29uc3QgY2hhciAq ZmlsZW5hbWUsDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqbmFtZSk7DQo+ID4gPiA+ID4gKyNlbHNlDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICtzc2l6ZV90IGZnZXR4YXR0cmF0X25vZm9sbG93KGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNvbnN0 IGNoYXIgKmZpbGVuYW1lLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSk7DQo+ID4gPiA+ID4g K2ludCBmc2V0eGF0dHJhdF9ub2ZvbGxvdyhjb25zdCBjaGFyICpkaXJuYW1lLCBjb25zdCBjaGFy ICpmaWxlbmFtZSwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwNCj4gPiA+ID4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBmbGFncyk7DQo+ID4gPiA+ID4gK3NzaXplX3QgZmxpc3R4YXR0 cmF0X25vZm9sbG93KGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0K PiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaXN0LCBzaXpl X3Qgc2l6ZSk7DQo+ID4gPiA+ID4gK3NzaXplX3QgZnJlbW92ZXhhdHRyYXRfbm9mb2xsb3coY29u c3QgY2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsDQo+ID4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICtpbnQgcWVtdV9zdGF0ZnMoY29uc3QgY2hhciAqZnNfcm9vdCwgc3RydWN0 IHN0YXRmcyAqc3RidWYpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGlubGluZSBj aGFyICptZXJnZV9mc19wYXRoKGNvbnN0IGNoYXIgKnBhdGgxLCBjb25zdCBjaGFyICpwYXRoMikN Cj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgY2hhciAqZnVsbF9mc19wYXRoOw0KPiA+ID4g PiA+ICsgICAgc2l6ZV90IGZ1bGxfZnNfcGF0aF9sZW47DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsgICAgZnVsbF9mc19wYXRoX2xlbiA9IHN0cmxlbihwYXRoMSkgKyBzdHJsZW4ocGF0aDIpICsg MjsNCj4gPiA+ID4gPiArICAgIGZ1bGxfZnNfcGF0aCA9IGdfbWFsbG9jKGZ1bGxfZnNfcGF0aF9s ZW4pOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gKyAgICBzdHJjcHkoZnVsbF9mc19wYXRoLCBwYXRo MSk7DQo+ID4gPiA+ID4gKyAgICBzdHJjYXQoZnVsbF9mc19wYXRoLCAiXFwiKTsNCj4gPiA+ID4g PiArICAgIHN0cmNhdChmdWxsX2ZzX3BhdGgsIHBhdGgyKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gKyAgICByZXR1cm4gZnVsbF9mc19wYXRoOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsjZW5kaWYgLyogIUNPTkZJR19XSU4zMiAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArI2lmbmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAgLyoNCj4gPiA+ID4gPiAgICog RGFyd2luIGhhcyBkX3NlZWtvZmYsIHdoaWNoIGFwcGVhcnMgdG8gZnVuY3Rpb24gc2ltaWxhcmx5 IHRvIGRfb2ZmLg0KPiA+ID4gPiA+ICAgKiBIb3dldmVyLCBpdCBkb2VzIG5vdCBhcHBlYXIgdG8g YmUgc3VwcG9ydGVkIG9uIGFsbCBmaWxlIHN5c3RlbXMsDQo+ID4gPiA+ID4gQEAgLTExMyw2ICsx NDcsNyBAQCBzdGF0aWMgaW5saW5lIG9mZl90IHFlbXVfZGlyZW50X29mZihzdHJ1Y3QgZGlyZW50 ICpkZW50KQ0KPiA+ID4gPiA+ICAgICAgcmV0dXJuIGRlbnQtPmRfb2ZmOw0KPiA+ID4gPiA+ICAj ZW5kaWYNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ICsjZW5kaWYgLyogIUNPTkZJR19XSU4zMiAq Lw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIC8qKg0KPiA+ID4gPiA+ICAgKiBxZW11X2RpcmVudF9k dXAoKSAtIER1cGxpY2F0ZSBkaXJlY3RvcnkgZW50cnkgQGRlbnQuDQo+ID4gPiA+ID4gQEAgLTE1 NCw2ICsxODksMTIgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZGlyZW50ICpxZW11X2RpcmVudF9k dXAoc3RydWN0DQo+ID4gZGlyZW50DQo+ID4gPiA+ICpkZW50KQ0KPiA+ID4gPiA+ICAjaWYgZGVm aW5lZCBDT05GSUdfREFSV0lOICYmIGRlZmluZWQgQ09ORklHX1BUSFJFQURfRkNIRElSX05QDQo+ ID4gPiA+ID4gIGludCBwdGhyZWFkX2ZjaGRpcl9ucChpbnQgZmQpIF9fYXR0cmlidXRlX18oKHdl YWtfaW1wb3J0KSk7DQo+ID4gPiA+ID4gICNlbmRpZg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr I2lmbmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAgaW50IHFlbXVfbWtub2RhdChpbnQgZGly ZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KTsNCj4gPiA+ ID4gPiArI2Vsc2UNCj4gPiA+ID4gPiAraW50IHFlbXVfbWtub2RhdChjb25zdCBjaGFyICpkaXJu YW1lLCBjb25zdCBjaGFyICpmaWxlbmFtZSwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICBt b2RlX3QgbW9kZSwgZGV2X3QgZGV2KTsNCj4gPiA+ID4NCj4gPiA+ID4gU2FtZSByZW1hcmsgYXMg bG9jYWxfb3BlbmRpcl9ub2ZvbGxvdygpLiBFc3BlY2lhbGx5LCB0aGlzIGNsZWFybHkgZGV2aWF0 ZXMNCj4gPiA+ID4gZnJvbSB0aGUgbWtub2RhdCgyKSBzZW1hbnRpY3MgOiBkaXJmZCBpcyBzdXBw b3NlZCB0byBiZSBhIGhhbmRsZSBvbiBhbg0KPiA+ID4gPiBleGlzdGluZyBkaXJlY3RvcnksIHdo aWxlIGRpcm5hbWUgY2Fubm90IHByb3ZpZGUgc3VjaCBhIGd1YXJhbnRlZS4NCj4gPiA+DQo+ID4g PiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgQVBJcyBsaWtlICphdDogb3BlbmF0KCksIG1rbm9kYXQo KSwgZXRjLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4NCj4g PiA+ID4gPiAgI2VuZGlmDQo+ID4gPiA+ID4gZGlmZiAtLWdpdCBhL2h3LzlwZnMvOXAuaCBiL2h3 LzlwZnMvOXAuaA0KPiA+ID4gPiA+IGluZGV4IDk5NGY5NTI2MDAuLjg3ZThlYWM4NDAgMTAwNjQ0 DQo+ID4gPiA+ID4gLS0tIGEvaHcvOXBmcy85cC5oDQo+ID4gPiA+ID4gKysrIGIvaHcvOXBmcy85 cC5oDQo+ID4gPiA+ID4gQEAgLTMsMTMgKzMsMzYgQEANCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAj aW5jbHVkZSA8ZGlyZW50Lmg+DQo+ID4gPiA+ID4gICNpbmNsdWRlIDx1dGltZS5oPg0KPiA+ID4g PiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICAjaW5jbHVkZSA8c3lzL3Jlc291 cmNlLmg+DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ICAjaW5jbHVkZSAiZnNkZXYvZmls ZS1vcC05cC5oIg0KPiA+ID4gPiA+ICAjaW5jbHVkZSAiZnNkZXYvOXAtaW92LW1hcnNoYWwuaCIN Cj4gPiA+ID4gPiAgI2luY2x1ZGUgInFlbXUvdGhyZWFkLmgiDQo+ID4gPiA+ID4gICNpbmNsdWRl ICJxZW11L2Nvcm91dGluZS5oIg0KPiA+ID4gPiA+ICAjaW5jbHVkZSAicWVtdS9xaHQuaCINCj4g PiA+ID4gPg0KPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsjZGVmaW5lIE9fTk9DVFRZICAgICAgICAgICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5l IE9fTkRFTEFZICAgICAgICAgICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5lIE9fTk9OQkxPQ0sgICAg ICAgICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5lIE9fRFNZTkMgICAgICAgICAgICAgMA0KPiA+ID4g PiA+ICsjZGVmaW5lIE9fRElSRUNUICAgICAgICAgICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5lIE9f Tk9GT0xMT1cgICAgICAgICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5lIE9fTk9BVElNRSAgICAgICAg ICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5lIE9fU1lOQyAgICAgICAgICAgICAgMA0KPiA+ID4gPiA+ ICsjZGVmaW5lIE9fQVNZTkMgICAgICAgICAgICAgMA0KPiA+ID4gPiA+ICsjZGVmaW5lIE9fRElS RUNUT1JZICAgICAgICAgMDIwMDAwMDANCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNkZWZpbmUg RkFTWU5DICAgICAgICAgICAgICAwDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjZGVmaW5lIEFU X1JFTU9WRURJUiAgICAgICAgMQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2RlZmluZSBOQU1F X01BWCAgICAgICAgICAgIDI2MA0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICBlbnVtIHsNCj4gPiA+ID4gPiAgICAgIFA5X1RMRVJST1IgPSA2 LA0KPiA+ID4gPiA+ICAgICAgUDlfUkxFUlJPUiwNCj4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvaHcv OXBmcy85cC1sb2NhbC13aW4zMi5jIGIvaHcvOXBmcy85cC1sb2NhbC13aW4zMi5jDQo+ID4gPiA+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwLi5hYWI3 YzlmN2I1DQo+ID4gPiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiA+ICsrKyBiL2h3LzlwZnMv OXAtbG9jYWwtd2luMzIuYw0KPiA+ID4gPiA+IEBAIC0wLDAgKzEsMTI0MiBAQA0KPiA+ID4gPiA+ ICsvKg0KPiA+ID4gPiA+ICsgKiA5cCBXaW5kb3dzIGNhbGxiYWNrDQo+ID4gPiA+ID4gKyAqDQo+ ID4gPiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMiBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4N Cj4gPiA+ID4gPiArICoNCj4gPiA+ID4gPiArICogQmFzZWQgb24gaHcvOXBmcy85cC1sb2NhbC5j DQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4gIFNlZQ0KPiA+ID4gPiA+ICsg KiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Lg0KPiA+ID4gPiA+ ICsgKi8NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ID4gKyAqIE5vdCBzbyBm YXN0ISBZb3UgbWlnaHQgd2FudCB0byByZWFkIHRoZSA5cCBkZXZlbG9wZXIgZG9jcyBmaXJzdDoN Cj4gPiA+ID4gPiArICogaHR0cHM6Ly93aWtpLnFlbXUub3JnL0RvY3VtZW50YXRpb24vOXANCj4g PiA+ID4gPiArICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjaW5jbHVkZSAicWVtdS9vc2Rl cC5oIg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8d2luZG93cy5oPg0KPiA+ID4gPiA+ICsjaW5jbHVk ZSA8ZGlyZW50Lmg+DQo+ID4gPiA+ID4gKyNpbmNsdWRlICI5cC5oIg0KPiA+ID4gPiA+ICsjaW5j bHVkZSAiOXAtbG9jYWwuaCINCj4gPiA+ID4gPiArI2luY2x1ZGUgIjlwLXhhdHRyLmgiDQo+ID4g PiA+ID4gKyNpbmNsdWRlICI5cC11dGlsLmgiDQo+ID4gPiA+ID4gKyNpbmNsdWRlICJmc2Rldi9x ZW11LWZzZGV2LmgiICAgLyogbG9jYWxfb3BzICovDQo+ID4gPiA+ID4gKyNpbmNsdWRlICJxYXBp L2Vycm9yLmgiDQo+ID4gPiA+ID4gKyNpbmNsdWRlICJxZW11L2N1dGlscy5oIg0KPiA+ID4gPiA+ ICsjaW5jbHVkZSAicWVtdS9lcnJvci1yZXBvcnQuaCINCj4gPiA+ID4gPiArI2luY2x1ZGUgInFl bXUvb3B0aW9uLmgiDQo+ID4gPiA+ID4gKyNpbmNsdWRlIDxsaWJnZW4uaD4NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gK3N0YXRpYyBpbmxpbmUgaW50IG9wZW5maWxlX3dpdGhfY3R4KEZzQ29udGV4 dCAqZnNfY3R4LCBjb25zdCBjaGFyICpuYW1lLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlKQ0KPiA+ID4gPiA+ICt7 DQo+ID4gPiA+ID4gKyAgICBjaGFyICpmdWxsX2ZpbGVfbmFtZTsNCj4gPiA+ID4gPiArICAgIGlu dCBmZDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBmdWxsX2ZpbGVfbmFtZSA9IG1lcmdl X2ZzX3BhdGgoZnNfY3R4LT5mc19yb290LCBuYW1lKTsNCj4gPiA+ID4gPiArICAgIGZkID0gb3Bl bihmdWxsX2ZpbGVfbmFtZSwgZmxhZ3MgfCBfT19CSU5BUlksIG1vZGUpOw0KPiA+ID4gPg0KPiA+ ID4gPiBIbW0uLi4gaW4gb3JkZXIgdG8gZml4IENWRS0yMDE2LTk2MDIsIHdlIGhhZCB0byBiYW4g cGF0aCBiYXNlZCBzeXNjYWxscw0KPiA+ID4gPiBiZWNhdXNlIGEgbWFsaWNpb3VzIGd1ZXN0IGNv dWxkIGVhc2lseSBlc2NhcGUgdGhlIGZpbGUgc3lzdGVtIHdpdGggYQ0KPiA+ID4gPiBzeW1saW5r IGF0dGFjay4gU28gbm93IHdlIGJhc2ljYWxseSBzcGxpdCBhbGwgcGF0aHMgd2UgZ2V0IGZyb20g dGhlDQo+ID4gPiA+IGNsaWVudCBzbyB0aGF0IHdlIG9ubHkgY2FsbCAqYXQoKSBzeXNjYWxscyB3 aXRoIGEgc2luZ2xlIHBhdGggZWxlbWVudA0KPiA+ID4gPiBhbmQgYSBOT0ZPTExPVyBmbGFnLg0K PiA+ID4gPg0KPiA+ID4gPiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGRvaW5nIHRoZSB2ZXJ5 IG9wcG9zaXRlLCB3aGljaCBpcyBjbGVhcmx5DQo+ID4gPiA+IGEgbm8gZ28uDQo+ID4gPg0KPiA+ ID4gV2luZG93cyBkb2VzIG5vdCBoYXZlIG9wZW5hdCgpLCBzbyB0aGUgb25seSB3YXkgaXMgdG8g YnVpbGQgdXAgZnVsbCBmaWxlbmFtZQ0KPiA+IGJ5IG1lcmdlX2ZzX3BhdGgoKS4NCj4gPiA+IEFk ZGl0aW9uYWxseSwgV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmsgQVBJcyBp biBQT1NJWCBsaWJyYXJ5LA0KPiBzbw0KPiA+IHRoZXJlIG1heSBub3QgYmUgYW55IHNlY3VyaXR5 IHJpc2tzLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiArICAgIGdfZnJlZShmdWxsX2ZpbGVf bmFtZSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIGZkOw0KPiA+ID4gPiA+ ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgaW5saW5lIERJUiAqb3BlbmRpcl93 aXRoX2N0eChGc0NvbnRleHQgKmZzX2N0eCwgY29uc3QgY2hhciAqbmFtZSkNCj4gPiA+ID4gPiAr ew0KPiA+ID4gPiA+ICsgICAgY2hhciAqZnVsbF9maWxlX25hbWU7DQo+ID4gPiA+ID4gKyAgICBE SVIgKmRpcjsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBmdWxsX2ZpbGVfbmFtZSA9IG1l cmdlX2ZzX3BhdGgoZnNfY3R4LT5mc19yb290LCBuYW1lKTsNCj4gPiA+ID4gPiArICAgIGRpciA9 IG9wZW5kaXIoZnVsbF9maWxlX25hbWUpOw0KPiA+ID4gPg0KPiA+ID4gPiBTYW1lIHJlbWFyayBo ZXJlLg0KPiA+ID4NCj4gPiA+IFNhbWUgYXMgYWJvdmUuDQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4g PiA+ICsgICAgZ19mcmVlKGZ1bGxfZmlsZV9uYW1lKTsNCj4gPiA+ID4gPiArICAgIHJldHVybiBk aXI7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK2ludCBsb2NhbF9vcGVu X25vZm9sbG93KEZzQ29udGV4dCAqZnNfY3R4LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3Ms DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfdCBtb2RlKQ0KPiA+ID4g PiA+ICt7DQo+ID4gPiA+ID4gKyAgICBpbnQgZmQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsg ICAgaWYgKHBhdGhbc3RybGVuKHBhdGgpIC0gMV0gPT0gJy8nIHx8IChmbGFncyAmIE9fRElSRUNU T1JZKSAhPSAwKSB7DQo+ID4gPiA+DQo+ID4gPiA+IFdoeSBzcGVjaWFsIGNhc2luZyAnLycgPw0K PiA+ID4NCj4gPiA+IFdpbmRvd3MgZG9lcyBub3QgYWxsb3cgb3BlbigpIGZvciBhIGRpcmVjdG9y eSwgb3IgYW55IGZpbGVuYW1lIGZvcm1hdCBsaWtlDQo+IGENCj4gPiBkaXJlY3RvcnkuDQo+ID4g Pg0KPiA+ID4gPg0KPiA+ID4gPiA+ICsgICAgICAgIC8qIFdpbmRvd3MgZG9lcyBub3QgYWxsb3cg Y2FsbCBvcGVuKCkgZm9yIGEgZGlyZWN0b3J5ICovDQo+ID4gPiA+ID4gKyAgICAgICAgZmQgPSAt MTsNCj4gPiA+ID4NCj4gPiA+ID4gVGhpcyAtMSB3aWxsIHVsdGltYXRlbHkgY2F1c2UgYSBSbGVy cm9yIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQNCj4gPiA+ID4gdG8gdGhlIGNsaWVudCA6IGFuIGVy cm5vIHNob3VsZCBiZSBzZXQgaGVyZS4uLiBidXQgYW55d2F5LCB0aGlzDQo+ID4gPiA+IGlzbid0 IHRoZSB3YXkgdG8gZG8gaXQgOiB5b3Ugc2hvdWxkIGp1c3QgY2FsbCBvcGVuKCkgYW5kIGxldA0K PiA+ID4gPiB3aW5kb3dzIHNldCB0aGUgZXJybm8uDQo+ID4gPiA+DQo+ID4gPiA+IE5vdywgdGhl IG1ham9yIHByb2JsZW0gaXMgdGhhdCB3ZSByZWFsbHkgbmVlZCB0byBiZSBhYmxlIHRvDQo+ID4g PiA+IG9wZW4gZGlyZWN0b3JpZXMgYmVjYXVzZSBvZiBDVkUtMjAxNi05NjAyLiBJc24ndCBpdCBw b3NzaWJsZQ0KPiA+ID4gPiB0byBhY2hpZXZlIGl0IGluIHNvbWUgb3RoZXIgd2F5LCBlLmcuIG9w ZW5kaXIoKSBhbmQgZGlyZmQoKSA/DQo+ID4gPg0KPiA+ID4gQXMgSSBtZW50aW9uZWQgYWJvdmUs IFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBmZCAoZmlsZSBkZXNjcmlwdG9yKSBmb3IgZGlyZWN0 b3J5DQo+ID4gb3BlbigpLg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4gPiArICAgIH0gZWxzZSB7 DQo+ID4gPiA+ID4gKyAgICAgICAgZmQgPSBvcGVuZmlsZV93aXRoX2N0eChmc19jdHgsIHBhdGgs IGZsYWdzLCBtb2RlKTsNCj4gPiA+ID4NCj4gPiA+ID4gRG9lcyB0aGlzIGhvbm9yIHRoZSBOT0ZP TExPVyBzZW1hbnRpY3MgPyBJdCBzZWVtcyBub3QuLi53aGljaCBpcyBhZ2Fpbg0KPiA+ID4gPiBh IG5vIGdvLiBZb3UgY2Fubm90IGJsaW5kbHkgYXNzdW1lIGhvdyB0aGUgdW5kZXJseWluZyBmaWxl IHN5c3RlbQ0KPiA+ID4gPiBoYW5kbGVzIHN5bWxpbmtzLg0KPiA+ID4gPg0KPiA+ID4NCj4gPiA+ IFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rIGluIFBPU0lYIEFQSXMsDQo+ ID4gPg0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIHJldHVy biBmZDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArRElSICpsb2NhbF9v cGVuZGlyX25vZm9sbG93KEZzQ29udGV4dCAqZnNfY3R4LCBjb25zdCBjaGFyICpwYXRoKQ0KPiA+ DQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIHJldHVybiBvcGVuZGlyX3dpdGhfY3R4KGZz X2N0eCwgcGF0aCk7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRp YyBGSUxFICpsb2NhbF9mb3BlbmF0KGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNvbnN0IGNoYXIgKm5h bWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1v ZGUpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIGNoYXIgKmZ1bGxfZmlsZV9uYW1lOw0K PiA+ID4gPiA+ICsgICAgY2hhciBtb2Rlc3RyWzNdID0gezB9Ow0KPiA+ID4gPiA+ICsgICAgRklM RSAqZnA7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgLyoNCj4gPiA+ID4gPiArICAgICAq IG9ubHkgc3VwcG9ydHMgdHdvIG1vZGVzDQo+ID4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gPiAr ICAgIGlmIChtb2RlWzBdID09ICdyJykgew0KPiA+ID4gPiA+ICsgICAgICAgIG1vZGVzdHJbMF0g PSAncic7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2UgaWYgKG1vZGVbMF0gPT0gJ3cnKSB7DQo+ID4g PiA+ID4gKyAgICAgICAgbW9kZXN0clswXSA9ICd3JzsNCj4gPiA+ID4gPiArICAgIH0gZWxzZSB7 DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4g PiA+ID4gKyAgICAvKiBXaW5kb3dzIGhvc3QgbmVlZHMgJ2InIGZsYWcgKi8NCj4gPiA+ID4gPiAr ICAgIG1vZGVzdHJbMV0gPSAnYic7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZnVsbF9m aWxlX25hbWUgPSBtZXJnZV9mc19wYXRoKGRpcm5hbWUsIG5hbWUpOw0KPiA+ID4gPiA+ICsgICAg ZnAgPSBmb3BlbihmdWxsX2ZpbGVfbmFtZSwgbW9kZXN0cik7DQo+ID4NCj4gPiA+ID4gPiArICAg IGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0 dXJuIGZwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdm9p ZCBsb2NhbF9tYXBwZWRfZmlsZV9hdHRyKGNvbnN0IGNoYXIgKmRpcnBhdGgsIGNvbnN0IGNoYXIg Km5hbWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHN0YXQgKnN0YnVmKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICBGSUxFICpmcDsN Cj4gPiA+ID4gPiArICAgIGNoYXIgYnVmW0FUVFJfTUFYXTsNCj4gPiA+ID4gPiArICAgIGNoYXIg KmZ1bGxfZmlsZV9uYW1lOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChzdHJjbXAo bmFtZSwgIi4iKSAhPSAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZnVsbF9maWxlX25hbWUgPSBt ZXJnZV9mc19wYXRoKGRpcnBhdGgsIFZJUlRGU19NRVRBX0RJUik7DQo+ID4gPiA+ID4gKyAgICAg ICAgZnAgPSBsb2NhbF9mb3BlbmF0KGZ1bGxfZmlsZV9uYW1lLCBuYW1lLCAiciIpOw0KPiA+ID4g PiA+ICsgICAgICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICB9IGVs c2Ugew0KPiA+ID4gPiA+ICsgICAgICAgIGZwID0gbG9jYWxfZm9wZW5hdChkaXJwYXRoLCBWSVJU RlNfTUVUQV9ST09UX0ZJTEUsICJyIik7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKyAg ICBpZiAoIWZwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuOw0KPiA+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIG1lbXNldChidWYsIDAsIEFUVFJfTUFYKTsN Cj4gPiA+ID4gPiArICAgIHdoaWxlIChmZ2V0cyhidWYsIEFUVFJfTUFYLCBmcCkpIHsNCj4gPiA+ ID4gPiArICAgICAgICBpZiAoIXN0cm5jbXAoYnVmLCAidmlydGZzLnVpZCIsIDEwKSkgew0KPiA+ ID4gPiA+ICsgICAgICAgICAgICBzdGJ1Zi0+c3RfdWlkID0gYXRvaShidWYgKyAxMSk7DQo+ID4g PiA+ID4gKyAgICAgICAgfSBlbHNlIGlmICghc3RybmNtcChidWYsICJ2aXJ0ZnMuZ2lkIiwgMTAp KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHN0YnVmLT5zdF9naWQgPSBhdG9pKGJ1ZiArIDEx KTsNCj4gPiA+ID4gPiArICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInZpcnRmcy5t b2RlIiwgMTEpKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHN0YnVmLT5zdF9tb2RlID0gKHN0 YnVmLT5zdF9tb2RlICYgfjA3NzcpOw0KPiA+ID4gPiA+ICsgICAgICAgICAgICBzdGJ1Zi0+c3Rf bW9kZSB8PSAoYXRvaShidWYgKyAxMikgJiAwNzc3KTsNCj4gPg0KPiA+ID4gPiA+ICsgICAgICAg IH0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmLCAidmlydGZzLnJkZXYiLCAxMSkpIHsNCj4gPiA+ID4g PiArICAgICAgICAgICAgc3RidWYtPnN0X3JkZXYgPSBhdG9pKGJ1ZiArIDEyKTsNCj4gPiA+ID4g PiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgQVRUUl9NQVgp Ow0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgZmNsb3NlKGZwKTsNCj4gPiA+ID4g PiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9sc3RhdChGc0Nv bnRleHQgKmZzX2N0eCwgVjlmc1BhdGggKmZzX3BhdGgsIHN0cnVjdCBzdGF0DQo+ID4gPiA+ICpz dGJ1ZikNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgaW50IGVyciA9IC0xOw0KPiA+ID4g PiA+ICsgICAgY2hhciAqZnVsbF9kaXJfbmFtZSwgKmZ1bGxfZmlsZV9uYW1lOw0KPiA+ID4gPiA+ ICsgICAgY2hhciAqZGlycGF0aCA9IGdfcGF0aF9nZXRfZGlybmFtZShmc19wYXRoLT5kYXRhKTsN Cj4gPiA+ID4gPiArICAgIGNoYXIgKm5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lKGZzX3BhdGgt PmRhdGEpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGZ1bGxfZGlyX25hbWUgPSBtZXJn ZV9mc19wYXRoKGZzX2N0eC0+ZnNfcm9vdCwgZGlycGF0aCk7DQo+ID4gPiA+ID4gKyAgICBmdWxs X2ZpbGVfbmFtZSA9IG1lcmdlX2ZzX3BhdGgoZnVsbF9kaXJfbmFtZSwgbmFtZSk7DQo+ID4gPiA+ ID4gKyAgICBlcnIgPSBzdGF0KGZ1bGxfZmlsZV9uYW1lLCBzdGJ1Zik7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsgICAgaWYgKGVyciA9PSAwICYmIHN0cmNtcChmc19wYXRoLT5kYXRhLCAiLiIp ID09IDApIHsNCj4gPiA+ID4gPiArICAgICAgICAvKg0KPiA+ID4gPiA+ICsgICAgICAgICAqIEhh cmQgY29kZSBmb3Igcm9vdCBkaXJlY3Rvcnkgb24gV2luZG93cyBob3N0Lg0KPiA+ID4gPiA+ICsg ICAgICAgICAqIFRoaXMgd2lsbCByb290IGRpcmVjdG9yeSBoYXZlIGEgc3BlY2lhbCBpbm9kZSBu dW1iZXIsDQo+ID4gPiA+ID4gKyAgICAgICAgICogdGhlbiBndWVzdCBPUyBjYW4gZGV0ZWN0IGl0 IGlzIGEgc3BlY2lhbCBkaXJlY3RvcnkuDQo+ID4gPiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ ID4gKyAgICAgICAgc3RidWYtPnN0X2lubyA9IDI7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKGZzX2N0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9N QVBQRUQpIHsNCj4gPiA+ID4gPiArICAgICAgICAvKiBBY3R1YWwgY3JlZGVudGlhbHMgYXJlIHBh cnQgb2YgZXh0ZW5kZWQgYXR0cnMgKi8NCj4gPg0KPiA+ID4gPiA+ICsgICAgICAgIHVpZF90IHRt cF91aWQ7DQo+ID4gPiA+ID4gKyAgICAgICAgZ2lkX3QgdG1wX2dpZDsNCj4gPiA+ID4gPiArICAg ICAgICBtb2RlX3QgdG1wX21vZGU7DQo+ID4gPiA+ID4gKyAgICAgICAgZGV2X3QgdG1wX2RldjsN Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKGZnZXR4YXR0cmF0X25vZm9sbG93 KGZ1bGxfZGlyX25hbWUsIG5hbWUsICJ1c2VyLnZpcnRmcy51aWQiLA0KPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wX3VpZCwgc2l6ZW9mKHVpZF90KSkgPiAw KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHN0YnVmLT5zdF91aWQgPSBsZTMyX3RvX2NwdSh0 bXBfdWlkKTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKGZn ZXR4YXR0cmF0X25vZm9sbG93KGZ1bGxfZGlyX25hbWUsIG5hbWUsICJ1c2VyLnZpcnRmcy5naWQi LA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wX2dpZCwg c2l6ZW9mKGdpZF90KSkgPiAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHN0YnVmLT5zdF9n aWQgPSBsZTMyX3RvX2NwdSh0bXBfZ2lkKTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ ID4gKyAgICAgICAgaWYgKGZnZXR4YXR0cmF0X25vZm9sbG93KGZ1bGxfZGlyX25hbWUsIG5hbWUs ICJ1c2VyLnZpcnRmcy5tb2RlIiwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnRtcF9tb2RlLCBzaXplb2YobW9kZV90KSkgPiAwKSB7DQo+ID4gPiA+ID4gKyAg ICAgICAgICAgIHN0YnVmLT5zdF9tb2RlID0gKHN0YnVmLT5zdF9tb2RlICYgfjA3NzcpOw0KPiA+ ID4gPiA+ICsgICAgICAgICAgICBzdGJ1Zi0+c3RfbW9kZSB8PSBsZTMyX3RvX2NwdSh0bXBfbW9k ZSk7DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChmZ2V0eGF0 dHJhdF9ub2ZvbGxvdyhmdWxsX2Rpcl9uYW1lLCBuYW1lLCAidXNlci52aXJ0ZnMucmRldiIsDQo+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfZGV2LCBzaXpl b2YoZGV2X3QpKSA+IDApIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgc3RidWYtPnN0X3JkZXYg PSBsZTY0X3RvX2NwdSh0bXBfZGV2KTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4g KyAgICB9IGVsc2UgaWYgKGZzX2N0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9NQVBQRURfRklM RSkgew0KPiA+ID4gPiA+ICsgICAgICAgIGxvY2FsX21hcHBlZF9maWxlX2F0dHIoZnVsbF9kaXJf bmFtZSwgbmFtZSwgc3RidWYpOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICBnX2ZyZWUo ZnVsbF9kaXJfbmFtZSk7DQo+ID4NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBpZiAoZXJy KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZ290byBlcnJfb3V0Ow0KPiA+ID4gPiA+ICsgICAgfQ0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArZXJyX291dDoNCj4gPiA+ID4gPiArICAgIGdfZnJlZShu YW1lKTsNCj4gPiA+ID4gPiArICAgIGdfZnJlZShkaXJwYXRoKTsNCj4gPiA+ID4gPiArICAgIHJl dHVybiBlcnI7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBp bnQgbG9jYWxfc2V0X21hcHBlZF9maWxlX2F0dHJhdChjb25zdCBjaGFyICpkaXJuYW1lLCBjb25z dCBjaGFyDQo+ID4gKm5hbWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGc0NyZWQgKmNyZWRwKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAg ICBGSUxFICpmcDsNCj4gPiA+ID4gPiArICAgIGludCByZXQ7DQo+ID4gPiA+ID4gKyAgICBjaGFy IGJ1ZltBVFRSX01BWF07DQo+ID4gPiA+ID4gKyAgICBpbnQgdWlkID0gLTEsIGdpZCA9IC0xLCBt b2RlID0gLTEsIHJkZXYgPSAtMTsNCj4gPiA+ID4gPiArICAgIGJvb2wgaXNfcm9vdCA9ICFzdHJj bXAobmFtZSwgIi4iKTsNCj4gPiA+ID4gPiArICAgIGNoYXIgKmZ1bGxfZGlyX25hbWU7DQo+ID4g PiA+ID4gKw0KPiA+DQo+ID4gPiA+ID4gKyAgICBpZiAoaXNfcm9vdCkgew0KPiA+ID4gPiA+ICsg ICAgICAgIGZwID0gbG9jYWxfZm9wZW5hdChkaXJuYW1lLCBWSVJURlNfTUVUQV9ST09UX0ZJTEUs ICJyIik7DQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKCFmcCkgew0KPiA+ID4gPiA+ICsgICAgICAg ICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICBn b3RvIHVwZGF0ZV9tYXBfZmlsZTsNCj4gPiA+ID4gPiArICAgICAgICAgICAgfSBlbHNlIHsNCj4g PiA+ID4gPiArICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgICAgICAg ICAgfQ0KPiA+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4gPiArICAgIH0gZWxzZSB7DQo+ID4g PiA+ID4gKyAgICAgICAgLyoNCj4gPiA+ID4gPiArICAgICAgICAgKiBtYXBwZWQtZmlsZToNCj4g PiA+ID4gPiArICAgICAgICAgKiAgIDxzdWJfZmlsZT4gYXR0cmlidXRlIHN0b3JlZCB0bzoNCj4g PiA+ID4gPiArICAgICAgICAgKiAgIDxkaXJlY3Rvcnk+ICsgVklSVEZTX01FVEFfRElSICsgPHN1 Yl9maWxlX25hbWU+DQo+ID4gPiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ID4gKyAgICAgICAg ZnVsbF9kaXJfbmFtZSA9IG1lcmdlX2ZzX3BhdGgoZGlybmFtZSwgVklSVEZTX01FVEFfRElSKTsN Cj4gPiA+ID4gPiArICAgICAgICByZXQgPSBta2RpcihmdWxsX2Rpcl9uYW1lKTsNCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKHJldCA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKSB7 DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGdfZnJlZShmdWxsX2Rpcl9uYW1lKTsNCj4gPiA+ID4g PiArICAgICAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKyAgICAgICAgZnAgPSBsb2NhbF9mb3BlbmF0KGZ1bGxfZGlyX25hbWUs IG5hbWUsICJyIik7DQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKCFmcCkgew0KPiA+ID4gPiA+ICsg ICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgICBnb3RvIHVwZGF0ZV9tYXBfZmlsZTsNCj4gPiA+ID4gPiArICAgICAgICAgICAgfSBlbHNl IHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgIGdfZnJlZShmdWxsX2Rpcl9uYW1lKTsNCj4g PiA+ID4gPiArICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgICAgICAg ICAgfQ0KPiA+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKyAgICBtZW1zZXQoYnVmLCAwLCBBVFRSX01BWCk7DQo+ID4gPiA+ID4gKyAg ICB3aGlsZSAoZmdldHMoYnVmLCBBVFRSX01BWCwgZnApKSB7DQo+ID4gPiA+ID4gKyAgICAgICAg aWYgKCFzdHJuY21wKGJ1ZiwgInZpcnRmcy51aWQiLCAxMCkpIHsNCj4gPiA+ID4gPiArICAgICAg ICAgICAgdWlkID0gYXRvaShidWYgKyAxMSk7DQo+ID4gPiA+ID4gKyAgICAgICAgfSBlbHNlIGlm ICghc3RybmNtcChidWYsICJ2aXJ0ZnMuZ2lkIiwgMTApKSB7DQo+ID4gPiA+ID4gKyAgICAgICAg ICAgIGdpZCA9IGF0b2koYnVmICsgMTEpOw0KPiA+ID4gPiA+ICsgICAgICAgIH0gZWxzZSBpZiAo IXN0cm5jbXAoYnVmLCAidmlydGZzLm1vZGUiLCAxMSkpIHsNCj4gPiA+ID4gPiArICAgICAgICAg ICAgbW9kZSA9IGF0b2koYnVmICsgMTIpOw0KPiA+ID4gPiA+ICsgICAgICAgIH0gZWxzZSBpZiAo IXN0cm5jbXAoYnVmLCAidmlydGZzLnJkZXYiLCAxMSkpIHsNCj4gPiA+ID4gPiArICAgICAgICAg ICAgcmRldiA9IGF0b2koYnVmICsgMTIpOw0KPiA+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4g PiArICAgICAgICBtZW1zZXQoYnVmLCAwLCBBVFRSX01BWCk7DQo+ID4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ID4gKyAgICBmY2xvc2UoZnApOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArdXBkYXRl X21hcF9maWxlOg0KPiA+ID4gPiA+ICsgICAgaWYgKGlzX3Jvb3QpIHsNCj4gPiA+ID4gPiArICAg ICAgICBmcCA9IGxvY2FsX2ZvcGVuYXQoZGlybmFtZSwgVklSVEZTX01FVEFfUk9PVF9GSUxFLCAi dyIpOw0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIHsNCj4gPiA+ID4gPiArICAgICAgICBmcCA9IGxv Y2FsX2ZvcGVuYXQoZnVsbF9kaXJfbmFtZSwgbmFtZSwgInciKTsNCj4gPiA+ID4gPiArICAgICAg ICBnX2ZyZWUoZnVsbF9kaXJfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKyAg ICBpZiAoIWZwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsg ICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChjcmVkcC0+ZmNfdWlkICE9IC0x KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgdWlkID0gY3JlZHAtPmZjX3VpZDsNCj4gPiA+ID4gPiAr ICAgIH0NCj4gPiA+ID4gPiArICAgIGlmIChjcmVkcC0+ZmNfZ2lkICE9IC0xKSB7DQo+ID4gPiA+ ID4gKyAgICAgICAgZ2lkID0gY3JlZHAtPmZjX2dpZDsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gPiArICAgIGlmIChjcmVkcC0+ZmNfbW9kZSAhPSAobW9kZV90KS0xKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgbW9kZSA9IGNyZWRwLT5mY19tb2RlOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4g PiA+ICsgICAgaWYgKGNyZWRwLT5mY19yZGV2ICE9IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAg cmRldiA9IGNyZWRwLT5mY19yZGV2Ow0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgIGlmICh1aWQgIT0gLTEpIHsNCj4gPiA+ID4gPiArICAgICAgICBmcHJpbnRm KGZwLCAidmlydGZzLnVpZD0lZFxuIiwgdWlkKTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4g PiArICAgIGlmIChnaWQgIT0gLTEpIHsNCj4gPiA+ID4gPiArICAgICAgICBmcHJpbnRmKGZwLCAi dmlydGZzLmdpZD0lZFxuIiwgZ2lkKTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArICAg IGlmIChtb2RlICE9IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZnByaW50ZihmcCwgInZpcnRm cy5tb2RlPSVkXG4iLCBtb2RlKTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArICAgIGlm IChyZGV2ICE9IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZnByaW50ZihmcCwgInZpcnRmcy5y ZGV2PSVkXG4iLCByZGV2KTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArICAgIGZjbG9z ZShmcCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiA+ID4g K30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgbG9jYWxfc2V0X3hhdHRyYXQo Y29uc3QgY2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqcGF0aCwNCj4gPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGc0NyZWQgKmNyZWRwKQ0KPiA+ID4gPiA+ICt7DQo+ID4g PiA+ID4gKyAgICBpbnQgZXJyOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChjcmVk cC0+ZmNfdWlkICE9IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgdWludDMyX3QgdG1wX3VpZCA9 IGNwdV90b19sZTMyKGNyZWRwLT5mY191aWQpOw0KPiA+ID4gPiA+ICsgICAgICAgIGVyciA9IGZz ZXR4YXR0cmF0X25vZm9sbG93KGRpcm5hbWUsIHBhdGgsICJ1c2VyLnZpcnRmcy51aWQiLA0KPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfdWlkLCBzaXpl b2YodWlkX3QpLCAwKTsNCj4gPiA+ID4gPiArICAgICAgICBpZiAoZXJyKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgICAgIHJldHVybiBlcnI7DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgaWYgKGNyZWRwLT5mY19naWQgIT0gLTEpIHsNCj4gPiA+ ID4gPiArICAgICAgICB1aW50MzJfdCB0bXBfZ2lkID0gY3B1X3RvX2xlMzIoY3JlZHAtPmZjX2dp ZCk7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJyID0gZnNldHhhdHRyYXRfbm9mb2xsb3coZGlybmFt ZSwgcGF0aCwgInVzZXIudmlydGZzLmdpZCIsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnRtcF9naWQsIHNpemVvZihnaWRfdCksIDApOw0KPiA+ID4gPiA+ ICsgICAgICAgIGlmIChlcnIpIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIGVycjsN Cj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKyAgICBp ZiAoY3JlZHAtPmZjX21vZGUgIT0gKG1vZGVfdCktMSkgew0KPiA+ID4gPiA+ICsgICAgICAgIHVp bnQzMl90IHRtcF9tb2RlID0gY3B1X3RvX2xlMzIoY3JlZHAtPmZjX21vZGUpOw0KPiA+ID4gPiA+ ICsgICAgICAgIGVyciA9IGZzZXR4YXR0cmF0X25vZm9sbG93KGRpcm5hbWUsIHBhdGgsICJ1c2Vy LnZpcnRmcy5tb2RlIiwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdG1wX21vZGUsIHNpemVvZihtb2RlX3QpLCAwKTsNCj4gPiA+ID4gPiArICAgICAgICBp ZiAoZXJyKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHJldHVybiBlcnI7DQo+ID4gPiA+ID4g KyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgaWYgKGNyZWRwLT5m Y19yZGV2ICE9IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgdWludDY0X3QgdG1wX3JkZXYgPSBj cHVfdG9fbGU2NChjcmVkcC0+ZmNfcmRldik7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJyID0gZnNl dHhhdHRyYXRfbm9mb2xsb3coZGlybmFtZSwgcGF0aCwgInVzZXIudmlydGZzLnJkZXYiLA0KPiA+ ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfcmRldiwgc2l6 ZW9mKGRldl90KSwgMCk7DQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKGVycikgew0KPiA+ID4gPiA+ ICsgICAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ID4gPiA+ICsgICAgICAgIH0NCj4gPiA+ID4g PiArICAgIH0NCj4gPiA+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgc3NpemVfdCBsb2NhbF9yZWFkbGluayhGc0NvbnRleHQg KmZzX2N0eCwgVjlmc1BhdGggKmZzX3BhdGgsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnN6KQ0KPiA+ID4gPiA+ICt7DQo+ID4g PiA+ID4gKyAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gK3N0YXRpYyBpbnQgbG9jYWxfY2xvc2UoRnNDb250ZXh0ICpjdHgsIFY5ZnNGaWRPcGVuU3Rh dGUgKmZzKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICByZXR1cm4gY2xvc2UoZnMtPmZk KTsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2Nh bF9jbG9zZWRpcihGc0NvbnRleHQgKmN0eCwgVjlmc0ZpZE9wZW5TdGF0ZSAqZnMpDQo+ID4gPiA+ ID4gK3sNCj4gPiA+ID4gPiArICAgIHJldHVybiBjbG9zZWRpcihmcy0+ZGlyLnN0cmVhbSk7DQo+ ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgbG9jYWxfb3Bl bihGc0NvbnRleHQgKmN0eCwgVjlmc1BhdGggKmZzX3BhdGgsDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICBpbnQgZmxhZ3MsIFY5ZnNGaWRPcGVuU3RhdGUgKmZzKQ0KPiA+ID4gPiA+ ICt7DQo+ID4gPiA+ID4gKyAgICBpbnQgZmQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg ZmQgPSBsb2NhbF9vcGVuX25vZm9sbG93KGN0eCwgZnNfcGF0aC0+ZGF0YSwgZmxhZ3MsIDApOw0K PiA+ID4gPiA+ICsgICAgaWYgKGZkID09IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJu IC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgZnMtPmZkID0gZmQ7DQo+ID4g PiA+ID4gKyAgICByZXR1cm4gZnMtPmZkOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICtzdGF0aWMgaW50IGxvY2FsX29wZW5kaXIoRnNDb250ZXh0ICpjdHgsDQo+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBWOWZzUGF0aCAqZnNfcGF0aCwgVjlmc0ZpZE9w ZW5TdGF0ZSAqZnMpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIERJUiAqc3RyZWFtOw0K PiA+ID4gPiA+ICsgICAgY2hhciAqZnVsbF9maWxlX25hbWU7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsgICAgZnVsbF9maWxlX25hbWUgPSBtZXJnZV9mc19wYXRoKGN0eC0+ZnNfcm9vdCwgZnNf cGF0aC0+ZGF0YSk7DQo+ID4gPiA+ID4gKyAgICBzdHJlYW0gPSBvcGVuZGlyKGZ1bGxfZmlsZV9u YW1lKTsNCj4gPiA+ID4gPiArICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICsgICAgaWYgKCFzdHJlYW0pIHsNCj4gPiA+ID4gPiArICAgICAgICByZXR1 cm4gLTE7bG9jYWxfb3BlbmRpcl9ub2ZvbGxvd2xvY2FsX29wZW5kaXJfbm9mb2xsb3cNCj4gPiA+ ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBmcy0+ZGlyLnN0cmVhbSA9 IHN0cmVhbTsNCj4gPiA+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBsb2NhbF9yZXdpbmRkaXIoRnNDb250ZXh0ICpj dHgsIFY5ZnNGaWRPcGVuU3RhdGUgKmZzKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICBy ZXdpbmRkaXIoZnMtPmRpci5zdHJlYW0pOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICtzdGF0aWMgb2ZmX3QgbG9jYWxfdGVsbGRpcihGc0NvbnRleHQgKmN0eCwgVjlmc0Zp ZE9wZW5TdGF0ZSAqZnMpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIHJldHVybiB0ZWxs ZGlyKGZzLT5kaXIuc3RyZWFtKTsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiArc3RhdGljIHN0cnVjdCBkaXJlbnQgKmxvY2FsX3JlYWRkaXIoRnNDb250ZXh0ICpjdHgsIFY5 ZnNGaWRPcGVuU3RhdGUgKmZzKQ0KPiA+ID4gPiA+ICt7bG9jYWxfb3BlbmRpcl9ub2ZvbGxvdw0K PiA+ID4gPiA+ICsgICAgc3RydWN0IGRpcmVudCAqZW50cnk7DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICthZ2FpbjoNCj4gPiA+ID4gPiArICAgIGVudHJ5ID0gcmVhZGRpcihmcy0+ZGlyLnN0cmVh bSk7DQo+ID4gPiA+ID4gKyAgICBpZiAoIWVudHJ5KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0 dXJuIE5VTEw7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg aWYgKGN0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9NQVBQRURfRklMRSkgew0KPiA+ID4gPiA+ ICsgICAgICAgIGlmIChsb2NhbF9pc19tYXBwZWRfZmlsZV9tZXRhZGF0YShjdHgsIGVudHJ5LT5k X25hbWUpKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIC8qIHNraXAgdGhlIG1ldGEgZGF0YSAq Lw0KPiA+ID4gPiA+ICsgICAgICAgICAgICBnb3RvIGFnYWluOw0KPiA+ID4gPiA+ICsgICAgICAg IH0NCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICByZXR1cm4g ZW50cnk7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyB2b2lk IGxvY2FsX3NlZWtkaXIoRnNDb250ZXh0ICpjdHgsIFY5ZnNGaWRPcGVuU3RhdGUgKmZzLCBvZmZf dA0KPiBvZmYpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIG9mZl90IGNvdW50Ow0KPiA+ ID4gPiA+ICsgICAgc3RydWN0IGRpcmVudCAqZmluZGVudHJ5Ow0KPiA+ID4gPiA+ICsgICAgc3Ry dWN0IGRpcmVudCAqZW50cnk7DQo+ID4gPiA+ID4gKyAgICBzaXplX3QgbmFtZWxlblszXSA9IHsw fTsNCj4gPiA+ID4gPiArICAgIG9mZl90IGRpcmVudG9mZlszXSA9IHstMSwgLTEsIC0xfTsNCj4g PiA+ID4gPiArICAgIGNoYXIgKmRfbmFtZVszXTsNCj4gPiA+ID4gPiArICAgIGludCBpOw0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIC8qDQo+ID4gPiA+ID4gKyAgICAgKiBNaW5HVydzIHNl ZWtkaXIoKSByZXF1aXJlcyBkaXJlY3RvcnkgaXMgbm90IG1vZGlmaWVkLiBJZiBndWVzdCBPUw0K PiA+IGlzDQo+ID4gPiA+ID4gKyAgICAgKiBtb2RpZnlpbmcgdGhlIGRpcmVjdG9yeSB3aGVuIGNh bGxpbmcgc2Vla2RpcigpLCBlLmcuOiAicm0gLXJmICoiLA0KPiA+ID4gPiA+ICsgICAgICogdGhl biBNaW5HVydzIHNlZWtkaXIoKSB3aWxsIHNlZWsgdG8gYSB3cm9uZyBvZmZzZXQuDQo+ID4gPiA+ ID4gKyAgICAgKg0KPiA+ID4gPiA+ICsgICAgICogVGhpcyBmdW5jdGlvbiBzYXZlcyBzb21lIG9s ZCBvZmZzZXQgZGlyZWN0b3J5IGVudHJ5IG5hbWUsDQo+ID4gPiA+ID4gKyAgICAgKiBhbmQgbG9v a3VwIGN1cnJlbnQgZW50cnkgYWdhaW4sIGFuZCBjb21wYXJlIHRoZSBvZmZzZXQuDQo+ID4gPiA+ ID4gKyAgICAgKg0KPiA+ID4gPiA+ICsgICAgICogSWYgbmV3IG9mZnNldCBpcyBsZXNzIHRoYW4g b2xkIG9mZnNldCwgdGhhdCBtZWFucyBzb21lb25lIGlzIGRlbGV0aW5nDQo+ID4gPiA+ID4gKyAg ICAgKiBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5LCB0aHVzIHdlIG5lZWQgdG8gc2VlayBvZmZzZXQg YmFja3dhcmQuDQo+ID4gPiA+ID4gKyAgICAgKg0KPiA+ID4gPiA+ICsgICAgICogSWYgbmV3IG9m ZnNldCBpcyBsYXJnZXIgdGhhbiBvbGQgb2Zmc2V0LCB0aGF0IG1lYW5zIHNvbWVvbmUgaXMgY3Jl YXRpbmcNCj4gPiA+ID4gPiArICAgICAqIGZpbGVzIGluIHRoZSBkaXJlY3RvcnksIHRodXMgd2Ug bmVlZCB0byBzZWVrIG9mZnNldCBmb3J3YXJkLg0KPiA+ID4gPiA+ICsgICAgICovDQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgZGlyZW50b2ZmWzBdID0gdGVsbGRpcihmcy0+ZGlyLnN0cmVh bSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgLyogZG8gbm90aGluZyBpZiBjdXJyZW50 IG9mZnNldCBpcyAwIG9yIEVPRiAqLw0KPiA+ID4gPiA+ICsgICAgaWYgKGRpcmVudG9mZlswXSA9 PSAwIHx8IGRpcmVudG9mZlswXSA8IDApIHsNCj4gPiA+ID4gPiArICAgICAgICBzZWVrZGlyKGZz LT5kaXIuc3RyZWFtLCBvZmYpOw0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiA7DQo+ID4gPiA+ ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZF9uYW1lWzBdID0gZ19tYWxs b2MwKHNpemVvZihlbnRyeS0+ZF9uYW1lKSAqIDMpOw0KPiA+ID4gPiA+ICsgICAgZF9uYW1lWzFd ID0gZF9uYW1lWzBdICsgc2l6ZW9mKGVudHJ5LT5kX25hbWUpOw0KPiA+ID4gPiA+ICsgICAgZF9u YW1lWzJdID0gZF9uYW1lWzFdICsgc2l6ZW9mKGVudHJ5LT5kX25hbWUpOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArICAgIC8qIHNhdmUgMyBuZWFyZXN0IGVudHJpZXMgYW5kIG9mZnNldHMgKi8N Cj4gPiA+ID4gPiArICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gPiA+ID4gPiArICAg ICAgICBlbnRyeSA9ICZmcy0+ZGlyLnN0cmVhbS0+ZGRfZGlyOw0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArICAgICAgICBtZW1jcHkoZF9uYW1lW2ldLCBlbnRyeS0+ZF9uYW1lLCBlbnRyeS0+ZF9u YW1sZW4pOw0KPiA+ID4gPiA+ICsgICAgICAgIG5hbWVsZW5baV0gPSBzdHJsZW4oZF9uYW1lW2ld KSArIDE7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgIGRpcmVudG9mZltpXSA9IHRl bGxkaXIoZnMtPmRpci5zdHJlYW0pOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgICAgICBl bnRyeSA9IHJlYWRkaXIoZnMtPmRpci5zdHJlYW0pOw0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChl bnRyeSA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gPiA+ ICsgICAgICAgIH0NCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAg ICAvKiBsb29rdXAgc2F2ZWQgZW50cmllcyBhZ2FpbiAqLw0KPiA+ID4gPiA+ICsgICAgZm9yIChp ID0gMDsgaSA8IDMgJiYgZGlyZW50b2ZmW2ldICE9IC0xOyBpKyspIHsNCj4gPiA+ID4gPiArICAg ICAgICByZXdpbmRkaXIoZnMtPmRpci5zdHJlYW0pOw0KPiA+ID4gPiA+ICsgICAgICAgIGNvdW50 ID0gMDsNCj4gPiA+ID4gPiArICAgICAgICB3aGlsZSAoKGZpbmRlbnRyeSA9IHJlYWRkaXIoZnMt PmRpci5zdHJlYW0pKSAhPSBOVUxMKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGNvdW50Kys7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgICAgICBpZiAobWVtY21wKGZpbmRlbnRy eS0+ZF9uYW1lLCBkX25hbWVbaV0sIG5hbWVsZW5baV0pID09IDApIHsNCj4gPiA+ID4gPiArICAg ICAgICAgICAgICAgIGlmIChjb3VudCArIGkgPT0gZGlyZW50b2ZmW2ldKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgc2Vla2Rpcihmcy0+ZGlyLnN0cmVhbSwgb2ZmKTsNCj4gPiA+ ID4gPiArICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiA+ID4gPiArICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoY291bnQgKyBpIDwgZGlyZW50b2ZmW2ldKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgb2ZmID0gb2ZmIC0gKGRpcmVudG9mZltpXSAtIGNvdW50KSAt IGk7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZiA8PSAwKSB7DQo+ID4g PiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZiA9IDA7DQo+ID4gPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIHNlZWtkaXIo ZnMtPmRpci5zdHJlYW0sIG9mZik7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgZ290 byBvdXQ7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgIG9mZiA9IG9mZiArIChjb3VudCAtIGRpcmVudG9mZltpXSkgLSBp Ow0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgIHNlZWtkaXIoZnMtPmRpci5zdHJlYW0s IG9mZik7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIH1sb2NhbF9vcGVu ZGlyX25vZm9sbG93DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ ID4gPiA+ICsgICAgLyogY2FuIG5vdCBnZXQgYW55dGhpbmcsIHNlZWsgYmFja3dhcmQgKi8NCj4g PiA+ID4gPiArICAgIG9mZiA9IG9mZiAtIDE7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg c2Vla2Rpcihmcy0+ZGlyLnN0cmVhbSwgb2ZmKTsNCj4gPiA+ID4gPiArb3V0Og0KPiA+ID4gPiA+ ICsgICAgZ19mcmVlKGRfbmFtZVswXSk7DQo+ID4gPiA+ID4gKyAgICByZXR1cm4gOw0KPiA+ID4g PiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgc3NpemVfdCBsb2NhbF9wcmVh ZHYoRnNDb250ZXh0ICpjdHgsIFY5ZnNGaWRPcGVuU3RhdGUgKmZzLA0KPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsDQo+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW92Y250LCBvZmZfdCBvZmZzZXQp DQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArI2lmZGVmIENPTkZJR19QUkVBRFYNCj4gPiA+ID4g PiArICAgIHJldHVybiBwcmVhZHYoZnMtPmZkLCBpb3YsIGlvdmNudCwgb2Zmc2V0KTsNCj4gPiA+ ID4gPiArI2Vsc2UNCj4gPiA+ID4gPiArICAgIGludCBlcnIgPSBsc2Vlayhmcy0+ZmQsIG9mZnNl dCwgU0VFS19TRVQpOw0KPiA+ID4gPiA+ICsgICAgaWYgKGVyciA9PSAtMSkgew0KPiA+ID4gPiA+ ICsgICAgICAgIHJldHVybiBlcnI7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ ICsgICAgICAgIHJldHVybiByZWFkdihmcy0+ZmQsIGlvdiwgaW92Y250KTsNCj4gPiA+ID4gPiAr ICAgIH0NCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gK3N0YXRpYyBzc2l6ZV90IGxvY2FsX3B3cml0ZXYoRnNDb250ZXh0ICpjdHgsIFY5ZnNG aWRPcGVuU3RhdGUgKmZzLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBpb3ZjbnQsIG9mZl90IG9mZnNldCkNCj4gPiA+ID4gPiArew0KPiA+ID4g PiA+ICsgICAgc3NpemVfdCByZXQ7DQo+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdfUFJFQURWDQo+ ID4gPiA+ID4gKyAgICByZXQgPSBwd3JpdGV2KGZzLT5mZCwgaW92LCBpb3ZjbnQsIG9mZnNldCk7 DQo+ID4gPiA+ID4gKyNlbHNlDQo+ID4gPiA+ID4gKyAgICBpbnQgZXJyID0gbHNlZWsoZnMtPmZk LCBvZmZzZXQsIFNFRUtfU0VUKTsNCj4gPiA+ID4gPiArICAgIGlmIChlcnIgPT0gLTEpIHsNCj4g PiA+ID4gPiArICAgICAgICByZXR1cm4gZXJyOw0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIHsNCj4g PiA+ID4gPiArICAgICAgICByZXQgPSB3cml0ZXYoZnMtPmZkLCBpb3YsIGlvdmNudCk7DQo+ID4g PiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklH X1NZTkNfRklMRV9SQU5HRQ0KPiA+ID4gPiA+ICsgICAgaWYgKHJldCA+IDAgJiYgY3R4LT5leHBv cnRfZmxhZ3MgJiBWOUZTX0lNTUVESUFURV9XUklURU9VVCkgew0KPiA+ID4gPiA+ICsgICAgICAg IC8qDQo+ID4gPiA+ID4gKyAgICAgICAgICogSW5pdGlhdGUgYSB3cml0ZWJhY2suIFRoaXMgaXMg bm90IGEgZGF0YSBpbnRlZ3JpdHkgc3luYy4NCj4gPiA+ID4gPiArICAgICAgICAgKiBXZSB3YW50 IHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IGxlYXZlIGRpcnR5IHBhZ2VzIGluIHRoZSBjYWNoZQ0K PiA+ID4gPiA+ICsgICAgICAgICAqIGFmdGVyIHdyaXRlIHdoZW4gd3JpdGVvdXQ9aW1tZWRpYXRl IGlzIHNlcGNpZmllZC4NCj4gPiA+ID4gPiArICAgICAgICAgKi8NCj4gPiA+ID4gPiArICAgICAg ICBzeW5jX2ZpbGVfcmFuZ2UoZnMtPmZkLCBvZmZzZXQsIHJldCwNCj4gPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFIHwNCj4gPiBTWU5D X0ZJTEVfUkFOR0VfV1JJVEUpOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsjZW5kaWYN Cj4gPiA+ID4gPiArICAgIHJldHVybiByZXQ7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gK3N0YXRpYyBpbnQgbG9jYWxfY2htb2QoRnNDb250ZXh0ICpmc19jdHgsIFY5ZnNQ YXRoICpmc19wYXRoLCBGc0NyZWQNCj4gKmNyZWRwKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4g KyAgICBjaGFyICpkaXJwYXRoID0gZ19wYXRoX2dldF9kaXJuYW1lKGZzX3BhdGgtPmRhdGEpOw0K PiA+ID4gPiA+ICsgICAgY2hhciAqbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUoZnNfcGF0aC0+ ZGF0YSk7DQo+ID4gPiA+ID4gKyAgICBpbnQgcmV0ID0gLTE7DQo+ID4gPiA+ID4gKyAgICBjaGFy ICpmdWxsX2ZpbGVfbmFtZSA9IE5VTEw7DQo+ID4gPiA+ID4gKyAgICBESVIgKmRpcjsNCj4gPiA+ ID4gPiArICAgIGRpciA9IGxvY2FsX29wZW5kaXJfbm9mb2xsb3coZnNfY3R4LCBkaXJwYXRoKTsN Cj4gPiA+ID4gPiArICAgIGlmIChkaXIgPT0gTlVMTCkgew0KPiA+ID4gPiA+ICsgICAgICAgIGdv dG8gb3V0Ow0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgZnVsbF9maWxlX25hbWUg PSBtZXJnZV9mc19wYXRoKGZzX2N0eC0+ZnNfcm9vdCwgZGlycGF0aCk7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsgICAgaWYgKGZzX2N0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9NQVBQRUQp IHsNCj4gPiA+ID4gPiArICAgICAgICByZXQgPSBsb2NhbF9zZXRfeGF0dHJhdChmdWxsX2ZpbGVf bmFtZSwgbmFtZSwgY3JlZHApOw0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIGlmIChmc19jdHgtPmV4 cG9ydF9mbGFncyAmIFY5RlNfU01fTUFQUEVEX0ZJTEUpIHsNCj4gPiA+ID4gPiArICAgICAgICBy ZXQgPSBsb2NhbF9zZXRfbWFwcGVkX2ZpbGVfYXR0cmF0KGZ1bGxfZmlsZV9uYW1lLCBuYW1lLCBj cmVkcCk7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2UgaWYgKGZzX2N0eC0+ZXhwb3J0X2ZsYWdzICYg VjlGU19TTV9QQVNTVEhST1VHSCB8fA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBmc19jdHgt PmV4cG9ydF9mbGFncyAmIFY5RlNfU01fTk9ORSkgew0KPiA+ID4gPiA+ICsgICAgICAgIHJldCA9 IC0xOw0KPiA+ID4gPiA+ICsgICAgICAgIGVycm5vID0gRU5PVFNVUDsNCj4gPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gPiArICAgIGNsb3NlZGlyKGRpcik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICtvdXQ6DQo+ID4gPiA+ID4gKyAgICBpZiAoZnVsbF9maWxlX25hbWUgIT0gTlVMTCkgew0KPiA+ ID4gPiA+ICsgICAgICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICB9 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGRpcnBhdGgpOw0KPiA+ID4gPiA+ ICsgICAgZ19mcmVlKG5hbWUpOw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIHJldDsNCj4gPiA+ID4g PiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9ta25vZChGc0Nv bnRleHQgKmZzX2N0eCwgVjlmc1BhdGggKmRpcl9wYXRoLA0KPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIEZzQ3JlZCAqY3JlZHApDQo+ID4gPiA+ID4g K3sNCj4gPiA+ID4gPiArICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9ta2RpcihGc0NvbnRleHQgKmZzX2N0eCwgVjlm c1BhdGggKmRpcl9wYXRoLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKm5hbWUsIEZzQ3JlZCAqY3JlZHApDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAg IGludCBlcnIgPSAtMTsNCj4gPiA+ID4gPiArICAgIGNoYXIgKmZ1bGxfZmlsZV9uYW1lOw0KPiA+ ID4gPiA+ICsgICAgY2hhciAqZnVsbF9kaXJfbmFtZTsNCj4gPiA+ID4gPiArICAgIERJUiAqZGly Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChmc19jdHgtPmV4cG9ydF9mbGFncyAm IFY5RlNfU01fTUFQUEVEX0ZJTEUgJiYNCj4gPiA+ID4gPiArICAgICAgICBsb2NhbF9pc19tYXBw ZWRfZmlsZV9tZXRhZGF0YShmc19jdHgsIG5hbWUpKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJy bm8gPSBFSU5WQUw7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsg ICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGRpciA9IGxvY2FsX29wZW5kaXJfbm9m b2xsb3coZnNfY3R4LCBkaXJfcGF0aC0+ZGF0YSk7DQo+ID4gPiA+ID4gKyAgICBpZiAoZGlyID09 IE5VTEwpIHsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9 DQo+ID4gPiA+ID4gKyAgICBjbG9zZWRpcihkaXIpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr ICAgIGZ1bGxfZGlyX25hbWUgPSBtZXJnZV9mc19wYXRoKGZzX2N0eC0+ZnNfcm9vdCwgZGlyX3Bh dGgtPmRhdGEpOw0KPiA+ID4gPiA+ICsgICAgZnVsbF9maWxlX25hbWUgPSBtZXJnZV9mc19wYXRo KGZ1bGxfZGlyX25hbWUsIG5hbWUpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChm c19jdHgtPmV4cG9ydF9mbGFncyAmIFY5RlNfU01fTUFQUEVEIHx8DQo+ID4gPiA+ID4gKyAgICAg ICAgZnNfY3R4LT5leHBvcnRfZmxhZ3MgJiBWOUZTX1NNX01BUFBFRF9GSUxFKSB7DQo+ID4gPiA+ ID4gKyAgICAgICAgZXJyID0gbWtkaXIoZnVsbF9maWxlX25hbWUpOw0KPiA+ID4gPiA+ICsgICAg ICAgIGlmIChlcnIgPT0gLTEpIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgZ290byBvdXQ7DQo+ ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgICAgIGNyZWRwLT5mY19tb2RlID0g Y3JlZHAtPmZjX21vZGU7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChmc19j dHgtPmV4cG9ydF9mbGFncyAmIFY5RlNfU01fTUFQUEVEKSB7DQo+ID4gPiA+ID4gKyAgICAgICAg ICAgIGVyciA9IGxvY2FsX3NldF94YXR0cmF0KGZ1bGxfZGlyX25hbWUsIG5hbWUsIGNyZWRwKTsN Cj4gPiA+ID4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBlcnIg PSBsb2NhbF9zZXRfbWFwcGVkX2ZpbGVfYXR0cmF0KGZ1bGxfZGlyX25hbWUsIG5hbWUsDQo+IGNy ZWRwKTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKGVyciA9 PSAtMSkgew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBybWRpcihmdWxsX2ZpbGVfbmFtZSk7DQo+ ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIGlmIChmc19jdHgtPmV4 cG9ydF9mbGFncyAmIFY5RlNfU01fUEFTU1RIUk9VR0ggfHwNCj4gPiA+ID4gPiArICAgICAgICAg ICAgICAgZnNfY3R4LT5leHBvcnRfZmxhZ3MgJiBWOUZTX1NNX05PTkUpIHsNCj4gPiA+ID4gPiAr ICAgICAgICBlcnIgPSBta2RpcihmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICAgICAg aWYgKGVyciA9PSAtMSkgew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiA+ ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICAgICAgLyogV2luZG93cyBkb2VzIG5vdCBz dXBwb3J0IGNobW9kLCBkbyBub3RoaW5nIGhlcmUgKi8NCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKyAgICBnb3RvIG91dDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g K291dDoNCj4gPiA+ID4gPiArICAgIGdfZnJlZShmdWxsX2Rpcl9uYW1lKTsNCj4gPiA+ID4gPiAr ICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICByZXR1cm4gZXJyOw0K PiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgaW50IGxvY2FsX2Zz dGF0KEZzQ29udGV4dCAqZnNfY3R4LCBpbnQgZmlkX3R5cGUsDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgVjlmc0ZpZE9wZW5TdGF0ZSAqZnMsIHN0cnVjdCBzdGF0ICpzdGJ1ZikN Cj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGludCBlcnIsIGZkOw0K PiA+ID4gPiA+ICsgICAgY2hhciBmaWxlbmFtZVtOQU1FX01BWF07DQo+ID4gPiA+ID4gKyAgICBj aGFyICpkaXJwYXRoOw0KPiA+ID4gPiA+ICsgICAgY2hhciAqbmFtZTsNCj4gPiA+ID4gPiArICAg IEhBTkRMRSBoRmlsZTsNCj4gPiA+ID4gPiArICAgIERXT1JEIGR3UmV0Ow0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArICAgIGlmIChmaWRfdHlwZSA9PSBQOV9GSURfRElSKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgLyogV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IG9wZW4gZGlyZWN0b3J5ICovDQo+ ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIHsNCj4g PiA+ID4gPiArICAgICAgICBmZCA9IGZzLT5mZDsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKyAgICBlcnIgPSBmc3RhdChmZCwgc3RidWYpOw0KPiA+ID4gPiA+ICsg ICAgaWYgKGVycikgew0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiBlcnI7DQo+ID4gPiA+ID4g KyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgLyogZ2V0IHJlYWwgZmlsZSBuYW1l IGJ5IGZkICovDQo+ID4gPiA+ID4gKyAgICBoRmlsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUo ZmQpOw0KPiA+ID4gPiA+ICsgICAgZHdSZXQgPSBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUoaEZp bGUsIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLA0KPiAwKTsNCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKyAgICBpZiAoZHdSZXQgPj0gTkFNRV9NQVgpIHsNCj4gPiA+ID4gPiArICAgICAgICBy ZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKyAgICAvKiBza2lwIHN0cmlu ZyAiXFxcXD9cXCIgcmV0dXJuIGZyb20gR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKCkgKi8NCj4g PiA+ID4gPiArICAgIG1lbW1vdmUoZmlsZW5hbWUsIGZpbGVuYW1lICsgNCwgTkFNRV9NQVggLSA0 KTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBkaXJwYXRoID0gZ19wYXRoX2dldF9kaXJu YW1lKGZpbGVuYW1lKTsNCj4gPiA+ID4gPiArICAgIG5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1l KGZpbGVuYW1lKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBpZiAoZnNfY3R4LT5leHBv cnRfZmxhZ3MgJiBWOUZTX1NNX01BUFBFRCkgew0KPiA+ID4gPiA+ICsgICAgICAgIC8qIEFjdHVh bCBjcmVkZW50aWFscyBhcmUgcGFydCBvZiBleHRlbmRlZCBhdHRycyAqLw0KPiA+ID4gPiA+ICsg ICAgICAgIHVpZF90IHRtcF91aWQ7DQo+ID4gPiA+ID4gKyAgICAgICAgZ2lkX3QgdG1wX2dpZDsN Cj4gPiA+ID4gPiArICAgICAgICBtb2RlX3QgdG1wX21vZGU7DQo+ID4gPiA+ID4gKyAgICAgICAg ZGV2X3QgdG1wX2RldjsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKGZnZXR4 YXR0cmF0X25vZm9sbG93KGRpcnBhdGgsIG5hbWUsICJ1c2VyLnZpcnRmcy51aWQiLA0KPiA+ID4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wX3VpZCwgc2l6ZW9mKHVp ZF90KSkgPiAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHN0YnVmLT5zdF91aWQgPSBsZTMy X3RvX2NwdSh0bXBfdWlkKTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICAg ICAgaWYgKGZnZXR4YXR0cmF0X25vZm9sbG93KGRpcnBhdGgsIG5hbWUsICJ1c2VyLnZpcnRmcy5n aWQiLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wX2dp ZCwgc2l6ZW9mKGdpZF90KSkgPiAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHN0YnVmLT5z dF9naWQgPSBsZTMyX3RvX2NwdSh0bXBfZ2lkKTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4g PiA+ID4gKyAgICAgICAgaWYgKGZnZXR4YXR0cmF0X25vZm9sbG93KGRpcnBhdGgsIG5hbWUsICJ1 c2VyLnZpcnRmcy5tb2RlIiwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnRtcF9tb2RlLCBzaXplb2YobW9kZV90KSkgPiAwKSB7DQo+ID4gPiA+ID4gKyAgICAg ICAgICAgIHN0YnVmLT5zdF9tb2RlID0gKHN0YnVmLT5zdF9tb2RlICYgfjA3NzcpOw0KPiA+ID4g PiA+ICsgICAgICAgICAgICBzdGJ1Zi0+c3RfbW9kZSB8PSBsZTMyX3RvX2NwdSh0bXBfbW9kZSk7 DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChmZ2V0eGF0dHJh dF9ub2ZvbGxvdyhkaXJwYXRoLCBuYW1lLCAidXNlci52aXJ0ZnMucmRldiIsDQo+ID4gPiA+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfZGV2LCBzaXplb2YoZGV2X3Qp KSA+IDApIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgc3RidWYtPnN0X3JkZXYgPSBsZTY0X3Rv X2NwdSh0bXBfZGV2KTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKyAgICB9IGVs c2UgaWYgKGZzX2N0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9NQVBQRURfRklMRSkgew0KPiA+ ID4gPiA+ICsgICAgICAgIGVycm5vID0gRU9QTk9UU1VQUDsNCj4gPiA+ID4gPiArICAgICAgICBn X2ZyZWUoZGlycGF0aCk7DQo+ID4gPiA+ID4gKyAgICAgICAgZ19mcmVlKG5hbWUpOw0KPiA+ID4g PiA+ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gKyAgICBnX2ZyZWUoZGlycGF0aCk7DQo+ID4gPiA+ID4gKyAgICBnX2ZyZWUobmFt ZSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIGVycjsNCj4gPiA+ID4gPiAr fQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9vcGVuMihGc0NvbnRl eHQgKmZzX2N0eCwgVjlmc1BhdGggKmRpcl9wYXRoLCBjb25zdCBjaGFyDQo+ID4gKm5hbWUsDQo+ ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBGc0NyZWQgKmNyZWRw LCBWOWZzRmlkT3BlblN0YXRlICpmcykNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgaW50 IGZkID0gLTE7DQo+ID4gPiA+ID4gKyAgICBpbnQgZXJyID0gLTE7DQo+ID4gPiA+ID4gKyAgICBj aGFyICpmdWxsX2ZpbGVfbmFtZTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBpZiAoZnNf Y3R4LT5leHBvcnRfZmxhZ3MgJiBWOUZTX1NNX01BUFBFRF9GSUxFICYmDQo+ID4gPiA+ID4gKyAg ICAgICAgbG9jYWxfaXNfbWFwcGVkX2ZpbGVfbWV0YWRhdGEoZnNfY3R4LCBuYW1lKSkgew0KPiA+ ID4gPiA+ICsgICAgICAgIGVycm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVy biAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBmdWxs X2ZpbGVfbmFtZSA9IG1lcmdlX2ZzX3BhdGgoZGlyX3BhdGgtPmRhdGEsIG5hbWUpOw0KPiA+ID4g PiA+ICsgICAgZmQgPSBvcGVuZmlsZV93aXRoX2N0eChmc19jdHgsIGZ1bGxfZmlsZV9uYW1lLCBm bGFncywgY3JlZHAtPmZjX21vZGUpOw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGZ1bGxfZmlsZV9u YW1lKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBlcnIgPSBmZDsNCj4gPiA+ID4gPiAr ICAgIGZzLT5mZCA9IGZkOw0KPiA+ID4gPiA+ICsgICAgZ290byBvdXQ7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsgICAgY2xvc2VfcHJlc2VydmVfZXJybm8oZmQpOw0KPiA+ID4gPiA+ICtvdXQ6 DQo+ID4gPiA+ID4gKyAgICByZXR1cm4gZXJyOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9zeW1saW5rKEZzQ29udGV4 dCAqZnNfY3R4LCBjb25zdCBjaGFyICpvbGRwYXRoLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgVjlmc1BhdGggKmRpcl9wYXRoLCBjb25zdCBjaGFyICpuYW1lLCBGc0NyZWQg KmNyZWRwKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICByZXR1cm4gLTE7DQo+ID4gPiA+ DQo+ID4gPiA+IFdoeSA/IFRoaXMgd291bGQgcmVxdWlyZSBhIGRldGFpbGVkIGNvbW1lbnQgYW5k IGFsc28gdG8gc2V0IGVycm5vLg0KPiA+ID4NCj4gPiA+IEFuIGVycm9yIG51bWJlciBzZXQgaXMg bWlzc2luZyBoZXJlLCBzaG91bGQgYmUgRU5PVFNVUC4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgbG9jYWxfbGluayhGc0Nv bnRleHQgKmN0eCwgVjlmc1BhdGggKm9sZHBhdGgsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICBWOWZzUGF0aCAqZGlycGF0aCwgY29uc3QgY2hhciAqbmFtZSkNCj4gPiA+ID4gPiAr ew0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIC0xOw0KPiA+ID4gPg0KPiA+ID4gPiBTYW1lIHJlbWFy ay4NCj4gPiA+ID4NCj4gPiA+ID4gQmVmb3JlIHJlLXBvc3RpbmcsIHlvdSByZWFsbHkgbmVlZCB0 byBjb21lIHVwIHdpdGggYSBkZXRhaWxlZCBwbGFuDQo+ID4gPiA+IGFyb3VuZCBzeW1saW5rcy4N Cj4gPiA+ID4NCj4gPiA+ID4gQ2hlZXJzLA0KPiA+ID4gPg0KPiA+ID4gPiAtLQ0KPiA+ID4gPiBH cmVnDQo+ID4gPg0KPiA+ID4gQW4gZXJyb3IgbnVtYmVyIHNldCBpcyBtaXNzaW5nIGhlcmUsIHNo b3VsZCBiZSBFTk9UU1VQLg0KPiA+ID4gV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IHN5bWJvbGlj IGxpbmsgaW4gaXRzIFBPU0lYIEFQSSBsaWJyYXJ5Lg0KPiA+ID4gSXQgYWxzbyByZXF1aXJlIEFk bWluaXN0cmF0b3IgcHJpdmlsZWdlcyBhbmQgTlRGUyAobmVlZCB0byB0dXJuIG9uIHN5bWJvbGlj DQo+IGxpbmsNCj4gPiBzdXBwb3J0KS4NCj4gPiA+DQo+ID4gPiBDdXJyZW50bHksIEkgdGhpbmsg aXQgaXMgdmVyeSBoYXJkIHRvIHN1cHBvcnQgc3ltYm9saWMgbGluayBvbiBXaW5kb3dzIGhvc3Qu DQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtz dGF0aWMgaW50IGxvY2FsX3RydW5jYXRlKEZzQ29udGV4dCAqY3R4LCBWOWZzUGF0aCAqZnNfcGF0 aCwgb2ZmX3Qgc2l6ZSkNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgaW50IGZkLCByZXQ7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZmQgPSBsb2NhbF9vcGVuX25vZm9sbG93KGN0 eCwgZnNfcGF0aC0+ZGF0YSwgT19XUk9OTFksIDApOw0KPiA+ID4gPiA+ICsgICAgaWYgKGZkID09 IC0xKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0K PiA+ID4gPiA+ICsgICAgcmV0ID0gZnRydW5jYXRlKGZkLCBzaXplKTsNCj4gPiA+ID4gPiArICAg IGNsb3NlX3ByZXNlcnZlX2Vycm5vKGZkKTsNCj4gPiA+ID4gPiArICAgIHJldHVybiByZXQ7DQo+ ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgbG9jYWxfY2hv d24oRnNDb250ZXh0ICpmc19jdHgsIFY5ZnNQYXRoICpmc19wYXRoLCBGc0NyZWQNCj4gKmNyZWRw KQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICBjaGFyICpmdWxsX2ZpbGVfbmFtZTsNCj4g PiA+ID4gPiArICAgIGNoYXIgKmRpcnBhdGggPSBnX3BhdGhfZ2V0X2Rpcm5hbWUoZnNfcGF0aC0+ ZGF0YSk7DQo+ID4gPiA+ID4gKyAgICBjaGFyICpuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZShm c19wYXRoLT5kYXRhKTsNCj4gPiA+ID4gPiArICAgIGludCByZXQgPSAtMTsNCj4gPiA+ID4gPiAr ICAgIERJUiAqZGlyOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGRpciA9IGxvY2FsX29w ZW5kaXJfbm9mb2xsb3coZnNfY3R4LCBkaXJwYXRoKTsNCj4gPiA+ID4gPiArICAgIGlmIChkaXIg PT0gTlVMTCkgew0KPiA+ID4gPiA+ICsgICAgICAgIGdvdG8gb3V0Ow0KPiA+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiA+ICsgICAgZnVsbF9maWxlX25hbWUgPSBtZXJnZV9mc19wYXRoKGZzX2N0eC0+ ZnNfcm9vdCwgZGlycGF0aCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKChjcmVk cC0+ZmNfdWlkID09IC0xICYmIGNyZWRwLT5mY19naWQgPT0gLTEpIHx8DQo+ID4gPiA+ID4gKyAg ICAgICAgKGZzX2N0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9QQVNTVEhST1VHSCkgfHwNCj4g PiA+ID4gPiArICAgICAgICAoZnNfY3R4LT5leHBvcnRfZmxhZ3MgJiBWOUZTX1NNX05PTkUpKSB7 DQo+ID4gPiA+ID4gKyAgICAgICAgLyogV2luZG93cyBkb2VzIG5vdCBzdXBwb3J0IGNob3duKCkg Ki8NCj4gPiA+ID4gPiArICAgICAgICByZXQgPSAtMTsNCj4gPiA+ID4gPiArICAgICAgICBlcnJu byA9IEVOT1RTVVA7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2UgaWYgKGZzX2N0eC0+ZXhwb3J0X2Zs YWdzICYgVjlGU19TTV9NQVBQRUQpIHsNCj4gPiA+ID4gPiArICAgICAgICByZXQgPSBsb2NhbF9z ZXRfeGF0dHJhdChmdWxsX2ZpbGVfbmFtZSwgbmFtZSwgY3JlZHApOw0KPiA+ID4gPiA+ICsgICAg fSBlbHNlIGlmIChmc19jdHgtPmV4cG9ydF9mbGFncyAmIFY5RlNfU01fTUFQUEVEX0ZJTEUpIHsN Cj4gPiA+ID4gPiArICAgICAgICByZXQgPSBsb2NhbF9zZXRfbWFwcGVkX2ZpbGVfYXR0cmF0KGZ1 bGxfZmlsZV9uYW1lLCBuYW1lLCBjcmVkcCk7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4g KyAgICBnX2ZyZWUoZnVsbF9maWxlX25hbWUpOw0KPiA+ID4gPiA+ICsgICAgY2xvc2VkaXIoZGly KTsNCj4gPiA+ID4gPiArb3V0Og0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKG5hbWUpOw0KPiA+ID4g PiA+ICsgICAgZ19mcmVlKGRpcnBhdGgpOw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIHJldDsNCj4g PiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF91dGlt ZW5zYXQoRnNDb250ZXh0ICpzLCBWOWZzUGF0aCAqZnNfcGF0aCwNCj4gPiA+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpidWYpDQo+ID4gPiA+ ID4gK3sNCj4gPiA+ID4gPiArICAgIHN0cnVjdCB1dGltYnVmIHRtOw0KPiA+ID4gPiA+ICsgICAg Y2hhciAqZnVsbF9maWxlX25hbWU7DQo+ID4gPiA+ID4gKyAgICBpbnQgZXJyOw0KPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiArICAgIHRtLmFjdGltZSA9IGJ1ZlswXS50dl9zZWM7DQo+ID4gPiA+ID4g KyAgICB0bS5tb2R0aW1lID0gYnVmWzFdLnR2X3NlYzsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KyAgICBmdWxsX2ZpbGVfbmFtZSA9IG1lcmdlX2ZzX3BhdGgocy0+ZnNfcm9vdCwgZnNfcGF0aC0+ ZGF0YSk7DQo+ID4gPiA+ID4gKyAgICBlcnIgPSB1dGltZShmdWxsX2ZpbGVfbmFtZSwgJnRtKTsN Cj4gPiA+ID4gPiArICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsgICAgcmV0dXJuIGVycjsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArc3RhdGljIGludCBsb2NhbF91bmxpbmthdF9jb21tb24oRnNDb250ZXh0ICpjdHgsIGNv bnN0IGNoYXIgKmRpcm5hbWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncykNCj4gPiA+ID4gPiArew0KPiA+ID4g PiA+ICsgICAgaW50IHJldDsNCj4gPiA+ID4gPiArICAgIGNoYXIgKmZ1bGxfZmlsZV9uYW1lOw0K PiA+ID4gPiA+ICsgICAgY2hhciAqZnVsbF9kaXJfbmFtZTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gKyAgICBmdWxsX2Rpcl9uYW1lID0gbWVyZ2VfZnNfcGF0aChjdHgtPmZzX3Jvb3QsIGRpcm5h bWUpOw0KPiA+ID4gPiA+ICsgICAgZnVsbF9maWxlX25hbWUgPSBtZXJnZV9mc19wYXRoKGZ1bGxf ZGlyX25hbWUsIG5hbWUpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChjdHgtPmV4 cG9ydF9mbGFncyAmIFY5RlNfU01fTUFQUEVEX0ZJTEUpIHsNCj4gPiA+ID4gPiArICAgICAgICBj aGFyICpmdWxsX21ldGFfZGlyX25hbWU7DQo+ID4gPiA+ID4gKyAgICAgICAgY2hhciAqZnVsbF9t ZXRhX2ZpbGVfbmFtZTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAgICAgLyoNCj4gPiA+ ID4gPiArICAgICAgICAgKiBXZSBuZWVkIHRvIHJlbW92ZSB0aGUgbWV0YWRhdGEgYXMgd2VsbDoN Cj4gPiA+ID4gPiArICAgICAgICAgKiAtIHRoZSBtZXRhZGF0YSBkaXJlY3RvcnkgaWYgd2UncmUg cmVtb3ZpbmcgYSBkaXJlY3RvcnkNCj4gPiA+ID4gPiArICAgICAgICAgKiAtIHRoZSBtZXRhZGF0 YSBmaWxlIGluIHRoZSBwYXJlbnQncyBtZXRhZGF0YSBkaXJlY3RvcnkNCj4gPiA+ID4gPiArICAg ICAgICAgKg0KPiA+ID4gPiA+ICsgICAgICAgICAqIElmIGFueSBvZiB0aGVzZSBhcmUgbWlzc2lu ZyAoaWUsIEVOT0VOVCkgdGhlbiB3ZSdyZSBwcm9iYWJseQ0KPiA+ID4gPiA+ICsgICAgICAgICAq IHRyeWluZyB0byByZW1vdmUgc29tZXRoaW5nIHRoYXQgd2Fzbid0IGNyZWF0ZWQgaW4gbWFwcGVk LWZpbGUNCj4gPiA+ID4gPiArICAgICAgICAgKiBtb2RlLiBXZSBqdXN0IGlnbm9yZSB0aGUgZXJy b3IuDQo+ID4gPiA+ID4gKyAgICAgICAgICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg ICAgIGlmICgoZmxhZ3MgJiBBVF9SRU1PVkVESVIpICE9IDApIHsNCj4gPiA+ID4gPiArICAgICAg ICAgICAgZnVsbF9tZXRhX2Rpcl9uYW1lID0gbWVyZ2VfZnNfcGF0aChmdWxsX2ZpbGVfbmFtZSwN Cj4gPiA+ID4gVklSVEZTX01FVEFfRElSKTsNCj4gPiA+ID4gPiArICAgICAgICAgICAgcmV0ID0g cm1kaXIoZnVsbF9tZXRhX2Rpcl9uYW1lKTsNCj4gPiA+ID4gPiArICAgICAgICAgICAgZ19mcmVl KGZ1bGxfbWV0YV9kaXJfbmFtZSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgICAg ICBpZiAocmV0IDwgMCAmJiBlcnJubyAhPSBFTk9FTlQpIHsNCj4gPiA+ID4gPiArICAgICAgICAg ICAgICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAg ICBnX2ZyZWUoZnVsbF9kaXJfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICByZXR1 cm4gLTE7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIH0NCj4gPiA+ID4gPiArICAgICAgICB9DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgIGZ1bGxfbWV0YV9kaXJfbmFtZSA9IG1lcmdl X2ZzX3BhdGgoZnVsbF9kaXJfbmFtZSwNCj4gVklSVEZTX01FVEFfRElSKTsNCj4gPiA+ID4gPiAr ICAgICAgICBmdWxsX21ldGFfZmlsZV9uYW1lID0gbWVyZ2VfZnNfcGF0aChmdWxsX21ldGFfZGly X25hbWUsIG5hbWUpOw0KPiA+ID4gPiA+ICsgICAgICAgIHJldCA9IHJlbW92ZShmdWxsX21ldGFf ZmlsZV9uYW1lKTsNCj4gPiA+ID4gPiArICAgICAgICBnX2ZyZWUoZnVsbF9tZXRhX2Rpcl9uYW1l KTsNCj4gPiA+ID4gPiArICAgICAgICBnX2ZyZWUoZnVsbF9tZXRhX2ZpbGVfbmFtZSk7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChyZXQgPCAwICYmIGVycm5vICE9IEVOT0VO VCkgew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBnX2ZyZWUoZnVsbF9kaXJfbmFtZSk7DQo+ID4g PiA+ID4gKyAgICAgICAgICAgIGdfZnJlZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0K PiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmICgoZmxhZ3Mg JiBBVF9SRU1PVkVESVIpICE9IDApIHsNCj4gPiA+ID4gPiArICAgICAgICByZXQgPSBybWRpcihm dWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAg ICAgIHJldCA9IHJlbW92ZShmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGZ1bGxfZGlyX25hbWUpOw0KPiA+ID4gPiA+ ICsgICAgZ19mcmVlKGZ1bGxfZmlsZV9uYW1lKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAg ICByZXR1cm4gcmV0Ow0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0 aWMgaW50IGxvY2FsX3JlbW92ZShGc0NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCkNCj4g PiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgaW50IGVycjsNCj4gPiA+ID4gPiArICAgIERJUiAq c3RyZWFtOw0KPiA+ID4gPiA+ICsgICAgY2hhciAqZnVsbF9maWxlX25hbWU7DQo+ID4gPiA+ID4g KyAgICBjaGFyICpkaXJwYXRoID0gZ19wYXRoX2dldF9kaXJuYW1lKHBhdGgpOw0KPiA+ID4gPiA+ ICsgICAgY2hhciAqbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUocGF0aCk7DQo+ID4gPiA+ID4g KyAgICBpbnQgZmxhZ3MgPSAwOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGZ1bGxfZmls ZV9uYW1lID0gbWVyZ2VfZnNfcGF0aChjdHgtPmZzX3Jvb3QsIHBhdGgpOw0KPiA+ID4gPiA+ICsg ICAgc3RyZWFtID0gb3BlbmRpcihmdWxsX2ZpbGVfbmFtZSk7DQo+ID4gPiA+ID4gKyAgICBpZiAo c3RyZWFtICE9IE5VTEwpIHsNCj4gPiA+ID4gPiArICAgICAgICBjbG9zZWRpcihzdHJlYW0pOw0K PiA+ID4gPiA+ICsgICAgICAgIGZsYWdzIHw9IEFUX1JFTU9WRURJUjsNCj4gPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gPiArICAgIGVyciA9IGxvY2FsX3VubGlua2F0X2NvbW1vbihjdHgsIGRpcnBh dGgsIG5hbWUsIGZsYWdzKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBnX2ZyZWUobmFt ZSk7DQo+ID4gPiA+ID4gKyAgICBnX2ZyZWUoZGlycGF0aCk7DQo+ID4gPiA+ID4gKyAgICBnX2Zy ZWUoZnVsbF9maWxlX25hbWUpOw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIGVycjsNCj4gPiA+ID4g PiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9mc3luYyhGc0Nv bnRleHQgKmN0eCwgaW50IGZpZF90eXBlLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIFY5ZnNGaWRPcGVuU3RhdGUgKmZzLCBpbnQgZGF0YXN5bmMpDQo+ID4gPiA+ID4gK3sNCj4g PiA+ID4gPiArICAgIGlmIChmaWRfdHlwZSAhPSBQOV9GSURfRElSKSB7DQo+ID4gPiA+ID4gKyAg ICAgICAgcmV0dXJuIF9jb21taXQoZnMtPmZkKTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4g PiArICAgIHJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtz dGF0aWMgaW50IGxvY2FsX3N0YXRmcyhGc0NvbnRleHQgKnMsIFY5ZnNQYXRoICpmc19wYXRoLCBz dHJ1Y3Qgc3RhdGZzDQo+ID4gKnN0YnVmKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICBp bnQgcmV0Ow0KPiA+ID4gPiA+ICsgICAgcmV0ID0gcWVtdV9zdGF0ZnMocy0+ZnNfcm9vdCwgc3Ri dWYpOw0KPiA+ID4gPiA+ICsgICAgaWYgKHJldCA9PSAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAg LyogdXNlIGNvbnRleHQgYWRkcmVzcyBhcyBmc2lkICovDQo+ID4gPiA+ID4gKyAgICAgICAgbWVt Y3B5KCZzdGJ1Zi0+Zl9mc2lkLCBzLCBzaXplb2YobG9uZykpOw0KPiA+ID4gPiA+ICsgICAgfQ0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIHJldHVybiByZXQ7DQo+ID4gPiA+ID4gK30NCj4g PiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRpYyBzc2l6ZV90IGxvY2FsX2xnZXR4YXR0cihGc0Nv bnRleHQgKmN0eCwgVjlmc1BhdGggKmZzX3BhdGgsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNp emUpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiAr fQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIHNzaXplX3QgbG9jYWxfbGxpc3R4YXR0 cihGc0NvbnRleHQgKmN0eCwgVjlmc1BhdGggKmZzX3BhdGgsDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQ0KPiA+ID4g PiA+ICt7DQo+ID4gPiA+ID4gKyAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gK3N0YXRpYyBpbnQgbG9jYWxfbHNldHhhdHRyKEZzQ29udGV4dCAqY3R4 LCBWOWZzUGF0aCAqZnNfcGF0aCwgY29uc3QgY2hhcg0KPiA+ICpuYW1lLA0KPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBm bGFncykNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgaW50IGxvY2FsX2xyZW1vdmV4YXR0 cihGc0NvbnRleHQgKmN0eCwgVjlmc1BhdGggKmZzX3BhdGgsDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpDQo+ID4gPiA+ID4gK3sNCj4g PiA+ID4gPiArICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArc3RhdGljIGludCBsb2NhbF9uYW1lX3RvX3BhdGgoRnNDb250ZXh0ICpjdHgsIFY5ZnNQ YXRoICpkaXJfcGF0aCwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbmFtZSwgVjlmc1BhdGggKnRhcmdldCkNCj4gPiA+ID4gPiArew0KPiA+ID4g PiA+ICsgICAgaWYgKGN0eC0+ZXhwb3J0X2ZsYWdzICYgVjlGU19TTV9NQVBQRURfRklMRSAmJg0K PiA+ID4gPiA+ICsgICAgICAgIGxvY2FsX2lzX21hcHBlZF9maWxlX21ldGFkYXRhKGN0eCwgbmFt ZSkpIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJubyA9IEVJTlZBTDsNCj4gPiA+ID4gPiArICAg ICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsgICAgaWYgKGRpcl9wYXRoKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgaWYgKCFzdHJjbXAobmFt ZSwgIi4iKSkgew0KPiA+ID4gPiA+ICsgICAgICAgICAgICAvKiAiLiIgcmVsYXRpdmUgdG8gImZv by9iYXIiIGlzICJmb28vYmFyIiAqLw0KPiA+ID4gPiA+ICsgICAgICAgICAgICB2OWZzX3BhdGhf Y29weSh0YXJnZXQsIGRpcl9wYXRoKTsNCj4gPiA+ID4gPiArICAgICAgICB9IGVsc2UgaWYgKCFz dHJjbXAobmFtZSwgIi4uIikpIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgaWYgKCFzdHJjbXAo ZGlyX3BhdGgtPmRhdGEsICIuIikpIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgIC8qICIu LiIgcmVsYXRpdmUgdG8gdGhlIHJvb3QgaXMgIi4iICovDQo+ID4gPiA+ID4gKyAgICAgICAgICAg ICAgICB2OWZzX3BhdGhfc3ByaW50Zih0YXJnZXQsICIuIik7DQo+ID4gPiA+ID4gKyAgICAgICAg ICAgIH0gZWxzZSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICBjaGFyICp0bXAgPSBnX3Bh dGhfZ2V0X2Rpcm5hbWUoZGlyX3BhdGgtPmRhdGEpOw0KPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICAgLyoNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAqIFN5bWJvbGljIGxpbmtzIGFyZSBy ZXNvbHZlZCBieSB0aGUgY2xpZW50LiBXZSBjYW4gYXNzdW1lDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgKiB0aGF0ICIuLiIgcmVsYXRpdmUgdG8gImZvby9iYXIiIGlzIGVxdWl2YWxlbnQg dG8gImZvbyINCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAqLw0KPiA+ID4gPiA+ICsgICAg ICAgICAgICAgICAgdjlmc19wYXRoX3NwcmludGYodGFyZ2V0LCAiJXMiLCB0bXApOw0KPiA+ID4g PiA+ICsgICAgICAgICAgICAgICAgZ19mcmVlKHRtcCk7DQo+ID4gPiA+ID4gKyAgICAgICAgICAg IH0NCj4gPiA+ID4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBh c3NlcnQoIXN0cmNocihuYW1lLCAnLycpKTsNCj4gPiA+ID4gPiArICAgICAgICAgICAgdjlmc19w YXRoX3NwcmludGYodGFyZ2V0LCAiJXMvJXMiLCBkaXJfcGF0aC0+ZGF0YSwgbmFtZSk7DQo+ID4g PiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIGlmICghc3RyY21wKG5hbWUs ICIvIikgfHwgIXN0cmNtcChuYW1lLCAiLiIpIHx8DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAg ICFzdHJjbXAobmFtZSwgIi4uIikpIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgLyogVGhpcyBp cyB0aGUgcm9vdCBmaWQgKi8NCj4gPiA+ID4gPiArICAgICAgICB2OWZzX3BhdGhfc3ByaW50Zih0 YXJnZXQsICIuIik7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAgICAg IGFzc2VydCghc3RyY2hyKG5hbWUsICcvJykpOw0KPiA+ID4gPiA+ICsgICAgICAgIHY5ZnNfcGF0 aF9zcHJpbnRmKHRhcmdldCwgIi4vJXMiLCBuYW1lKTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICtzdGF0aWMgaW50IGxvY2FsX3JlbmFtZWF0KEZzQ29udGV4dCAqY3R4LCBWOWZzUGF0aCAqb2xk ZGlyLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9s ZF9uYW1lLCBWOWZzUGF0aCAqbmV3ZGlyLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKm5ld19uYW1lKQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAg ICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gK3N0YXRp YyBpbnQgbG9jYWxfcmVuYW1lKEZzQ29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpvbGRwYXRoLA0K PiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuZXdwYXRoKQ0K PiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICBpbnQgZXJyOw0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArICAgIGNoYXIgKmZ1bGxfb2xkX25hbWU7DQo+ID4gPiA+ID4gKyAgICBjaGFyICpmdWxs X25ld19uYW1lOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGZ1bGxfb2xkX25hbWUgPSBt ZXJnZV9mc19wYXRoKGN0eC0+ZnNfcm9vdCwgb2xkcGF0aCk7DQo+ID4gPiA+ID4gKyAgICBmdWxs X25ld19uYW1lID0gbWVyZ2VfZnNfcGF0aChjdHgtPmZzX3Jvb3QsIG5ld3BhdGgpOw0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArICAgIGVyciA9IHJlbmFtZShmdWxsX29sZF9uYW1lLCBmdWxsX25l d19uYW1lKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBnX2ZyZWUoZnVsbF9vbGRfbmFt ZSk7DQo+ID4gPiA+ID4gKyAgICBnX2ZyZWUoZnVsbF9uZXdfbmFtZSk7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsgICAgcmV0dXJuIGVycjsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArc3RhdGljIGludCBsb2NhbF91bmxpbmthdChGc0NvbnRleHQgKmN0eCwgVjlmc1Bh dGggKmRpciwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpuYW1lLCBpbnQgZmxhZ3MpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIGludCByZXQ7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKGN0eC0+ZXhwb3J0X2ZsYWdzICYgVjlG U19TTV9NQVBQRURfRklMRSAmJg0KPiA+ID4gPiA+ICsgICAgICAgIGxvY2FsX2lzX21hcHBlZF9m aWxlX21ldGFkYXRhKGN0eCwgbmFtZSkpIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJubyA9IEVJ TlZBTDsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0ID0gbG9jYWxfdW5saW5rYXRfY29tbW9uKGN0 eCwgZGlyLT5kYXRhLCBuYW1lLCBmbGFncyk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg cmV0dXJuIHJldDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGlj IGludCBjaGVja19maWxlc3lzdGVtX3R5cGUoY2hhciAqZnNfcm9vdCwgaW50IGV4cG9ydF9mbGFn cykNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgSEFORExFIGhGaWxlOw0KPiA+ID4gPiA+ ICsgICAgd2NoYXJfdCBGc05hbWVbTUFYX1BBVEggKyAxXSA9IHswfTsNCj4gPiA+ID4gPiArICAg IHdjaGFyX3QgTnRmc05hbWVbNV0gPSB7J04nLCAnVCcsICdGJywgJ1MnfTsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKyAgICBpZiAoKGV4cG9ydF9mbGFncyAmIFY5RlNfU01fTUFQUEVEKSA9PSAw KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIDA7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaEZpbGUgPSBDcmVhdGVGaWxlKGZzX3Jvb3QsIEdFTkVS SUNfUkVBRCwgRklMRV9TSEFSRV9SRUFELCBOVUxMLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIE9QRU5fRVhJU1RJTkcsIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTLCBOVUxM KTsNCj4gPiA+ID4gPiArICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0K PiA+ID4gPiA+ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKyAgICAvKiBHZXQgZmlsZSBzeXN0ZW0gdHlwZSBuYW1lICovDQo+ID4g PiA+ID4gKyAgICBpZiAoR2V0Vm9sdW1lSW5mb3JtYXRpb25CeUhhbmRsZVcoaEZpbGUsIE5VTEws IDAsIE5VTEwsIE5VTEwsIE5VTEwsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRnNOYW1lLCBNQVhfUEFUSCArIDEpID09IDApIHsNCj4gPiA+ID4gPiAr ICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0x Ow0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgQ2xvc2VIYW5kbGUoaEZpbGUpOw0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmICh3Y3NjbXAoRnNOYW1lLCBOdGZzTmFtZSkg IT0gMCkgew0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0N Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICByZXR1cm4gMDsNCj4gPiA+ID4gPiArfQ0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIGludCBsb2NhbF9pbml0KEZzQ29udGV4dCAqY3R4 LCBFcnJvciAqKmVycnApDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIExvY2FsRGF0YSAq ZGF0YSA9IGdfbWFsbG9jKHNpemVvZigqZGF0YSkpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr ICAgIHN0cnVjdCBzdGF0IFN0YXRCdWY7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYg KHN0YXQoY3R4LT5mc19yb290LCAmU3RhdEJ1ZikgIT0gMCkgew0KPiA+ID4gPiA+ICsgICAgICAg IGVycm9yX3NldGdfZXJybm8oZXJycCwgZXJybm8sICJmYWlsZWQgdG8gb3BlbiAnJXMnIiwgY3R4 LT5mc19yb290KTsNCj4gPiA+ID4gPiArICAgICAgICBnb3RvIGVycjsNCj4gPiA+ID4gPiArICAg IH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiA+ICsgICAgICogc2Vj dXJpdHlfbW9kZWw9bWFwcGVkKC14YXR0cikgcmVxdWlyZXMgYSBmaWxleXN0ZW0gb24gV2luZG93 cyB0aGF0DQo+ID4gPiA+ID4gKyAgICAgKiBzdXBwb3J0cyBBbHRlcm5hdGUgRGF0YSBTdHJlYW0g KEFEUykuIE5URlMgaXMgb25lIG9mIHRoZW0sIGFuZCBpcw0KPiA+ID4gPiA+ICsgICAgICogcHJv YmFibHkgbW9zdCBwb3B1bGFyIG9uIFdpbmRvd3MuIEl0IGlzIGZhaXIgZW5vdWdoIHRvIGFzc3Vt ZQ0KPiA+ID4gPiA+ICsgICAgICogV2luZG93cyB1c2VycyB0byB1c2UgTlRGUyBmb3IgdGhlIG1h cHBlZCBzZWN1cml0eSBtb2RlbC4NCj4gPiA+ID4gPiArICAgICAqLw0KPiA+ID4gPiA+ICsgICAg aWYgKGNoZWNrX2ZpbGVzeXN0ZW1fdHlwZShjdHgtPmZzX3Jvb3QsIGN0eC0+ZXhwb3J0X2ZsYWdz KSAhPSAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJyb3Jfc2V0Z19lcnJubyhlcnJwLCBFSU5W QUwsICJyZXF1aXJlIE5URlMgZmlsZSBzeXN0ZW0gd2hlbiAiDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAic2VjdXJpdHlfbW9kZWwgaXMgbWFwcGVkIG9yIG1hcHBlZC14YXR0 ciIpOw0KPiA+ID4gPiA+ICsgICAgICAgIGdvdG8gZXJyOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChjdHgtPmV4cG9ydF9mbGFncyAmIFY5RlNfU01f UEFTU1RIUk9VR0gpIHsNCj4gPiA+ID4gPiArICAgICAgICBjdHgtPnhvcHMgPSBwYXNzdGhyb3Vn aF94YXR0cl9vcHM7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2UgaWYgKGN0eC0+ZXhwb3J0X2ZsYWdz ICYgVjlGU19TTV9NQVBQRUQpIHsNCj4gPiA+ID4gPiArICAgICAgICBjdHgtPnhvcHMgPSBtYXBw ZWRfeGF0dHJfb3BzOw0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIGlmIChjdHgtPmV4cG9ydF9mbGFn cyAmIFY5RlNfU01fTk9ORSkgew0KPiA+ID4gPiA+ICsgICAgICAgIGN0eC0+eG9wcyA9IG5vbmVf eGF0dHJfb3BzOw0KPiA+ID4gPiA+ICsgICAgfSBlbHNlIGlmIChjdHgtPmV4cG9ydF9mbGFncyAm IFY5RlNfU01fTUFQUEVEX0ZJTEUpIHsNCj4gPiA+ID4gPiArICAgICAgICAvKg0KPiA+ID4gPiA+ ICsgICAgICAgICAqIHhhdHRyIG9wZXJhdGlvbiBmb3IgbWFwcGVkLWZpbGUgYW5kIHBhc3N0aHJv dWdoDQo+ID4gPiA+ID4gKyAgICAgICAgICogcmVtYWluIHNhbWUuDQo+ID4gPiA+ID4gKyAgICAg ICAgICovDQo+ID4gPiA+ID4gKyAgICAgICAgY3R4LT54b3BzID0gcGFzc3Rocm91Z2hfeGF0dHJf b3BzOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgY3R4LT5leHBvcnRfZmxhZ3Mg fD0gVjlGU19QQVRITkFNRV9GU0NPTlRFWFQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAg Y3R4LT5wcml2YXRlID0gZGF0YTsNCj4gPiA+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiArZXJyOg0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGRhdGEpOw0KPiA+ID4g PiA+ICsgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICtzdGF0aWMgdm9pZCBsb2NhbF9jbGVhbnVwKEZzQ29udGV4dCAqY3R4KQ0KPiA+ID4gPiA+ICt7 DQo+ID4gPiA+ID4gKyAgICBMb2NhbERhdGEgKmRhdGEgPSBjdHgtPnByaXZhdGU7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKCFkYXRhKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0 dXJuOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGNsb3Nl KGRhdGEtPm1vdW50ZmQpOw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGRhdGEpOw0KPiA+ID4gPiA+ ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgdm9pZCBlcnJvcl9hcHBlbmRfc2Vj dXJpdHlfbW9kZWxfaGludChFcnJvciAqY29uc3QgKmVycnApDQo+ID4gPiA+ID4gK3sNCj4gPiA+ ID4gPiArICAgIGVycm9yX2FwcGVuZF9oaW50KGVycnAsICJWYWxpZCBvcHRpb25zIGFyZTogc2Vj dXJpdHlfbW9kZWw9Ig0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIltwYXNzdGhy b3VnaHxtYXBwZWQteGF0dHJ8bWFwcGVkLWZpbGV8bm9uZV1cbiIpOw0KPiA+ID4gPiA+ICt9DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtzdGF0aWMgaW50IGxvY2FsX3BhcnNlX29wdHMoUWVtdU9w dHMgKm9wdHMsIEZzRHJpdmVyRW50cnkgKmZzZSwgRXJyb3INCj4gPiAqKmVycnApDQo+ID4gPiA+ ID4gK3sNCj4gPiA+ID4gPiArICAgIEVSUlBfR1VBUkQoKTsNCj4gPiA+ID4gPiArICAgIGNvbnN0 IGNoYXIgKnNlY19tb2RlbCA9IHFlbXVfb3B0X2dldChvcHRzLCAic2VjdXJpdHlfbW9kZWwiKTsN Cj4gPiA+ID4gPiArICAgIGNvbnN0IGNoYXIgKnBhdGggPSBxZW11X29wdF9nZXQob3B0cywgInBh dGgiKTsNCj4gPiA+ID4gPiArICAgIGNvbnN0IGNoYXIgKm11bHRpZGV2cyA9IHFlbXVfb3B0X2dl dChvcHRzLCAibXVsdGlkZXZzIik7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKCFz ZWNfbW9kZWwpIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJzZWN1cml0 eV9tb2RlbCBwcm9wZXJ0eSBub3Qgc2V0Iik7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJyb3JfYXBw ZW5kX3NlY3VyaXR5X21vZGVsX2hpbnQoZXJycCk7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJu IC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmICgh c3RyY21wKHNlY19tb2RlbCwgInBhc3N0aHJvdWdoIikpIHsNCj4gPiA+ID4gPiArICAgICAgICBm c2UtPmV4cG9ydF9mbGFncyB8PSBWOUZTX1NNX1BBU1NUSFJPVUdIOw0KPiA+ID4gPiA+ICsgICAg fSBlbHNlIGlmICghc3RyY21wKHNlY19tb2RlbCwgIm1hcHBlZCIpIHx8DQo+ID4gPiA+ID4gKyAg ICAgICAgICAgICAgICFzdHJjbXAoc2VjX21vZGVsLCAibWFwcGVkLXhhdHRyIikpIHsNCj4gPiA+ ID4gPiArICAgICAgICBmc2UtPmV4cG9ydF9mbGFncyB8PSBWOUZTX1NNX01BUFBFRDsNCj4gPiA+ ID4gPiArICAgIH0gZWxzZSBpZiAoIXN0cmNtcChzZWNfbW9kZWwsICJub25lIikpIHsNCj4gPiA+ ID4gPiArICAgICAgICBmc2UtPmV4cG9ydF9mbGFncyB8PSBWOUZTX1NNX05PTkU7DQo+ID4gPiA+ ID4gKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAoc2VjX21vZGVsLCAibWFwcGVkLWZpbGUiKSkgew0K PiA+ID4gPiA+ICsgICAgICAgIGZzZS0+ZXhwb3J0X2ZsYWdzIHw9IFY5RlNfU01fTUFQUEVEX0ZJ TEU7DQo+ID4gPiA+ID4gKyAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAgICAgIGVycm9yX3Nl dGcoZXJycCwgImludmFsaWQgc2VjdXJpdHlfbW9kZWwgcHJvcGVydHkgJyVzJyIsDQo+IHNlY19t b2RlbCk7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJyb3JfYXBwZW5kX3NlY3VyaXR5X21vZGVsX2hp bnQoZXJycCk7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAg fQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChtdWx0aWRldnMpIHsNCj4gPiA+ID4g PiArICAgICAgICBpZiAoIXN0cmNtcChtdWx0aWRldnMsICJyZW1hcCIpKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgICAgIGZzZS0+ZXhwb3J0X2ZsYWdzICY9IH5WOUZTX0ZPUkJJRF9NVUxUSURFVlM7 DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGZzZS0+ZXhwb3J0X2ZsYWdzIHw9IFY5RlNfUkVNQVBf SU5PREVTOw0KPiA+ID4gPiA+ICsgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChtdWx0aWRldnMs ICJmb3JiaWQiKSkgew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBmc2UtPmV4cG9ydF9mbGFncyAm PSB+VjlGU19SRU1BUF9JTk9ERVM7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGZzZS0+ZXhwb3J0 X2ZsYWdzIHw9IFY5RlNfRk9SQklEX01VTFRJREVWUzsNCj4gPiA+ID4gPiArICAgICAgICB9IGVs c2UgaWYgKCFzdHJjbXAobXVsdGlkZXZzLCAid2FybiIpKSB7DQo+ID4gPiA+ID4gKyAgICAgICAg ICAgIGZzZS0+ZXhwb3J0X2ZsYWdzICY9IH5WOUZTX0ZPUkJJRF9NVUxUSURFVlM7DQo+ID4gPiA+ ID4gKyAgICAgICAgICAgIGZzZS0+ZXhwb3J0X2ZsYWdzICY9IH5WOUZTX1JFTUFQX0lOT0RFUzsN Cj4gPiA+ID4gPiArICAgICAgICB9IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBlcnJv cl9zZXRnKGVycnAsICJpbnZhbGlkIG11bHRpZGV2cyBwcm9wZXJ0eSAnJXMnIiwNCj4gPiA+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICBtdWx0aWRldnMpOw0KPiA+ID4gPiA+ICsgICAgICAg ICAgICBlcnJvcl9hcHBlbmRfaGludChlcnJwLCAiVmFsaWQgb3B0aW9ucyBhcmU6IG11bHRpZGV2 cz0iDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbcmVtYXB8Zm9y YmlkfHdhcm5dXG4iKTsNCj4gPiA+ID4gPiArICAgICAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4g PiA+ICsgICAgICAgIH0NCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KyAgICBpZiAoIXBhdGgpIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJvcl9zZXRnKGVycnAsICJw YXRoIHByb3BlcnR5IG5vdCBzZXQiKTsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKGZzZGV2X3Ro cm90dGxlX3BhcnNlX29wdHMob3B0cywgJmZzZS0+ZnN0LCBlcnJwKSkgew0KPiA+ID4gPiA+ICsg ICAgICAgIGVycm9yX3ByZXBlbmQoZXJycCwgImludmFsaWQgdGhyb3R0bGUgY29uZmlndXJhdGlv bjogIik7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChmc2UtPmV4cG9ydF9mbGFncyAmIFY5RlNf U01fTUFQUEVEIHx8DQo+ID4gPiA+ID4gKyAgICAgICAgZnNlLT5leHBvcnRfZmxhZ3MgJiBWOUZT X1NNX01BUFBFRF9GSUxFKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZnNlLT5mbW9kZSA9DQo+ID4g PiA+ID4gKyAgICAgICAgICAgIHFlbXVfb3B0X2dldF9udW1iZXIob3B0cywgImZtb2RlIiwgU01f TE9DQUxfTU9ERV9CSVRTKSAmIDA3Nzc7DQo+ID4gPiA+ID4gKyAgICAgICAgZnNlLT5kbW9kZSA9 DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIHFlbXVfb3B0X2dldF9udW1iZXIob3B0cywgImRtb2Rl IiwgU01fTE9DQUxfRElSX01PREVfQklUUykgJg0KPiA+IDA3Nzc7DQo+ID4gPiA+ID4gKyAgICB9 IGVsc2Ugew0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChxZW11X29wdF9maW5kKG9wdHMsICJmbW9k ZSIpKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGVycm9yX3NldGcoZXJycCwgImZtb2RlIGlz IG9ubHkgdmFsaWQgZm9yIG1hcHBlZCBzZWN1cml0eQ0KPiBtb2RlcyIpOw0KPiA+ID4gPiA+ICsg ICAgICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsg ICAgICAgIGlmIChxZW11X29wdF9maW5kKG9wdHMsICJkbW9kZSIpKSB7DQo+ID4gPiA+ID4gKyAg ICAgICAgICAgIGVycm9yX3NldGcoZXJycCwgImRtb2RlIGlzIG9ubHkgdmFsaWQgZm9yIG1hcHBl ZCBzZWN1cml0eQ0KPiBtb2RlcyIpOw0KPiA+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gLTE7 DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgIGZzZS0+cGF0aCA9IGdfc3RyZHVwKHBhdGgpOw0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICtGaWxlT3BlcmF0aW9ucyBsb2NhbF9vcHMgPSB7DQo+ID4gPiA+ID4gKyAgICAucGFyc2Vf b3B0cyA9IGxvY2FsX3BhcnNlX29wdHMsDQo+ID4gPiA+ID4gKyAgICAuaW5pdCAgPSBsb2NhbF9p bml0LA0KPiA+ID4gPiA+ICsgICAgLmNsZWFudXAgPSBsb2NhbF9jbGVhbnVwLA0KPiA+ID4gPiA+ ICsgICAgLmxzdGF0ID0gbG9jYWxfbHN0YXQsDQo+ID4gPiA+ID4gKyAgICAucmVhZGxpbmsgPSBs b2NhbF9yZWFkbGluaywNCj4gPiA+ID4gPiArICAgIC5jbG9zZSA9IGxvY2FsX2Nsb3NlLA0KPiA+ ID4gPiA+ICsgICAgLmNsb3NlZGlyID0gbG9jYWxfY2xvc2VkaXIsDQo+ID4gPiA+ID4gKyAgICAu b3BlbiA9IGxvY2FsX29wZW4sDQo+ID4gPiA+ID4gKyAgICAub3BlbmRpciA9IGxvY2FsX29wZW5k aXIsDQo+ID4gPiA+ID4gKyAgICAucmV3aW5kZGlyID0gbG9jYWxfcmV3aW5kZGlyLA0KPiA+ID4g PiA+ICsgICAgLnRlbGxkaXIgPSBsb2NhbF90ZWxsZGlyLA0KPiA+ID4gPiA+ICsgICAgLnJlYWRk aXIgPSBsb2NhbF9yZWFkZGlyLA0KPiA+ID4gPiA+ICsgICAgLnNlZWtkaXIgPSBsb2NhbF9zZWVr ZGlyLA0KPiA+ID4gPiA+ICsgICAgLnByZWFkdiA9IGxvY2FsX3ByZWFkdiwNCj4gPiA+ID4gPiAr ICAgIC5wd3JpdGV2ID0gbG9jYWxfcHdyaXRldiwNCj4gPiA+ID4gPiArICAgIC5jaG1vZCA9IGxv Y2FsX2NobW9kLA0KPiA+ID4gPiA+ICsgICAgLm1rbm9kID0gbG9jYWxfbWtub2QsDQo+ID4gPiA+ ID4gKyAgICAubWtkaXIgPSBsb2NhbF9ta2RpciwNCj4gPiA+ID4gPiArICAgIC5mc3RhdCA9IGxv Y2FsX2ZzdGF0LA0KPiA+ID4gPiA+ICsgICAgLm9wZW4yID0gbG9jYWxfb3BlbjIsDQo+ID4gPiA+ ID4gKyAgICAuc3ltbGluayA9IGxvY2FsX3N5bWxpbmssDQo+ID4gPiA+ID4gKyAgICAubGluayA9 IGxvY2FsX2xpbmssDQo+ID4gPiA+ID4gKyAgICAudHJ1bmNhdGUgPSBsb2NhbF90cnVuY2F0ZSwN Cj4gPiA+ID4gPiArICAgIC5yZW5hbWUgPSBsb2NhbF9yZW5hbWUsDQo+ID4gPiA+ID4gKyAgICAu Y2hvd24gPSBsb2NhbF9jaG93biwNCj4gPiA+ID4gPiArICAgIC51dGltZW5zYXQgPSBsb2NhbF91 dGltZW5zYXQsDQo+ID4gPiA+ID4gKyAgICAucmVtb3ZlID0gbG9jYWxfcmVtb3ZlLA0KPiA+ID4g PiA+ICsgICAgLmZzeW5jID0gbG9jYWxfZnN5bmMsDQo+ID4gPiA+ID4gKyAgICAuc3RhdGZzID0g bG9jYWxfc3RhdGZzLA0KPiA+ID4gPiA+ICsgICAgLmxnZXR4YXR0ciA9IGxvY2FsX2xnZXR4YXR0 ciwNCj4gPiA+ID4gPiArICAgIC5sbGlzdHhhdHRyID0gbG9jYWxfbGxpc3R4YXR0ciwNCj4gPiA+ ID4gPiArICAgIC5sc2V0eGF0dHIgPSBsb2NhbF9sc2V0eGF0dHIsDQo+ID4gPiA+ID4gKyAgICAu bHJlbW92ZXhhdHRyID0gbG9jYWxfbHJlbW92ZXhhdHRyLA0KPiA+ID4gPiA+ICsgICAgLm5hbWVf dG9fcGF0aCA9IGxvY2FsX25hbWVfdG9fcGF0aCwNCj4gPiA+ID4gPiArICAgIC5yZW5hbWVhdCAg PSBsb2NhbF9yZW5hbWVhdCwNCj4gPiA+ID4gPiArICAgIC51bmxpbmthdCA9IGxvY2FsX3VubGlu a2F0LA0KPiA+ID4gPiA+ICt9Ow0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9ody85cGZzLzlwLXV0 aWwtd2luMzIuYyBiL2h3LzlwZnMvOXAtdXRpbC13aW4zMi5jDQo+ID4gPiA+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwLi5kOWIzNWU3NDI1DQo+ID4g PiA+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ID4gPiA+ICsrKyBiL2h3LzlwZnMvOXAtdXRpbC13aW4z Mi5jDQo+ID4gPiA+ID4gQEAgLTAsMCArMSwzMDMgQEANCj4gPiA+ID4gPiArLyoNCj4gPiA+ID4g PiArICogOXAgdXRpbGl0aWVzIChXaW5kb3dzIEltcGxlbWVudGF0aW9uKQ0KPiA+ID4gPiA+ICsg Kg0KPiA+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgV2luZCBSaXZlciBTeXN0ZW1zLCBJ bmMuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMiBvcg0KPiBsYXRlci4NCj4g PiA+ID4gPiArICogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3Rv cnkuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2luY2x1ZGUgInFl bXUvb3NkZXAuaCINCj4gPiA+ID4gPiArI2luY2x1ZGUgInFhcGkvZXJyb3IuaCINCj4gPiA+ID4g PiArI2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiDQo+ID4gPiA+ID4gKyNpbmNsdWRlICI5 cC5oIg0KPiA+ID4gPiA+ICsjaW5jbHVkZSAiOXAtdXRpbC5oIg0KPiA+ID4gPiA+ICsjaW5jbHVk ZSAiOXAtbGludXgtZXJybm8uaCINCj4gPiA+ID4gPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCj4g PiA+ID4gPiArI2luY2x1ZGUgPGRpcmVudC5oPg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lm bmRlZiBWOUZTX01BR0lDDQo+ID4gPiA+ID4gKyNkZWZpbmUgVjlGU19NQUdJQyAweDUzNDY1MDM5 IC8qIHN0cmluZyAiOVBGUyIgKi8NCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICtzdGF0aWMgaW50IGJ1aWxkX2Fkc19uYW1lKGNoYXIgKm5hbWVidWYsIHNpemVfdCBu YW1lYnVmbGVuLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmRpcm5hbWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0KPiA+ID4gPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmFkc19uYW1lKQ0KPiA+ID4gPiA+ICt7DQo+ID4g PiA+ID4gKyAgICBzaXplX3QgdG90YWxzaXplOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAg IHRvdGFsc2l6ZSA9IHN0cmxlbihkaXJuYW1lKSArIHN0cmxlbihmaWxlbmFtZSkgKyBzdHJsZW4o YWRzX25hbWUpICsNCj4gMzsNCj4gPiA+ID4gPiArICAgIGlmICh0b3RhbHNpemUgID4gbmFtZWJ1 Zmxlbikgew0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0N Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiA+ICsgICAgICogTlRGUyBB RFMgKEFsdGVybmF0ZSBEYXRhIFN0cmVhbXMpIG5hbWUgZm9ybWF0Og0KPiA+ID4gPiA+ICsgICAg ICogIGZpbGVuYW1lOmFkc19uYW1lDQo+ID4gPiA+ID4gKyAgICAgKiBlLmcuDQo+ID4gPiA+ID4g KyAgICAgKiAgZDpcMS50eHQ6bXlfYWRzX25hbWUNCj4gPiA+ID4gPiArICAgICAqLw0KPiA+ID4g PiA+ICsgICAgc3RyY3B5KG5hbWVidWYsIGRpcm5hbWUpOw0KPiA+ID4gPiA+ICsgICAgc3RyY2F0 KG5hbWVidWYsICJcXCIpOw0KPiA+ID4gPiA+ICsgICAgc3RyY2F0KG5hbWVidWYsIGZpbGVuYW1l KTsNCj4gPiA+ID4gPiArICAgIHN0cmNhdChuYW1lYnVmLCAiOiIpOw0KPiA+ID4gPiA+ICsgICAg c3RyY2F0KG5hbWVidWYsIGFkc19uYW1lKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBy ZXR1cm4gMDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3RhdGljIHNz aXplX3QgY29weV9hZHNfbmFtZShjaGFyICpuYW1lYnVmLCBzaXplX3QgbmFtZWJ1ZmxlbiwNCj4g PiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmdWxsYWRzbmFtZSkN Cj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgY2hhciAqcDEsICpwMjsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiA+ICsgICAgICogTlRGUyBBRFMgKEFsdGVybmF0 ZSBEYXRhIFN0cmVhbXMpIG5hbWUgZnJvbSBlbXVyYXRlIGRhdGEgZm9ybWF0Og0KPiA+ID4gPiA+ ICsgICAgICogIDphZHNfbmFtZTokREFUQQ0KPiA+ID4gPiA+ICsgICAgICogZS5nLg0KPiA+ID4g PiA+ICsgICAgICogIDpteV9hZHNfbmFtZTokREFUQQ0KPiA+ID4gPiA+ICsgICAgICoNCj4gPiA+ ID4gPiArICAgICAqIEFEUyBuYW1lIGZyb20gRmluZE5leHRTdHJlYW1XKCkgYWx3YXlzIGhhdmUg IjokREFUQSIgc3RyaW5nIGF0IHRoZQ0KPiA+IGVuZA0KPiA+ID4gPiA+ICsgICAgICoNCj4gPiA+ ID4gPiArICAgICAqIFRoaXMgZnVuY3Rpb24gY29weSBBRFMgbmFtZSB0byBuYW1lYnVmLg0KPiA+ ID4gPiA+ICsgICAgICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcDEgPSBzdHJjaHIo ZnVsbGFkc25hbWUsICc6Jyk7DQo+ID4gPiA+ID4gKyAgICBpZiAocDEgPT0gTlVMTCkgew0KPiA+ ID4gPiA+ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKyAgICBwMiA9IHN0cmNocihwMSArIDEsICc6Jyk7DQo+ID4gPiA+ID4gKyAg ICBpZiAocDIgPT0gTlVMTCkgew0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAvKiBza2lwIGVtcHR5IGFk cyBuYW1lICovDQo+ID4gPiA+ID4gKyAgICBpZiAocDIgLSBwMSA9PSAxKSB7DQo+ID4gPiA+ID4g KyAgICAgICAgcmV0dXJuIDA7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsgICAgaWYgKHAyIC0gcDEgKyAxID4gbmFtZWJ1Zmxlbikgew0KPiA+ID4gPiA+ICsgICAg ICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KyAgICBtZW1jcHkobmFtZWJ1ZiwgcDEgKyAxLCBwMiAtIHAxIC0gMSk7DQo+ID4gPiA+ID4gKyAg ICBuYW1lYnVmW3AyIC0gcDEgLSAxXSA9ICdcMCc7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsg ICAgcmV0dXJuIHAyIC0gcDE7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g K3NzaXplX3QgZmdldHhhdHRyYXRfbm9mb2xsb3coY29uc3QgY2hhciAqZGlybmFtZSwgY29uc3Qg Y2hhciAqZmlsZW5hbWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqbmFtZSwgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQ0KPiA+ID4gPiA+ICt7 DQo+ID4gPiA+ID4gKyAgICBIQU5ETEUgaFN0cmVhbTsNCj4gPiA+ID4gPiArICAgIGNoYXIgQURT RmlsZU5hbWVbTkFNRV9NQVggKyAxXSA9IHswfTsNCj4gPiA+ID4gPiArICAgIERXT1JEIGR3Qnl0 ZXNSZWFkOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGlmIChidWlsZF9hZHNfbmFtZShB RFNGaWxlTmFtZSwgTkFNRV9NQVgsIGRpcm5hbWUsIGZpbGVuYW1lLCBuYW1lKQ0KPiA8DQo+ID4g MCkgew0KPiA+ID4gPiA+ICsgICAgICAgIGVycm5vID0gRUlPOw0KPiA+ID4gPiA+ICsgICAgICAg IHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAg ICBoU3RyZWFtID0gQ3JlYXRlRmlsZShBRFNGaWxlTmFtZSwgR0VORVJJQ19SRUFELCBGSUxFX1NI QVJFX1JFQUQsIE5VTEwsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBPUEVO X0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOw0KPiA+ID4gPiA+ICsgICAg aWYgKGhTdHJlYW0gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUgJiYNCj4gPiA+ID4gPiArICAgICAg ICBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkgew0KPiA+ID4gPiA+ICsg ICAgICAgIGVycm5vID0gRU5PREFUQTsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKFJlYWRGaWxl KGhTdHJlYW0sIHZhbHVlLCBzaXplLCAmZHdCeXRlc1JlYWQsIE5VTEwpID09IEZBTFNFKSB7DQo+ ID4gPiA+ID4gKyAgICAgICAgZXJybm8gPSBFSU87DQo+ID4gPiA+ID4gKyAgICAgICAgQ2xvc2VI YW5kbGUoaFN0cmVhbSk7DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIENsb3NlSGFuZGxlKGhTdHJlYW0p Ow0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIHJldHVybiBkd0J5dGVzUmVhZDsNCj4gPiA+ ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArc3NpemVfdCBmbGlzdHhhdHRyYXRfbm9m b2xsb3coY29uc3QgY2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsDQo+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpc3QsIHNpemVfdCBzaXpl KQ0KPiA+ID4gPiA+ICt7DQo+ID4gPiA+ID4gKyAgICBXQ0hBUiBXaWRlQ2hhclN0cltOQU1FX01B WCArIDFdID0geyAwIH07DQo+ID4gPiA+ID4gKyAgICBjaGFyIGZ1bGxhZHNuYW1lW05BTUVfTUFY ICsgMV07DQo+ID4gPiA+ID4gKyAgICBjaGFyICpmdWxsX2ZzX25hbWUgPSBtZXJnZV9mc19wYXRo KGRpcm5hbWUsIGZpbGVuYW1lKTsNCj4gPiA+ID4gPiArICAgIGludCByZXQ7DQo+ID4gPiA+ID4g KyAgICBIQU5ETEUgaEZpbmQ7DQo+ID4gPiA+ID4gKyAgICBXSU4zMl9GSU5EX1NUUkVBTV9EQVRB IGZzZDsNCj4gPiA+ID4gPiArICAgIEJPT0wgYkZpbmROZXh0Ow0KPiA+ID4gPiA+ICsgICAgY2hh ciAqbGlzdHB0ciA9IGxpc3Q7DQo+ID4gPiA+ID4gKyAgICBzaXplX3QgbGlzdGxlZnRzaXplID0g c2l6ZTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICAvKg0KPiA+ID4gPiA+ICsgICAgICog QURTIGVtdXJhdGUgZnVuY3Rpb24gb25seSBoYXZlIFdDSEFSIHZlcnNpb24sIG5lZWQgdG8gIGNv dmVydCBmaWxlbmFtZQ0KPiA+ID4gPiA+ICsgICAgICogdG8gV0NIQVIgc3RyaW5nLg0KPiA+ID4g PiA+ICsgICAgICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0ID0gTXVsdGlCeXRl VG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBmdWxsX2ZzX25hbWUsDQo+ID4gPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihmdWxsX2ZzX25hbWUpLCBXaWRlQ2hhclN0ciwg TkFNRV9NQVgpOw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGZ1bGxfZnNfbmFtZSk7DQo+ID4gPiA+ ID4gKyAgICBpZiAocmV0ID09IDApIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJubyA9IEVJTzsN Cj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgaEZpbmQgPSBGaW5kRmlyc3RTdHJlYW1XKFdpZGVDaGFyU3Ry LCBGaW5kU3RyZWFtSW5mb1N0YW5kYXJkLCAmZnNkLA0KPiAwKTsNCj4gPiA+ID4gPiArICAgIGlm IChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KPiA+ID4gPiA+ICsgICAgICAgIGVy cm5vID0gRU5PREFUQTsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4g KyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZG8gew0KPiA+ID4gPiA+ICsgICAg ICAgIG1lbXNldChmdWxsYWRzbmFtZSwgMCwgc2l6ZW9mKGZ1bGxhZHNuYW1lKSk7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgICAgIC8qDQo+ID4gPiA+ID4gKyAgICAgICAgICogQURTIGVt dXJhdGUgZnVuY3Rpb24gb25seSBoYXZlIFdDSEFSIHZlcnNpb24sIG5lZWQgdG8gY292ZXJ0DQo+ ID4gPiA+ID4gKyAgICAgICAgICogY1N0cmVhbU5hbWUgdG8gdXRmLTggc3RyaW5nLg0KPiA+ID4g PiA+ICsgICAgICAgICAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgICAgICByZXQgPSBX aWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmc2QuY1N0cmVhbU5hbWUsIHdjc2xlbihmc2QuY1N0cmVhbU5h bWUpDQo+ICsNCj4gPiAxLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnVsbGFkc25hbWUsIHNpemVvZihmdWxsYWRzbmFtZSkgLSAxLA0KPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChyZXQgPT0gMCkgew0KPiA+ID4gPiA+ICsgICAgICAg ICAgICBpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikgew0K PiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgZXJybm8gPSBFUkFOR0U7DQo+ID4gPiA+ID4gKyAg ICAgICAgICAgIH0NCj4gPiA+ID4gPiArICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaEZpbmQpOw0K PiA+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICAgICAgfQ0K PiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgICAgICByZXQgPSBjb3B5X2Fkc19uYW1lKGxpc3Rw dHIsIGxpc3RsZWZ0c2l6ZSwgZnVsbGFkc25hbWUpOw0KPiA+ID4gPiA+ICsgICAgICAgIGlmIChy ZXQgPCAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGVycm5vID0gRVJBTkdFOw0KPiA+ID4g PiA+ICsgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmluZCk7DQo+ID4gPiA+ID4gKyAgICAgICAg ICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgICAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4g PiA+ICsgICAgICAgIGxpc3RwdHIgPSBsaXN0cHRyICsgcmV0Ow0KPiA+ID4gPiA+ICsgICAgICAg IGxpc3RsZWZ0c2l6ZSA9IGxpc3RsZWZ0c2l6ZSAtIHJldDsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gKyAgICAgICAgYkZpbmROZXh0ID0gRmluZE5leHRTdHJlYW1XKGhGaW5kLCAmZnNkKTsNCj4g PiA+ID4gPiArICAgIH0gd2hpbGUgKGJGaW5kTmV4dCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ICsgICAgQ2xvc2VIYW5kbGUoaEZpbmQpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIHJl dHVybiBzaXplIC0gbGlzdGxlZnRzaXplOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICtzc2l6ZV90IGZyZW1vdmV4YXR0cmF0X25vZm9sbG93KGNvbnN0IGNoYXIgKmRpcm5h bWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiAr ICAgIGNoYXIgQURTRmlsZU5hbWVbTkFNRV9NQVggKyAxXSA9IHswfTsNCj4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gKyAgICBpZiAoYnVpbGRfYWRzX25hbWUoQURTRmlsZU5hbWUsIE5BTUVfTUFYLCBk aXJuYW1lLCBmaWxlbmFtZSwgbmFtZSkNCj4gPA0KPiA+IDApIHsNCj4gPiA+ID4gPiArICAgICAg ICBlcnJubyA9IEVJTzsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4g KyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKERlbGV0ZUZpbGUoQURTRmls ZU5hbWUpICE9IDApIHsNCj4gPiA+ID4gPiArICAgICAgICBpZiAoR2V0TGFzdEVycm9yKCkgPT0g RVJST1JfRklMRV9OT1RfRk9VTkQpIHsNCj4gPiA+ID4gPiArICAgICAgICAgICAgZXJybm8gPSBF Tk9EQVRBOw0KPiA+ID4gPiA+ICsgICAgICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAg ICAgICAgfQ0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIHJl dHVybiAwOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICtpbnQgZnNldHhh dHRyYXRfbm9mb2xsb3coY29uc3QgY2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqZmlsZW5hbWUs DQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2 b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUsIGludCBmbGFncykNCj4gPiA+ID4gPiArew0KPiA+ID4g PiA+ICsgICAgSEFORExFIGhTdHJlYW07DQo+ID4gPiA+ID4gKyAgICBjaGFyIEFEU0ZpbGVOYW1l W05BTUVfTUFYICsgMV0gPSB7MH07DQo+ID4gPiA+ID4gKyAgICBEV09SRCBkd0J5dGVzV3JpdGU7 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKGJ1aWxkX2Fkc19uYW1lKEFEU0ZpbGVO YW1lLCBOQU1FX01BWCwgZGlybmFtZSwgZmlsZW5hbWUsIG5hbWUpDQo+IDwNCj4gPiAwKSB7DQo+ ID4gPiA+ID4gKyAgICAgICAgZXJybm8gPSBFSU87DQo+ID4gPiA+ID4gKyAgICAgICAgcmV0dXJu IC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGhTdHJl YW0gPSBDcmVhdGVGaWxlKEFEU0ZpbGVOYW1lLCBHRU5FUklDX1dSSVRFLCBGSUxFX1NIQVJFX1JF QUQsDQo+IE5VTEwsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBDUkVBVEVf QUxXQVlTLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOw0KPiA+ID4gPiA+ICsgICAgaWYg KGhTdHJlYW0gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsNCj4gPiA+ID4gPiArICAgICAgICBl cnJubyA9IEVJTzsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAg ICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgaWYgKFdyaXRlRmlsZShoU3RyZWFtLCB2 YWx1ZSwgc2l6ZSwgJmR3Qnl0ZXNXcml0ZSwgTlVMTCkgPT0gRkFMU0UpDQo+IHsNCj4gPiA+ID4g PiArICAgICAgICBlcnJubyA9IEVJTzsNCj4gPiA+ID4gPiArICAgICAgICBDbG9zZUhhbmRsZSho U3RyZWFtKTsNCj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9 DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgQ2xvc2VIYW5kbGUoaFN0cmVhbSk7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiA+ID4gK30NCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gK2ludCBxZW11X21rbm9kYXQoY29uc3QgY2hhciAqZGlybmFtZSwgY29u c3QgY2hhciAqZmlsZW5hbWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgbW9kZV90IG1v ZGUsIGRldl90IGRldikNCj4gPiA+ID4gPiArew0KPiA+ID4gPiA+ICsgICAgZXJybm8gPSBFTk9U U1VQOw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICt9DQo+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ICtpbnQgcWVtdV9zdGF0ZnMoY29uc3QgY2hhciAqZnNfcm9vdCwgc3RydWN0 IHN0YXRmcyAqc3RidWYpDQo+ID4gPiA+ID4gK3sNCj4gPiA+ID4gPiArICAgIEhBTkRMRSBoRmls ZTsNCj4gPiA+ID4gPiArICAgIGNoYXIgUmVhbFBhdGhbTkFNRV9NQVggKyAxXTsNCj4gPiA+ID4g PiArICAgIHVuc2lnbmVkIGxvbmcgU2VjdG9yc1BlckNsdXN0ZXI7DQo+ID4gPiA+ID4gKyAgICB1 bnNpZ25lZCBsb25nIEJ5dGVzUGVyU2VjdG9yOw0KPiA+ID4gPiA+ICsgICAgdW5zaWduZWQgbG9u ZyBOdW1iZXJPZkZyZWVDbHVzdGVyczsNCj4gPiA+ID4gPiArICAgIHVuc2lnbmVkIGxvbmcgVG90 YWxOdW1iZXJPZkNsdXN0ZXJzOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIGhGaWxlID0g Q3JlYXRlRmlsZShmc19yb290LCBHRU5FUklDX1JFQUQsIEZJTEVfU0hBUkVfUkVBRCwgTlVMTCwN Cj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICBPUEVOX0VYSVNUSU5HLCBGSUxFX0ZM QUdfQkFDS1VQX1NFTUFOVElDUywgTlVMTCk7DQo+ID4gPiA+ID4gKyAgICBpZiAoaEZpbGUgPT0g SU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJubyA9IEVJTzsN Cj4gPiA+ID4gPiArICAgICAgICByZXR1cm4gLTE7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgLyogZ2V0IHJlYWwgcGF0aCBvZiByb290ICovDQo+ID4gPiA+ ID4gKyAgICBpZiAoR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKGhGaWxlLCBSZWFsUGF0aCwgc2l6 ZW9mKFJlYWxQYXRoKSwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRklMRV9OQU1FX05PUk1BTElaRUQpID09IDApIHsNCj4gPiA+ID4gPiArICAgICAgICBlcnJu byA9IEVJTzsNCj4gPiA+ID4gPiArICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7DQo+ID4gPiA+ ID4gKyAgICAgICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgIENsb3NlSGFuZGxlKGhGaWxlKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g KyAgICAvKg0KPiA+ID4gPiA+ICsgICAgICogR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIHdpbGwg cmV0dXJuIHJlYWwgcGF0aCBzdGFydCB3aXRoICJcXFxcP1xcIi4NCj4gPiA+ID4gPiArICAgICAq ICJDOlxcMTIzIiB3aWxsIGJlICJcXFxcP1xcQzpcXDEyMyINCj4gPiA+ID4gPiArICAgICAqIFNr aXAgZmlyc3QgNCBieXRlcyBhbmQgdHJ1bmNhdGUgdGhlIHN0cmluZyBhdCBvZmZzZXQgNywgaXQg d2lsbA0KPiBnZXQNCj4gPiA+ID4gPiArICAgICAqIHRoZSByZWFsIHJvb3QgZGlyZWN0b3J5IGxp a2UgIkM6XFwiLCB0aGlzIGlzIHBhcmFtZXRlcg0KPiBHZXREaXNrRnJlZVNwYWNlDQo+ID4gPiA+ ID4gKyAgICAgKiBuZWVkZWQuDQo+ID4gPiA+ID4gKyAgICAgKi8NCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKyAgICBSZWFsUGF0aFs3XSA9ICdcMCc7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsg ICAgaWYgKEdldERpc2tGcmVlU3BhY2UoUmVhbFBhdGggKyA0LCAmU2VjdG9yc1BlckNsdXN0ZXIs DQo+ICZCeXRlc1BlclNlY3RvciwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICZOdW1iZXJPZkZyZWVDbHVzdGVycywgJlRvdGFsTnVtYmVyT2ZDbHVzdGVycykgPT0NCj4gMCkN Cj4gPiB7DQo+ID4gPiA+ID4gKyAgICAgICAgZXJybm8gPSBFSU87DQo+ID4gPiA+ID4gKyAgICAg ICAgcmV0dXJuIC0xOw0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr ICAgIHN0YnVmLT5mX3R5cGUgPSBWOUZTX01BR0lDOw0KPiA+ID4gPiA+ICsgICAgc3RidWYtPmZf YnNpemUgPSAoX19mc3dvcmRfdCkoU2VjdG9yc1BlckNsdXN0ZXIgKiBCeXRlc1BlclNlY3Rvcik7 DQo+ID4gPiA+ID4gKyAgICBzdGJ1Zi0+Zl9ibG9ja3MgPSAoZnNibGtjbnRfdClUb3RhbE51bWJl ck9mQ2x1c3RlcnM7DQo+ID4gPiA+ID4gKyAgICBzdGJ1Zi0+Zl9iZnJlZSA9IChmc2Jsa2NudF90 KU51bWJlck9mRnJlZUNsdXN0ZXJzOw0KPiA+ID4gPiA+ICsgICAgc3RidWYtPmZfYmF2YWlsID0g KGZzYmxrY250X3QpTnVtYmVyT2ZGcmVlQ2x1c3RlcnM7DQo+ID4gPiA+ID4gKyAgICBzdGJ1Zi0+ Zl9maWxlcyA9IC0xOw0KPiA+ID4gPiA+ICsgICAgc3RidWYtPmZfZmZyZWUgPSAtMTsNCj4gPiA+ ID4gPiArICAgIHN0YnVmLT5mX25hbWVsZW4gPSBOQU1FX01BWDsNCj4gPiA+ID4gPiArICAgIHN0 YnVmLT5mX2Zyc2l6ZSA9IDA7DQo+ID4gPiA+ID4gKyAgICBzdGJ1Zi0+Zl9mbGFncyA9IDA7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiA+ID4gK30NCj4gPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvaHcvOXBmcy85cC14YXR0ci5jIGIvaHcvOXBmcy85cC14YXR0ci5j DQo+ID4gPiA+ID4gaW5kZXggOWFlNjlkZDhkYi4uNTYyM2YwZTJlZiAxMDA2NDQNCj4gPiA+ID4g PiAtLS0gYS9ody85cGZzLzlwLXhhdHRyLmMNCj4gPiA+ID4gPiArKysgYi9ody85cGZzLzlwLXhh dHRyLmMNCj4gPiA+ID4gPiBAQCAtNzgsMTAgKzc4LDQ1IEBAIHNzaXplX3Qgdjlmc19saXN0X3hh dHRyKEZzQ29udGV4dCAqY3R4LCBjb25zdCBjaGFyDQo+ICpwYXRoLA0KPiA+ID4gPiA+ICAgICAg Y2hhciAqb3JpZ192YWx1ZSwgKm9yaWdfdmFsdWVfc3RhcnQ7DQo+ID4gPiA+ID4gICAgICBzc2l6 ZV90IHhhdHRyX2xlbiwgcGFyc2VkX2xlbiA9IDAsIGF0dHJfbGVuOw0KPiA+ID4gPiA+ICAgICAg Y2hhciAqZGlycGF0aCwgKm5hbWU7DQo+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdfV0lOMzINCj4g PiA+ID4gPiArICAgIGNoYXIgKmZ1bGxfZGlyX3BhdGg7DQo+ID4gPiA+ID4gKyAgICBESVIgKmRp cjsNCj4gPiA+ID4gPiArI2Vsc2UNCj4gPiA+ID4gPiAgICAgIGludCBkaXJmZDsNCj4gPiA+ID4g PiArI2VuZGlmDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICAgIC8qIEdldCB0aGUgYWN0dWFsIGxl biAqLw0KPiA+ID4gPiA+ICAgICAgZGlycGF0aCA9IGdfcGF0aF9nZXRfZGlybmFtZShwYXRoKTsN Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAr ICAgIGRpciA9IGxvY2FsX29wZW5kaXJfbm9mb2xsb3coY3R4LCBkaXJwYXRoKTsNCj4gPiA+ID4g PiArICAgIGlmIChkaXIgPT0gTlVMTCkgew0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiAtMTsN Cj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArICAgIGNsb3NlZGlyKGRpcik7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsgICAgZnVsbF9kaXJfcGF0aCA9IG1lcmdlX2ZzX3BhdGgoY3R4LT5m c19yb290LCBkaXJwYXRoKTsNCj4gPiA+ID4gPiArICAgIGdfZnJlZShkaXJwYXRoKTsNCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKyAgICBuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZShwYXRoKTsN Cj4gPiA+ID4gPiArICAgIHhhdHRyX2xlbiA9IGZsaXN0eGF0dHJhdF9ub2ZvbGxvdyhmdWxsX2Rp cl9wYXRoLCBuYW1lLCB2YWx1ZSwgMCk7DQo+ID4gPiA+ID4gKyAgICBpZiAoeGF0dHJfbGVuIDw9 IDApIHsNCj4gPiA+ID4gPiArICAgICAgICBnX2ZyZWUobmFtZSk7DQo+ID4gPiA+ID4gKyAgICAg ICAgZ19mcmVlKGZ1bGxfZGlyX3BhdGgpOw0KPiA+ID4gPiA+ICsgICAgICAgIHJldHVybiB4YXR0 cl9sZW47DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgLyog Tm93IGZldGNoIHRoZSB4YXR0ciBhbmQgZmluZCB0aGUgYWN0dWFsIHNpemUgKi8NCj4gPiA+ID4g PiArICAgIG9yaWdfdmFsdWUgPSBnX21hbGxvYyh4YXR0cl9sZW4pOw0KPiA+ID4gPiA+ICsgICAg eGF0dHJfbGVuID0gZmxpc3R4YXR0cmF0X25vZm9sbG93KGZ1bGxfZGlyX3BhdGgsIG5hbWUsIG9y aWdfdmFsdWUsDQo+ID4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgeGF0dHJfbGVuKTsNCj4gPiA+ID4gPiArICAgIGdfZnJlZShuYW1lKTsNCj4gPiA+ID4gPiAr ICAgIGdfZnJlZShmdWxsX2Rpcl9wYXRoKTsNCj4gPiA+ID4gPiArICAgIGlmICh4YXR0cl9sZW4g PCAwKSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZ19mcmVlKG9yaWdfdmFsdWUpOw0KPiA+ID4gPiA+ ICsgICAgICAgIHJldHVybiAtMTsNCj4gPiA+ID4gPiArICAgIH0NCj4gPiA+ID4gPiArI2Vsc2UN Cj4gPiA+ID4gPiAgICAgIGRpcmZkID0gbG9jYWxfb3BlbmRpcl9ub2ZvbGxvdyhjdHgsIGRpcnBh dGgpOw0KPiA+ID4gPiA+ICAgICAgZ19mcmVlKGRpcnBhdGgpOw0KPiA+ID4gPiA+ICAgICAgaWYg KGRpcmZkID09IC0xKSB7DQo+ID4gPiA+ID4gQEAgLTEwNSw2ICsxNDAsNyBAQCBzc2l6ZV90IHY5 ZnNfbGlzdF94YXR0cihGc0NvbnRleHQgKmN0eCwgY29uc3QgY2hhcg0KPiAqcGF0aCwNCj4gPiA+ ID4gPiAgICAgICAgICBnX2ZyZWUob3JpZ192YWx1ZSk7DQo+ID4gPiA+ID4gICAgICAgICAgcmV0 dXJuIC0xOw0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPg0K PiA+ID4gPiA+ICAgICAgLyogc3RvcmUgdGhlIG9yaWcgcG9pbnRlciAqLw0KPiA+ID4gPiA+ICAg ICAgb3JpZ192YWx1ZV9zdGFydCA9IG9yaWdfdmFsdWU7DQo+ID4gPiA+ID4gQEAgLTE2Niw2ICsy MDIsMzEgQEAgaW50IHY5ZnNfcmVtb3ZlX3hhdHRyKEZzQ29udGV4dCAqY3R4LA0KPiA+ID4gPiA+ ICBzc2l6ZV90IGxvY2FsX2dldHhhdHRyX25vZm9sbG93KEZzQ29udGV4dCAqY3R4LCBjb25zdCBj aGFyICpwYXRoLA0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkNCj4gPiA+ID4gPiAgew0K PiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gKyAgICBjaGFyICpkaXJw YXRoID0gZ19wYXRoX2dldF9kaXJuYW1lKHBhdGgpOw0KPiA+ID4gPiA+ICsgICAgY2hhciAqZmls ZW5hbWUgPSBnX3BhdGhfZ2V0X2Jhc2VuYW1lKHBhdGgpOw0KPiA+ID4gPiA+ICsgICAgY2hhciAq ZnVsbF9kaXJfcGF0aDsNCj4gPiA+ID4gPiArICAgIERJUiAqZGlyOw0KPiA+ID4gPiA+ICsgICAg c3NpemVfdCByZXQgPSAtMTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBmdWxsX2Rpcl9w YXRoID0gbWVyZ2VfZnNfcGF0aChjdHgtPmZzX3Jvb3QsIGRpcnBhdGgpOw0KPiA+ID4gPiA+ICsN Cj4gPiA+ID4gPiArICAgIGRpciA9IGxvY2FsX29wZW5kaXJfbm9mb2xsb3coY3R4LCBkaXJwYXRo KTsNCj4gPiA+ID4gPiArICAgIGlmIChkaXIgPT0gTlVMTCkgew0KPiA+ID4gPiA+ICsgICAgICAg IGdvdG8gb3V0Ow0KPiA+ID4gPiA+ICsgICAgfQ0KPiA+ID4gPiA+ICsgICAgY2xvc2VkaXIoZGly KTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICByZXQgPSBmZ2V0eGF0dHJhdF9ub2ZvbGxv dyhmdWxsX2Rpcl9wYXRoLCBmaWxlbmFtZSwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hbWUsIHZhbHVlLCBzaXplKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4g K291dDoNCj4gPiA+ID4gPiArICAgIGdfZnJlZShmdWxsX2Rpcl9wYXRoKTsNCj4gPiA+ID4gPiAr ICAgIGdfZnJlZShkaXJwYXRoKTsNCj4gPiA+ID4gPiArICAgIGdfZnJlZShmaWxlbmFtZSk7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIHJldDsNCj4gPiA+ID4gPiArI2Vsc2UN Cj4gPiA+ID4gPiAgICAgIGNoYXIgKmRpcnBhdGggPSBnX3BhdGhfZ2V0X2Rpcm5hbWUocGF0aCk7 DQo+ID4gPiA+ID4gICAgICBjaGFyICpmaWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUocGF0 aCk7DQo+ID4gPiA+ID4gICAgICBpbnQgZGlyZmQ7DQo+ID4gPiA+ID4gQEAgLTE3NywxMSArMjM4 LDEzIEBAIHNzaXplX3QgbG9jYWxfZ2V0eGF0dHJfbm9mb2xsb3coRnNDb250ZXh0ICpjdHgsIGNv bnN0DQo+ID4gY2hhcg0KPiA+ID4gPiAqcGF0aCwNCj4gPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4g Pg0KPiA+ID4gPiA+ICAgICAgcmV0ID0gZmdldHhhdHRyYXRfbm9mb2xsb3coZGlyZmQsIGZpbGVu YW1lLCBuYW1lLCB2YWx1ZSwgc2l6ZSk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICAgICAgY2xv c2VfcHJlc2VydmVfZXJybm8oZGlyZmQpOw0KPiA+ID4gPiA+ICBvdXQ6DQo+ID4gPiA+ID4gICAg ICBnX2ZyZWUoZGlycGF0aCk7DQo+ID4gPiA+ID4gICAgICBnX2ZyZWUoZmlsZW5hbWUpOw0KPiA+ ID4gPiA+ICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gIH0N Cj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBzc2l6ZV90IHB0X2dldHhhdHRyKEZzQ29udGV4dCAqY3R4 LCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpuYW1lLA0KPiA+ID4gPiA+IEBAIC0xOTQs NiArMjU3LDMwIEBAIHNzaXplX3QgbG9jYWxfc2V0eGF0dHJfbm9mb2xsb3coRnNDb250ZXh0ICpj dHgsIGNvbnN0DQo+ID4gY2hhcg0KPiA+ID4gPiAqcGF0aCwNCj4gPiA+ID4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICp2YWx1ZSwgc2l6 ZV90IHNpemUsDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGZsYWdzKQ0KPiA+ID4gPiA+ICB7DQo+ID4gPiA+ID4gKyNpZmRlZiBDT05GSUdfV0lOMzINCj4g PiA+ID4gPiArICAgIGNoYXIgKmRpcnBhdGggPSBnX3BhdGhfZ2V0X2Rpcm5hbWUocGF0aCk7DQo+ ID4gPiA+ID4gKyAgICBjaGFyICpmaWxlbmFtZSA9IGdfcGF0aF9nZXRfYmFzZW5hbWUocGF0aCk7 DQo+ID4gPiA+ID4gKyAgICBjaGFyICpmdWxsX2Rpcl9wYXRoOw0KPiA+ID4gPiA+ICsgICAgRElS ICpkaXI7DQo+ID4gPiA+ID4gKyAgICBzc2l6ZV90IHJldCA9IC0xOw0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArICAgIGZ1bGxfZGlyX3BhdGggPSBtZXJnZV9mc19wYXRoKGN0eC0+ZnNfcm9vdCwg ZGlycGF0aCk7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZGlyID0gbG9jYWxfb3BlbmRp cl9ub2ZvbGxvdyhjdHgsIGRpcnBhdGgpOw0KPiA+ID4gPiA+ICsgICAgaWYgKGRpciA9PSBOVUxM KSB7DQo+ID4gPiA+ID4gKyAgICAgICAgZ290byBvdXQ7DQo+ID4gPiA+ID4gKyAgICB9DQo+ID4g PiA+ID4gKyAgICBjbG9zZWRpcihkaXIpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArICAgIHJl dCA9IGZzZXR4YXR0cmF0X25vZm9sbG93KGZ1bGxfZGlyX3BhdGgsIGZpbGVuYW1lLCBuYW1lLA0K PiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHNpemUsIGZs YWdzKTsNCj4gPiA+ID4gPiArb3V0Og0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGZ1bGxfZGlyX3Bh dGgpOw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGRpcnBhdGgpOw0KPiA+ID4gPiA+ICsgICAgZ19m cmVlKGZpbGVuYW1lKTsNCj4gPiA+ID4gPiArICAgIHJldHVybiByZXQ7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiA+ICAgICAgY2hhciAqZGlycGF0aCA9IGdfcGF0aF9n ZXRfZGlybmFtZShwYXRoKTsNCj4gPiA+ID4gPiAgICAgIGNoYXIgKmZpbGVuYW1lID0gZ19wYXRo X2dldF9iYXNlbmFtZShwYXRoKTsNCj4gPiA+ID4gPiAgICAgIGludCBkaXJmZDsNCj4gPiA+ID4g PiBAQCAtMjEwLDYgKzI5Nyw3IEBAIG91dDoNCj4gPiA+ID4gPiAgICAgIGdfZnJlZShkaXJwYXRo KTsNCj4gPiA+ID4gPiAgICAgIGdfZnJlZShmaWxlbmFtZSk7DQo+ID4gPiA+ID4gICAgICByZXR1 cm4gcmV0Ow0KPiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ID4g PiA+ID4gIGludCBwdF9zZXR4YXR0cihGc0NvbnRleHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCwg Y29uc3QgY2hhciAqbmFtZSwgdm9pZA0KPiA+ICp2YWx1ZSwNCj4gPiA+ID4gPiBAQCAtMjIxLDYg KzMwOSwzMCBAQCBpbnQgcHRfc2V0eGF0dHIoRnNDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKnBh dGgsDQo+IGNvbnN0DQo+ID4gPiA+IGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLA0KPiA+ID4gPiA+ ICBzc2l6ZV90IGxvY2FsX3JlbW92ZXhhdHRyX25vZm9sbG93KEZzQ29udGV4dCAqY3R4LCBjb25z dCBjaGFyICpwYXRoLA0KPiA+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKm5hbWUpDQo+ID4gPiA+ID4gIHsNCj4gPiA+ID4gPiArI2lmZGVmIENP TkZJR19XSU4zMg0KPiA+ID4gPiA+ICsgICAgY2hhciAqZGlycGF0aCA9IGdfcGF0aF9nZXRfZGly bmFtZShwYXRoKTsNCj4gPiA+ID4gPiArICAgIGNoYXIgKmZpbGVuYW1lID0gZ19wYXRoX2dldF9i YXNlbmFtZShwYXRoKTsNCj4gPiA+ID4gPiArICAgIGNoYXIgKmZ1bGxfZGlyX3BhdGg7DQo+ID4g PiA+ID4gKyAgICBESVIgKmRpcjsNCj4gPiA+ID4gPiArICAgIHNzaXplX3QgcmV0ID0gLTE7DQo+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsgICAgZnVsbF9kaXJfcGF0aCA9IG1lcmdlX2ZzX3BhdGgo Y3R4LT5mc19yb290LCBkaXJwYXRoKTsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKyAgICBkaXIg PSBsb2NhbF9vcGVuZGlyX25vZm9sbG93KGN0eCwgZGlycGF0aCk7DQo+ID4gPiA+ID4gKyAgICBp ZiAoZGlyID09IE5VTEwpIHsNCj4gPiA+ID4gPiArICAgICAgICBnb3RvIG91dDsNCj4gPiA+ID4g PiArICAgIH0NCj4gPiA+ID4gPiArICAgIGNsb3NlZGlyKGRpcik7DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsgICAgcmV0ID0gZnJlbW92ZXhhdHRyYXRfbm9mb2xsb3coZnVsbF9kaXJfcGF0aCwg ZmlsZW5hbWUsIG5hbWUpOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArb3V0Og0KPiA+ID4gPiA+ ICsgICAgZ19mcmVlKGZ1bGxfZGlyX3BhdGgpOw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGRpcnBh dGgpOw0KPiA+ID4gPiA+ICsgICAgZ19mcmVlKGZpbGVuYW1lKTsNCj4gPiA+ID4gPiArICAgIHJl dHVybiByZXQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiA+ICAgICAg Y2hhciAqZGlycGF0aCA9IGdfcGF0aF9nZXRfZGlybmFtZShwYXRoKTsNCj4gPiA+ID4gPiAgICAg IGNoYXIgKmZpbGVuYW1lID0gZ19wYXRoX2dldF9iYXNlbmFtZShwYXRoKTsNCj4gPiA+ID4gPiAg ICAgIGludCBkaXJmZDsNCj4gPiA+ID4gPiBAQCAtMjM3LDYgKzM0OSw3IEBAIG91dDoNCj4gPiA+ ID4gPiAgICAgIGdfZnJlZShkaXJwYXRoKTsNCj4gPiA+ID4gPiAgICAgIGdfZnJlZShmaWxlbmFt ZSk7DQo+ID4gPiA+ID4gICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIGludCBwdF9yZW1vdmV4YXR0cihGc0NvbnRl eHQgKmN0eCwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbmFtZSkNCj4gPiA+ID4gPiBk aWZmIC0tZ2l0IGEvaHcvOXBmcy85cC5jIGIvaHcvOXBmcy85cC5jDQo+ID4gPiA+ID4gaW5kZXgg MjI1ZjMxZmMzMS4uYTA0ODg5YzFkNiAxMDA2NDQNCj4gPiA+ID4gPiAtLS0gYS9ody85cGZzLzlw LmMNCj4gPiA+ID4gPiArKysgYi9ody85cGZzLzlwLmMNCj4gPiA+ID4gPiBAQCAtMzgsNiArMzgs MTAgQEANCj4gPiA+ID4gPiAgI2luY2x1ZGUgIm1pZ3JhdGlvbi9ibG9ja2VyLmgiDQo+ID4gPiA+ ID4gICNpbmNsdWRlICJxZW11L3h4aGFzaC5oIg0KPiA+ID4gPiA+ICAjaW5jbHVkZSA8bWF0aC5o Pg0KPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gKyNkZWZpbmUgVVRJ TUVfTk9XICAgKCgxbCA8PCAzMCkgLSAxbCkNCj4gPiA+ID4gPiArI2RlZmluZSBVVElNRV9PTUlU ICAoKDFsIDw8IDMwKSAtIDJsKQ0KPiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4g PiA+ICBpbnQgb3Blbl9mZF9odzsNCj4gPiA+ID4gPiAgaW50IHRvdGFsX29wZW5fZmQ7DQo+ID4g PiA+ID4gQEAgLTk4Niw5ICs5OTAsMTEgQEAgc3RhdGljIGludCBzdGF0X3RvX3FpZChWOWZzUERV ICpwZHUsIGNvbnN0IHN0cnVjdA0KPiBzdGF0DQo+ID4gKnN0YnVmLA0KPiA+ID4gPiBWOWZzUUlE ICpxaWRwKQ0KPiA+ID4gPiA+ICAgICAgaWYgKFNfSVNESVIoc3RidWYtPnN0X21vZGUpKSB7DQo+ ID4gPiA+ID4gICAgICAgICAgcWlkcC0+dHlwZSB8PSBQOV9RSURfVFlQRV9ESVI7DQo+ID4gPiA+ ID4gICAgICB9DQo+ID4gPiA+ID4gKyNpZm5kZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gICAg ICBpZiAoU19JU0xOSyhzdGJ1Zi0+c3RfbW9kZSkpIHsNCj4gPiA+ID4gPiAgICAgICAgICBxaWRw LT50eXBlIHw9IFA5X1FJRF9UWVBFX1NZTUxJTks7DQo+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ ID4gKyNlbmRpZg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgICByZXR1cm4gMDsNCj4gPiA+ID4g PiAgfQ0KPiA+ID4gPiA+IEBAIC0xMDk1LDYgKzExMDEsNyBAQCBzdGF0aWMgbW9kZV90IHY5bW9k ZV90b19tb2RlKHVpbnQzMl90IG1vZGUsIFY5ZnNTdHJpbmcNCj4gPiA+ID4gKmV4dGVuc2lvbikN Cj4gPiA+ID4gPiAgICAgICAgICByZXQgfD0gU19JRkRJUjsNCj4gPiA+ID4gPiAgICAgIH0NCj4g PiA+ID4gPg0KPiA+ID4gPiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICAgICAg aWYgKG1vZGUgJiBQOV9TVEFUX01PREVfU1lNTElOSykgew0KPiA+ID4gPiA+ICAgICAgICAgIHJl dCB8PSBTX0lGTE5LOw0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+IEBAIC0xMTA0LDYgKzEx MTEsNyBAQCBzdGF0aWMgbW9kZV90IHY5bW9kZV90b19tb2RlKHVpbnQzMl90IG1vZGUsIFY5ZnNT dHJpbmcNCj4gPiA+ID4gKmV4dGVuc2lvbikNCj4gPiA+ID4gPiAgICAgIGlmIChtb2RlICYgUDlf U1RBVF9NT0RFX05BTUVEX1BJUEUpIHsNCj4gPiA+ID4gPiAgICAgICAgICByZXQgfD0gU19JRklG TzsNCj4gPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gICAgICBp ZiAobW9kZSAmIFA5X1NUQVRfTU9ERV9ERVZJQ0UpIHsNCj4gPiA+ID4gPiAgICAgICAgICBpZiAo ZXh0ZW5zaW9uLT5zaXplICYmIGV4dGVuc2lvbi0+ZGF0YVswXSA9PSAnYycpIHsNCj4gPiA+ID4g PiAgICAgICAgICAgICAgcmV0IHw9IFNfSUZDSFI7DQo+ID4gPiA+ID4gQEAgLTExMTYsNiArMTEy NCw3IEBAIHN0YXRpYyBtb2RlX3Qgdjltb2RlX3RvX21vZGUodWludDMyX3QgbW9kZSwgVjlmc1N0 cmluZw0KPiA+ID4gPiAqZXh0ZW5zaW9uKQ0KPiA+ID4gPiA+ICAgICAgICAgIHJldCB8PSBTX0lG UkVHOw0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gKyNpZm5kZWYgQ09O RklHX1dJTjMyDQo+ID4gPiA+ID4gICAgICBpZiAobW9kZSAmIFA5X1NUQVRfTU9ERV9TRVRVSUQp IHsNCj4gPiA+ID4gPiAgICAgICAgICByZXQgfD0gU19JU1VJRDsNCj4gPiA+ID4gPiAgICAgIH0N Cj4gPiA+ID4gPiBAQCAtMTEyNSw2ICsxMTM0LDcgQEAgc3RhdGljIG1vZGVfdCB2OW1vZGVfdG9f bW9kZSh1aW50MzJfdCBtb2RlLCBWOWZzU3RyaW5nDQo+ID4gPiA+ICpleHRlbnNpb24pDQo+ID4g PiA+ID4gICAgICBpZiAobW9kZSAmIFA5X1NUQVRfTU9ERV9TRVRWVFgpIHsNCj4gPiA+ID4gPiAg ICAgICAgICByZXQgfD0gU19JU1ZUWDsNCj4gPiA+ID4gPiAgICAgIH0NCj4gPiA+ID4gPiArI2Vu ZGlmDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICAgIHJldHVybiByZXQ7DQo+ID4gPiA+ID4gIH0N Cj4gPiA+ID4gPiBAQCAtMTE4MCw2ICsxMTkwLDcgQEAgc3RhdGljIHVpbnQzMl90IHN0YXRfdG9f djltb2RlKGNvbnN0IHN0cnVjdCBzdGF0DQo+ICpzdGJ1ZikNCj4gPiA+ID4gPiAgICAgICAgICBt b2RlIHw9IFA5X1NUQVRfTU9ERV9ESVI7DQo+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ID4NCj4g PiA+ID4gPiArI2lmbmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAgICAgIGlmIChTX0lTTE5L KHN0YnVmLT5zdF9tb2RlKSkgew0KPiA+ID4gPiA+ICAgICAgICAgIG1vZGUgfD0gUDlfU1RBVF9N T0RFX1NZTUxJTks7DQo+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ID4gQEAgLTExOTEsMTEgKzEy MDIsMTMgQEAgc3RhdGljIHVpbnQzMl90IHN0YXRfdG9fdjltb2RlKGNvbnN0IHN0cnVjdCBzdGF0 DQo+ID4gKnN0YnVmKQ0KPiA+ID4gPiA+ICAgICAgaWYgKFNfSVNGSUZPKHN0YnVmLT5zdF9tb2Rl KSkgew0KPiA+ID4gPiA+ICAgICAgICAgIG1vZGUgfD0gUDlfU1RBVF9NT0RFX05BTUVEX1BJUEU7 DQo+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4gICAgICBpZiAoU19JU0JMSyhzdGJ1Zi0+c3RfbW9kZSkgfHwgU19JU0NIUihzdGJ1Zi0+c3Rf bW9kZSkpIHsNCj4gPiA+ID4gPiAgICAgICAgICBtb2RlIHw9IFA5X1NUQVRfTU9ERV9ERVZJQ0U7 DQo+ID4gPiA+ID4gICAgICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiArI2lmbmRlZiBDT05GSUdf V0lOMzINCj4gPiA+ID4gPiAgICAgIGlmIChzdGJ1Zi0+c3RfbW9kZSAmIFNfSVNVSUQpIHsNCj4g PiA+ID4gPiAgICAgICAgICBtb2RlIHw9IFA5X1NUQVRfTU9ERV9TRVRVSUQ7DQo+ID4gPiA+ID4g ICAgICB9DQo+ID4gPiA+ID4gQEAgLTEyMDcsNiArMTIyMCw3IEBAIHN0YXRpYyB1aW50MzJfdCBz dGF0X3RvX3Y5bW9kZShjb25zdCBzdHJ1Y3Qgc3RhdA0KPiAqc3RidWYpDQo+ID4gPiA+ID4gICAg ICBpZiAoc3RidWYtPnN0X21vZGUgJiBTX0lTVlRYKSB7DQo+ID4gPiA+ID4gICAgICAgICAgbW9k ZSB8PSBQOV9TVEFUX01PREVfU0VUVlRYOw0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+ICsj ZW5kaWYNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAgICAgcmV0dXJuIG1vZGU7DQo+ID4gPiA+ID4g IH0NCj4gPiA+ID4gPiBAQCAtMTI0NSw5ICsxMjU5LDE2IEBAIHN0YXRpYyBpbnQgY29yb3V0aW5l X2ZuIHN0YXRfdG9fdjlzdGF0KFY5ZnNQRFUgKnBkdSwNCj4gPiA+ID4gVjlmc1BhdGggKnBhdGgs DQo+ID4gPiA+ID4gICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+ID4gPiA+ID4gICAgICAgICAg fQ0KPiA+ID4gPiA+ICAgICAgfSBlbHNlIGlmICh2OXN0YXQtPm1vZGUgJiBQOV9TVEFUX01PREVf REVWSUNFKSB7DQo+ID4gPiA+ID4gKyNpZm5kZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gICAg ICAgICAgdjlmc19zdHJpbmdfc3ByaW50ZigmdjlzdGF0LT5leHRlbnNpb24sICIlYyAldSAldSIs DQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICBTX0lTQ0hSKHN0YnVmLT5zdF9tb2RlKSA/ICdj JyA6ICdiJywNCj4gPiA+ID4gPiAgICAgICAgICAgICAgICAgIG1ham9yKHN0YnVmLT5zdF9yZGV2 KSwgbWlub3Ioc3RidWYtPnN0X3JkZXYpKTsNCj4gPiA+ID4gPiArI2Vsc2UNCj4gPiA+ID4gPiAr ICAgICAgICB2OWZzX3N0cmluZ19zcHJpbnRmKCZ2OXN0YXQtPmV4dGVuc2lvbiwgIiVjICV1ICV1 IiwNCj4gPiA+ID4gPiArICAgICAgICAgICAgICAgIFNfSVNDSFIoc3RidWYtPnN0X21vZGUpID8g J2MnIDogJ2InLA0KPiA+ID4gPiA+ICsgICAgICAgICAgICAgICAgMCwgMCk7DQo+ID4gPiA+ID4g KyNlbmRpZg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAgICAgIH0gZWxzZSBpZiAoU19JU0RJUihz dGJ1Zi0+c3RfbW9kZSkgfHwgU19JU1JFRyhzdGJ1Zi0+c3RfbW9kZSkpIHsNCj4gPiA+ID4gPiAg ICAgICAgICB2OWZzX3N0cmluZ19zcHJpbnRmKCZ2OXN0YXQtPmV4dGVuc2lvbiwgIiVzICVsdSIs DQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAiSEFSRExJTktDT1VOVCIsICh1bnNpZ25lZCBs b25nKXN0YnVmLT5zdF9ubGluayk7DQo+ID4gPiA+ID4gQEAgLTEzMTUsNyArMTMzNiwxMSBAQCBz dGF0aWMgaW50MzJfdCBibGtzaXplX3RvX2lvdW5pdChjb25zdCBWOWZzUERVICpwZHUsDQo+ID4g PiA+IGludDMyX3QgYmxrc2l6ZSkNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBzdGF0aWMgaW50MzJf dCBzdGF0X3RvX2lvdW5pdChjb25zdCBWOWZzUERVICpwZHUsIGNvbnN0IHN0cnVjdCBzdGF0ICpz dGJ1ZikNCj4gPiA+ID4gPiAgew0KPiA+ID4gPiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ ID4gPiA+ICAgICAgcmV0dXJuIGJsa3NpemVfdG9faW91bml0KHBkdSwgc3RidWYtPnN0X2Jsa3Np emUpOw0KPiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIGJsa3NpemVfdG9f aW91bml0KHBkdSwgMCk7DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiAgc3RhdGljIGludCBzdGF0X3RvX3Y5c3RhdF9kb3RsKFY5ZnNQRFUgKnBk dSwgY29uc3Qgc3RydWN0IHN0YXQgKnN0YnVmLA0KPiA+ID4gPiA+IEBAIC0xMzI5LDYgKzEzNTQs MTQgQEAgc3RhdGljIGludCBzdGF0X3RvX3Y5c3RhdF9kb3RsKFY5ZnNQRFUgKnBkdSwgY29uc3QN Cj4gPiBzdHJ1Y3QNCj4gPiA+ID4gc3RhdCAqc3RidWYsDQo+ID4gPiA+ID4gICAgICB2OWxzdGF0 LT5zdF9naWQgPSBzdGJ1Zi0+c3RfZ2lkOw0KPiA+ID4gPiA+ICAgICAgdjlsc3RhdC0+c3RfcmRl diA9IHN0YnVmLT5zdF9yZGV2Ow0KPiA+ID4gPiA+ICAgICAgdjlsc3RhdC0+c3Rfc2l6ZSA9IHN0 YnVmLT5zdF9zaXplOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lmZGVmIENPTkZJR19XSU4z Mg0KPiA+ID4gPiA+ICsgICAgdjlsc3RhdC0+c3RfYmxrc2l6ZSA9IHN0YXRfdG9faW91bml0KHBk dSwgc3RidWYpOw0KPiA+ID4gPiA+ICsgICAgdjlsc3RhdC0+c3RfYmxvY2tzID0gMDsNCj4gPiA+ ID4gPiArICAgIHY5bHN0YXQtPnN0X2F0aW1lX3NlYyA9IHN0YnVmLT5zdF9hdGltZTsNCj4gPiA+ ID4gPiArICAgIHY5bHN0YXQtPnN0X210aW1lX3NlYyA9IHN0YnVmLT5zdF9tdGltZTsNCj4gPiA+ ID4gPiArICAgIHY5bHN0YXQtPnN0X2N0aW1lX3NlYyA9IHN0YnVmLT5zdF9jdGltZTsNCj4gPiA+ ID4gPiArI2Vsc2UgLyogIUNPTkZJR19XSU4zMiAqLw0KPiA+ID4gPiA+ICAgICAgdjlsc3RhdC0+ c3RfYmxrc2l6ZSA9IHN0YXRfdG9faW91bml0KHBkdSwgc3RidWYpOw0KPiA+ID4gPiA+ICAgICAg djlsc3RhdC0+c3RfYmxvY2tzID0gc3RidWYtPnN0X2Jsb2NrczsNCj4gPiA+ID4gPiAgICAgIHY5 bHN0YXQtPnN0X2F0aW1lX3NlYyA9IHN0YnVmLT5zdF9hdGltZTsNCj4gPiA+ID4gPiBAQCAtMTM0 Myw2ICsxMzc2LDggQEAgc3RhdGljIGludCBzdGF0X3RvX3Y5c3RhdF9kb3RsKFY5ZnNQRFUgKnBk dSwgY29uc3QNCj4gPiBzdHJ1Y3QNCj4gPiA+ID4gc3RhdCAqc3RidWYsDQo+ID4gPiA+ID4gICAg ICB2OWxzdGF0LT5zdF9tdGltZV9uc2VjID0gc3RidWYtPnN0X210aW0udHZfbnNlYzsNCj4gPiA+ ID4gPiAgICAgIHY5bHN0YXQtPnN0X2N0aW1lX25zZWMgPSBzdGJ1Zi0+c3RfY3RpbS50dl9uc2Vj Ow0KPiA+ID4gPiA+ICAjZW5kaWYNCj4gPiA+ID4gPiArI2VuZGlmIC8qIENPTkZJR19XSU4zMiAq Lw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAgICAgIC8qIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBv cnQgQkFTSUMgZmllbGRzIGluIHN0YXQgKi8NCj4gPiA+ID4gPiAgICAgIHY5bHN0YXQtPnN0X3Jl c3VsdF9tYXNrID0gUDlfU1RBVFNfQkFTSUM7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBAQCAtMTc1 OSw3ICsxNzk0LDExIEBAIHN0YXRpYyBib29sIG5hbWVfaXNfaWxsZWdhbChjb25zdCBjaGFyICpu YW1lKQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHN0YXRpYyBib29sIHNhbWVfc3RhdF9pZChjb25z dCBzdHJ1Y3Qgc3RhdCAqYSwgY29uc3Qgc3RydWN0IHN0YXQgKmIpDQo+ID4gPiA+ID4gIHsNCj4g PiA+ID4gPiArI2lmZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ ID4gPiA+ID4gKyNlbHNlDQo+ID4gPiA+ID4gICAgICByZXR1cm4gYS0+c3RfZGV2ID09IGItPnN0 X2RldiAmJiBhLT5zdF9pbm8gPT0gYi0+c3RfaW5vOw0KPiA+ID4gPiA+ICsjZW5kaWYgIC8qIENP TkZJR19XSU4zMiAqLw0KPiA+ID4gPiA+ICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgc3RhdGlj IHZvaWQgY29yb3V0aW5lX2ZuIHY5ZnNfd2Fsayh2b2lkICpvcGFxdWUpDQo+ID4gPiA+ID4gQEAg LTIzMDAsNyArMjMzOSwxMSBAQCBzdGF0aWMgaW50IGNvcm91dGluZV9mbg0KPiA+IHY5ZnNfZG9f cmVhZGRpcl93aXRoX3N0YXQoVjlmc1BEVQ0KPiA+ID4gPiAqcGR1LA0KPiA+ID4gPiA+ICAgICAg ICAgIGNvdW50ICs9IGxlbjsNCj4gPiA+ID4gPiAgICAgICAgICB2OWZzX3N0YXRfZnJlZSgmdjlz dGF0KTsNCj4gPiA+ID4gPiAgICAgICAgICB2OWZzX3BhdGhfZnJlZSgmcGF0aCk7DQo+ID4gPiA+ ID4gKyNpZm5kZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gICAgICAgICAgc2F2ZWRfZGlyX3Bv cyA9IHFlbXVfZGlyZW50X29mZihkZW50KTsNCj4gPiA+ID4gPiArI2Vsc2UNCj4gPiA+ID4gPiAr ICAgICAgICBzYXZlZF9kaXJfcG9zID0gdjlmc19jb190ZWxsZGlyKHBkdSwgZmlkcCk7DQo+ID4g PiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAg ICB2OWZzX3JlYWRkaXJfdW5sb2NrKCZmaWRwLT5mcy5kaXIpOw0KPiA+ID4gPiA+IEBAIC0yNTAx LDE0ICsyNTQ0LDMyIEBAIHN0YXRpYyBpbnQgY29yb3V0aW5lX2ZuIHY5ZnNfZG9fcmVhZGRpcihW OWZzUERVDQo+ICpwZHUsDQo+ID4gPiA+IFY5ZnNGaWRTdGF0ZSAqZmlkcCwNCj4gPiA+ID4gPiAg ICAgICAgICAgICAgcWlkLnZlcnNpb24gPSAwOw0KPiA+ID4gPiA+ICAgICAgICAgIH0NCj4gPiA+ ID4gPg0KPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ID4gKyAgICAgICAg LyoNCj4gPiA+ID4gPiArICAgICAgICAgKiBXaW5kb3dzIGRvZXMgbm90IGhhdmUgZGVudC0+ZF9v ZmYsIGdldCBvZmZzZXQgYnkgY2FsbGluZyB0ZWxsZGlyKCkNCj4gPiA+ID4gPiArICAgICAgICAg KiBtYW51YWxseS4NCj4gPiA+ID4gPiArICAgICAgICAgKi8NCj4gPiA+ID4gPiArICAgICAgICBv ZmYgPSB2OWZzX2NvX3RlbGxkaXIocGR1LCBmaWRwKTsNCj4gPiA+ID4gPiArI2Vsc2UNCj4gPiA+ ID4gPiAgICAgICAgICBvZmYgPSBxZW11X2RpcmVudF9vZmYoZGVudCk7DQo+ID4gPiA+ID4gKyNl bmRpZg0KPiA+ID4gPiA+ICAgICAgICAgIHY5ZnNfc3RyaW5nX2luaXQoJm5hbWUpOw0KPiA+ID4g PiA+ICAgICAgICAgIHY5ZnNfc3RyaW5nX3NwcmludGYoJm5hbWUsICIlcyIsIGRlbnQtPmRfbmFt ZSk7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiArI2lmZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ ICsgICAgICAgIC8qDQo+ID4gPiA+ID4gKyAgICAgICAgICogV2luZG93cyBkb2VzIG5vdCBoYXZl IGRlbnQtPmRfdHlwZQ0KPiA+ID4gPiA+ICsgICAgICAgICAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArICAgICAgICBsZW4gPSBwZHVfbWFyc2hhbChwZHUsIDExICsgY291bnQsICJRcWJzIiwN Cj4gPiA+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAmcWlkLCBvZmYsDQo+ID4gPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJm5hbWUpOw0KPiA+ID4gPiA+ICsjZWxz ZQ0KPiA+ID4gPiA+ICAgICAgICAgIC8qIDExID0gNyArIDQgKDcgPSBzdGFydCBvZmZzZXQsIDQg PSBzcGFjZSBmb3Igc3RvcmluZyBjb3VudCkgKi8NCj4gPiA+ID4gPiAgICAgICAgICBsZW4gPSBw ZHVfbWFyc2hhbChwZHUsIDExICsgY291bnQsICJRcWJzIiwNCj4gPiA+ID4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmcWlkLCBvZmYsDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVudC0+ZF90eXBlLCAmbmFtZSk7DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gICAgICAgICAgdjlmc19zdHJpbmdfZnJlZSgmbmFtZSk7DQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBAQCAtMjgzOCw4ICsyODk5LDE0IEBAIHN0YXRpYyB2b2lkIGNvcm91dGlu ZV9mbiB2OWZzX2NyZWF0ZSh2b2lkICpvcGFxdWUpDQo+ID4gPiA+ID4gICAgICAgICAgfQ0KPiA+ ID4gPiA+DQo+ID4gPiA+ID4gICAgICAgICAgbm1vZGUgfD0gcGVybSAmIDA3Nzc7DQo+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICAgICAgICAg IGVyciA9IHY5ZnNfY29fbWtub2QocGR1LCBmaWRwLCAmbmFtZSwgZmlkcC0+dWlkLCAtMSwNCj4g PiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VkZXYobWFqb3IsIG1pbm9y KSwgbm1vZGUsICZzdGJ1Zik7DQo+ID4gPiA+ID4gKyNlbHNlDQo+ID4gPiA+ID4gKyAgICAgICAg ZXJyID0gLUVOT1RTVVA7DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiAgICAgICAgICBpZiAoZXJyIDwgMCkgew0KPiA+ID4gPiA+ICAgICAgICAgICAgICBnb3RvIG91 dDsNCj4gPiA+ID4gPiAgICAgICAgICB9DQo+ID4gPiA+ID4gQEAgLTI4NjQsOCArMjkzMSwxMiBA QCBzdGF0aWMgdm9pZCBjb3JvdXRpbmVfZm4gdjlmc19jcmVhdGUodm9pZCAqb3BhcXVlKQ0KPiA+ ID4gPiA+ICAgICAgICAgIHY5ZnNfcGF0aF9jb3B5KCZmaWRwLT5wYXRoLCAmcGF0aCk7DQo+ID4g PiA+ID4gICAgICAgICAgdjlmc19wYXRoX3VubG9jayhzKTsNCj4gPiA+ID4gPiAgICAgIH0gZWxz ZSBpZiAocGVybSAmIFA5X1NUQVRfTU9ERV9TT0NLRVQpIHsNCj4gPiA+ID4gPiArI2lmbmRlZiBD T05GSUdfV0lOMzINCj4gPiA+ID4gPiAgICAgICAgICBlcnIgPSB2OWZzX2NvX21rbm9kKHBkdSwg ZmlkcCwgJm5hbWUsIGZpZHAtPnVpZCwgLTEsDQo+ID4gPiA+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCBTX0lGU09DSyB8IChwZXJtICYgMDc3NyksICZzdGJ1Zik7DQo+ID4gPiA+ ID4gKyNlbHNlDQo+ID4gPiA+ID4gKyAgICAgICAgZXJyID0gLUVOT1RTVVA7DQo+ID4gPiA+ID4g KyNlbmRpZg0KPiA+ID4gPiA+ICAgICAgICAgIGlmIChlcnIgPCAwKSB7DQo+ID4gPiA+ID4gICAg ICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ID4gPiA+ICAgICAgICAgIH0NCj4gPiA+ID4gPiBAQCAt MzYwMCw2ICszNjcxLDcgQEAgb3V0X25vZmlkOg0KPiA+ID4gPiA+ICBzdGF0aWMgdm9pZCBjb3Jv dXRpbmVfZm4gdjlmc19ta25vZCh2b2lkICpvcGFxdWUpDQo+ID4gPiA+ID4gIHsNCj4gPiA+ID4g Pg0KPiA+ID4gPiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICAgICAgaW50IG1v ZGU7DQo+ID4gPiA+ID4gICAgICBnaWRfdCBnaWQ7DQo+ID4gPiA+ID4gICAgICBpbnQzMl90IGZp ZDsNCj4gPiA+ID4gPiBAQCAtMzY1Niw2ICszNzI4LDExIEBAIG91dDoNCj4gPiA+ID4gPiAgb3V0 X25vZmlkOg0KPiA+ID4gPiA+ICAgICAgcGR1X2NvbXBsZXRlKHBkdSwgZXJyKTsNCj4gPiA+ID4g PiAgICAgIHY5ZnNfc3RyaW5nX2ZyZWUoJm5hbWUpOw0KPiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4g PiA+ICsgICAgVjlmc1BEVSAqcGR1ID0gb3BhcXVlOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr ICAgIHBkdV9jb21wbGV0ZShwZHUsIC0xKTsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4g IH0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICAvKg0KPiA+ID4gPiA+IEBAIC0zOTI4LDcgKzQwMDUs NyBAQCBvdXRfbm9maWQ6DQo+ID4gPiA+ID4gICNpZiBkZWZpbmVkKENPTkZJR19MSU5VWCkNCj4g PiA+ID4gPiAgLyogQ3VycmVudGx5LCBvbmx5IExpbnV4IGhhcyBYQVRUUl9TSVpFX01BWCAqLw0K PiA+ID4gPiA+ICAjZGVmaW5lIFA5X1hBVFRSX1NJWkVfTUFYIFhBVFRSX1NJWkVfTUFYDQo+ID4g PiA+ID4gLSNlbGlmIGRlZmluZWQoQ09ORklHX0RBUldJTikNCj4gPiA+ID4gPiArI2VsaWYgZGVm aW5lZChDT05GSUdfREFSV0lOKSB8fCBkZWZpbmVkKENPTkZJR19XSU4zMikNCj4gPiA+ID4gPiAg LyoNCj4gPiA+ID4gPiAgICogRGFyd2luIGRvZXNuJ3Qgc2VlbSB0byBkZWZpbmUgYSBtYXhpbXVt IHhhdHRyIHNpemUgaW4gaXRzIHVzZXINCj4gPiA+ID4gPiAgICogc3BhY2UgaGVhZGVyLCBzbyBt YW51YWxseSBjb25maWd1cmUgaXQgYWNyb3NzIHBsYXRmb3JtcyBhcyA2NGsuDQo+ID4gPiA+ID4g QEAgLTM5NDUsNiArNDAyMiw3IEBAIG91dF9ub2ZpZDoNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBz dGF0aWMgdm9pZCBjb3JvdXRpbmVfZm4gdjlmc194YXR0cmNyZWF0ZSh2b2lkICpvcGFxdWUpDQo+ ID4gPiA+ID4gIHsNCj4gPiA+ID4gPiArI2lmbmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAg ICAgIGludCBmbGFncywgcmZsYWdzID0gMDsNCj4gPiA+ID4gPiAgICAgIGludDMyX3QgZmlkOw0K PiA+ID4gPiA+ICAgICAgdWludDY0X3Qgc2l6ZTsNCj4gPiA+ID4gPiBAQCAtNDAwNiwxMCArNDA4 NCwxNSBAQCBvdXRfcHV0X2ZpZDoNCj4gPiA+ID4gPiAgb3V0X25vZmlkOg0KPiA+ID4gPiA+ICAg ICAgcGR1X2NvbXBsZXRlKHBkdSwgZXJyKTsNCj4gPiA+ID4gPiAgICAgIHY5ZnNfc3RyaW5nX2Zy ZWUoJm5hbWUpOw0KPiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4gPiA+ICsgICAgVjlmc1BEVSAqcGR1 ID0gb3BhcXVlOw0KPiA+ID4gPiA+ICsgICAgcGR1X2NvbXBsZXRlKHBkdSwgLTEpOw0KPiA+ID4g PiA+ICsjZW5kaWYNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHN0YXRpYyB2 b2lkIGNvcm91dGluZV9mbiB2OWZzX3JlYWRsaW5rKHZvaWQgKm9wYXF1ZSkNCj4gPiA+ID4gPiAg ew0KPiA+ID4gPiA+ICsjaWZuZGVmIENPTkZJR19XSU4zMg0KPiA+ID4gPiA+ICAgICAgVjlmc1BE VSAqcGR1ID0gb3BhcXVlOw0KPiA+ID4gPiA+ICAgICAgc2l6ZV90IG9mZnNldCA9IDc7DQo+ID4g PiA+ID4gICAgICBWOWZzU3RyaW5nIHRhcmdldDsNCj4gPiA+ID4gPiBAQCAtNDA0NSw2ICs0MTI4 LDEwIEBAIG91dDoNCj4gPiA+ID4gPiAgICAgIHB1dF9maWQocGR1LCBmaWRwKTsNCj4gPiA+ID4g PiAgb3V0X25vZmlkOg0KPiA+ID4gPiA+ICAgICAgcGR1X2NvbXBsZXRlKHBkdSwgZXJyKTsNCj4g PiA+ID4gPiArI2Vsc2UNCj4gPiA+ID4gPiArICAgIFY5ZnNQRFUgKnBkdSA9IG9wYXF1ZTsNCj4g PiA+ID4gPiArICAgIHBkdV9jb21wbGV0ZShwZHUsIC0xKTsNCj4gPiA+ID4gPiArI2VuZGlmDQo+ ID4gPiA+ID4gIH0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICBzdGF0aWMgQ29yb3V0aW5lRW50cnkg KnBkdV9jb19oYW5kbGVyc1tdID0gew0KPiA+ID4gPiA+IEBAIC00MzA2LDYgKzQzOTMsNyBAQCB2 b2lkIHY5ZnNfcmVzZXQoVjlmc1N0YXRlICpzKQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gIHN0YXRp YyB2b2lkIF9fYXR0cmlidXRlX18oKF9fY29uc3RydWN0b3JfXykpIHY5ZnNfc2V0X2ZkX2xpbWl0 KHZvaWQpDQo+ID4gPiA+ID4gIHsNCj4gPiA+ID4gPiArI2lmbmRlZiBDT05GSUdfV0lOMzINCj4g PiA+ID4gPiAgICAgIHN0cnVjdCBybGltaXQgcmxpbTsNCj4gPiA+ID4gPiAgICAgIGlmIChnZXRy bGltaXQoUkxJTUlUX05PRklMRSwgJnJsaW0pIDwgMCkgew0KPiA+ID4gPiA+ICAgICAgICAgIGVy cm9yX3JlcG9ydCgiRmFpbGVkIHRvIGdldCB0aGUgcmVzb3VyY2UgbGltaXQiKTsNCj4gPiA+ID4g PiBAQCAtNDMxMyw0ICs0NDAxLDUgQEAgc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXygoX19jb25z dHJ1Y3Rvcl9fKSkNCj4gPiA+ID4gdjlmc19zZXRfZmRfbGltaXQodm9pZCkNCj4gPiA+ID4gPiAg ICAgIH0NCj4gPiA+ID4gPiAgICAgIG9wZW5fZmRfaHcgPSBybGltLnJsaW1fY3VyIC0gTUlOKDQw MCwgcmxpbS5ybGltX2N1ciAvIDMpOw0KPiA+ID4gPiA+ICAgICAgb3Blbl9mZF9yYyA9IHJsaW0u cmxpbV9jdXIgLyAyOw0KPiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPiAgfQ0KPiA+ID4gPiA+ IGRpZmYgLS1naXQgYS9ody85cGZzL2NvZGlyLmMgYi9ody85cGZzL2NvZGlyLmMNCj4gPiA+ID4g PiBpbmRleCA5M2JhNDRmYjc1Li4yZmJlN2I4MzFiIDEwMDY0NA0KPiA+ID4gPiA+IC0tLSBhL2h3 LzlwZnMvY29kaXIuYw0KPiA+ID4gPiA+ICsrKyBiL2h3LzlwZnMvY29kaXIuYw0KPiA+ID4gPiA+ IEBAIC03OCw2ICs3OCw5IEBAIHN0YXRpYyBpbnQgZG9fcmVhZGRpcl9tYW55KFY5ZnNQRFUgKnBk dSwgVjlmc0ZpZFN0YXRlDQo+ICpmaWRwLA0KPiA+ID4gPiA+ICAgICAgaW50IGxlbiwgZXJyID0g MDsNCj4gPiA+ID4gPiAgICAgIGludDMyX3Qgc2l6ZSA9IDA7DQo+ID4gPiA+ID4gICAgICBvZmZf dCBzYXZlZF9kaXJfcG9zOw0KPiA+ID4gPiA+ICsjaWZkZWYgQ09ORklHX1dJTjMyDQo+ID4gPiA+ ID4gKyAgICBvZmZfdCBuZXh0X2Rpcl9wb3M7DQo+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ ICAgICAgc3RydWN0IGRpcmVudCAqZGVudDsNCj4gPiA+ID4gPiAgICAgIHN0cnVjdCBWOWZzRGly RW50ICplID0gTlVMTDsNCj4gPiA+ID4gPiAgICAgIFY5ZnNQYXRoIHBhdGg7DQo+ID4gPiA+ID4g QEAgLTEyNCw2ICsxMjcsMTQgQEAgc3RhdGljIGludCBkb19yZWFkZGlyX21hbnkoVjlmc1BEVSAq cGR1LCBWOWZzRmlkU3RhdGUNCj4gPiAqZmlkcCwNCj4gPiA+ID4gPiAgICAgICAgICAgICAgYnJl YWs7DQo+ID4gPiA+ID4gICAgICAgICAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gKyNpZmRlZiBD T05GSUdfV0lOMzINCj4gPiA+ID4gPiArICAgICAgICBuZXh0X2Rpcl9wb3MgPSBzLT5vcHMtPnRl bGxkaXIoJnMtPmN0eCwgJmZpZHAtPmZzKTsNCj4gPiA+ID4gPiArICAgICAgICBpZiAobmV4dF9k aXJfcG9zIDwgMCkgew0KPiA+ID4gPiA+ICsgICAgICAgICAgICBlcnIgPSBuZXh0X2Rpcl9wb3M7 DQo+ID4gPiA+ID4gKyAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ID4gPiA+ICsgICAgICAgIH0N Cj4gPiA+ID4gPiArI2VuZGlmDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICAgICAgICAgIC8qDQo+ ID4gPiA+ID4gICAgICAgICAgICogc3RvcCB0aGlzIGxvb3AgYXMgc29vbiBhcyBpdCB3b3VsZCBl eGNlZWQgdGhlIGFsbG93ZWQgbWF4aW11bQ0KPiA+ID4gPiA+ICAgICAgICAgICAqIHJlc3BvbnNl IG1lc3NhZ2Ugc2l6ZSBmb3IgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIGNvbGxlY3RlZCBzbw0KPiBm YXIsDQo+ID4gPiA+ID4gQEAgLTE2OCw3ICsxNzksMTEgQEAgc3RhdGljIGludCBkb19yZWFkZGly X21hbnkoVjlmc1BEVSAqcGR1LCBWOWZzRmlkU3RhdGUNCj4gPiAqZmlkcCwNCj4gPiA+ID4gPiAg ICAgICAgICB9DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICAgICAgICBzaXplICs9IGxlbjsNCj4g PiA+ID4gPiArI2lmbmRlZiBDT05GSUdfV0lOMzINCj4gPiA+ID4gPiAgICAgICAgICBzYXZlZF9k aXJfcG9zID0gcWVtdV9kaXJlbnRfb2ZmKGRlbnQpOw0KPiA+ID4gPiA+ICsjZWxzZQ0KPiA+ID4g PiA+ICsgICAgICAgIHNhdmVkX2Rpcl9wb3MgPSBuZXh0X2Rpcl9wb3M7DQo+ID4gPiA+ID4gKyNl bmRpZg0KPiA+ID4gPiA+ICAgICAgfQ0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gICAgICAvKiByZXN0 b3JlIChsYXN0KSBzYXZlZCBwb3NpdGlvbiAqLw0KPiA+ID4NCg0K