From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BA0C5A0501; Sat, 2 Apr 2022 15:53:42 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 647BD4067E; Sat, 2 Apr 2022 15:53:42 +0200 (CEST) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 53CCE40143 for ; Sat, 2 Apr 2022 15:53:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648907620; x=1680443620; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=QeaUX4lcDzyv9elD7XIetmZzRlLvSAJTLfB2XT3NDL0=; b=jEGzSyzlohiM69OnYozHyUcboVjXJ5J+85OIaqdDdTSXpg1tg3qa01g0 RdnhQEKiXJ1pe/uZEPswwCk3PRBeEr6Lb40AvSE+g9I/w+U195V/orvX7 BRncetT1+TITHNLlQdD66+mW+7Jp3n94FNJdihCYookz9YBYwj0yDSaPV EfuNkWXLlg6FhtHJpBPhZZ5HpndNaTCQ8jfoB+l0JL3C03hm1rkwFh5na M/UpxGWT37O+MYuqdB+TSxk71zYSR6hzXZ3CE6VwilJ/Os8BxTJc3f5Yy oBkTSZbhY0TPumcyH8QGNMzbQjlUTogwgEG8/U/UFcapl4ANhStzlg7E/ A==; X-IronPort-AV: E=McAfee;i="6200,9189,10304"; a="321001420" X-IronPort-AV: E=Sophos;i="5.90,230,1643702400"; d="scan'208";a="321001420" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Apr 2022 06:53:38 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,230,1643702400"; d="scan'208";a="607233334" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by fmsmga008.fm.intel.com with ESMTP; 02 Apr 2022 06:53:38 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Sat, 2 Apr 2022 06:53:38 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Sat, 2 Apr 2022 06:53:37 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Sat, 2 Apr 2022 06:53:37 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.170) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Sat, 2 Apr 2022 06:53:37 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QW8gUZ9bgfIpHPQ/M4zmLfY6Ap7UCUTz9c0qT2mER7lvLhihyGIqaYU1tRmaUotXm0JBeZfNYcTKXl51pYTKIIghXmU0E5r9A1d5nVGtRtQkXM4z/+z7TUi0lW6/PWmMdzQx0AQdKNo4taU9MMZKYvGxrC9Fl7LXB6KFxhNglNcTsINfvEDWDux2MzRYUqKtSkes4ZW8AymJoZV4qSh5mxZpzMy8zVLPAGdjO47SPDB3B5NhdhV+9SNzX//PS4nDt1zSyb+J5Z/zX4zmguT2fFTH2cQSQPVIrQ16aXqIJsEq+Iw8iTcp6FeZlSXpm2VVxh33ALECoa77Mew2fw5Lzg== 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=QeaUX4lcDzyv9elD7XIetmZzRlLvSAJTLfB2XT3NDL0=; b=ejHtIP/g5VF/mRynXogwle3IxAyvQ0hmBPuJTb/gM27wQvpzxHTwzVhm8MjfqR5DHipJDWiNog+Rsqhxxadq2pt5QgwvR+1AUdEmQg7UyxzlqnZtKQM6V8jI+IkZcCmmeraXmqPQNg739/SI/jKzJ3dpDO8xy1NhxxQRICCtCwdZejJ6WDfc3e17+aVoUuRi8RtPz69Wg/AE/RsxzBZyokzrYHxerxREJYiPbz7Q8IaXlhhXrdH7Q8J51iiCigkX7ZBVmNaD/+44a9IRT4D5UD6DKc+afTA1DK1hxc/HqxTosO1ZrN6nJ+zt1+A/f2IdAgLgO8PbRWuHVitJR9L6eQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from DM6PR11MB4491.namprd11.prod.outlook.com (2603:10b6:5:204::19) by CH0PR11MB5329.namprd11.prod.outlook.com (2603:10b6:610:bc::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.25; Sat, 2 Apr 2022 13:53:34 +0000 Received: from DM6PR11MB4491.namprd11.prod.outlook.com ([fe80::4011:c0b:7a03:b291]) by DM6PR11MB4491.namprd11.prod.outlook.com ([fe80::4011:c0b:7a03:b291%6]) with mapi id 15.20.5123.030; Sat, 2 Apr 2022 13:53:34 +0000 From: "Ananyev, Konstantin" To: "Morrissey, Sean" CC: "dev@dpdk.org" Subject: RE: [PATCH v2] examples/l3fwd: merge l3fwd-acl into l3fwd Thread-Topic: [PATCH v2] examples/l3fwd: merge l3fwd-acl into l3fwd Thread-Index: AQHYRD8SulNjhYiFFUy9a1/vOfF2o6za0WDA Date: Sat, 2 Apr 2022 13:53:34 +0000 Message-ID: References: <20220325151428.1037085-1-sean.morrissey@intel.com> <20220330140407.1616634-1-sean.morrissey@intel.com> In-Reply-To: <20220330140407.1616634-1-sean.morrissey@intel.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.401.20 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 86895427-2582-4eac-6dcd-08da14b02e0b x-ms-traffictypediagnostic: CH0PR11MB5329: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: LBFMcQsEVewjCto1rO9TMpgcBL/RCGvj6gCM1lANzx4sk2aqoBNd3u6V3xcUfBXSxUhDzpkZ1TpSwJelTOM2XvSCMcVFDmSmJRmt4r0JTfupwqKqQ4OSyQpSO6N/De/05Z99HyECNtF+O+b/IgIm0lH4X+8Zd5TmcmSCY/kyz1mHi5C+kvP07vzj175t7/QfgSESjhySdxtJhCV1yyBQfqOg91aZerGyqFnW20iaWFG0gjsZK3+l/Wn636VRyLXUKzEPi1wwiqdXQj8RTNeL9AhaJ8kag7bSvo6CblKsDgU7DQTrP0GtruDVWOpgEkqxTnk66Gh8qng6nzQ3iuJtyZTzsI5m5XN+uvcCC3qTVPzHXbU8h1f8L8V1Z3lNxGsunt2eyOomBKp8CU2MNbJUAhnGws+pUw0RWeCpJ1QzKy9LwQGYwmXwdN6RWGBfbPY5rzjehBb3pfXEzvzIyq7n8WVxvO3e/fC3xZ9fVFbCh66LAKDL4RJIR2ZyNs9UsQqD7dYkfVQ3jHvX7kNNFUwUzt6yloqiHHRjmqPOE0W0bBMNEyEYASW+V8SAph9FxNJFjkFZklA2ve8JKgXTp1wmHy1f7ADlkSKo2u22qjk5iCbJA7VrR9BDRNiGynMp3W2jH4lWzr+LletMmchLiOdPv8gwG6KXD6jtbM/rn1kY7kmV5pDXBFtyqgf877as5NGInUPFLw7Wn7ef3n+8wIEJhuiup+bkU592SllZsFra3XQ= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR11MB4491.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6862004)(4326008)(66476007)(76116006)(55016003)(66946007)(38100700002)(66446008)(64756008)(26005)(186003)(8676002)(5660300002)(38070700005)(508600001)(86362001)(9686003)(8936002)(71200400001)(66556008)(52536014)(33656002)(316002)(6636002)(2906002)(7696005)(6506007)(122000001)(83380400001)(82960400001)(30864003)(32563001)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?UHl6QXpwKzFueXhiMkFPVWY0M2Y0L2Npa2pyQkZ0aWZvRStlTVlSc1cxbDho?= =?utf-8?B?NW85QlFWdm15NlZTc1lMMi9Rb0NNa0x0T0hPQUJTTUpQTlVVdlE3UExZeHdm?= =?utf-8?B?d3phd0hhOXpFL1VmK280T2NwVG9zdUMzNDE4Q3hGUUoxZm91Tk00QnlZN3lp?= =?utf-8?B?SkdwN0FDS3dIK3NXd0lsRmVoeW4vRURpTzAxR3ozcWhTVWxERnRGUDVUdWcz?= =?utf-8?B?YjN6NDdGWDVTOVh6L1lPTWg3RjVSL0dPMkc5RFlxby9aS0krNWhrUjhTOGgw?= =?utf-8?B?Vy9ZSlFkWS9YdzNrZkNLTDAxaUJ2VG1jNTAvOWptOWFUajgwdnFyaDYvOGZy?= =?utf-8?B?ekdjcyt4Y2sxcGdzZGw3RDdTb1RPMEZIRWU3WnVucnhwYkJwVWphaE9URE9F?= =?utf-8?B?WE5BQStnZnpHT012UVRERVIzSHdrdVFOTWdLZS9NazhUbEV4RDk3VkRGK2NY?= =?utf-8?B?aWRFOFNmRm9UcHNIajRsb2ViNnlRVnJLNTV0aFBkdG5Zb1VYeTRkVngzSkdL?= =?utf-8?B?RFdUZGpOczRBM2YyY0xzeHhyRFlLUmVRSnRhc21WcnNKZUpZSkVYa3dnZm01?= =?utf-8?B?OGlZeEZaVVZIK3ZrU29Tb2psc0l3aFNzdjh4a2IvK0ZQdlgvZDJOL3BkWllk?= =?utf-8?B?YU1KZVRrSE0xUlQ3SktudVAzNktpVHlBanNtYjF0bzZlZm9ydFBWZEtOMzFj?= =?utf-8?B?Y1JTdkh1dDZtTUtIVEZ1NkNOOWNrTTJwZ3BZZjBwR0FJQnBCcHh3QlgrUGpB?= =?utf-8?B?UU5FZnhPZThJZ3pObGFaY2ZUWTZDYUlTeWtHdXlMTGoxOXBHUWlnQStraTU0?= =?utf-8?B?V05hTUJiMy9mbzhTQ0pJQmkvMElPN1lFZk5mWFl5UWlMMFk0SGpBYkRodUNz?= =?utf-8?B?RXpCbjRmREtCWXo3LytjbzRSWmNMSjIwcVF1YXJNLzhQQU41YU5tTzJXaTFN?= =?utf-8?B?ODJDcFhOaFpXZkpnNHF4SVhBa0xqV293YnlOSFpJaGRHa2taN21YRS9DYS9p?= =?utf-8?B?bzgrcmtGbTYzL2FlSlNYeVNib3hYVGxlUFFGYzVGODlSelIwMDJmT3BtUUp1?= =?utf-8?B?YmF3bFU3WG5KWGRuRnhIWENtb3ZWbTdCdnVqdEVnR3JJdmVBaGxUUmY4WUR6?= =?utf-8?B?OVoyeU1YdVNSaE1FK3EzTHZ0VGJEdVlFVitEZ2pZSDlyRSszM3VxdkIrWWpt?= =?utf-8?B?OElXN3dTNWZ2M0Q0bVVBenBSMm9hUTRBeFVTUlBvblJVYkg1dkQ4U005ZS9o?= =?utf-8?B?a0lRYnNZQnN0R0h3V0E2enpuUzNETHdubjdKbmVrN0k3VkZRUHhFNFR2bnBL?= =?utf-8?B?WVYvRWtJMjl1T0tybjFJMkJIaTd2ci9NM0p3WmFkbGZaMmlMRDRKbkxpYXJI?= =?utf-8?B?NjBldm5lbVJuYnBjYTVGNGYrNXp3MzlrUk9WMklBa3dqaldUTkkraEdwWDQ1?= =?utf-8?B?QWZHQWxvRVBPVUg1bFErM2ttSVY5MGVBcWUxNldyMXlCbTRnL2xUK0NFUHRp?= =?utf-8?B?ME1mTXdxUllCOTBGeU5XT3ExaHA3RXJsSXhWbW5EbjBhRmhnZUQ3K3VMaElu?= =?utf-8?B?cXhhbXMvMjN6TGt3TnNkWmFiOVRwSEs4bTFlNzBhdXY1UjRXTVBDbGRXRnJM?= =?utf-8?B?WmhxRVBoekRPaGtFU2RXUUlnNkFqTEU2cVJIL00xWHQxaE9nWWtqa1lJZzRj?= =?utf-8?B?b1JMNHZuZUswbVhCVVFhdTFqTm1scXR4UVpNM2Q2ZUxhSDUvYjEreFJqazMr?= =?utf-8?B?aUkzSk1LVDNoQXNGOWtRekZOOXdzditWTWlLRFljemNiT09JTmUxZnFXM0tx?= =?utf-8?B?L2lQYk5vRWdWK2ZoVW9xMExtdWFjcFM1emJOc0doNHF5ajZLT1IvYkN6VnRZ?= =?utf-8?B?UG54dEI4ZHFVZURvUkhZWXR3ZThwbDBIR3hra1gyeE84a0lVaTNTSWJ5WkFH?= =?utf-8?B?T0x0aXpVcnkwb2lEdWQxaG9STHpIR3ZlOHh2dkZYaVQxKzBpZDdycElQa0JR?= =?utf-8?B?ZjBLdmpSUExkSEdqTWZSYkNZdTlaUlhqNy9EUm9ZV1Z6OEhwN3RxRCtrMEVF?= =?utf-8?B?QVdTdW1TVDRYTUd0Wmp5U1RBVTA3U0JURXovOXQvOWo3ZE5rbmdaT0xUYzVi?= =?utf-8?B?eHIwTklvclVFeTlpWW1wek05RXNmbDBkQlBXSG1oTTloSnlMeDU0MzJrUmN1?= =?utf-8?B?UXJ5VGRTaUJlRjhsSFNRYzNPc1JCd25wOWNyM292UmJyeldEc3hsb0NlUkhh?= =?utf-8?B?bnVFc1JCMXJqSmxtNDlCbnFacXVVTWZIUzA2RUhjS2xvVjRnZEhLS3VHV2Fr?= =?utf-8?B?YTFmdHg4SU5sVXV1WnRReFByT2lWTFhITit2eXM1Z3dKU1k1N1h3Q0FkeHN4?= =?utf-8?Q?4YkBAdH/Kxn/esko=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB4491.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86895427-2582-4eac-6dcd-08da14b02e0b X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Apr 2022 13:53:34.4553 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: xRvRak3bm902LshGO9e5Y/+0WjekOi0+8FMkUoFpMaoRPVsG2fk/GXaM4ZTvaLD/xN7HNWl01rJeziOaiNJGd4hO+FoKIrWxmU2ZlPUNgoo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR11MB5329 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQpIaSBTZWFuLA0KDQpNeSBjb21tZW50cyBpbmxpbmUuDQpUaGFua3MgDQpLb25zdGFudGluDQoN Cj4gbDNmd2QtYWNsIGNvbnRhaW5zIGR1cGxpY2F0ZSBmdW5jdGlvbnMgdG8gbDNmd2QuDQo+IEZv ciB0aGlzIHJlYXNvbiB3ZSBtZXJnZSBsM2Z3ZC1hY2wgY29kZSBpbnRvIGwzZndkDQo+IHdpdGgg Jy0tbG9va3VwIGFjbCcgY21kbGluZSBvcHRpb24gdG8gcnVuIEFDTC4NCj4gDQo+IFNpZ25lZC1v ZmYtYnk6IFNlYW4gTW9ycmlzc2V5IDxzZWFuLm1vcnJpc3NleUBpbnRlbC5jb20+DQo+IC0tLQ0K PiBWMjoNCj4gKiBhZGQgZG9jIGNoYW5nZXMNCj4gKiBtaW5vciBjb2RlIGNsZWFudXANCj4gLS0t DQo+ICBkb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzIyXzA3LnJzdCAgICAgICAgfCAgICA0 ICsNCj4gIGRvYy9ndWlkZXMvc2FtcGxlX2FwcF91Zy9pbmRleC5yc3QgICAgICAgICAgICB8ICAg IDEgLQ0KPiAgZG9jL2d1aWRlcy9zYW1wbGVfYXBwX3VnL2wzX2ZvcndhcmQucnN0ICAgICAgIHwg ICA2MyArLQ0KPiAgLi4uL3NhbXBsZV9hcHBfdWcvbDNfZm9yd2FyZF9hY2Nlc3NfY3RybC5yc3Qg IHwgIDM0MCAtLS0NCj4gIGV4YW1wbGVzL2wzZndkLWFjbC9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICB8ICAgNTEgLQ0KPiAgZXhhbXBsZXMvbDNmd2QtYWNsL21haW4uYyAgICAgICAgICAgICAg ICAgICAgIHwgMjI3MiAtLS0tLS0tLS0tLS0tLS0tLQ0KPiAgZXhhbXBsZXMvbDNmd2QtYWNsL21l c29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgICAxMyAtDQo+ICBleGFtcGxlcy9sM2Z3ZC9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstDQo+ICBleGFtcGxlcy9sM2Z3ZC9s M2Z3ZC5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYwICstDQo+ICBleGFtcGxlcy9sM2Z3 ZC9sM2Z3ZF9hY2wuYyAgICAgICAgICAgICAgICAgICAgfCAgOTYwICsrKysrKysNCj4gIGV4YW1w bGVzL2wzZndkL2wzZndkX2FjbC5oICAgICAgICAgICAgICAgICAgICB8ICAxMTggKw0KPiAgZXhh bXBsZXMvbDNmd2QvbDNmd2RfYWNsX3NjYWxhci5oICAgICAgICAgICAgIHwgIDE2MyArKw0KPiAg ZXhhbXBsZXMvbDNmd2QvbDNmd2Rfcm91dGUuaCAgICAgICAgICAgICAgICAgIHwgICAxNiArDQo+ ICBleGFtcGxlcy9sM2Z3ZC9tYWluLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk3ICst DQo+ICBleGFtcGxlcy9sM2Z3ZC9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgfCAgICAz ICstDQo+ICBleGFtcGxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxIC0NCj4gIDE2IGZpbGVzIGNoYW5nZWQsIDE0NjYgaW5zZXJ0aW9ucygrKSwgMjY5OCBkZWxl dGlvbnMoLSkNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkb2MvZ3VpZGVzL3NhbXBsZV9hcHBfdWcv bDNfZm9yd2FyZF9hY2Nlc3NfY3RybC5yc3QNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxl cy9sM2Z3ZC1hY2wvTWFrZWZpbGUNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy9sM2Z3 ZC1hY2wvbWFpbi5jDQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZXhhbXBsZXMvbDNmd2QtYWNsL21l c29uLmJ1aWxkDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZXhhbXBsZXMvbDNmd2QvbDNmd2RfYWNs LmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBleGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9hY2wuaA0KPiAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGV4YW1wbGVzL2wzZndkL2wzZndkX2FjbF9zY2FsYXIuaA0KPiAN Cg0KLi4uDQoNCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2wzZndkL2wzZndkLmggYi9leGFtcGxl cy9sM2Z3ZC9sM2Z3ZC5oDQo+IGluZGV4IGFkMzk0OTZlNjQuLjY1MDNjYzJmNGUgMTAwNjQ0DQo+ IC0tLSBhL2V4YW1wbGVzL2wzZndkL2wzZndkLmgNCj4gKysrIGIvZXhhbXBsZXMvbDNmd2QvbDNm d2QuaA0KPiBAQCAtNyw2ICs3LDcgQEANCj4gDQo+ICAjaW5jbHVkZSA8cnRlX2V0aGRldi5oPg0K PiAgI2luY2x1ZGUgPHJ0ZV92ZWN0Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX2FjbC5oPg0KPiANCj4g ICNkZWZpbmUgRE9fUkZDXzE4MTJfQ0hFQ0tTDQo+IA0KPiBAQCAtNjEsNiArNjIsNDEgQEANCj4g IHN0cnVjdCBwYXJtX2NmZyB7DQo+ICAJY29uc3QgY2hhciAqcnVsZV9pcHY0X25hbWU7DQo+ICAJ Y29uc3QgY2hhciAqcnVsZV9pcHY2X25hbWU7DQo+ICsJZW51bSBydGVfYWNsX2NsYXNzaWZ5X2Fs ZyBhbGc7DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsNCj4gKwljb25zdCBj aGFyICpuYW1lOw0KPiArCWVudW0gcnRlX2FjbF9jbGFzc2lmeV9hbGcgYWxnOw0KPiArfSBhY2xf YWxnW10gPSB7DQo+ICsJew0KPiArCQkubmFtZSA9ICJzY2FsYXIiLA0KPiArCQkuYWxnID0gUlRF X0FDTF9DTEFTU0lGWV9TQ0FMQVIsDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS5uYW1lID0gInNzZSIs DQo+ICsJCS5hbGcgPSBSVEVfQUNMX0NMQVNTSUZZX1NTRSwNCj4gKwl9LA0KPiArCXsNCj4gKwkJ Lm5hbWUgPSAiYXZ4MiIsDQo+ICsJCS5hbGcgPSBSVEVfQUNMX0NMQVNTSUZZX0FWWDIsDQo+ICsJ fSwNCj4gKwl7DQo+ICsJCS5uYW1lID0gIm5lb24iLA0KPiArCQkuYWxnID0gUlRFX0FDTF9DTEFT U0lGWV9ORU9OLA0KPiArCX0sDQo+ICsJew0KPiArCQkubmFtZSA9ICJhbHRpdmVjIiwNCj4gKwkJ LmFsZyA9IFJURV9BQ0xfQ0xBU1NJRllfQUxUSVZFQywNCj4gKwl9LA0KPiArCXsNCj4gKwkJLm5h bWUgPSAiYXZ4NTEyeDE2IiwNCj4gKwkJLmFsZyA9IFJURV9BQ0xfQ0xBU1NJRllfQVZYNTEyWDE2 LA0KPiArCX0sDQo+ICsJew0KPiArCQkubmFtZSA9ICJhdng1MTJ4MzIiLA0KPiArCQkuYWxnID0g UlRFX0FDTF9DTEFTU0lGWV9BVlg1MTJYMzIsDQo+ICsJfSwNCj4gIH07DQoNCkkgcHJvYmFibHkg d2Fzbid0IGNsZWFyIGVub3VnaCBpbiBteSBwcmV2aW91cyBjb21tZW50cy4NCkkgdGhpbmsgdGhl cmUgaXMgbm8gbmVlZCB0byBtb3ZlIGRlZmluaXRpb24gb2YgYWNsX2FsZ1tdIGludG8gLmggYW5k IG1ha2luZyBpdCBzdGF0aWMuDQpJbnN0ZWFkIEkgLmggd2UgY2FuIGp1c3QgZG86DQpleHRlcm4g c3RydWN0IGFjbF9hbGdvcml0aG1zIGFjbF9hbGdbXTsNCmFuZCBrZWVwIGFjdHVhbCBkZWZpbml0 aW9uIGluIC5jLg0KDQo+IA0KPiAgc3RydWN0IG1idWZfdGFibGUgew0KPiBAQCAtODAsNiArMTE2 LDcgQEAgc3RydWN0IGxjb3JlX2NvbmYgew0KPiAgCXVpbnQxNl90IHR4X3BvcnRfaWRbUlRFX01B WF9FVEhQT1JUU107DQo+ICAJdWludDE2X3QgdHhfcXVldWVfaWRbUlRFX01BWF9FVEhQT1JUU107 DQo+ICAJc3RydWN0IG1idWZfdGFibGUgdHhfbWJ1ZnNbUlRFX01BWF9FVEhQT1JUU107DQo+ICsJ c3RydWN0IHJ0ZV9ldGhfZGV2X3R4X2J1ZmZlciAqdHhfYnVmZmVyW1JURV9NQVhfRVRIUE9SVFNd Ow0KPiAgCXZvaWQgKmlwdjRfbG9va3VwX3N0cnVjdDsNCj4gIAl2b2lkICppcHY2X2xvb2t1cF9z dHJ1Y3Q7DQo+ICB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+IEBAIC0xOTMsNyArMjMwLDEwIEBA IGlzX3ZhbGlkX2lwdjRfcGt0KHN0cnVjdCBydGVfaXB2NF9oZHIgKnBrdCwgdWludDMyX3QgbGlu a19sZW4pDQo+ICBpbnQNCj4gIGluaXRfbWVtKHVpbnQxNl90IHBvcnRpZCwgdW5zaWduZWQgaW50 IG5iX21idWYpOw0KPiANCj4gLS8qIEZ1bmN0aW9uIHBvaW50ZXJzIGZvciBMUE0sIEVNIG9yIEZJ QiBmdW5jdGlvbmFsaXR5LiAqLw0KPiArLyogRnVuY3Rpb24gcG9pbnRlcnMgZm9yIEFDTCwgTFBN LCBFTSBvciBGSUIgZnVuY3Rpb25hbGl0eS4gKi8NCj4gK3ZvaWQNCj4gK3NldHVwX2FjbChjb25z dCBpbnQgc29ja2V0aWQpOw0KPiArDQo+ICB2b2lkDQo+ICBzZXR1cF9scG0oY29uc3QgaW50IHNv Y2tldGlkKTsNCj4gDQo+IEBAIC0yMDMsMTIgKzI0MywxOSBAQCBzZXR1cF9oYXNoKGNvbnN0IGlu dCBzb2NrZXRpZCk7DQo+ICB2b2lkDQo+ICBzZXR1cF9maWIoY29uc3QgaW50IHNvY2tldGlkKTsN Cj4gDQo+ICtpbnQNCj4gK2FjbF9jaGVja19wdHlwZShpbnQgcG9ydGlkKTsNCj4gKw0KPiAgaW50 DQo+ICBlbV9jaGVja19wdHlwZShpbnQgcG9ydGlkKTsNCj4gDQo+ICBpbnQNCj4gIGxwbV9jaGVj a19wdHlwZShpbnQgcG9ydGlkKTsNCj4gDQo+ICt1aW50MTZfdA0KPiArYWNsX2NiX3BhcnNlX3B0 eXBlKHVpbnQxNl90IHBvcnQsIHVpbnQxNl90IHF1ZXVlLCBzdHJ1Y3QgcnRlX21idWYgKnBrdHNb XSwNCj4gKwkJICB1aW50MTZfdCBuYl9wa3RzLCB1aW50MTZfdCBtYXhfcGt0cywgdm9pZCAqdXNl cl9wYXJhbSk7DQo+ICsNCj4gIHVpbnQxNl90DQo+ICBlbV9jYl9wYXJzZV9wdHlwZSh1aW50MTZf dCBwb3J0LCB1aW50MTZfdCBxdWV1ZSwgc3RydWN0IHJ0ZV9tYnVmICpwa3RzW10sDQo+ICAJCSAg dWludDE2X3QgbmJfcGt0cywgdWludDE2X3QgbWF4X3BrdHMsIHZvaWQgKnVzZXJfcGFyYW0pOw0K PiBAQCAtMjE3LDYgKzI2NCw5IEBAIHVpbnQxNl90DQo+ICBscG1fY2JfcGFyc2VfcHR5cGUodWlu dDE2X3QgcG9ydCwgdWludDE2X3QgcXVldWUsIHN0cnVjdCBydGVfbWJ1ZiAqcGt0c1tdLA0KPiAg CQkgICB1aW50MTZfdCBuYl9wa3RzLCB1aW50MTZfdCBtYXhfcGt0cywgdm9pZCAqdXNlcl9wYXJh bSk7DQo+IA0KPiAraW50DQo+ICthY2xfbWFpbl9sb29wKF9fcnRlX3VudXNlZCB2b2lkICpkdW1t eSk7DQo+ICsNCj4gIGludA0KPiAgZW1fbWFpbl9sb29wKF9fcnRlX3VudXNlZCB2b2lkICpkdW1t eSk7DQo+IA0KPiBAQCAtMjc4LDcgKzMyOCwxMyBAQCBpbnQNCj4gIGZpYl9ldmVudF9tYWluX2xv b3BfdHhfcV9idXJzdF92ZWN0b3IoX19ydGVfdW51c2VkIHZvaWQgKmR1bW15KTsNCj4gDQo+IA0K PiAtLyogUmV0dXJuIGlwdjQvaXB2NiBmd2QgbG9va3VwIHN0cnVjdCBmb3IgTFBNLCBFTSBvciBG SUIuICovDQo+ICsvKiBSZXR1cm4gaXB2NC9pcHY2IGZ3ZCBsb29rdXAgc3RydWN0IGZvciBBQ0ws IExQTSwgRU0gb3IgRklCLiAqLw0KPiArdm9pZCAqDQo+ICthY2xfZ2V0X2lwdjRfbDNmd2RfbG9v a3VwX3N0cnVjdChjb25zdCBpbnQgc29ja2V0aWQpOw0KPiArDQo+ICt2b2lkICoNCj4gK2FjbF9n ZXRfaXB2Nl9sM2Z3ZF9sb29rdXBfc3RydWN0KGNvbnN0IGludCBzb2NrZXRpZCk7DQo+ICsNCj4g IHZvaWQgKg0KPiAgZW1fZ2V0X2lwdjRfbDNmd2RfbG9va3VwX3N0cnVjdChjb25zdCBpbnQgc29j a2V0aWQpOw0KPiANCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2wzZndkL2wzZndkX2FjbC5jIGIv ZXhhbXBsZXMvbDNmd2QvbDNmd2RfYWNsLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMC4uZWJiZWUzN2FhYQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2V4YW1w bGVzL2wzZndkL2wzZndkX2FjbC5jDQo+IEBAIC0wLDAgKzEsOTYwIEBADQo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBJ bnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlICJsM2Z3ZC5oIg0KPiAr I2luY2x1ZGUgImwzZndkX3JvdXRlLmgiDQo+ICsNCj4gKy8qDQo+ICsgKiBSdWxlIGFuZCB0cmFj ZSBmb3JtYXRzIGRlZmluaXRpb25zLg0KPiArICovDQo+ICsNCj4gK2VudW0gew0KPiArCVBST1RP X0ZJRUxEX0lQVjQsDQo+ICsJU1JDX0ZJRUxEX0lQVjQsDQo+ICsJRFNUX0ZJRUxEX0lQVjQsDQo+ ICsJU1JDUF9GSUVMRF9JUFY0LA0KPiArCURTVFBfRklFTERfSVBWNCwNCj4gKwlOVU1fRklFTERT X0lQVjQNCj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBUaGF0IGVmZmVjdGl2ZWx5IGRlZmluZXMg b3JkZXIgb2YgSVBWNFZMQU4gY2xhc3NpZmljYXRpb25zOg0KPiArICogIC0gUFJPVE8NCj4gKyAq ICAtIFZMQU4gKFRBRyBhbmQgRE9NQUlOKQ0KPiArICogIC0gU1JDIElQIEFERFJFU1MNCj4gKyAq ICAtIERTVCBJUCBBRERSRVNTDQo+ICsgKiAgLSBQT1JUUyAoU1JDIGFuZCBEU1QpDQo+ICsgKi8N Cj4gK2VudW0gew0KPiArCVJURV9BQ0xfSVBWNFZMQU5fUFJPVE8sDQo+ICsJUlRFX0FDTF9JUFY0 VkxBTl9WTEFOLA0KPiArCVJURV9BQ0xfSVBWNFZMQU5fU1JDLA0KPiArCVJURV9BQ0xfSVBWNFZM QU5fRFNULA0KPiArCVJURV9BQ0xfSVBWNFZMQU5fUE9SVFMsDQo+ICsJUlRFX0FDTF9JUFY0VkxB Tl9OVU0NCj4gK307DQo+ICsNCj4gK3N0cnVjdCBydGVfYWNsX2ZpZWxkX2RlZiBpcHY0X2RlZnNb TlVNX0ZJRUxEU19JUFY0XSA9IHsNCj4gKwl7DQo+ICsJCS50eXBlID0gUlRFX0FDTF9GSUVMRF9U WVBFX0JJVE1BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQ4X3QpLA0KPiArCQkuZmllbGRf aW5kZXggPSBQUk9UT19GSUVMRF9JUFY0LA0KPiArCQkuaW5wdXRfaW5kZXggPSBSVEVfQUNMX0lQ VjRWTEFOX1BST1RPLA0KPiArCQkub2Zmc2V0ID0gMCwNCj4gKwl9LA0KPiArCXsNCj4gKwkJLnR5 cGUgPSBSVEVfQUNMX0ZJRUxEX1RZUEVfTUFTSywNCj4gKwkJLnNpemUgPSBzaXplb2YodWludDMy X3QpLA0KPiArCQkuZmllbGRfaW5kZXggPSBTUkNfRklFTERfSVBWNCwNCj4gKwkJLmlucHV0X2lu ZGV4ID0gUlRFX0FDTF9JUFY0VkxBTl9TUkMsDQo+ICsJCS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1 Y3QgcnRlX2lwdjRfaGRyLCBzcmNfYWRkcikgLQ0KPiArCQkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9p cHY0X2hkciwgbmV4dF9wcm90b19pZCksDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBlID0gUlRF X0FDTF9GSUVMRF9UWVBFX01BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQzMl90KSwNCj4g KwkJLmZpZWxkX2luZGV4ID0gRFNUX0ZJRUxEX0lQVjQsDQo+ICsJCS5pbnB1dF9pbmRleCA9IFJU RV9BQ0xfSVBWNFZMQU5fRFNULA0KPiArCQkub2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9p cHY0X2hkciwgZHN0X2FkZHIpIC0NCj4gKwkJCW9mZnNldG9mKHN0cnVjdCBydGVfaXB2NF9oZHIs IG5leHRfcHJvdG9faWQpLA0KPiArCX0sDQo+ICsJew0KPiArCQkudHlwZSA9IFJURV9BQ0xfRklF TERfVFlQRV9SQU5HRSwNCj4gKwkJLnNpemUgPSBzaXplb2YodWludDE2X3QpLA0KPiArCQkuZmll bGRfaW5kZXggPSBTUkNQX0ZJRUxEX0lQVjQsDQo+ICsJCS5pbnB1dF9pbmRleCA9IFJURV9BQ0xf SVBWNFZMQU5fUE9SVFMsDQo+ICsJCS5vZmZzZXQgPSBzaXplb2Yoc3RydWN0IHJ0ZV9pcHY0X2hk cikgLQ0KPiArCQkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9pcHY0X2hkciwgbmV4dF9wcm90b19pZCks DQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBlID0gUlRFX0FDTF9GSUVMRF9UWVBFX1JBTkdFLA0K PiArCQkuc2l6ZSA9IHNpemVvZih1aW50MTZfdCksDQo+ICsJCS5maWVsZF9pbmRleCA9IERTVFBf RklFTERfSVBWNCwNCj4gKwkJLmlucHV0X2luZGV4ID0gUlRFX0FDTF9JUFY0VkxBTl9QT1JUUywN Cj4gKwkJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgcnRlX2lwdjRfaGRyKSAtDQo+ICsJCQlvZmZz ZXRvZihzdHJ1Y3QgcnRlX2lwdjRfaGRyLCBuZXh0X3Byb3RvX2lkKSArDQo+ICsJCQlzaXplb2Yo dWludDE2X3QpLA0KPiArCX0sDQo+ICt9Ow0KPiArDQo+ICtlbnVtIHsNCj4gKwlQUk9UT19GSUVM RF9JUFY2LA0KPiArCVNSQzFfRklFTERfSVBWNiwNCj4gKwlTUkMyX0ZJRUxEX0lQVjYsDQo+ICsJ U1JDM19GSUVMRF9JUFY2LA0KPiArCVNSQzRfRklFTERfSVBWNiwNCj4gKwlEU1QxX0ZJRUxEX0lQ VjYsDQo+ICsJRFNUMl9GSUVMRF9JUFY2LA0KPiArCURTVDNfRklFTERfSVBWNiwNCj4gKwlEU1Q0 X0ZJRUxEX0lQVjYsDQo+ICsJU1JDUF9GSUVMRF9JUFY2LA0KPiArCURTVFBfRklFTERfSVBWNiwN Cj4gKwlOVU1fRklFTERTX0lQVjYNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBydGVfYWNsX2ZpZWxk X2RlZiBpcHY2X2RlZnNbTlVNX0ZJRUxEU19JUFY2XSA9IHsNCj4gKwl7DQo+ICsJCS50eXBlID0g UlRFX0FDTF9GSUVMRF9UWVBFX0JJVE1BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQ4X3Qp LA0KPiArCQkuZmllbGRfaW5kZXggPSBQUk9UT19GSUVMRF9JUFY2LA0KPiArCQkuaW5wdXRfaW5k ZXggPSBQUk9UT19GSUVMRF9JUFY2LA0KPiArCQkub2Zmc2V0ID0gMCwNCj4gKwl9LA0KPiArCXsN Cj4gKwkJLnR5cGUgPSBSVEVfQUNMX0ZJRUxEX1RZUEVfTUFTSywNCj4gKwkJLnNpemUgPSBzaXpl b2YodWludDMyX3QpLA0KPiArCQkuZmllbGRfaW5kZXggPSBTUkMxX0ZJRUxEX0lQVjYsDQo+ICsJ CS5pbnB1dF9pbmRleCA9IFNSQzFfRklFTERfSVBWNiwNCj4gKwkJLm9mZnNldCA9IG9mZnNldG9m KHN0cnVjdCBydGVfaXB2Nl9oZHIsIHNyY19hZGRyKSAtDQo+ICsJCQlvZmZzZXRvZihzdHJ1Y3Qg cnRlX2lwdjZfaGRyLCBwcm90byksDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBlID0gUlRFX0FD TF9GSUVMRF9UWVBFX01BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQzMl90KSwNCj4gKwkJ LmZpZWxkX2luZGV4ID0gU1JDMl9GSUVMRF9JUFY2LA0KPiArCQkuaW5wdXRfaW5kZXggPSBTUkMy X0ZJRUxEX0lQVjYsDQo+ICsJCS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcnRlX2lwdjZfaGRy LCBzcmNfYWRkcikgLQ0KPiArCQkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9pcHY2X2hkciwgcHJvdG8p ICsgc2l6ZW9mKHVpbnQzMl90KSwNCj4gKwl9LA0KPiArCXsNCj4gKwkJLnR5cGUgPSBSVEVfQUNM X0ZJRUxEX1RZUEVfTUFTSywNCj4gKwkJLnNpemUgPSBzaXplb2YodWludDMyX3QpLA0KPiArCQku ZmllbGRfaW5kZXggPSBTUkMzX0ZJRUxEX0lQVjYsDQo+ICsJCS5pbnB1dF9pbmRleCA9IFNSQzNf RklFTERfSVBWNiwNCj4gKwkJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBydGVfaXB2Nl9oZHIs IHNyY19hZGRyKSAtDQo+ICsJCQlvZmZzZXRvZihzdHJ1Y3QgcnRlX2lwdjZfaGRyLCBwcm90bykg Kw0KPiArCQkJMiAqIHNpemVvZih1aW50MzJfdCksDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBl ID0gUlRFX0FDTF9GSUVMRF9UWVBFX01BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQzMl90 KSwNCj4gKwkJLmZpZWxkX2luZGV4ID0gU1JDNF9GSUVMRF9JUFY2LA0KPiArCQkuaW5wdXRfaW5k ZXggPSBTUkM0X0ZJRUxEX0lQVjYsDQo+ICsJCS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcnRl X2lwdjZfaGRyLCBzcmNfYWRkcikgLQ0KPiArCQkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9pcHY2X2hk ciwgcHJvdG8pICsNCj4gKwkJCTMgKiBzaXplb2YodWludDMyX3QpLA0KPiArCX0sDQo+ICsJew0K PiArCQkudHlwZSA9IFJURV9BQ0xfRklFTERfVFlQRV9NQVNLLA0KPiArCQkuc2l6ZSA9IHNpemVv Zih1aW50MzJfdCksDQo+ICsJCS5maWVsZF9pbmRleCA9IERTVDFfRklFTERfSVBWNiwNCj4gKwkJ LmlucHV0X2luZGV4ID0gRFNUMV9GSUVMRF9JUFY2LA0KPiArCQkub2Zmc2V0ID0gb2Zmc2V0b2Yo c3RydWN0IHJ0ZV9pcHY2X2hkciwgZHN0X2FkZHIpDQo+ICsJCQkJLSBvZmZzZXRvZihzdHJ1Y3Qg cnRlX2lwdjZfaGRyLCBwcm90byksDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBlID0gUlRFX0FD TF9GSUVMRF9UWVBFX01BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQzMl90KSwNCj4gKwkJ LmZpZWxkX2luZGV4ID0gRFNUMl9GSUVMRF9JUFY2LA0KPiArCQkuaW5wdXRfaW5kZXggPSBEU1Qy X0ZJRUxEX0lQVjYsDQo+ICsJCS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcnRlX2lwdjZfaGRy LCBkc3RfYWRkcikgLQ0KPiArCQkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9pcHY2X2hkciwgcHJvdG8p ICsgc2l6ZW9mKHVpbnQzMl90KSwNCj4gKwl9LA0KPiArCXsNCj4gKwkJLnR5cGUgPSBSVEVfQUNM X0ZJRUxEX1RZUEVfTUFTSywNCj4gKwkJLnNpemUgPSBzaXplb2YodWludDMyX3QpLA0KPiArCQku ZmllbGRfaW5kZXggPSBEU1QzX0ZJRUxEX0lQVjYsDQo+ICsJCS5pbnB1dF9pbmRleCA9IERTVDNf RklFTERfSVBWNiwNCj4gKwkJLm9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBydGVfaXB2Nl9oZHIs IGRzdF9hZGRyKSAtDQo+ICsJCQlvZmZzZXRvZihzdHJ1Y3QgcnRlX2lwdjZfaGRyLCBwcm90bykg Kw0KPiArCQkJMiAqIHNpemVvZih1aW50MzJfdCksDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBl ID0gUlRFX0FDTF9GSUVMRF9UWVBFX01BU0ssDQo+ICsJCS5zaXplID0gc2l6ZW9mKHVpbnQzMl90 KSwNCj4gKwkJLmZpZWxkX2luZGV4ID0gRFNUNF9GSUVMRF9JUFY2LA0KPiArCQkuaW5wdXRfaW5k ZXggPSBEU1Q0X0ZJRUxEX0lQVjYsDQo+ICsJCS5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcnRl X2lwdjZfaGRyLCBkc3RfYWRkcikgLQ0KPiArCQkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9pcHY2X2hk ciwgcHJvdG8pICsNCj4gKwkJCTMgKiBzaXplb2YodWludDMyX3QpLA0KPiArCX0sDQo+ICsJew0K PiArCQkudHlwZSA9IFJURV9BQ0xfRklFTERfVFlQRV9SQU5HRSwNCj4gKwkJLnNpemUgPSBzaXpl b2YodWludDE2X3QpLA0KPiArCQkuZmllbGRfaW5kZXggPSBTUkNQX0ZJRUxEX0lQVjYsDQo+ICsJ CS5pbnB1dF9pbmRleCA9IFNSQ1BfRklFTERfSVBWNiwNCj4gKwkJLm9mZnNldCA9IHNpemVvZihz dHJ1Y3QgcnRlX2lwdjZfaGRyKSAtDQo+ICsJCQlvZmZzZXRvZihzdHJ1Y3QgcnRlX2lwdjZfaGRy LCBwcm90byksDQo+ICsJfSwNCj4gKwl7DQo+ICsJCS50eXBlID0gUlRFX0FDTF9GSUVMRF9UWVBF X1JBTkdFLA0KPiArCQkuc2l6ZSA9IHNpemVvZih1aW50MTZfdCksDQo+ICsJCS5maWVsZF9pbmRl eCA9IERTVFBfRklFTERfSVBWNiwNCj4gKwkJLmlucHV0X2luZGV4ID0gU1JDUF9GSUVMRF9JUFY2 LA0KPiArCQkub2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBydGVfaXB2Nl9oZHIpIC0NCj4gKwkJCW9m ZnNldG9mKHN0cnVjdCBydGVfaXB2Nl9oZHIsIHByb3RvKSArIHNpemVvZih1aW50MTZfdCksDQo+ ICsJfSwNCj4gK307DQo+ICsNCj4gK2VudW0gew0KPiArCUNCX0ZMRF9TUkNfQUREUiwNCj4gKwlD Ql9GTERfRFNUX0FERFIsDQo+ICsJQ0JfRkxEX1NSQ19QT1JUX0xPVywNCj4gKwlDQl9GTERfU1JD X1BPUlRfRExNLA0KPiArCUNCX0ZMRF9TUkNfUE9SVF9ISUdILA0KPiArCUNCX0ZMRF9EU1RfUE9S VF9MT1csDQo+ICsJQ0JfRkxEX0RTVF9QT1JUX0RMTSwNCj4gKwlDQl9GTERfRFNUX1BPUlRfSElH SCwNCj4gKwlDQl9GTERfUFJPVE8sDQo+ICsJQ0JfRkxEX1VTRVJEQVRBLA0KPiArCUNCX0ZMRF9O VU0sDQo+ICt9Ow0KPiArDQo+ICtSVEVfQUNMX1JVTEVfREVGKGFjbDRfcnVsZSwgUlRFX0RJTShp cHY0X2RlZnMpKTsNCj4gK1JURV9BQ0xfUlVMRV9ERUYoYWNsNl9ydWxlLCBSVEVfRElNKGlwdjZf ZGVmcykpOw0KPiArDQo+ICtzdHJ1Y3QgYWNsX3NlYXJjaF90IHsNCj4gKwljb25zdCB1aW50OF90 ICpkYXRhX2lwdjRbTUFYX1BLVF9CVVJTVF07DQo+ICsJc3RydWN0IHJ0ZV9tYnVmICptX2lwdjRb TUFYX1BLVF9CVVJTVF07DQo+ICsJdWludDMyX3QgcmVzX2lwdjRbTUFYX1BLVF9CVVJTVF07DQo+ ICsJaW50IG51bV9pcHY0Ow0KPiArDQo+ICsJY29uc3QgdWludDhfdCAqZGF0YV9pcHY2W01BWF9Q S1RfQlVSU1RdOw0KPiArCXN0cnVjdCBydGVfbWJ1ZiAqbV9pcHY2W01BWF9QS1RfQlVSU1RdOw0K PiArCXVpbnQzMl90IHJlc19pcHY2W01BWF9QS1RfQlVSU1RdOw0KPiArCWludCBudW1faXB2NjsN Cj4gK307DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgew0KPiArCXN0cnVjdCBydGVfYWNsX2N0eCAq YWN4X2lwdjRbTkJfU09DS0VUU107DQo+ICsJc3RydWN0IHJ0ZV9hY2xfY3R4ICphY3hfaXB2NltO Ql9TT0NLRVRTXTsNCj4gKyNpZmRlZiBMM0ZXREFDTF9ERUJVRw0KPiArCXN0cnVjdCBhY2w0X3J1 bGUgKnJ1bGVfaXB2NDsNCj4gKwlzdHJ1Y3QgYWNsNl9ydWxlICpydWxlX2lwdjY7DQo+ICsjZW5k aWYNCj4gK30gYWNsX2NvbmZpZzsNCj4gKw0KPiArc3RhdGljIGNvbnN0IGNoYXIgY2JfcG9ydF9k ZWxpbVtdID0gIjoiOw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHJ0ZV9hY2xfcnVsZSAqYWNsX2Jh c2VfaXB2NCwgKnJvdXRlX2Jhc2VfaXB2NCwNCj4gKwkJKmFjbF9iYXNlX2lwdjYsICpyb3V0ZV9i YXNlX2lwdjY7DQo+ICtzdGF0aWMgdW5zaWduZWQgaW50IGFjbF9udW1faXB2NCwgcm91dGVfbnVt X2lwdjQsDQo+ICsJCWFjbF9udW1faXB2Niwgcm91dGVfbnVtX2lwdjY7DQo+ICsNCj4gKyNpbmNs dWRlICJsM2Z3ZF9hY2wuaCINCj4gKw0KPiArI2luY2x1ZGUgImwzZndkX2FjbF9zY2FsYXIuaCIN Cj4gKw0KPiArLyoNCj4gKyAqIFBhcnNlIElQVjYgYWRkcmVzcywgZXhwZWN0cyB0aGUgZm9sbG93 aW5nIGZvcm1hdDoNCj4gKyAqIFhYWFg6WFhYWDpYWFhYOlhYWFg6WFhYWDpYWFhYOlhYWFg6WFhY WCAod2hlcmUgWCBpcyBhIGhleGFkZWNpbWFsIGRpZ2l0KS4NCj4gKyAqLw0KPiArc3RhdGljIGlu dA0KPiArcGFyc2VfaXB2Nl9hZGRyKGNoYXIgKmluLCB1aW50MzJfdCB2W0lQVjZfQUREUl9VMzJd LCB1aW50MzJfdCAqbWFzaykNCj4gK3sNCj4gKwljaGFyICpzYSwgKnNtLCAqc3Y7DQo+ICsJY29u c3QgY2hhciAqZGxtID0gICIvIjsNCj4gKw0KPiArCXN2ID0gTlVMTDsNCj4gKwlzYSA9IHN0cnRv a19yKGluLCBkbG0sICZzdik7DQo+ICsJaWYgKHNhID09IE5VTEwpDQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArCXNtID0gc3RydG9rX3IoTlVMTCwgZGxtLCAmc3YpOw0KPiArCWlmIChzbSA9PSBO VUxMKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmIChpbmV0X3B0b24oQUZfSU5F VDYsIHNhLCB2KSAhPSAxKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCUdFVF9DQl9G SUVMRChzbSwgKm1hc2ssIDAsIDEyOCwgMCk7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQNCj4gK3BhcnNlX2lwdjZfbmV0KGNoYXIgKmluLCBzdHJ1Y3QgcnRlX2FjbF9m aWVsZCBmaWVsZFs0XSkNCj4gK3sNCj4gKwlpbnQzMl90IHJjOw0KPiArCXVpbnQzMl90IGksIHZb NF07DQo+ICsJdWludDMyX3QgbTsNCj4gKwljb25zdCB1aW50MzJfdCBuYnUzMiA9IHNpemVvZih1 aW50MzJfdCkgKiBDSEFSX0JJVDsNCj4gKw0KPiArCS8qIGdldCBhZGRyZXNzLiAqLw0KPiArCXJj ID0gcGFyc2VfaXB2Nl9hZGRyKGluLCB2LCAmbSk7DQo+ICsJaWYgKHJjICE9IDApDQo+ICsJCXJl dHVybiByYzsNCj4gKw0KPiArCS8qIHB1dCBhbGwgdG9nZXRoZXIuICovDQo+ICsJZm9yIChpID0g MDsgaSAhPSBSVEVfRElNKHYpOyBpKyspIHsNCj4gKwkJaWYgKG0gPj0gKGkgKyAxKSAqIG5idTMy KQ0KPiArCQkJZmllbGRbaV0ubWFza19yYW5nZS51MzIgPSBuYnUzMjsNCj4gKwkJZWxzZQ0KPiAr CQkJZmllbGRbaV0ubWFza19yYW5nZS51MzIgPSBtID4gKGkgKiBuYnUzMikgPw0KPiArCQkJCW0g LSAoaSAqIDMyKSA6IDA7DQo+ICsNCj4gKwkJZmllbGRbaV0udmFsdWUudTMyID0gdltpXTsNCj4g Kwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArcGFy c2VfY2JfaXB2Nl9ydWxlKGNoYXIgKnN0ciwgc3RydWN0IHJ0ZV9hY2xfcnVsZSAqdiwgaW50IGhh c191c2VyZGF0YSkNCj4gK3sNCj4gKwlpbnQgaSwgcmM7DQo+ICsJY2hhciAqcywgKnNwLCAqaW5b Q0JfRkxEX05VTV07DQo+ICsJc3RhdGljIGNvbnN0IGNoYXIgKmRsbSA9ICIgXHRcbiI7DQo+ICsJ aW50IGRpbSA9IGhhc191c2VyZGF0YSA/IENCX0ZMRF9OVU0gOiBDQl9GTERfVVNFUkRBVEE7DQo+ ICsJcyA9IHN0cjsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgIT0gZGltOyBpKyssIHMgPSBOVUxM KSB7DQo+ICsJCWluW2ldID0gc3RydG9rX3IocywgZGxtLCAmc3ApOw0KPiArCQlpZiAoaW5baV0g PT0gTlVMTCkNCj4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCXJjID0gcGFy c2VfaXB2Nl9uZXQoaW5bQ0JfRkxEX1NSQ19BRERSXSwgdi0+ZmllbGQgKyBTUkMxX0ZJRUxEX0lQ VjYpOw0KPiArCWlmIChyYyAhPSAwKSB7DQo+ICsJCWFjbF9sb2coImZhaWxlZCB0byByZWFkIHNv dXJjZSBhZGRyZXNzL21hc2s6ICVzXG4iLA0KPiArCQkJaW5bQ0JfRkxEX1NSQ19BRERSXSk7DQo+ ICsJCXJldHVybiByYzsNCj4gKwl9DQo+ICsNCj4gKwlyYyA9IHBhcnNlX2lwdjZfbmV0KGluW0NC X0ZMRF9EU1RfQUREUl0sIHYtPmZpZWxkICsgRFNUMV9GSUVMRF9JUFY2KTsNCj4gKwlpZiAocmMg IT0gMCkgew0KPiArCQlhY2xfbG9nKCJmYWlsZWQgdG8gcmVhZCBkZXN0aW5hdGlvbiBhZGRyZXNz L21hc2s6ICVzXG4iLA0KPiArCQkJaW5bQ0JfRkxEX0RTVF9BRERSXSk7DQo+ICsJCXJldHVybiBy YzsNCj4gKwl9DQo+ICsNCj4gKwkvKiBzb3VyY2UgcG9ydC4gKi8NCj4gKwlHRVRfQ0JfRklFTEQo aW5bQ0JfRkxEX1NSQ19QT1JUX0xPV10sDQo+ICsJCXYtPmZpZWxkW1NSQ1BfRklFTERfSVBWNl0u dmFsdWUudTE2LA0KPiArCQkwLCBVSU5UMTZfTUFYLCAwKTsNCj4gKwlHRVRfQ0JfRklFTEQoaW5b Q0JfRkxEX1NSQ19QT1JUX0hJR0hdLA0KPiArCQl2LT5maWVsZFtTUkNQX0ZJRUxEX0lQVjZdLm1h c2tfcmFuZ2UudTE2LA0KPiArCQkwLCBVSU5UMTZfTUFYLCAwKTsNCj4gKw0KPiArCWlmIChzdHJu Y21wKGluW0NCX0ZMRF9TUkNfUE9SVF9ETE1dLCBjYl9wb3J0X2RlbGltLA0KPiArCQkJc2l6ZW9m KGNiX3BvcnRfZGVsaW0pKSAhPSAwKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCS8q IGRlc3RpbmF0aW9uIHBvcnQuICovDQo+ICsJR0VUX0NCX0ZJRUxEKGluW0NCX0ZMRF9EU1RfUE9S VF9MT1ddLA0KPiArCQl2LT5maWVsZFtEU1RQX0ZJRUxEX0lQVjZdLnZhbHVlLnUxNiwNCj4gKwkJ MCwgVUlOVDE2X01BWCwgMCk7DQo+ICsJR0VUX0NCX0ZJRUxEKGluW0NCX0ZMRF9EU1RfUE9SVF9I SUdIXSwNCj4gKwkJdi0+ZmllbGRbRFNUUF9GSUVMRF9JUFY2XS5tYXNrX3JhbmdlLnUxNiwNCj4g KwkJMCwgVUlOVDE2X01BWCwgMCk7DQo+ICsNCj4gKwlpZiAoc3RybmNtcChpbltDQl9GTERfRFNU X1BPUlRfRExNXSwgY2JfcG9ydF9kZWxpbSwNCj4gKwkJCXNpemVvZihjYl9wb3J0X2RlbGltKSkg IT0gMCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAodi0+ZmllbGRbU1JDUF9G SUVMRF9JUFY2XS5tYXNrX3JhbmdlLnUxNg0KPiArCQkJPCB2LT5maWVsZFtTUkNQX0ZJRUxEX0lQ VjZdLnZhbHVlLnUxNg0KPiArCQkJfHwgdi0+ZmllbGRbRFNUUF9GSUVMRF9JUFY2XS5tYXNrX3Jh bmdlLnUxNg0KPiArCQkJPCB2LT5maWVsZFtEU1RQX0ZJRUxEX0lQVjZdLnZhbHVlLnUxNikNCj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlHRVRfQ0JfRklFTEQoaW5bQ0JfRkxEX1BST1RP XSwgdi0+ZmllbGRbUFJPVE9fRklFTERfSVBWNl0udmFsdWUudTgsDQo+ICsJCTAsIFVJTlQ4X01B WCwgJy8nKTsNCj4gKwlHRVRfQ0JfRklFTEQoaW5bQ0JfRkxEX1BST1RPXSwgdi0+ZmllbGRbUFJP VE9fRklFTERfSVBWNl0ubWFza19yYW5nZS51OCwNCj4gKwkJMCwgVUlOVDhfTUFYLCAwKTsNCj4g Kw0KPiArCWlmIChoYXNfdXNlcmRhdGEpDQo+ICsJCUdFVF9DQl9GSUVMRChpbltDQl9GTERfVVNF UkRBVEFdLCB2LT5kYXRhLnVzZXJkYXRhLA0KPiArCQkJMCwgVUlOVDMyX01BWCwgMCk7DQo+ICsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIFBhcnNlIENsYXNzQmVuY2gg cnVsZXMgZmlsZS4NCj4gKyAqIEV4cGVjdGVkIGZvcm1hdDoNCj4gKyAqICdAJzxzcmNfaXB2NF9h ZGRyPicvJzxtYXNrbGVuPiA8c3BhY2U+IFwNCj4gKyAqIDxkc3RfaXB2NF9hZGRyPicvJzxtYXNr bGVuPiA8c3BhY2U+IFwNCj4gKyAqIDxzcmNfcG9ydF9sb3c+IDxzcGFjZT4gIjoiIDxzcmNfcG9y dF9oaWdoPiA8c3BhY2U+IFwNCj4gKyAqIDxkc3RfcG9ydF9sb3c+IDxzcGFjZT4gIjoiIDxkc3Rf cG9ydF9oaWdoPiA8c3BhY2U+IFwNCj4gKyAqIDxwcm90bz4nLyc8bWFzaz4NCj4gKyAqLw0KPiAr c3RhdGljIGludA0KPiArcGFyc2VfaXB2NF9uZXQoY2hhciAqaW4sIHVpbnQzMl90ICphZGRyLCB1 aW50MzJfdCAqbWFza19sZW4pDQo+ICt7DQo+ICsJY2hhciAqc2EsICpzbSwgKnN2Ow0KPiArCWNv bnN0IGNoYXIgKmRsbSA9ICAiLyI7DQo+ICsNCj4gKwlzdiA9IE5VTEw7DQo+ICsJc2EgPSBzdHJ0 b2tfcihpbiwgZGxtLCAmc3YpOw0KPiArCWlmIChzYSA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKwlzbSA9IHN0cnRva19yKE5VTEwsIGRsbSwgJnN2KTsNCj4gKwlpZiAoc20gPT0g TlVMTCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAoaW5ldF9wdG9uKEFGX0lO RVQsIHNhLCBhZGRyKSAhPSAxKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCUdFVF9D Ql9GSUVMRChzbSwgKm1hc2tfbGVuLCAwLCAzMiwgMCk7DQo+ICsJKmFkZHIgPSBudG9obCgqYWRk cik7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3BhcnNlX2Ni X2lwdjR2bGFuX3J1bGUoY2hhciAqc3RyLCBzdHJ1Y3QgcnRlX2FjbF9ydWxlICp2LCBpbnQgaGFz X3VzZXJkYXRhKQ0KPiArew0KPiArCWludCBpLCByYzsNCj4gKwljaGFyICpzLCAqc3AsICppbltD Ql9GTERfTlVNXTsNCj4gKwlzdGF0aWMgY29uc3QgY2hhciAqZGxtID0gIiBcdFxuIjsNCj4gKwlp bnQgZGltID0gaGFzX3VzZXJkYXRhID8gQ0JfRkxEX05VTSA6IENCX0ZMRF9VU0VSREFUQTsNCj4g KwlzID0gc3RyOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSAhPSBkaW07IGkrKywgcyA9IE5VTEwp IHsNCj4gKwkJaW5baV0gPSBzdHJ0b2tfcihzLCBkbG0sICZzcCk7DQo+ICsJCWlmIChpbltpXSA9 PSBOVUxMKQ0KPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcmMgPSBwYXJz ZV9pcHY0X25ldChpbltDQl9GTERfU1JDX0FERFJdLA0KPiArCQkJJnYtPmZpZWxkW1NSQ19GSUVM RF9JUFY0XS52YWx1ZS51MzIsDQo+ICsJCQkmdi0+ZmllbGRbU1JDX0ZJRUxEX0lQVjRdLm1hc2tf cmFuZ2UudTMyKTsNCj4gKwlpZiAocmMgIT0gMCkgew0KPiArCQlhY2xfbG9nKCJmYWlsZWQgdG8g cmVhZCBzb3VyY2UgYWRkcmVzcy9tYXNrOiAlc1xuIiwNCj4gKwkJCWluW0NCX0ZMRF9TUkNfQURE Ul0pOw0KPiArCQlyZXR1cm4gcmM7DQo+ICsJfQ0KPiArDQo+ICsJcmMgPSBwYXJzZV9pcHY0X25l dChpbltDQl9GTERfRFNUX0FERFJdLA0KPiArCQkJJnYtPmZpZWxkW0RTVF9GSUVMRF9JUFY0XS52 YWx1ZS51MzIsDQo+ICsJCQkmdi0+ZmllbGRbRFNUX0ZJRUxEX0lQVjRdLm1hc2tfcmFuZ2UudTMy KTsNCj4gKwlpZiAocmMgIT0gMCkgew0KPiArCQlhY2xfbG9nKCJmYWlsZWQgdG8gcmVhZCBkZXN0 aW5hdGlvbiBhZGRyZXNzL21hc2s6ICVzXG4iLA0KPiArCQkJaW5bQ0JfRkxEX0RTVF9BRERSXSk7 DQo+ICsJCXJldHVybiByYzsNCj4gKwl9DQo+ICsNCj4gKwlHRVRfQ0JfRklFTEQoaW5bQ0JfRkxE X1NSQ19QT1JUX0xPV10sDQo+ICsJCXYtPmZpZWxkW1NSQ1BfRklFTERfSVBWNF0udmFsdWUudTE2 LA0KPiArCQkwLCBVSU5UMTZfTUFYLCAwKTsNCj4gKwlHRVRfQ0JfRklFTEQoaW5bQ0JfRkxEX1NS Q19QT1JUX0hJR0hdLA0KPiArCQl2LT5maWVsZFtTUkNQX0ZJRUxEX0lQVjRdLm1hc2tfcmFuZ2Uu dTE2LA0KPiArCQkwLCBVSU5UMTZfTUFYLCAwKTsNCj4gKw0KPiArCWlmIChzdHJuY21wKGluW0NC X0ZMRF9TUkNfUE9SVF9ETE1dLCBjYl9wb3J0X2RlbGltLA0KPiArCQkJc2l6ZW9mKGNiX3BvcnRf ZGVsaW0pKSAhPSAwKSB7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCUdF VF9DQl9GSUVMRChpbltDQl9GTERfRFNUX1BPUlRfTE9XXSwNCj4gKwkJdi0+ZmllbGRbRFNUUF9G SUVMRF9JUFY0XS52YWx1ZS51MTYsDQo+ICsJCTAsIFVJTlQxNl9NQVgsIDApOw0KPiArCUdFVF9D Ql9GSUVMRChpbltDQl9GTERfRFNUX1BPUlRfSElHSF0sDQo+ICsJCXYtPmZpZWxkW0RTVFBfRklF TERfSVBWNF0ubWFza19yYW5nZS51MTYsDQo+ICsJCTAsIFVJTlQxNl9NQVgsIDApOw0KPiArDQo+ ICsJaWYgKHN0cm5jbXAoaW5bQ0JfRkxEX0RTVF9QT1JUX0RMTV0sIGNiX3BvcnRfZGVsaW0sDQo+ ICsJCQlzaXplb2YoY2JfcG9ydF9kZWxpbSkpICE9IDApIHsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHYtPmZpZWxkW1NSQ1BfRklFTERfSVBWNF0ubWFza19yYW5n ZS51MTYNCj4gKwkJCTwgdi0+ZmllbGRbU1JDUF9GSUVMRF9JUFY0XS52YWx1ZS51MTYNCj4gKwkJ CXx8IHYtPmZpZWxkW0RTVFBfRklFTERfSVBWNF0ubWFza19yYW5nZS51MTYNCj4gKwkJCTwgdi0+ ZmllbGRbRFNUUF9GSUVMRF9JUFY0XS52YWx1ZS51MTYpIHsNCj4gKwkJcmV0dXJuIC1FSU5WQUw7 DQo+ICsJfQ0KPiArDQo+ICsJR0VUX0NCX0ZJRUxEKGluW0NCX0ZMRF9QUk9UT10sIHYtPmZpZWxk W1BST1RPX0ZJRUxEX0lQVjRdLnZhbHVlLnU4LA0KPiArCQkwLCBVSU5UOF9NQVgsICcvJyk7DQo+ ICsJR0VUX0NCX0ZJRUxEKGluW0NCX0ZMRF9QUk9UT10sIHYtPmZpZWxkW1BST1RPX0ZJRUxEX0lQ VjRdLm1hc2tfcmFuZ2UudTgsDQo+ICsJCTAsIFVJTlQ4X01BWCwgMCk7DQo+ICsNCj4gKwlpZiAo aGFzX3VzZXJkYXRhKQ0KPiArCQlHRVRfQ0JfRklFTEQoaW5bQ0JfRkxEX1VTRVJEQVRBXSwgdi0+ ZGF0YS51c2VyZGF0YSwgMCwNCj4gKwkJCVVJTlQzMl9NQVgsIDApOw0KPiArDQo+ICsJcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2FjbF9hZGRfcnVsZXMoY29uc3QgY2hh ciAqcnVsZV9wYXRoLA0KPiArCQlzdHJ1Y3QgcnRlX2FjbF9ydWxlICoqcHJvdXRlX2Jhc2UsDQo+ ICsJCXVuc2lnbmVkIGludCAqcHJvdXRlX251bSwNCj4gKwkJc3RydWN0IHJ0ZV9hY2xfcnVsZSAq KnBhY2xfYmFzZSwNCj4gKwkJdW5zaWduZWQgaW50ICpwYWNsX251bSwgdWludDMyX3QgcnVsZV9z aXplLA0KPiArCQlpbnQgKCpwYXJzZXIpKGNoYXIgKiwgc3RydWN0IHJ0ZV9hY2xfcnVsZSosIGlu dCkpDQo+ICt7DQo+ICsJdWludDhfdCAqYWNsX3J1bGVzLCAqcm91dGVfcnVsZXM7DQo+ICsJc3Ry dWN0IHJ0ZV9hY2xfcnVsZSAqbmV4dDsNCj4gKwl1bnNpZ25lZCBpbnQgYWNsX251bSA9IDAsIHJv dXRlX251bSA9IDAsIHRvdGFsX251bSA9IDA7DQo+ICsJdW5zaWduZWQgaW50IGFjbF9jbnQgPSAw LCByb3V0ZV9jbnQgPSAwOw0KPiArCWNoYXIgYnVmZltMSU5FX01BWF07DQo+ICsJRklMRSAqZmgg PSBmb3BlbihydWxlX3BhdGgsICJyYiIpOw0KPiArCXVuc2lnbmVkIGludCBpID0gMDsNCj4gKwlp bnQgdmFsOw0KPiArDQo+ICsJaWYgKGZoID09IE5VTEwpDQo+ICsJCXJ0ZV9leGl0KEVYSVRfRkFJ TFVSRSwgIiVzOiBPcGVuICVzIGZhaWxlZFxuIiwgX19mdW5jX18sDQo+ICsJCQlydWxlX3BhdGgp Ow0KPiArDQo+ICsJd2hpbGUgKChmZ2V0cyhidWZmLCBMSU5FX01BWCwgZmgpICE9IE5VTEwpKSB7 DQo+ICsJCWlmIChidWZmWzBdID09IFJPVVRFX0xFQURfQ0hBUikNCj4gKwkJCXJvdXRlX251bSsr Ow0KPiArCQllbHNlIGlmIChidWZmWzBdID09IEFDTF9MRUFEX0NIQVIpDQo+ICsJCQlhY2xfbnVt Kys7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHJvdXRlX251bSA9PSAwKQ0KPiArCQlydGVfZXhpdChF WElUX0ZBSUxVUkUsICJOb3QgZmluZCBhbnkgcm91dGUgZW50cmllcyBpbiAlcyFcbiIsDQo+ICsJ CQkJcnVsZV9wYXRoKTsNCj4gKw0KPiArCXZhbCA9IGZzZWVrKGZoLCAwLCBTRUVLX1NFVCk7DQo+ ICsJaWYgKHZhbCA8IDApIHsNCj4gKwkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAiJXM6IEZpbGUg c2VlayBvcGVyYXRpb24gZmFpbGVkXG4iLA0KPiArCQkJX19mdW5jX18pOw0KPiArCX0NCj4gKw0K PiArCWFjbF9ydWxlcyA9IGNhbGxvYyhhY2xfbnVtLCBydWxlX3NpemUpOw0KPiArDQo+ICsJaWYg KGFjbF9ydWxlcyA9PSBOVUxMKQ0KPiArCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsICIlczogZmFp bGVkIHRvIG1hbGxvYyBtZW1vcnlcbiIsDQo+ICsJCQlfX2Z1bmNfXyk7DQo+ICsNCj4gKwlyb3V0 ZV9ydWxlcyA9IGNhbGxvYyhyb3V0ZV9udW0sIHJ1bGVfc2l6ZSk7DQo+ICsNCj4gKwlpZiAocm91 dGVfcnVsZXMgPT0gTlVMTCkNCj4gKwkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAiJXM6IGZhaWxl ZCB0byBtYWxsb2MgbWVtb3J5XG4iLA0KPiArCQkJX19mdW5jX18pOw0KPiArDQo+ICsJaSA9IDA7 DQo+ICsJd2hpbGUgKGZnZXRzKGJ1ZmYsIExJTkVfTUFYLCBmaCkgIT0gTlVMTCkgew0KPiArCQlp Kys7DQo+ICsNCj4gKwkJaWYgKGlzX2J5cGFzc19saW5lKGJ1ZmYpKQ0KPiArCQkJY29udGludWU7 DQo+ICsNCj4gKwkJY2hhciBzID0gYnVmZlswXTsNCj4gKw0KPiArCQkvKiBSb3V0ZSBlbnRyeSAq Lw0KPiArCQlpZiAocyA9PSBST1VURV9MRUFEX0NIQVIpDQo+ICsJCQluZXh0ID0gKHN0cnVjdCBy dGVfYWNsX3J1bGUgKikocm91dGVfcnVsZXMgKw0KPiArCQkJCXJvdXRlX2NudCAqIHJ1bGVfc2l6 ZSk7DQo+ICsNCj4gKwkJLyogQUNMIGVudHJ5ICovDQo+ICsJCWVsc2UgaWYgKHMgPT0gQUNMX0xF QURfQ0hBUikNCj4gKwkJCW5leHQgPSAoc3RydWN0IHJ0ZV9hY2xfcnVsZSAqKShhY2xfcnVsZXMg Kw0KPiArCQkJCWFjbF9jbnQgKiBydWxlX3NpemUpOw0KPiArDQo+ICsJCS8qIElsbGVnYWwgbGlu ZSAqLw0KPiArCQllbHNlDQo+ICsJCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsDQo+ICsJCQkJIiVz IExpbmUgJXU6IHNob3VsZCBzdGFydCB3aXRoIGxlYWRpbmcgIg0KPiArCQkJCSJjaGFyICVjIG9y ICVjXG4iLA0KPiArCQkJCXJ1bGVfcGF0aCwgaSwgUk9VVEVfTEVBRF9DSEFSLCBBQ0xfTEVBRF9D SEFSKTsNCj4gKw0KPiArCQlpZiAocGFyc2VyKGJ1ZmYgKyAxLCBuZXh0LCBzID09IFJPVVRFX0xF QURfQ0hBUikgIT0gMCkNCj4gKwkJCXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwNCj4gKwkJCQkiJXMg TGluZSAldTogcGFyc2UgcnVsZXMgZXJyb3JcbiIsDQo+ICsJCQkJcnVsZV9wYXRoLCBpKTsNCj4g Kw0KPiArCQlpZiAocyA9PSBST1VURV9MRUFEX0NIQVIpIHsNCj4gKwkJCS8qIENoZWNrIHRoZSBm b3J3YXJkaW5nIHBvcnQgbnVtYmVyICovDQo+ICsJCQlpZiAoKGVuYWJsZWRfcG9ydF9tYXNrICYg KDEgPDwgbmV4dC0+ZGF0YS51c2VyZGF0YSkpID09DQo+ICsJCQkJCTApDQo+ICsJCQkJcnRlX2V4 aXQoRVhJVF9GQUlMVVJFLA0KPiArCQkJCQkiJXMgTGluZSAldTogZndkIG51bWJlciBpbGxlZ2Fs OiV1XG4iLA0KPiArCQkJCQlydWxlX3BhdGgsIGksIG5leHQtPmRhdGEudXNlcmRhdGEpOw0KPiAr CQkJbmV4dC0+ZGF0YS51c2VyZGF0YSArPSBGV0RfUE9SVF9TSElGVDsNCj4gKwkJCXJvdXRlX2Nu dCsrOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJbmV4dC0+ZGF0YS51c2VyZGF0YSA9IEFDTF9ERU5Z X1NJR05BVFVSRSArIGFjbF9jbnQ7DQo+ICsJCQlhY2xfY250Kys7DQo+ICsJCX0NCj4gKw0KPiAr CQluZXh0LT5kYXRhLnByaW9yaXR5ID0gUlRFX0FDTF9NQVhfUFJJT1JJVFkgLSB0b3RhbF9udW07 DQo+ICsJCW5leHQtPmRhdGEuY2F0ZWdvcnlfbWFzayA9IC0xOw0KPiArCQl0b3RhbF9udW0rKzsN Cj4gKwl9DQo+ICsNCj4gKwlmY2xvc2UoZmgpOw0KPiArDQo+ICsJKnBhY2xfYmFzZSA9IChzdHJ1 Y3QgcnRlX2FjbF9ydWxlICopYWNsX3J1bGVzOw0KPiArCSpwYWNsX251bSA9IGFjbF9udW07DQo+ ICsJKnByb3V0ZV9iYXNlID0gKHN0cnVjdCBydGVfYWNsX3J1bGUgKilyb3V0ZV9ydWxlczsNCj4g KwkqcHJvdXRlX251bSA9IHJvdXRlX2NudDsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgY29uc3QgY2hhciAqDQo+ICtzdHJfYWNsX2FsZyhlbnVtIHJ0ZV9hY2xfY2xh c3NpZnlfYWxnIGFsZykNCj4gK3sNCj4gKwl1aW50MzJfdCBpOw0KPiArDQo+ICsJZm9yIChpID0g MDsgaSAhPSBSVEVfRElNKGFjbF9hbGcpOyBpKyspIHsNCj4gKwkJaWYgKGFsZyA9PSBhY2xfYWxn W2ldLmFsZykNCj4gKwkJCXJldHVybiBhY2xfYWxnW2ldLm5hbWU7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuICJkZWZhdWx0IjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2R1bXBfYWNs X2NvbmZpZyh2b2lkKQ0KPiArew0KPiArCXByaW50ZigiQUNMIG9wdGlvbnMgYXJlOlxuIik7DQo+ ICsJcHJpbnRmKCJydWxlX2lwdjQ6ICVzXG4iLCBwYXJtX2NvbmZpZy5ydWxlX2lwdjRfbmFtZSk7 DQo+ICsJcHJpbnRmKCJydWxlX2lwdjY6ICVzXG4iLCBwYXJtX2NvbmZpZy5ydWxlX2lwdjZfbmFt ZSk7DQo+ICsJcHJpbnRmKCJhbGc6ICVzXG4iLCBzdHJfYWNsX2FsZyhwYXJtX2NvbmZpZy5hbGcp KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArY2hlY2tfYWNsX2NvbmZpZyh2b2lkKQ0K PiArew0KPiArCWlmIChwYXJtX2NvbmZpZy5ydWxlX2lwdjRfbmFtZSA9PSBOVUxMKSB7DQo+ICsJ CWFjbF9sb2coIkFDTCBJUHY0IHJ1bGUgZmlsZSBub3Qgc3BlY2lmaWVkXG4iKTsNCj4gKwkJcmV0 dXJuIC0xOw0KPiArCX0gZWxzZSBpZiAocGFybV9jb25maWcucnVsZV9pcHY2X25hbWUgPT0gTlVM TCkgew0KPiArCQlhY2xfbG9nKCJBQ0wgSVB2NiBydWxlIGZpbGUgbm90IHNwZWNpZmllZFxuIik7 DQo+ICsJCXJldHVybiAtMTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArLyogU2V0dXAgQUNMIGNvbnRleHQuIDg8ICovDQo+ICtzdGF0aWMgc3RydWN0IHJ0ZV9hY2xf Y3R4Kg0KPiArYXBwX2FjbF9pbml0KHN0cnVjdCBydGVfYWNsX3J1bGUgKnJvdXRlX2Jhc2UsDQo+ ICsJCXN0cnVjdCBydGVfYWNsX3J1bGUgKmFjbF9iYXNlLCB1bnNpZ25lZCBpbnQgcm91dGVfbnVt LA0KPiArCQl1bnNpZ25lZCBpbnQgYWNsX251bSwgaW50IGlwdjYsIGludCBzb2NrZXRpZCkNCj4g K3sNCj4gKwljaGFyIG5hbWVbUEFUSF9NQVhdOw0KPiArCXN0cnVjdCBydGVfYWNsX3BhcmFtIGFj bF9wYXJhbTsNCj4gKwlzdHJ1Y3QgcnRlX2FjbF9jb25maWcgYWNsX2J1aWxkX3BhcmFtOw0KPiAr CXN0cnVjdCBydGVfYWNsX2N0eCAqY29udGV4dDsNCj4gKwlpbnQgZGltID0gaXB2NiA/IFJURV9E SU0oaXB2Nl9kZWZzKSA6IFJURV9ESU0oaXB2NF9kZWZzKTsNCj4gKw0KPiArCS8qIENyZWF0ZSBB Q0wgY29udGV4dHMgKi8NCj4gKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyVkIiwN Cj4gKwkJCWlwdjYgPyBMM0ZXRF9BQ0xfSVBWNl9OQU1FIDogTDNGV0RfQUNMX0lQVjRfTkFNRSwN Cj4gKwkJCXNvY2tldGlkKTsNCj4gKw0KPiArCWFjbF9wYXJhbS5uYW1lID0gbmFtZTsNCj4gKwlh Y2xfcGFyYW0uc29ja2V0X2lkID0gc29ja2V0aWQ7DQo+ICsJYWNsX3BhcmFtLnJ1bGVfc2l6ZSA9 IFJURV9BQ0xfUlVMRV9TWihkaW0pOw0KPiArCWFjbF9wYXJhbS5tYXhfcnVsZV9udW0gPSBNQVhf QUNMX1JVTEVfTlVNOw0KPiArDQo+ICsJY29udGV4dCA9IHJ0ZV9hY2xfY3JlYXRlKCZhY2xfcGFy YW0pOw0KPiArCWlmIChjb250ZXh0ID09IE5VTEwpDQo+ICsJCXJ0ZV9leGl0KEVYSVRfRkFJTFVS RSwgIkZhaWxlZCB0byBjcmVhdGUgQUNMIGNvbnRleHRcbiIpOw0KPiArDQo+ICsJaWYgKHBhcm1f Y29uZmlnLmFsZyAhPSBSVEVfQUNMX0NMQVNTSUZZX0RFRkFVTFQgJiYNCj4gKwkJCXJ0ZV9hY2xf c2V0X2N0eF9jbGFzc2lmeShjb250ZXh0LCBwYXJtX2NvbmZpZy5hbGcpICE9IDApDQo+ICsJCXJ0 ZV9leGl0KEVYSVRfRkFJTFVSRSwNCj4gKwkJCSJGYWlsZWQgdG8gc2V0dXAgY2xhc3NpZnkgbWV0 aG9kIGZvciAgQUNMIGNvbnRleHRcbiIpOw0KPiArDQo+ICsJaWYgKHJ0ZV9hY2xfYWRkX3J1bGVz KGNvbnRleHQsIHJvdXRlX2Jhc2UsIHJvdXRlX251bSkgPCAwKQ0KPiArCQlydGVfZXhpdChFWElU X0ZBSUxVUkUsICJhZGQgcnVsZXMgZmFpbGVkXG4iKTsNCj4gKw0KPiArCWlmIChydGVfYWNsX2Fk ZF9ydWxlcyhjb250ZXh0LCBhY2xfYmFzZSwgYWNsX251bSkgPCAwKQ0KPiArCQlydGVfZXhpdChF WElUX0ZBSUxVUkUsICJhZGQgcnVsZXMgZmFpbGVkXG4iKTsNCj4gKw0KPiArCS8qIFBlcmZvcm0g YnVpbGRzICovDQo+ICsJbWVtc2V0KCZhY2xfYnVpbGRfcGFyYW0sIDAsIHNpemVvZihhY2xfYnVp bGRfcGFyYW0pKTsNCj4gKw0KPiArCWFjbF9idWlsZF9wYXJhbS5udW1fY2F0ZWdvcmllcyA9IERF RkFVTFRfTUFYX0NBVEVHT1JJRVM7DQo+ICsJYWNsX2J1aWxkX3BhcmFtLm51bV9maWVsZHMgPSBk aW07DQo+ICsJbWVtY3B5KCZhY2xfYnVpbGRfcGFyYW0uZGVmcywgaXB2NiA/IGlwdjZfZGVmcyA6 IGlwdjRfZGVmcywNCj4gKwkJaXB2NiA/IHNpemVvZihpcHY2X2RlZnMpIDogc2l6ZW9mKGlwdjRf ZGVmcykpOw0KPiArDQo+ICsJaWYgKHJ0ZV9hY2xfYnVpbGQoY29udGV4dCwgJmFjbF9idWlsZF9w YXJhbSkgIT0gMCkNCj4gKwkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAiRmFpbGVkIHRvIGJ1aWxk IEFDTCB0cmllXG4iKTsNCj4gKw0KPiArCXJ0ZV9hY2xfZHVtcChjb250ZXh0KTsNCj4gKw0KPiAr CXJldHVybiBjb250ZXh0Ow0KPiArfQ0KPiArLyogPjggRW5kIG9mIEFDTCBjb250ZXh0IHNldHVw LiAqLw0KPiArDQo+ICt2b2lkDQo+ICthY2xfZnJlZV9yb3V0ZXModm9pZCkNCj4gK3sNCj4gKwlm cmVlKHJvdXRlX2Jhc2VfaXB2NCk7DQo+ICsJZnJlZShyb3V0ZV9iYXNlX2lwdjYpOw0KPiArCXJv dXRlX2Jhc2VfaXB2NCA9IE5VTEw7DQo+ICsJcm91dGVfYmFzZV9pcHY2ID0gTlVMTDsNCj4gKwly b3V0ZV9udW1faXB2NCA9IDA7DQo+ICsJcm91dGVfbnVtX2lwdjYgPSAwOw0KPiArCWZyZWUoYWNs X2Jhc2VfaXB2NCk7DQo+ICsJZnJlZShhY2xfYmFzZV9pcHY2KTsNCj4gKwlhY2xfYmFzZV9pcHY0 ID0gTlVMTDsNCj4gKwlhY2xfYmFzZV9pcHY2ID0gTlVMTDsNCj4gKwlhY2xfbnVtX2lwdjQgPSAw Ow0KPiArCWFjbF9udW1faXB2NiA9IDA7DQo+ICt9DQo+ICsNCj4gKy8qIExvYWQgcnVsZXMgZnJv bSB0aGUgaW5wdXQgZmlsZSAqLw0KPiArdm9pZA0KPiArcmVhZF9jb25maWdfZmlsZXNfYWNsKHZv aWQpDQo+ICt7DQo+ICsJLyogaXB2NCBjaGVjayAqLw0KPiArCWlmIChwYXJtX2NvbmZpZy5ydWxl X2lwdjRfbmFtZSAhPSBOVUxMKSB7DQo+ICsJCWlmIChhY2xfYWRkX3J1bGVzKHBhcm1fY29uZmln LnJ1bGVfaXB2NF9uYW1lLCAmcm91dGVfYmFzZV9pcHY0LA0KPiArCQkJCSZyb3V0ZV9udW1faXB2 NCwgJmFjbF9iYXNlX2lwdjQsICZhY2xfbnVtX2lwdjQsDQo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBh Y2w0X3J1bGUpLCAmcGFyc2VfY2JfaXB2NHZsYW5fcnVsZSkgPCAwKSB7DQo+ICsJCQlhY2xfZnJl ZV9yb3V0ZXMoKTsNCj4gKwkJCXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwgIkZhaWxlZCB0byBhZGQg SVB2NCBydWxlc1xuIik7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQlSVEVfTE9HKEVSUiwg TDNGV0QsICJJUHY0IHJ1bGUgZmlsZSBub3Qgc3BlY2lmaWVkXG4iKTsNCj4gKwkJcnRlX2V4aXQo RVhJVF9GQUlMVVJFLCAiRmFpbGVkIHRvIGdldCB2YWxpZCByb3V0ZSBvcHRpb25zXG4iKTsNCj4g Kwl9DQo+ICsNCj4gKwkvKiBpcHY2IGNoZWNrICovDQo+ICsJaWYgKHBhcm1fY29uZmlnLnJ1bGVf aXB2Nl9uYW1lICE9IE5VTEwpIHsNCj4gKwkJaWYgKGFjbF9hZGRfcnVsZXMocGFybV9jb25maWcu cnVsZV9pcHY2X25hbWUsICZyb3V0ZV9iYXNlX2lwdjYsDQo+ICsJCQkJJnJvdXRlX251bV9pcHY2 LA0KPiArCQkJCSZhY2xfYmFzZV9pcHY2LCAmYWNsX251bV9pcHY2LA0KPiArCQkJCXNpemVvZihz dHJ1Y3QgYWNsNl9ydWxlKSwgJnBhcnNlX2NiX2lwdjZfcnVsZSkgPCAwKSB7DQo+ICsJCQlhY2xf ZnJlZV9yb3V0ZXMoKTsNCj4gKwkJCXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwgIkZhaWxlZCB0byBh ZGQgSVB2NiBydWxlc1xuIik7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQlSVEVfTE9HKEVS UiwgTDNGV0QsICJJUHY2IHJ1bGUgZmlsZSBub3Qgc3BlY2lmaWVkXG4iKTsNCj4gKwkJcnRlX2V4 aXQoRVhJVF9GQUlMVVJFLCAiRmFpbGVkIHRvIGdldCB2YWxpZCByb3V0ZSBvcHRpb25zXG4iKTsN Cj4gKwl9DQo+ICt9DQo+ICsNCj4gKyNpZmRlZiBMM0ZXREFDTF9ERUJVRw0KPiArc3RhdGljIGlu bGluZSB2b2lkDQo+ICtkdW1wX2FjbDRfcnVsZShzdHJ1Y3QgcnRlX21idWYgKm0sIHVpbnQzMl90 IHNpZykNCj4gK3sNCj4gKwljaGFyIGFidWZbSU5FVDZfQUREUlNUUkxFTl07DQo+ICsJdWludDMy X3Qgb2Zmc2V0ID0gc2lnICYgfkFDTF9ERU5ZX1NJR05BVFVSRTsNCj4gKwlzdHJ1Y3QgcnRlX2lw djRfaGRyICppcHY0X2hkciA9DQo+ICsJCXJ0ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KG0sIHN0cnVj dCBydGVfaXB2NF9oZHIgKiwNCj4gKwkJCQkJc2l6ZW9mKHN0cnVjdCBydGVfZXRoZXJfaGRyKSk7 DQo+ICsNCj4gKwlwcmludGYoIlBhY2tldCBTcmM6JXMgIiwgaW5ldF9udG9wKEFGX0lORVQsIGlw djRfaGRyLT5zcmNfYWRkciwNCj4gKwkJYWJ1Ziwgc2l6ZW9mKGFidWYpKSk7DQo+ICsJcHJpbnRm KCJEc3Q6JXMgIiwgaW5ldF9udG9wKEFGX0lORVQsIGlwdjRfaGRyLT5kc3RfYWRkciwNCj4gKwkJ YWJ1Ziwgc2l6ZW9mKGFidWYpKSk7DQo+ICsNCj4gKwlwcmludGYoIlNyYyBwb3J0OiVodSxEc3Qg cG9ydDolaHUgIiwNCj4gKwkJCXJ0ZV9ic3dhcDE2KCoodWludDE2X3QgKikoaXB2NF9oZHIgKyAx KSksDQo+ICsJCQlydGVfYnN3YXAxNigqKCh1aW50MTZfdCAqKShpcHY0X2hkciArIDEpICsgMSkp KTsNCj4gKwlwcmludGYoImhpdCBBQ0wgJWQgLSAiLCBvZmZzZXQpOw0KPiArDQo+ICsJcHJpbnRf b25lX2lwdjRfcnVsZShhY2xfY29uZmlnLnJ1bGVfaXB2NCArIG9mZnNldCwgMSk7DQo+ICsNCj4g KwlwcmludGYoIlxuXG4iKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtk dW1wX2FjbDZfcnVsZShzdHJ1Y3QgcnRlX21idWYgKm0sIHVpbnQzMl90IHNpZykNCj4gK3sNCj4g KwljaGFyIGFidWZbSU5FVDZfQUREUlNUUkxFTl07DQo+ICsJdWludDMyX3Qgb2Zmc2V0ID0gc2ln ICYgfkFDTF9ERU5ZX1NJR05BVFVSRTsNCj4gKwlzdHJ1Y3QgcnRlX2lwdjZfaGRyICppcHY2X2hk ciA9DQo+ICsJCXJ0ZV9wa3RtYnVmX210b2Rfb2Zmc2V0KG0sIHN0cnVjdCBydGVfaXB2Nl9oZHIg KiwNCj4gKwkJCQkJc2l6ZW9mKHN0cnVjdCBydGVfZXRoZXJfaGRyKSk7DQo+ICsNCj4gKwlwcmlu dGYoIlBhY2tldCBTcmMiKTsNCj4gKwlwcmludGYoIiVzIiwgaW5ldF9udG9wKEFGX0lORVQ2LCBp cHY2X2hkci0+c3JjX2FkZHIsDQo+ICsJCWFidWYsIHNpemVvZihhYnVmKSkpOw0KPiArCXByaW50 ZigiXG5Ec3QiKTsNCj4gKwlwcmludGYoIiVzIiwgaW5ldF9udG9wKEFGX0lORVQ2LCBpcHY2X2hk ci0+ZHN0X2FkZHIsDQo+ICsJCWFidWYsIHNpemVvZihhYnVmKSkpOw0KPiArDQo+ICsJcHJpbnRm KCJcblNyYyBwb3J0OiVodSxEc3QgcG9ydDolaHUgIiwNCj4gKwkJCXJ0ZV9ic3dhcDE2KCoodWlu dDE2X3QgKikoaXB2Nl9oZHIgKyAxKSksDQo+ICsJCQlydGVfYnN3YXAxNigqKCh1aW50MTZfdCAq KShpcHY2X2hkciArIDEpICsgMSkpKTsNCj4gKwlwcmludGYoImhpdCBBQ0wgJWQgLSAiLCBvZmZz ZXQpOw0KPiArDQo+ICsJcHJpbnRfb25lX2lwdjZfcnVsZShhY2xfY29uZmlnLnJ1bGVfaXB2NiAr IG9mZnNldCwgMSk7DQo+ICsNCj4gKwlwcmludGYoIlxuXG4iKTsNCj4gK30NCj4gKyNlbmRpZiAv KiBMM0ZXREFDTF9ERUJVRyAqLw0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQNCj4gK2R1bXBf aXB2NF9ydWxlcyhzdHJ1Y3QgYWNsNF9ydWxlICpydWxlLCBpbnQgbnVtLCBpbnQgZXh0cmEpDQo+ ICt7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIHJ1bGUr Kykgew0KPiArCQlwcmludGYoIlx0JWQ6IiwgaSArIDEpOw0KPiArCQlwcmludF9vbmVfaXB2NF9y dWxlKHJ1bGUsIGV4dHJhKTsNCj4gKwkJcHJpbnRmKCJcbiIpOw0KPiArCX0NCj4gK30NCj4gKw0K PiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtkdW1wX2lwdjZfcnVsZXMoc3RydWN0IGFjbDZfcnVs ZSAqcnVsZSwgaW50IG51bSwgaW50IGV4dHJhKQ0KPiArew0KPiArCWludCBpOw0KPiArDQo+ICsJ Zm9yIChpID0gMDsgaSA8IG51bTsgaSsrLCBydWxlKyspIHsNCj4gKwkJcHJpbnRmKCJcdCVkOiIs IGkgKyAxKTsNCj4gKwkJcHJpbnRfb25lX2lwdjZfcnVsZShydWxlLCBleHRyYSk7DQo+ICsJCXBy aW50ZigiXG4iKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gKy8qIEZ1bmN0aW9uIHRvIHNldHVwIGFj bC4gKi8NCj4gK3ZvaWQNCj4gK3NldHVwX2FjbChjb25zdCBpbnQgc29ja2V0X2lkKQ0KPiArew0K PiArCWlmIChjaGVja19hY2xfY29uZmlnKCkgIT0gMCkNCj4gKwkJcnRlX2V4aXQoRVhJVF9GQUlM VVJFLCAiRmFpbGVkIHRvIGdldCB2YWxpZCBBQ0wgb3B0aW9uc1xuIik7DQo+ICsNCj4gKwlkdW1w X2FjbF9jb25maWcoKTsNCj4gKw0KPiArCWFjbF9sb2coIklQdjQgUm91dGUgZW50cmllcyAldTpc biIsIHJvdXRlX251bV9pcHY0KTsNCj4gKwlkdW1wX2lwdjRfcnVsZXMoKHN0cnVjdCBhY2w0X3J1 bGUgKilyb3V0ZV9iYXNlX2lwdjQsIHJvdXRlX251bV9pcHY0LCAxKTsNCj4gKw0KPiArCWFjbF9s b2coIklQdjQgQUNMIGVudHJpZXMgJXU6XG4iLCBhY2xfbnVtX2lwdjQpOw0KPiArCWR1bXBfaXB2 NF9ydWxlcygoc3RydWN0IGFjbDRfcnVsZSAqKWFjbF9iYXNlX2lwdjQsIGFjbF9udW1faXB2NCwg MSk7DQo+ICsNCj4gKwlhY2xfbG9nKCJJUHY2IFJvdXRlIGVudHJpZXMgJXU6XG4iLCByb3V0ZV9u dW1faXB2Nik7DQo+ICsJZHVtcF9pcHY2X3J1bGVzKChzdHJ1Y3QgYWNsNl9ydWxlICopcm91dGVf YmFzZV9pcHY2LCByb3V0ZV9udW1faXB2NiwgMSk7DQo+ICsNCj4gKwlhY2xfbG9nKCJJUHY2IEFD TCBlbnRyaWVzICV1OlxuIiwgYWNsX251bV9pcHY2KTsNCj4gKwlkdW1wX2lwdjZfcnVsZXMoKHN0 cnVjdCBhY2w2X3J1bGUgKilhY2xfYmFzZV9pcHY2LCBhY2xfbnVtX2lwdjYsIDEpOw0KPiArDQo+ ICsJbWVtc2V0KCZhY2xfY29uZmlnLCAwLCBzaXplb2YoYWNsX2NvbmZpZykpOw0KPiArDQo+ICsJ LyogQ2hlY2sgc29ja2V0cyBhIGNvbnRleHQgc2hvdWxkIGJlIGNyZWF0ZWQgb24gKi8NCj4gKwlp ZiAoc29ja2V0X2lkID49IE5CX1NPQ0tFVFMpIHsNCj4gKwkJYWNsX2xvZygiU29ja2V0ICVkIGlz IG91dCAiDQo+ICsJCQkib2YgcmFuZ2UgJWRcbiIsDQo+ICsJCQlzb2NrZXRfaWQsIE5CX1NPQ0tF VFMpOw0KPiArCQlhY2xfZnJlZV9yb3V0ZXMoKTsNCj4gKwkJcmV0dXJuOw0KPiArCX0NCj4gKw0K PiArCWFjbF9jb25maWcuYWN4X2lwdjRbc29ja2V0X2lkXSA9IGFwcF9hY2xfaW5pdChyb3V0ZV9i YXNlX2lwdjQsDQo+ICsJCWFjbF9iYXNlX2lwdjQsIHJvdXRlX251bV9pcHY0LCBhY2xfbnVtX2lw djQsDQo+ICsJCTAsIHNvY2tldF9pZCk7DQo+ICsNCj4gKwlhY2xfY29uZmlnLmFjeF9pcHY2W3Nv Y2tldF9pZF0gPSBhcHBfYWNsX2luaXQocm91dGVfYmFzZV9pcHY2LA0KPiArCQlhY2xfYmFzZV9p cHY2LCByb3V0ZV9udW1faXB2NiwgYWNsX251bV9pcHY2LA0KPiArCQkxLCBzb2NrZXRfaWQpOw0K PiArDQo+ICsjaWZkZWYgTDNGV0RBQ0xfREVCVUcNCj4gKwlhY2xfY29uZmlnLnJ1bGVfaXB2NCA9 IChzdHJ1Y3QgYWNsNF9ydWxlICopYWNsX2Jhc2VfaXB2NDsNCj4gKwlhY2xfY29uZmlnLnJ1bGVf aXB2NiA9IChzdHJ1Y3QgYWNsNl9ydWxlICopYWNsX2Jhc2VfaXB2NjsNCj4gKyNlbmRpZg0KPiAr DQo+ICt9DQo+ICsNCj4gKy8qIG1haW4gcHJvY2Vzc2luZyBsb29wICovDQo+ICtpbnQNCj4gK2Fj bF9tYWluX2xvb3AoX19ydGVfdW51c2VkIHZvaWQgKmR1bW15KQ0KPiArew0KPiArCXN0cnVjdCBy dGVfbWJ1ZiAqcGt0c19idXJzdFtNQVhfUEtUX0JVUlNUXTsNCj4gKwl1bnNpZ25lZCBpbnQgbGNv cmVfaWQ7DQo+ICsJdWludDY0X3QgcHJldl90c2MsIGRpZmZfdHNjLCBjdXJfdHNjOw0KPiArCWlu dCBpLCBuYl9yeDsNCj4gKwl1aW50MTZfdCBwb3J0aWQ7DQo+ICsJdWludDhfdCBxdWV1ZWlkOw0K PiArCXN0cnVjdCBsY29yZV9jb25mICpxY29uZjsNCj4gKwlpbnQgc29ja2V0aWQ7DQo+ICsJY29u c3QgdWludDY0X3QgZHJhaW5fdHNjID0gKHJ0ZV9nZXRfdHNjX2h6KCkgKyBVU19QRVJfUyAtIDEp DQo+ICsJCQkvIFVTX1BFUl9TICogQlVSU1RfVFhfRFJBSU5fVVM7DQo+ICsNCj4gKwlwcmV2X3Rz YyA9IDA7DQo+ICsJbGNvcmVfaWQgPSBydGVfbGNvcmVfaWQoKTsNCj4gKwlxY29uZiA9ICZsY29y ZV9jb25mW2xjb3JlX2lkXTsNCj4gKwlzb2NrZXRpZCA9IHJ0ZV9sY29yZV90b19zb2NrZXRfaWQo bGNvcmVfaWQpOw0KPiArDQo+ICsJaWYgKHFjb25mLT5uX3J4X3F1ZXVlID09IDApIHsNCj4gKwkJ UlRFX0xPRyhJTkZPLCBMM0ZXRCwgImxjb3JlICV1IGhhcyBub3RoaW5nIHRvIGRvXG4iLCBsY29y ZV9pZCk7DQo+ICsJCXJldHVybiAwOw0KPiArCX0NCj4gKw0KPiArCVJURV9MT0coSU5GTywgTDNG V0QsICJlbnRlcmluZyBtYWluIGxvb3Agb24gbGNvcmUgJXVcbiIsIGxjb3JlX2lkKTsNCj4gKw0K PiArCWZvciAoaSA9IDA7IGkgPCBxY29uZi0+bl9yeF9xdWV1ZTsgaSsrKSB7DQo+ICsNCj4gKwkJ cG9ydGlkID0gcWNvbmYtPnJ4X3F1ZXVlX2xpc3RbaV0ucG9ydF9pZDsNCj4gKwkJcXVldWVpZCA9 IHFjb25mLT5yeF9xdWV1ZV9saXN0W2ldLnF1ZXVlX2lkOw0KPiArCQlSVEVfTE9HKElORk8sIEwz RldELA0KPiArCQkJIiAtLSBsY29yZWlkPSV1IHBvcnRpZD0ldSByeHF1ZXVlaWQ9JWhodVxuIiwN Cj4gKwkJCWxjb3JlX2lkLCBwb3J0aWQsIHF1ZXVlaWQpOw0KPiArCX0NCj4gKw0KPiArCXdoaWxl ICghZm9yY2VfcXVpdCkgew0KPiArDQo+ICsJCWN1cl90c2MgPSBydGVfcmR0c2MoKTsNCj4gKw0K PiArCQkvKg0KPiArCQkgKiBUWCBidXJzdCBxdWV1ZSBkcmFpbg0KPiArCQkgKi8NCj4gKwkJZGlm Zl90c2MgPSBjdXJfdHNjIC0gcHJldl90c2M7DQo+ICsJCWlmICh1bmxpa2VseShkaWZmX3RzYyA+ IGRyYWluX3RzYykpIHsNCj4gKw0KPiArCQkJZm9yIChpID0gMDsgaSA8IHFjb25mLT5uX3R4X3Bv cnQ7ICsraSkgew0KPiArCQkJCXBvcnRpZCA9IHFjb25mLT50eF9wb3J0X2lkW2ldOw0KPiArCQkJ CWlmIChxY29uZi0+dHhfbWJ1ZnNbcG9ydGlkXS5sZW4gPT0gMCkNCj4gKwkJCQkJY29udGludWU7 DQo+ICsJCQkJc2VuZF9idXJzdChxY29uZiwNCj4gKwkJCQkJcWNvbmYtPnR4X21idWZzW3BvcnRp ZF0ubGVuLA0KPiArCQkJCQlwb3J0aWQpOw0KPiArCQkJCXFjb25mLT50eF9tYnVmc1twb3J0aWRd LmxlbiA9IDA7DQo+ICsJCQl9DQo+ICsNCj4gKwkJCXByZXZfdHNjID0gY3VyX3RzYzsNCj4gKwkJ fQ0KPiArDQo+ICsJCS8qDQo+ICsJCSAqIFJlYWQgcGFja2V0IGZyb20gUlggcXVldWVzDQo+ICsJ CSAqLw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgcWNvbmYtPm5fcnhfcXVldWU7ICsraSkgew0KPiAr DQo+ICsJCQlwb3J0aWQgPSBxY29uZi0+cnhfcXVldWVfbGlzdFtpXS5wb3J0X2lkOw0KPiArCQkJ cXVldWVpZCA9IHFjb25mLT5yeF9xdWV1ZV9saXN0W2ldLnF1ZXVlX2lkOw0KPiArCQkJbmJfcngg PSBydGVfZXRoX3J4X2J1cnN0KHBvcnRpZCwgcXVldWVpZCwNCj4gKwkJCQlwa3RzX2J1cnN0LCBN QVhfUEtUX0JVUlNUKTsNCj4gKw0KPiArCQkJaWYgKG5iX3J4ID4gMCkgew0KPiArCQkJCXN0cnVj dCBhY2xfc2VhcmNoX3QgYWNsX3NlYXJjaDsNCj4gKw0KPiArCQkJCWwzZndkX2FjbF9wcmVwYXJl X2FjbF9wYXJhbWV0ZXIocGt0c19idXJzdCwgJmFjbF9zZWFyY2gsDQo+ICsJCQkJCW5iX3J4KTsN Cj4gKw0KPiArCQkJCWlmIChhY2xfc2VhcmNoLm51bV9pcHY0KSB7DQo+ICsJCQkJCXJ0ZV9hY2xf Y2xhc3NpZnkoDQo+ICsJCQkJCQlhY2xfY29uZmlnLmFjeF9pcHY0W3NvY2tldGlkXSwNCj4gKwkJ CQkJCWFjbF9zZWFyY2guZGF0YV9pcHY0LA0KPiArCQkJCQkJYWNsX3NlYXJjaC5yZXNfaXB2NCwN Cj4gKwkJCQkJCWFjbF9zZWFyY2gubnVtX2lwdjQsDQo+ICsJCQkJCQlERUZBVUxUX01BWF9DQVRF R09SSUVTKTsNCj4gKw0KPiArCQkJCQlsM2Z3ZF9hY2xfc2VuZF9wYWNrZXRzKA0KPiArCQkJCQkJ YWNsX3NlYXJjaC5tX2lwdjQsDQo+ICsJCQkJCQlhY2xfc2VhcmNoLnJlc19pcHY0LA0KPiArCQkJ CQkJYWNsX3NlYXJjaC5udW1faXB2NCk7DQo+ICsJCQkJfQ0KPiArDQo+ICsJCQkJaWYgKGFjbF9z ZWFyY2gubnVtX2lwdjYpIHsNCj4gKwkJCQkJcnRlX2FjbF9jbGFzc2lmeSgNCj4gKwkJCQkJCWFj bF9jb25maWcuYWN4X2lwdjZbc29ja2V0aWRdLA0KPiArCQkJCQkJYWNsX3NlYXJjaC5kYXRhX2lw djYsDQo+ICsJCQkJCQlhY2xfc2VhcmNoLnJlc19pcHY2LA0KPiArCQkJCQkJYWNsX3NlYXJjaC5u dW1faXB2NiwNCj4gKwkJCQkJCURFRkFVTFRfTUFYX0NBVEVHT1JJRVMpOw0KPiArDQo+ICsJCQkJ CWwzZndkX2FjbF9zZW5kX3BhY2tldHMoDQo+ICsJCQkJCQlhY2xfc2VhcmNoLm1faXB2NiwNCj4g KwkJCQkJCWFjbF9zZWFyY2gucmVzX2lwdjYsDQo+ICsJCQkJCQlhY2xfc2VhcmNoLm51bV9pcHY2 KTsNCj4gKwkJCQl9DQo+ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gKy8qIE5vdCB1c2VkIGJ5IEwzZndkIEFDTC4gKi8NCj4gK3ZvaWQgKg0KPiArYWNs X2dldF9pcHY0X2wzZndkX2xvb2t1cF9zdHJ1Y3QoX19ydGVfdW51c2VkIGNvbnN0IGludCBzb2Nr ZXRpZCkNCj4gK3sNCj4gKwlyZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArdm9pZCAqDQo+ICth Y2xfZ2V0X2lwdjZfbDNmd2RfbG9va3VwX3N0cnVjdChfX3J0ZV91bnVzZWQgY29uc3QgaW50IHNv Y2tldGlkKQ0KPiArew0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KDQoNCg0KPiBkaWZmIC0tZ2l0 IGEvZXhhbXBsZXMvbDNmd2QvbDNmd2RfYWNsLmggYi9leGFtcGxlcy9sM2Z3ZC9sM2Z3ZF9hY2wu aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi45Yjc2MmU0ZWMy DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZXhhbXBsZXMvbDNmd2QvbDNmd2RfYWNsLmgNCj4g QEAgLTAsMCArMSwxMTggQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D bGF1c2UNCj4gKyAqIENvcHlyaWdodChjKSAyMDIyIEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8N Cj4gKw0KPiArI2lmbmRlZiBfX0wzRldEX0FDTF9IX18NCj4gKyNkZWZpbmUgX19MM0ZXRF9BQ0xf SF9fDQo+ICsNCj4gKyNpZiBSVEVfTE9HX0RQX0xFVkVMID49IFJURV9MT0dfREVCVUcNCj4gKyNk ZWZpbmUgTDNGV0RBQ0xfREVCVUcNCj4gKyNlbmRpZg0KPiArDQo+ICsjZGVmaW5lIE1BWF9BQ0xf UlVMRV9OVU0JMTAwMDAwDQo+ICsjZGVmaW5lIERFRkFVTFRfTUFYX0NBVEVHT1JJRVMJMQ0KPiAr I2RlZmluZSBMM0ZXRF9BQ0xfSVBWNF9OQU1FCSJsM2Z3ZC1hY2wtaXB2NCINCj4gKyNkZWZpbmUg TDNGV0RfQUNMX0lQVjZfTkFNRQkibDNmd2QtYWNsLWlwdjYiDQo+ICsNCj4gKyNkZWZpbmUgQUNM X0RFTllfU0lHTkFUVVJFCTB4ZjAwMDAwMDANCj4gKyNkZWZpbmUgUlRFX0xPR1RZUEVfTDNGV0RB Q0wJUlRFX0xPR1RZUEVfVVNFUjMNCj4gKyNkZWZpbmUgYWNsX2xvZyhmb3JtYXQsIC4uLikJUlRF X0xPRyhFUlIsIEwzRldEQUNMLCBmb3JtYXQsICMjX19WQV9BUkdTX18pDQo+ICsjZGVmaW5lIE9G Rl9FVEhIRUFECShzaXplb2Yoc3RydWN0IHJ0ZV9ldGhlcl9oZHIpKQ0KPiArI2RlZmluZSBPRkZf SVBWNDJQUk9UTyAob2Zmc2V0b2Yoc3RydWN0IHJ0ZV9pcHY0X2hkciwgbmV4dF9wcm90b19pZCkp DQo+ICsjZGVmaW5lIE9GRl9JUFY2MlBST1RPIChvZmZzZXRvZihzdHJ1Y3QgcnRlX2lwdjZfaGRy LCBwcm90bykpDQo+ICsjZGVmaW5lIE1CVUZfSVBWNF8yUFJPVE8obSkJXA0KPiArCXJ0ZV9wa3Rt YnVmX210b2Rfb2Zmc2V0KChtKSwgdWludDhfdCAqLCBPRkZfRVRISEVBRCArIE9GRl9JUFY0MlBS T1RPKQ0KPiArI2RlZmluZSBNQlVGX0lQVjZfMlBST1RPKG0pCVwNCj4gKwlydGVfcGt0bWJ1Zl9t dG9kX29mZnNldCgobSksIHVpbnQ4X3QgKiwgT0ZGX0VUSEhFQUQgKyBPRkZfSVBWNjJQUk9UTykN Cj4gKw0KPiArLyoNCj4gKyAqIEFDTCBydWxlcyBzaG91bGQgaGF2ZSBoaWdoZXIgcHJpb3JpdGll cyB0aGFuIHJvdXRlIG9uZXMgdG8gZW5zdXJlIEFDTCBydWxlDQo+ICsgKiBhbHdheXMgYmUgZm91 bmQgd2hlbiBpbnB1dCBwYWNrZXRzIGhhdmUgbXVsdGktbWF0Y2hlcyBpbiB0aGUgZGF0YWJhc2Uu DQo+ICsgKiBBIGV4Y2VwdGlvbiBjYXNlIGlzIHBlcmZvcm1hbmNlIG1lYXN1cmUsIHdoaWNoIGNh biBkZWZpbmUgcm91dGUgcnVsZXMgd2l0aA0KPiArICogaGlnaGVyIHByaW9yaXR5IGFuZCByb3V0 ZSBydWxlcyB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZCBpbiBlYWNoIGxvb2t1cC4NCj4gKyAqIFJl c2VydmUgcmFuZ2UgZnJvbSBBQ0xfUlVMRV9QUklPUklUWV9NQVggKyAxIHRvDQo+ICsgKiBSVEVf QUNMX01BWF9QUklPUklUWSBmb3Igcm91dGUgZW50cmllcyBpbiBwZXJmb3JtYW5jZSBtZWFzdXJl DQo+ICsgKi8NCj4gKyNkZWZpbmUgQUNMX1JVTEVfUFJJT1JJVFlfTUFYIDB4MTAwMDAwMDANCj4g Kw0KPiArLyoNCj4gKyAqIEZvcndhcmQgcG9ydCBpbmZvIHNhdmUgaW4gQUNMIGxpYiBzdGFydHMg ZnJvbSAxDQo+ICsgKiBzaW5jZSBBQ0wgYXNzdW1lIDAgaXMgaW52YWxpZC4NCj4gKyAqIFNvLCBu ZWVkIGFkZCAxIHdoZW4gc2F2aW5nIGFuZCBtaW51cyAxIHdoZW4gZm9yd2FyZGluZyBwYWNrZXRz Lg0KPiArICovDQo+ICsjZGVmaW5lIEZXRF9QT1JUX1NISUZUIDENCj4gKw0KPiArc3RhdGljIHZv aWQNCj4gK3ByaW50X29uZV9pcHY0X3J1bGUoc3RydWN0IGFjbDRfcnVsZSAqcnVsZSwgaW50IGV4 dHJhKQ0KDQpSZXBldGl0aW9uIG9mIG15IHByZXZpb3VzIGNvbW1lbnRzIHRvICh2MSk6DQpQcm9i YWJseSBubyBwb2ludCB0byBoYXZlIHByaW50IHJvdXRpbmVzIGFzICdzdGF0aWMgb25saW5lJy4N ClRoZXkgZG8gbm90IGJlbG9uZyB0byBmYXN0LXBhdGguDQpTYW1lIGZvciBwcmludF9vbmVfaXB2 Nl9ydWxlKCkuDQoNCj4gK3sNCj4gKwljaGFyIGFidWZbSU5FVDZfQUREUlNUUkxFTl07DQo+ICsJ dWludDMyX3QgaXB2NF9hZGRyOw0KPiArCWlwdjRfYWRkciA9IG50b2hsKHJ1bGUtPmZpZWxkW1NS Q19GSUVMRF9JUFY0XS52YWx1ZS51MzIpOw0KPiArCXByaW50ZigiJXMvJXUgIiwgaW5ldF9udG9w KEFGX0lORVQsDQo+ICsJCQkmKGlwdjRfYWRkciksIGFidWYsDQo+ICsJCQlzaXplb2YoYWJ1Zikp LCBydWxlLT5maWVsZFtTUkNfRklFTERfSVBWNF0ubWFza19yYW5nZS51MzIpOw0KPiArCWlwdjRf YWRkciA9IG50b2hsKHJ1bGUtPmZpZWxkW0RTVF9GSUVMRF9JUFY0XS52YWx1ZS51MzIpOw0KPiAr CXByaW50ZigiJXMvJXUgIiwgaW5ldF9udG9wKEFGX0lORVQsDQo+ICsJCQkmKGlwdjRfYWRkciks IGFidWYsDQo+ICsJCQlzaXplb2YoYWJ1ZikpLCBydWxlLT5maWVsZFtEU1RfRklFTERfSVBWNF0u bWFza19yYW5nZS51MzIpOw0KPiArCXByaW50ZigiJWh1IDogJWh1ICVodSA6ICVodSAweCVoaHgv MHglaGh4ICIsDQo+ICsJCXJ1bGUtPmZpZWxkW1NSQ1BfRklFTERfSVBWNF0udmFsdWUudTE2LA0K PiArCQlydWxlLT5maWVsZFtTUkNQX0ZJRUxEX0lQVjRdLm1hc2tfcmFuZ2UudTE2LA0KPiArCQly dWxlLT5maWVsZFtEU1RQX0ZJRUxEX0lQVjRdLnZhbHVlLnUxNiwNCj4gKwkJcnVsZS0+ZmllbGRb RFNUUF9GSUVMRF9JUFY0XS5tYXNrX3JhbmdlLnUxNiwNCj4gKwkJcnVsZS0+ZmllbGRbUFJPVE9f RklFTERfSVBWNF0udmFsdWUudTgsDQo+ICsJCXJ1bGUtPmZpZWxkW1BST1RPX0ZJRUxEX0lQVjRd Lm1hc2tfcmFuZ2UudTgpOw0KPiArCWlmIChleHRyYSkNCj4gKwkJcHJpbnRmKCIweCV4LTB4JXgt MHgleCAiLA0KPiArCQkJcnVsZS0+ZGF0YS5jYXRlZ29yeV9tYXNrLA0KPiArCQkJcnVsZS0+ZGF0 YS5wcmlvcml0eSwNCj4gKwkJCXJ1bGUtPmRhdGEudXNlcmRhdGEpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiArcHJpbnRfb25lX2lwdjZfcnVsZShzdHJ1Y3QgYWNsNl9ydWxlICpydWxl LCBpbnQgZXh0cmEpDQo+ICt7DQo+ICsJY2hhciBhYnVmW0lORVQ2X0FERFJTVFJMRU5dOw0KPiAr CXVpbnQzMl90IGlwdjZfYWRkcls0XTsNCj4gKw0KPiArCWlwdjZfYWRkclswXSA9IHJ1bGUtPmZp ZWxkW1NSQzFfRklFTERfSVBWNl0udmFsdWUudTMyOw0KPiArCWlwdjZfYWRkclsxXSA9IHJ1bGUt PmZpZWxkW1NSQzJfRklFTERfSVBWNl0udmFsdWUudTMyOw0KPiArCWlwdjZfYWRkclsyXSA9IHJ1 bGUtPmZpZWxkW1NSQzNfRklFTERfSVBWNl0udmFsdWUudTMyOw0KPiArCWlwdjZfYWRkclszXSA9 IHJ1bGUtPmZpZWxkW1NSQzRfRklFTERfSVBWNl0udmFsdWUudTMyOw0KPiArDQo+ICsJcHJpbnRm KCIlcyIsIGluZXRfbnRvcChBRl9JTkVUNiwgaXB2Nl9hZGRyLA0KPiArCQlhYnVmLCBzaXplb2Yo YWJ1ZikpKTsNCj4gKwlwcmludGYoIi8ldSAiLA0KPiArCQkJcnVsZS0+ZmllbGRbU1JDMV9GSUVM RF9JUFY2XS5tYXNrX3JhbmdlLnUzMg0KPiArCQkJKyBydWxlLT5maWVsZFtTUkMyX0ZJRUxEX0lQ VjZdLm1hc2tfcmFuZ2UudTMyDQo+ICsJCQkrIHJ1bGUtPmZpZWxkW1NSQzNfRklFTERfSVBWNl0u bWFza19yYW5nZS51MzINCj4gKwkJCSsgcnVsZS0+ZmllbGRbU1JDNF9GSUVMRF9JUFY2XS5tYXNr X3JhbmdlLnUzMik7DQo+ICsNCj4gKwlpcHY2X2FkZHJbMF0gPSBydWxlLT5maWVsZFtEU1QxX0ZJ RUxEX0lQVjZdLnZhbHVlLnUzMjsNCj4gKwlpcHY2X2FkZHJbMV0gPSBydWxlLT5maWVsZFtEU1Qy X0ZJRUxEX0lQVjZdLnZhbHVlLnUzMjsNCj4gKwlpcHY2X2FkZHJbMl0gPSBydWxlLT5maWVsZFtE U1QzX0ZJRUxEX0lQVjZdLnZhbHVlLnUzMjsNCj4gKwlpcHY2X2FkZHJbM10gPSBydWxlLT5maWVs ZFtEU1Q0X0ZJRUxEX0lQVjZdLnZhbHVlLnUzMjsNCj4gKw0KPiArCXByaW50ZigiJXMiLCBpbmV0 X250b3AoQUZfSU5FVDYsIGlwdjZfYWRkciwNCj4gKwkJYWJ1Ziwgc2l6ZW9mKGFidWYpKSk7DQo+ ICsJcHJpbnRmKCIvJXUgIiwNCj4gKwkJCXJ1bGUtPmZpZWxkW0RTVDFfRklFTERfSVBWNl0ubWFz a19yYW5nZS51MzINCj4gKwkJCSsgcnVsZS0+ZmllbGRbRFNUMl9GSUVMRF9JUFY2XS5tYXNrX3Jh bmdlLnUzMg0KPiArCQkJKyBydWxlLT5maWVsZFtEU1QzX0ZJRUxEX0lQVjZdLm1hc2tfcmFuZ2Uu dTMyDQo+ICsJCQkrIHJ1bGUtPmZpZWxkW0RTVDRfRklFTERfSVBWNl0ubWFza19yYW5nZS51MzIp Ow0KPiArDQo+ICsJcHJpbnRmKCIlaHUgOiAlaHUgJWh1IDogJWh1IDB4JWhoeC8weCVoaHggIiwN Cj4gKwkJcnVsZS0+ZmllbGRbU1JDUF9GSUVMRF9JUFY2XS52YWx1ZS51MTYsDQo+ICsJCXJ1bGUt PmZpZWxkW1NSQ1BfRklFTERfSVBWNl0ubWFza19yYW5nZS51MTYsDQo+ICsJCXJ1bGUtPmZpZWxk W0RTVFBfRklFTERfSVBWNl0udmFsdWUudTE2LA0KPiArCQlydWxlLT5maWVsZFtEU1RQX0ZJRUxE X0lQVjZdLm1hc2tfcmFuZ2UudTE2LA0KPiArCQlydWxlLT5maWVsZFtQUk9UT19GSUVMRF9JUFY2 XS52YWx1ZS51OCwNCj4gKwkJcnVsZS0+ZmllbGRbUFJPVE9fRklFTERfSVBWNl0ubWFza19yYW5n ZS51OCk7DQo+ICsJaWYgKGV4dHJhKQ0KPiArCQlwcmludGYoIjB4JXgtMHgleC0weCV4ICIsDQo+ ICsJCQlydWxlLT5kYXRhLmNhdGVnb3J5X21hc2ssDQo+ICsJCQlydWxlLT5kYXRhLnByaW9yaXR5 LA0KPiArCQkJcnVsZS0+ZGF0YS51c2VyZGF0YSk7DQo+ICt9DQo+ICsNCj4gKyNlbmRpZiAvKiBf X0wzRldEX0FDTF9IX18gKi8NCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL2wzZndkL2wzZndkX2Fj bF9zY2FsYXIuaCBiL2V4YW1wbGVzL2wzZndkL2wzZndkX2FjbF9zY2FsYXIuaA0KPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5mYjE5OTFlZDFkDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvZXhhbXBsZXMvbDNmd2QvbDNmd2RfYWNsX3NjYWxhci5oDQo+IEBAIC0w LDAgKzEsMTYzIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl DQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBJbnRlbCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsN Cj4gKyNpZm5kZWYgX19MM0ZXRF9BQ0xfU0NBTEFSX0hfXw0KPiArI2RlZmluZSBfX0wzRldEX0FD TF9TQ0FMQVJfSF9fDQo+ICsNCj4gKyNpbmNsdWRlICJsM2Z3ZC5oIg0KPiArDQo+ICsvKiBldGhl cm5ldCBhZGRyZXNzZXMgb2YgcG9ydHMgKi8NCj4gK3N0YXRpYyBzdHJ1Y3QgcnRlX2V0aGVyX2hk ciBwb3J0X2wyaGRyW1JURV9NQVhfRVRIUE9SVFNdOw0KDQpUaGVyZSBhbHJlYWR5IGV4aXN0Og0K cnRlX2V0aGVyX2FkZHIgcG9ydHNfZXRoX2FkZHJbXSBhbmQgZGVzdF9ldGhfYWRkcltdDQp0aGF0 IGFyZSB1c2VkIGJ5IGFsbCBvdGhlciBtZXRob2RzIChscG0vZW0vZmliKS4NClBsZWFzZSBkbyB0 aGUgc2FtZSBoZXJlLCBubyBuZWVkIHRvIGhhdmUgYSBzcGVjaWFsIGNvcHkgZm9yIGFjbC4NCg0K PiArDQo+ICsjaWZkZWYgRE9fUkZDXzE4MTJfQ0hFQ0tTDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQN Cj4gK2wzZndkX2FjbF9wcmVwYXJlX29uZV9wYWNrZXQoc3RydWN0IHJ0ZV9tYnVmICoqcGt0c19p biwgc3RydWN0IGFjbF9zZWFyY2hfdCAqYWNsLA0KPiArCWludCBpbmRleCkNCj4gK3sNCj4gKwlz dHJ1Y3QgcnRlX2lwdjRfaGRyICppcHY0X2hkcjsNCj4gKwlzdHJ1Y3QgcnRlX21idWYgKnBrdCA9 IHBrdHNfaW5baW5kZXhdOw0KPiArDQo+ICsJaWYgKFJURV9FVEhfSVNfSVBWNF9IRFIocGt0LT5w YWNrZXRfdHlwZSkpIHsNCj4gKwkJaXB2NF9oZHIgPSBydGVfcGt0bWJ1Zl9tdG9kX29mZnNldChw a3QsIHN0cnVjdCBydGVfaXB2NF9oZHIgKiwNCj4gKwkJCQkJCXNpemVvZihzdHJ1Y3QgcnRlX2V0 aGVyX2hkcikpOw0KPiArDQo+ICsJCS8qIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcGFja2V0IGlz IHZhbGlkIChSRkMxODEyKSAqLw0KPiArCQlpZiAoaXNfdmFsaWRfaXB2NF9wa3QoaXB2NF9oZHIs IHBrdC0+cGt0X2xlbikgPj0gMCkgew0KPiArDQo+ICsJCQkvKiBVcGRhdGUgdGltZSB0byBsaXZl IGFuZCBoZWFkZXIgY2hlY2tzdW0gKi8NCj4gKwkJCS0tKGlwdjRfaGRyLT50aW1lX3RvX2xpdmUp Ow0KPiArCQkJKysoaXB2NF9oZHItPmhkcl9jaGVja3N1bSk7DQo+ICsNCj4gKwkJCS8qIEZpbGwg YWNsIHN0cnVjdHVyZSAqLw0KPiArCQkJYWNsLT5kYXRhX2lwdjRbYWNsLT5udW1faXB2NF0gPSBN QlVGX0lQVjRfMlBST1RPKHBrdCk7DQo+ICsJCQlhY2wtPm1faXB2NFsoYWNsLT5udW1faXB2NCkr K10gPSBwa3Q7DQo+ICsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCS8qIE5vdCBhIHZhbGlkIElQdjQg cGFja2V0ICovDQo+ICsJCQlydGVfcGt0bWJ1Zl9mcmVlKHBrdCk7DQo+ICsJCX0NCj4gKwl9IGVs c2UgaWYgKFJURV9FVEhfSVNfSVBWNl9IRFIocGt0LT5wYWNrZXRfdHlwZSkpIHsNCj4gKwkJLyog RmlsbCBhY2wgc3RydWN0dXJlICovDQo+ICsJCWFjbC0+ZGF0YV9pcHY2W2FjbC0+bnVtX2lwdjZd ID0gTUJVRl9JUFY2XzJQUk9UTyhwa3QpOw0KPiArCQlhY2wtPm1faXB2NlsoYWNsLT5udW1faXB2 NikrK10gPSBwa3Q7DQo+ICsNCj4gKwl9IGVsc2Ugew0KPiArCQkvKiBVbmtub3duIHR5cGUsIGRy b3AgdGhlIHBhY2tldCAqLw0KPiArCQlydGVfcGt0bWJ1Zl9mcmVlKHBrdCk7DQo+ICsJfQ0KPiAr fQ0KPiArDQo+ICsjZWxzZQ0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtsM2Z3ZF9hY2xfcHJl cGFyZV9vbmVfcGFja2V0KHN0cnVjdCBydGVfbWJ1ZiAqKnBrdHNfaW4sIHN0cnVjdCBhY2xfc2Vh cmNoX3QgKmFjbCwNCj4gKwlpbnQgaW5kZXgpDQo+ICt7DQo+ICsJc3RydWN0IHJ0ZV9tYnVmICpw a3QgPSBwa3RzX2luW2luZGV4XTsNCj4gKw0KPiArCWlmIChSVEVfRVRIX0lTX0lQVjRfSERSKHBr dC0+cGFja2V0X3R5cGUpKSB7DQo+ICsJCS8qIEZpbGwgYWNsIHN0cnVjdHVyZSAqLw0KPiArCQlh Y2wtPmRhdGFfaXB2NFthY2wtPm51bV9pcHY0XSA9IE1CVUZfSVBWNF8yUFJPVE8ocGt0KTsNCj4g KwkJYWNsLT5tX2lwdjRbKGFjbC0+bnVtX2lwdjQpKytdID0gcGt0Ow0KPiArDQo+ICsJfSBlbHNl IGlmIChSVEVfRVRIX0lTX0lQVjZfSERSKHBrdC0+cGFja2V0X3R5cGUpKSB7DQo+ICsJCS8qIEZp bGwgYWNsIHN0cnVjdHVyZSAqLw0KPiArCQlhY2wtPmRhdGFfaXB2NlthY2wtPm51bV9pcHY2XSA9 IE1CVUZfSVBWNl8yUFJPVE8ocGt0KTsNCj4gKwkJYWNsLT5tX2lwdjZbKGFjbC0+bnVtX2lwdjYp KytdID0gcGt0Ow0KPiArCX0gZWxzZSB7DQo+ICsJCS8qIFVua25vd24gdHlwZSwgZHJvcCB0aGUg cGFja2V0ICovDQo+ICsJCXJ0ZV9wa3RtYnVmX2ZyZWUocGt0KTsNCj4gKwl9DQo+ICt9DQo+ICsj ZW5kaWYgLyogRE9fUkZDXzE4MTJfQ0hFQ0tTICovDQoNCkl0IHNlZW1zIHRoYXQgSSB3YXNuJ3Qg Y2xlYXIgZW5vdWdoIGluIG15IHByZXZpb3VzIGNvbW1lbnRzLg0KV2hhdCBJIHN1Z2dlc3QgLSBt b3ZlIGFsbCBwYWNrZXQgbW9kaWZpY2F0aW9ucyBmcm9tIF9wcmVwYXJlXyB0bw0KX3NlbmRfIHJv dXRpbmVzLiBUaGF0IGFzIEkgdW5kZXJzdGFuZCwgc2hvdWxkIGFsbG93IHVzIHRvIHVzZQ0Kb3B0 aW1pemVkIHNlbmRfbXVsdGkoKSBvbiBUWCBwYXRoLg0KVG8gYmUgbW9yZSBzcGVjaWZpYywgSSBh bSB0YWxraW5nIGFib3V0IHNvbWV0aGluZyBsaWtlIHRoYXQ6DQotIGhhdmUganVzdCBvbmUgdmVy c2lvbiBvZiBsM2Z3ZF9hY2xfcHJlcGFyZV9vbmVfcGFja2V0KCkgLSBzZWNvbmQgb25lIGFib3Zl Lg0KLSBNYWtlIGwzZndkX2FjbF9zZW5kX3BhY2tldHMoKSB0byBsb29rIHNvbWV0aGluZyBsaWtl IHRoYXQ6DQoNCiNpZiBkZWZpbmVkIFJURV9BUkNIX1g4NiB8fCBkZWZpbmVkIF9fQVJNX05FT04g XA0KICAgICAgICAgICAgICAgIHx8IGRlZmluZWQgUlRFX0FSQ0hfUFBDXzY0DQojZGVmaW5lIFNF TkRfTVVMVEkNCiNlbmRpZg0KDQpzdGF0aWMgaW5saW5lIHZvaWQNCnNlbmRfcGFja2V0c19zaW5n bGUoc3RydWN0IGxjb3JlX2NvbmYgKnFjb25mLCBzdHJ1Y3QgcnRlX21idWYgKnBrdHNbXSwgdWlu dDE2X3QgaG9wc1tdLCB1aW50MzJfdCBuYl90eCkNCnsNCiAgICAgICAgaW50MzJfdCBqOw0KICAg ICAgICBzdHJ1Y3QgcnRlX2V0aGVyX2hkciAqZXRoX2hkcjsNCg0KICAgICAgICBmb3IgKGogPSAw OyBqIDwgbmJfdHg7IGorKykgew0KICAgICAgICAgICAgICAgIC8qIFJ1biByZmMxODEyIGlmIHBh Y2tldCBpcyBpcHY0IGFuZCBjaGVja3MgZW5hYmxlZC4gKi8NCiAgICAgICAgICAgICAgICByZmMx ODEyX3Byb2Nlc3MoKHN0cnVjdCBydGVfaXB2NF9oZHIgKikocnRlX3BrdG1idWZfbXRvZCgNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0c1tqXSwgc3RydWN0IHJ0ZV9ldGhlcl9o ZHIgKikgKyAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvcHNbal0sIHBr dHNbal0tPnBhY2tldF90eXBlKTsNCg0KICAgICAgICAgICAgICAgIC8qIFNldCBNQUMgYWRkcmVz c2VzLiAqLw0KICAgICAgICAgICAgICAgIGV0aF9oZHIgPSBydGVfcGt0bWJ1Zl9tdG9kKHBrdHNb al0sIHN0cnVjdCBydGVfZXRoZXJfaGRyICopOw0KICAgICAgICAgICAgICAgICoodWludDY0X3Qg KikmZXRoX2hkci0+ZHN0X2FkZHIgPSBkZXN0X2V0aF9hZGRyW2hvcHNbal1dOw0KICAgICAgICAg ICAgICAgIHJ0ZV9ldGhlcl9hZGRyX2NvcHkoJnBvcnRzX2V0aF9hZGRyW2hvcHNbal1dLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXRoX2hkci0+c3JjX2FkZHIpOw0KICAgICAg ICB9DQoNCiAgICAgICAgZm9yIChqICA9IDA7IGogIT0gbmJfdHg7IGorKykgeyANCglpZiAoaG9w c1tqXSAhPSBCQURfUE9SVCkNCiAgICAgICAgICAgICAgICAgICAgICBzZW5kX3NpbmdsZV9wYWNr ZXQocWNvbmYsIHBrdHN0W2pdLCBob3BzW2pdKTsNCgllbHNlDQoJICAgICAgcnRlX3BrdG1idWZf ZnJlZShwa3RzW2pdKTsNCiAgICAgICAgfQ0KfSANCg0Kc3RhdGljIGlubGluZSB2b2lkDQpsM2Z3 ZF9hY2xfc2VuZF9wYWNrZXRzKHN0cnVjdCBsY29yZV9jb25mICpxY29uZiwgc3RydWN0IHJ0ZV9t YnVmICpwa3RzW10sIHVpbnQxNl90IGhvcHNbXSwgdWludDMyX3QgbmJfdHgpDQp7DQoJdWludDMy X3QgaTsNCgl1aW50MTZfdCBkc3RfcG9ydFtuYl90eF07DQoNCglmb3IgKGkgPSAwOyBpICE9IG5i X3R4OyBpKyspIHsNCgkJaWYgKGxpa2VseSgocmVzW2ldICYgQUNMX0RFTllfU0lHTkFUVVJFKSA9 PSAwICYmIHJlc1tpXSAhPSAwKSkgew0KCQkJZHN0X3BvcnRbaV0gPSByZXNbaV0gLSBGV0RfUE9S VF9TSElGVDsNCgkJfSBlbHNlIHsNCgkJCWRzdF9wb3J0W2ldID0gQkFEX1BPUlQ7DQojaWZkZWYg TDNGV0RBQ0xfREVCVUcNCgkJCWlmICgocmVzICYgQUNMX0RFTllfU0lHTkFUVVJFKSAhPSAwKSB7 DQoJCQkJaWYgKFJURV9FVEhfSVNfSVBWNF9IRFIocGt0c1tpXS0+cGFja2V0X3R5cGUpKQ0KCQkJ CQlkdW1wX2FjbDRfcnVsZShwa3RzW2ldLCByZXNbaV0pOw0KCQkJCWVsc2UgaWYgKFJURV9FVEhf SVNfSVBWNl9IRFIocGt0W2ldLT5wYWNrZXRfdHlwZSkpDQoJCQkJCWR1bXBfYWNsNl9ydWxlKHBr dFtpXSwgcmVzW2ldKTsNCiAgICAgICAgICAgICAgICAJCX0NCiNlbmRpZg0KCQl9DQoJfQ0KDQoj aWYgZGVmaW5lZCBTRU5EX01VTFRJDQoJc2VuZF9wYWNrZXRzX211bHRpKHFjb25mLCBwa3RzLCBk c3RfcG9ydCwgbmJfdHgpOw0KIyBlbHNlDQoJc2VuZF9wYWNrZXRzX3NpbmdsZShxY29uZiwgcGt0 cywgZHN0X3BvcnQsIG5iX3R4KTsNCiNlbmRpZg0KfQ0KDQo+ICsNCj4gKy8qIEVucXVldWUgYSBz aW5nbGUgcGFja2V0LCBhbmQgc2VuZCBidXJzdCBpZiBxdWV1ZSBpcyBmaWxsZWQgKi8NCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZA0KPiArbDNmd2RfYWNsX3NlbmRfc2luZ2xlX3BhY2tldChzdHJ1Y3Qg cnRlX21idWYgKm0sIHVpbnQxNl90IHBvcnQpDQo+ICt7DQo+ICsJdWludDMyX3QgbGNvcmVfaWQ7 DQo+ICsJc3RydWN0IGxjb3JlX2NvbmYgKnFjb25mOw0KPiArCXN0cnVjdCBydGVfZXRoZXJfaGRy ICplaDsNCj4gKw0KPiArCWxjb3JlX2lkID0gcnRlX2xjb3JlX2lkKCk7DQo+ICsNCj4gKwkvKiB1 cGRhdGUgc3JjIGFuZCBkc3QgbWFjKi8NCj4gKwllaCA9IHJ0ZV9wa3RtYnVmX210b2QobSwgc3Ry dWN0IHJ0ZV9ldGhlcl9oZHIgKik7DQo+ICsJbWVtY3B5KGVoLCAmcG9ydF9sMmhkcltwb3J0XSwN Cj4gKwkJCXNpemVvZihlaC0+ZHN0X2FkZHIpICsgc2l6ZW9mKGVoLT5zcmNfYWRkcikpOw0KPiAr DQo+ICsJcWNvbmYgPSAmbGNvcmVfY29uZltsY29yZV9pZF07DQo+ICsJcnRlX2V0aF90eF9idWZm ZXIocG9ydCwgcWNvbmYtPnR4X3F1ZXVlX2lkW3BvcnRdLA0KPiArCQkJcWNvbmYtPnR4X2J1ZmZl cltwb3J0XSwgbSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArbDNmd2Rf YWNsX3ByZXBhcmVfYWNsX3BhcmFtZXRlcihzdHJ1Y3QgcnRlX21idWYgKipwa3RzX2luLCBzdHJ1 Y3QgYWNsX3NlYXJjaF90ICphY2wsDQo+ICsJaW50IG5iX3J4KQ0KPiArew0KPiArCWludCBpOw0K PiArDQo+ICsJYWNsLT5udW1faXB2NCA9IDA7DQo+ICsJYWNsLT5udW1faXB2NiA9IDA7DQo+ICsN Cj4gKwkvKiBQcmVmZXRjaCBmaXJzdCBwYWNrZXRzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IFBS RUZFVENIX09GRlNFVCAmJiBpIDwgbmJfcng7IGkrKykgew0KPiArCQlydGVfcHJlZmV0Y2gwKHJ0 ZV9wa3RtYnVmX210b2QoDQo+ICsJCQkJcGt0c19pbltpXSwgdm9pZCAqKSk7DQo+ICsJfQ0KPiAr DQo+ICsJZm9yIChpID0gMDsgaSA8IChuYl9yeCAtIFBSRUZFVENIX09GRlNFVCk7IGkrKykgew0K PiArCQlydGVfcHJlZmV0Y2gwKHJ0ZV9wa3RtYnVmX210b2QocGt0c19pblsNCj4gKwkJCQlpICsg UFJFRkVUQ0hfT0ZGU0VUXSwgdm9pZCAqKSk7DQo+ICsJCWwzZndkX2FjbF9wcmVwYXJlX29uZV9w YWNrZXQocGt0c19pbiwgYWNsLCBpKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBQcm9jZXNzIGxlZnQg cGFja2V0cyAqLw0KPiArCWZvciAoOyBpIDwgbmJfcng7IGkrKykNCj4gKwkJbDNmd2RfYWNsX3By ZXBhcmVfb25lX3BhY2tldChwa3RzX2luLCBhY2wsIGkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHZvaWQNCj4gK2wzZndkX2FjbF9zZW5kX29uZV9wYWNrZXQoc3RydWN0IHJ0ZV9tYnVm ICptLCB1aW50MzJfdCByZXMpDQo+ICt7DQo+ICsJaWYgKGxpa2VseSgocmVzICYgQUNMX0RFTllf U0lHTkFUVVJFKSA9PSAwICYmIHJlcyAhPSAwKSkgew0KPiArCQkvKiBmb3J3YXJkIHBhY2tldHMg Ki8NCj4gKwkJbDNmd2RfYWNsX3NlbmRfc2luZ2xlX3BhY2tldChtLA0KPiArCQkJKHVpbnQ4X3Qp KHJlcyAtIEZXRF9QT1JUX1NISUZUKSk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyogaW4gdGhlIEFD TCBsaXN0LCBkcm9wIGl0ICovDQo+ICsjaWZkZWYgTDNGV0RBQ0xfREVCVUcNCj4gKwkJaWYgKChy ZXMgJiBBQ0xfREVOWV9TSUdOQVRVUkUpICE9IDApIHsNCj4gKwkJCWlmIChSVEVfRVRIX0lTX0lQ VjRfSERSKG0tPnBhY2tldF90eXBlKSkNCj4gKwkJCQlkdW1wX2FjbDRfcnVsZShtLCByZXMpOw0K PiArCQkJZWxzZSBpZiAoUlRFX0VUSF9JU19JUFY2X0hEUihtLT5wYWNrZXRfdHlwZSkpDQo+ICsJ CQkJZHVtcF9hY2w2X3J1bGUobSwgcmVzKTsNCj4gKwkJfQ0KPiArI2VuZGlmDQo+ICsJCXJ0ZV9w a3RtYnVmX2ZyZWUobSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQN Cj4gK2wzZndkX2FjbF9zZW5kX3BhY2tldHMoc3RydWN0IHJ0ZV9tYnVmICoqbSwgdWludDMyX3Qg KnJlcywgaW50IG51bSkNCj4gK3sNCj4gKwlpbnQgaTsNCj4gKw0KPiArCS8qIFByZWZldGNoIGZp cnN0IHBhY2tldHMgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgUFJFRkVUQ0hfT0ZGU0VUICYmIGkg PCBudW07IGkrKykgew0KPiArCQlydGVfcHJlZmV0Y2gwKHJ0ZV9wa3RtYnVmX210b2QoDQo+ICsJ CQkJbVtpXSwgdm9pZCAqKSk7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IChudW0g LSBQUkVGRVRDSF9PRkZTRVQpOyBpKyspIHsNCj4gKwkJcnRlX3ByZWZldGNoMChydGVfcGt0bWJ1 Zl9tdG9kKG1bDQo+ICsJCQkJaSArIFBSRUZFVENIX09GRlNFVF0sIHZvaWQgKikpOw0KPiArCQls M2Z3ZF9hY2xfc2VuZF9vbmVfcGFja2V0KG1baV0sIHJlc1tpXSk7DQo+ICsJfQ0KPiArDQo+ICsJ LyogUHJvY2VzcyBsZWZ0IHBhY2tldHMgKi8NCj4gKwlmb3IgKDsgaSA8IG51bTsgaSsrKQ0KPiAr CQlsM2Z3ZF9hY2xfc2VuZF9vbmVfcGFja2V0KG1baV0sIHJlc1tpXSk7DQo+ICt9DQo+ICsNCj4g KyNlbmRpZiAvKiBfX0wzRldEX0FDTF9TQ0FMQVJfSF9fICovDQo+IGRpZmYgLS1naXQgYS9leGFt cGxlcy9sM2Z3ZC9sM2Z3ZF9yb3V0ZS5oIGIvZXhhbXBsZXMvbDNmd2QvbDNmd2Rfcm91dGUuaA0K PiBpbmRleCBhZGYzM2RiZjQ2Li40NjdjNGQyODU5IDEwMDY0NA0KPiAtLS0gYS9leGFtcGxlcy9s M2Z3ZC9sM2Z3ZF9yb3V0ZS5oDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndkL2wzZndkX3JvdXRlLmgN Cj4gQEAgLTUsNiArNSw3IEBADQo+ICAvKiBMb2cgZmlsZSByZWxhdGVkIGNoYXJhY3RlciBkZWZz LiAqLw0KPiAgI2RlZmluZSBDT01NRU5UX0xFQURfQ0hBUgkoJyMnKQ0KPiAgI2RlZmluZSBST1VU RV9MRUFEX0NIQVIJCSgnUicpDQo+ICsjZGVmaW5lIEFDTF9MRUFEX0NIQVIJCSgnQCcpDQo+IA0K PiAgI2RlZmluZQlJUFY2X0FERFJfTEVOCTE2DQo+ICAjZGVmaW5lCUlQVjZfQUREUl9VMTYJKElQ VjZfQUREUl9MRU4gLyBzaXplb2YodWludDE2X3QpKQ0KPiBAQCAtOTYsMTEgKzk3LDI2IEBAIHJl YWRfY29uZmlnX2ZpbGVzX2xwbSh2b2lkKTsNCj4gIHZvaWQNCj4gIHJlYWRfY29uZmlnX2ZpbGVz X2VtKHZvaWQpOw0KPiANCj4gK3ZvaWQNCj4gK3JlYWRfY29uZmlnX2ZpbGVzX2FjbCh2b2lkKTsN Cj4gKw0KPiAgdm9pZA0KPiAgZW1fZnJlZV9yb3V0ZXModm9pZCk7DQo+IA0KPiAgdm9pZA0KPiAg bHBtX2ZyZWVfcm91dGVzKHZvaWQpOw0KPiANCj4gK3ZvaWQNCj4gK2FjbF9mcmVlX3JvdXRlcyh2 b2lkKTsNCj4gKw0KPiArdm9pZA0KPiArbDNmd2Rfc2V0X2FsZyhjb25zdCBjaGFyICpvcHRhcmcp Ow0KPiArDQo+ICt2b2lkDQo+ICtsM2Z3ZF9zZXRfcnVsZV9pcHY2X25hbWUoY29uc3QgY2hhciAq b3B0YXJnKTsNCj4gKw0KPiArdm9pZA0KPiArbDNmd2Rfc2V0X3J1bGVfaXB2NF9uYW1lKGNvbnN0 IGNoYXIgKm9wdGFyZyk7DQo+ICsNCj4gIGludA0KPiAgaXNfYnlwYXNzX2xpbmUoY29uc3QgY2hh ciAqYnVmZik7DQo+IGRpZmYgLS1naXQgYS9leGFtcGxlcy9sM2Z3ZC9tYWluLmMgYi9leGFtcGxl cy9sM2Z3ZC9tYWluLmMNCj4gaW5kZXggYTYyOTE5ODIyMy4uNDQwOWQzNDZkZiAxMDA2NDQNCj4g LS0tIGEvZXhhbXBsZXMvbDNmd2QvbWFpbi5jDQo+ICsrKyBiL2V4YW1wbGVzL2wzZndkL21haW4u Yw0KPiBAQCAtNTksMTcgKzU5LDE3IEBAIHVpbnQxNl90IG5iX3R4ZCA9IFJURV9URVNUX1RYX0RF U0NfREVGQVVMVDsNCj4gIC8qKjwgUG9ydHMgc2V0IGluIHByb21pc2N1b3VzIG1vZGUgb2ZmIGJ5 IGRlZmF1bHQuICovDQo+ICBzdGF0aWMgaW50IHByb21pc2N1b3VzX29uOw0KPiANCj4gLS8qIFNl bGVjdCBMb25nZXN0LVByZWZpeCwgRXhhY3QgbWF0Y2ggb3IgRm9yd2FyZGluZyBJbmZvcm1hdGlv biBCYXNlLiAqLw0KPiArLyogU2VsZWN0IExvbmdlc3QtUHJlZml4LCBFeGFjdCBtYXRjaCwgRm9y d2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIG9yIEFjY2VzcyBDb250cm9sLiAqLw0KPiAgZW51bSBM M0ZXRF9MT09LVVBfTU9ERSB7DQo+ICAJTDNGV0RfTE9PS1VQX0RFRkFVTFQsDQo+ICAJTDNGV0Rf TE9PS1VQX0xQTSwNCj4gIAlMM0ZXRF9MT09LVVBfRU0sDQo+IC0JTDNGV0RfTE9PS1VQX0ZJQg0K PiArCUwzRldEX0xPT0tVUF9GSUIsDQo+ICsJTDNGV0RfTE9PS1VQX0FDTA0KPiAgfTsNCj4gIHN0 YXRpYyBlbnVtIEwzRldEX0xPT0tVUF9NT0RFIGxvb2t1cF9tb2RlOw0KPiANCj4gIC8qIEdsb2Jh bCB2YXJpYWJsZXMuICovDQo+IC0NCj4gIHN0YXRpYyBpbnQgbnVtYV9vbiA9IDE7IC8qKjwgTlVN QSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuICovDQo+ICBzdGF0aWMgaW50IHBhcnNlX3B0eXBlOyAv Kio8IFBhcnNlIHBhY2tldCB0eXBlIHVzaW5nIHJ4IGNhbGxiYWNrLCBhbmQgKi8NCj4gIAkJCS8q KjwgZGlzYWJsZWQgYnkgZGVmYXVsdCAqLw0KPiBAQCAtMTg3LDYgKzE4NywzMCBAQCBzdGF0aWMg c3RydWN0IGwzZndkX2xrcF9tb2RlIGwzZndkX2ZpYl9sa3AgPSB7DQo+ICAJLmZyZWVfcm91dGVz CQkJPSBscG1fZnJlZV9yb3V0ZXMsDQo+ICB9Ow0KPiANCj4gK3N0YXRpYyBzdHJ1Y3QgbDNmd2Rf bGtwX21vZGUgbDNmd2RfYWNsX2xrcCA9IHsNCj4gKwkucmVhZF9jb25maWdfZmlsZXMJCT0gcmVh ZF9jb25maWdfZmlsZXNfYWNsLA0KPiArCS5zZXR1cCAgICAgICAgICAgICAgICAgID0gc2V0dXBf YWNsLA0KPiArCS5jaGVja19wdHlwZSAgICAgICAgICAgID0gZW1fY2hlY2tfcHR5cGUsDQo+ICsJ LmNiX3BhcnNlX3B0eXBlICAgICAgICAgPSBlbV9jYl9wYXJzZV9wdHlwZSwNCj4gKwkubWFpbl9s b29wICAgICAgICAgICAgICA9IGFjbF9tYWluX2xvb3AsDQo+ICsJLmdldF9pcHY0X2xvb2t1cF9z dHJ1Y3QgPSBhY2xfZ2V0X2lwdjRfbDNmd2RfbG9va3VwX3N0cnVjdCwNCj4gKwkuZ2V0X2lwdjZf bG9va3VwX3N0cnVjdCA9IGFjbF9nZXRfaXB2Nl9sM2Z3ZF9sb29rdXBfc3RydWN0LA0KPiArCS5m cmVlX3JvdXRlcwkJCT0gYWNsX2ZyZWVfcm91dGVzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGVu dW0gcnRlX2FjbF9jbGFzc2lmeV9hbGcNCj4gK3BhcnNlX2FjbF9hbGcoY29uc3QgY2hhciAqYWxn KQ0KPiArew0KPiArCXVpbnQzMl90IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpICE9IFJURV9E SU0oYWNsX2FsZyk7IGkrKykgew0KPiArCQlpZiAoc3RyY21wKGFsZywgYWNsX2FsZ1tpXS5uYW1l KSA9PSAwKQ0KPiArCQkJcmV0dXJuIGFjbF9hbGdbaV0uYWxnOw0KPiArCX0NCj4gKw0KPiArCXJl dHVybiBSVEVfQUNMX0NMQVNTSUZZX0RFRkFVTFQ7DQo+ICt9DQoNCkkgdGhpbmsgd2UgY2FuIHNh ZmVseSBtb3ZlIHRoaXMgZnVuY3Rpb24gaW50byBsM2Z3ZF9hY2wuYy4NCg0KPiArDQo+ICAvKg0K PiAgICogMTk4LjE4LjAuMC8xNiBhcmUgc2V0IGFzaWRlIGZvciBSRkMyNTQ0IGJlbmNobWFya2lu ZyAoUkZDNTczNSkuDQo+ICAgKiAxOTguMTguezAtMTV9LjAvMjQgPSBQb3J0IHswLTE1fQ0KPiBA QCAtMjM2LDE4ICsyNjAsMjQgQEAgY29uc3Qgc3RydWN0IGlwdjZfbDNmd2Rfcm91dGUgaXB2Nl9s M2Z3ZF9yb3V0ZV9hcnJheVtdID0gew0KPiAgLyoNCj4gICAqIEFQSSdzIGNhbGxlZCBkdXJpbmcg aW5pdGlhbGl6YXRpb24gdG8gc2V0dXAgQUNML0VNL0xQTSBydWxlcy4NCj4gICAqLw0KPiAtc3Rh dGljIHZvaWQNCj4gK3ZvaWQNCj4gIGwzZndkX3NldF9ydWxlX2lwdjRfbmFtZShjb25zdCBjaGFy ICpvcHRhcmcpDQo+ICB7DQo+ICAJcGFybV9jb25maWcucnVsZV9pcHY0X25hbWUgPSBvcHRhcmc7 DQo+ICB9DQo+IA0KPiAtc3RhdGljIHZvaWQNCj4gK3ZvaWQNCj4gIGwzZndkX3NldF9ydWxlX2lw djZfbmFtZShjb25zdCBjaGFyICpvcHRhcmcpDQo+ICB7DQo+ICAJcGFybV9jb25maWcucnVsZV9p cHY2X25hbWUgPSBvcHRhcmc7DQo+ICB9DQo+IA0KPiArdm9pZA0KPiArbDNmd2Rfc2V0X2FsZyhj b25zdCBjaGFyICpvcHRhcmcpDQo+ICt7DQo+ICsJcGFybV9jb25maWcuYWxnID0gcGFyc2VfYWNs X2FsZyhvcHRhcmcpOw0KPiArfQ0KPiArDQo+ICAvKg0KPiAgICogU2V0dXAgbG9va3VwIG1ldGhv ZHMgZm9yIGZvcndhcmRpbmcuDQo+ICAgKiBDdXJyZW50bHkgZXhhY3QtbWF0Y2gsIGxvbmdlc3Qt cHJlZml4LW1hdGNoIGFuZCBmb3J3YXJkaW5nIGluZm9ybWF0aW9uDQo+IEBAIC0yNjIsNiArMjky LDkgQEAgc2V0dXBfbDNmd2RfbG9va3VwX3RhYmxlcyh2b2lkKQ0KPiAgCS8qIFNldHVwIEZJQiBs b29rdXAgZnVuY3Rpb25zLiAqLw0KPiAgCWVsc2UgaWYgKGxvb2t1cF9tb2RlID09IEwzRldEX0xP T0tVUF9GSUIpDQo+ICAJCWwzZndkX2xrcCA9IGwzZndkX2ZpYl9sa3A7DQo+ICsJLyogU2V0dXAg QUNMIGxvb2t1cCBmdW5jdGlvbnMuICovDQo+ICsJZWxzZSBpZiAobG9va3VwX21vZGUgPT0gTDNG V0RfTE9PS1VQX0FDTCkNCj4gKwkJbDNmd2RfbGtwID0gbDNmd2RfYWNsX2xrcDsNCj4gIAkvKiBT ZXR1cCBMUE0gbG9va3VwIGZ1bmN0aW9ucy4gKi8NCj4gIAllbHNlDQo+ICAJCWwzZndkX2xrcCA9 IGwzZndkX2xwbV9sa3A7DQo+IEBAIC0zNTcsMTAgKzM5MCwzMiBAQCBpbml0X2xjb3JlX3J4X3F1 ZXVlcyh2b2lkKQ0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiANCj4gK3N0YXRpYyBpbnQNCj4gK3Vz YWdlX2FjbF9hbGcoY2hhciAqYnVmLCBzaXplX3Qgc3opDQo+ICt7DQo+ICsJdWludDMyX3QgaSwg biwgcmMsIHRuOw0KPiArDQo+ICsJbiA9IDA7DQo+ICsJdG4gPSAwOw0KPiArCWZvciAoaSA9IDA7 IGkgPCBSVEVfRElNKGFjbF9hbGcpOyBpKyspIHsNCj4gKwkJcmMgPSBzbnByaW50ZihidWYgKyBu LCBzeiAtIG4sDQo+ICsJCQlpID09IFJURV9ESU0oYWNsX2FsZykgLSAxID8gIiVzIiA6ICIlc3wi LA0KPiArCQkJYWNsX2FsZ1tpXS5uYW1lKTsNCj4gKwkJdG4gKz0gcmM7DQo+ICsJCWlmIChyYyA8 IHN6IC0gbikNCj4gKwkJCW4gKz0gcmM7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRuOw0KPiAr fQ0KPiArDQo+ICAvKiBkaXNwbGF5IHVzYWdlICovDQo+ICBzdGF0aWMgdm9pZA0KPiAgcHJpbnRf dXNhZ2UoY29uc3QgY2hhciAqcHJnbmFtZSkNCj4gIHsNCj4gKwljaGFyIGFsZ1tQQVRIX01BWF07 DQo+ICsNCj4gKwl1c2FnZV9hY2xfYWxnKGFsZywgc2l6ZW9mKGFsZykpOw0KPiAgCWZwcmludGYo c3RkZXJyLCAiJXMgW0VBTCBvcHRpb25zXSAtLSINCj4gIAkJIiAtcCBQT1JUTUFTSyINCj4gIAkJ IiAgLS1ydWxlX2lwdjQ9RklMRSINCj4gQEAgLTM4Nyw3ICs0NDIsOCBAQCBwcmludF91c2FnZShj b25zdCBjaGFyICpwcmduYW1lKQ0KPiAgCQkiICAtUCA6IEVuYWJsZSBwcm9taXNjdW91cyBtb2Rl XG4iDQo+ICAJCSIgIC0tbG9va3VwOiBTZWxlY3QgdGhlIGxvb2t1cCBtZXRob2RcbiINCj4gIAkJ IiAgICAgICAgICAgIERlZmF1bHQ6IGxwbVxuIg0KPiAtCQkiICAgICAgICAgICAgQWNjZXB0ZWQ6 IGVtIChFeGFjdCBNYXRjaCksIGxwbSAoTG9uZ2VzdCBQcmVmaXggTWF0Y2gpLCBmaWIgKEZvcndh cmRpbmcgSW5mb3JtYXRpb24gQmFzZSlcbiINCj4gKwkJIiAgICAgICAgICAgIEFjY2VwdGVkOiBl bSAoRXhhY3QgTWF0Y2gpLCBscG0gKExvbmdlc3QgUHJlZml4IE1hdGNoKSwgZmliIChGb3J3YXJk aW5nIEluZm9ybWF0aW9uIEJhc2UpLFxuIg0KPiArCQkiICAgICAgICAgICAgICAgICAgICAgIGFj bCAoQWNjZXNzIENvbnRyb2wgTGlzdClcbiINCj4gIAkJIiAgLS1jb25maWcgKHBvcnQscXVldWUs bGNvcmUpOiBSeCBxdWV1ZSBjb25maWd1cmF0aW9uXG4iDQo+ICAJCSIgIC0tcngtcXVldWUtc2l6 ZSBOUEtUUzogUnggcXVldWUgc2l6ZSBpbiBkZWNpbWFsXG4iDQo+ICAJCSIgICAgICAgICAgICBE ZWZhdWx0OiAlZFxuIg0KPiBAQCAtNDE2LDggKzQ3MiwxMyBAQCBwcmludF91c2FnZShjb25zdCBj aGFyICpwcmduYW1lKQ0KPiAgCQkiICAtTCA6IEVuYWJsZSBsb25nZXN0IHByZWZpeCBtYXRjaCwg bGVnYWN5IGZsYWcgcGxlYXNlIHVzZSAtLWxvb2t1cD1scG0gaW5zdGVhZFxuIg0KPiAgCQkiICAt LXJ1bGVfaXB2ND1GSUxFOiBTcGVjaWZ5IHRoZSBpcHY0IHJ1bGVzIGVudHJpZXMgZmlsZS5cbiIN Cj4gIAkJIiAgICAgICAgICAgICAgICAgICAgRWFjaCBydWxlIG9jY3VwaWVzIG9uZSBsaW5lLlxu Ig0KPiAtCQkiICAtLXJ1bGVfaXB2Nj1GSUxFOiBTcGVjaWZ5IHRoZSBpcHY2IHJ1bGVzIGVudHJp ZXMgZmlsZS5cblxuIiwNCj4gLQkJcHJnbmFtZSwgUlRFX1RFU1RfUlhfREVTQ19ERUZBVUxULCBS VEVfVEVTVF9UWF9ERVNDX0RFRkFVTFQpOw0KPiArCQkiICAgICAgICAgICAgICAgICAgICAyIGtp bmRzIG9mIHJ1bGVzIGFyZSBzdXBwb3J0ZWQuXG4iDQo+ICsJCSIgICAgICAgICAgICAgICAgICAg IE9uZSBpcyBBQ0wgZW50cnkgYXQgd2hpbGUgbGluZSBsZWFkcyB3aXRoIGNoYXJhY3RlciAnJWMn LFxuIg0KPiArCQkiICAgICAgICAgICAgICAgICAgICBhbm90aGVyIGlzIHJvdXRlIGVudHJ5IGF0 IHdoaWxlIGxpbmUgbGVhZHMgd2l0aCBjaGFyYWN0ZXIgJyVjJy5cbiINCj4gKwkJIiAgLS1ydWxl X2lwdjY9RklMRTogU3BlY2lmeSB0aGUgaXB2NiBydWxlcyBlbnRyaWVzIGZpbGUuXG4iDQo+ICsJ CSIgIC0tYWxnOiBBQ0wgY2xhc3NpZnkgbWV0aG9kIHRvIHVzZSwgb25lIG9mOiAlcy5cblxuIiwN Cj4gKwkJcHJnbmFtZSwgUlRFX1RFU1RfUlhfREVTQ19ERUZBVUxULCBSVEVfVEVTVF9UWF9ERVND X0RFRkFVTFQsDQo+ICsJCUFDTF9MRUFEX0NIQVIsIFJPVVRFX0xFQURfQ0hBUiwgYWxnKTsNCj4g IH0NCj4gDQo+ICBzdGF0aWMgaW50DQo+IEBAIC02MzIsOCArNjkzLDEwIEBAIHBhcnNlX2xvb2t1 cChjb25zdCBjaGFyICpvcHRhcmcpDQo+ICAJCWxvb2t1cF9tb2RlID0gTDNGV0RfTE9PS1VQX0xQ TTsNCj4gIAllbHNlIGlmICghc3RyY21wKG9wdGFyZywgImZpYiIpKQ0KPiAgCQlsb29rdXBfbW9k ZSA9IEwzRldEX0xPT0tVUF9GSUI7DQo+ICsJZWxzZSBpZiAoIXN0cmNtcChvcHRhcmcsICJhY2wi KSkNCj4gKwkJbG9va3VwX21vZGUgPSBMM0ZXRF9MT09LVVBfQUNMOw0KPiAgCWVsc2Ugew0KPiAt CQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbG9va3VwIG9wdGlvbiEgQWNjZXB0ZWQgb3B0aW9u czogZW0sIGxwbSwgZmliXG4iKTsNCj4gKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGxvb2t1 cCBvcHRpb24hIEFjY2VwdGVkIG9wdGlvbnM6IGFjbCwgZW0sIGxwbSwgZmliXG4iKTsNCj4gIAkJ cmV0dXJuIC0xOw0KPiAgCX0NCj4gIAlyZXR1cm4gMDsNCj4gQEAgLTY2Nyw2ICs3MzAsNyBAQCBz dGF0aWMgY29uc3QgY2hhciBzaG9ydF9vcHRpb25zW10gPQ0KPiAgI2RlZmluZSBDTURfTElORV9P UFRfVkVDVE9SX1RNT19OUyAiZXZlbnQtdmVjdG9yLXRtbyINCj4gICNkZWZpbmUgQ01EX0xJTkVf T1BUX1JVTEVfSVBWNCAicnVsZV9pcHY0Ig0KPiAgI2RlZmluZSBDTURfTElORV9PUFRfUlVMRV9J UFY2ICJydWxlX2lwdjYiDQo+ICsjZGVmaW5lIENNRF9MSU5FX09QVF9BTEcgImFsZyINCj4gDQo+ ICBlbnVtIHsNCj4gIAkvKiBsb25nIG9wdGlvbnMgbWFwcGVkIHRvIGEgc2hvcnQgb3B0aW9uICov DQo+IEBAIC02ODUsNiArNzQ5LDcgQEAgZW51bSB7DQo+ICAJQ01EX0xJTkVfT1BUX1BBUlNFX1BU WVBFX05VTSwNCj4gIAlDTURfTElORV9PUFRfUlVMRV9JUFY0X05VTSwNCj4gIAlDTURfTElORV9P UFRfUlVMRV9JUFY2X05VTSwNCj4gKwlDTURfTElORV9PUFRfQUxHX05VTSwNCj4gIAlDTURfTElO RV9PUFRfUEFSU0VfUEVSX1BPUlRfUE9PTCwNCj4gIAlDTURfTElORV9PUFRfTU9ERV9OVU0sDQo+ ICAJQ01EX0xJTkVfT1BUX0VWRU5UUV9TWU5DX05VTSwNCj4gQEAgLTcxNiw2ICs3ODEsNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBsZ29wdHNbXSA9IHsNCj4gIAl7Q01EX0xJTkVfT1BU X1ZFQ1RPUl9UTU9fTlMsIDEsIDAsIENNRF9MSU5FX09QVF9WRUNUT1JfVE1PX05TX05VTX0sDQo+ ICAJe0NNRF9MSU5FX09QVF9SVUxFX0lQVjQsICAgMSwgMCwgQ01EX0xJTkVfT1BUX1JVTEVfSVBW NF9OVU19LA0KPiAgCXtDTURfTElORV9PUFRfUlVMRV9JUFY2LCAgIDEsIDAsIENNRF9MSU5FX09Q VF9SVUxFX0lQVjZfTlVNfSwNCj4gKwl7Q01EX0xJTkVfT1BUX0FMRywgICAxLCAwLCBDTURfTElO RV9PUFRfQUxHX05VTX0sDQo+ICAJe05VTEwsIDAsIDAsIDB9DQo+ICB9Ow0KPiANCj4gQEAgLTg4 NCw2ICs5NTAsOSBAQCBwYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndikNCj4gIAkJY2Fz ZSBDTURfTElORV9PUFRfUlVMRV9JUFY2X05VTToNCj4gIAkJCWwzZndkX3NldF9ydWxlX2lwdjZf bmFtZShvcHRhcmcpOw0KPiAgCQkJYnJlYWs7DQo+ICsJCWNhc2UgQ01EX0xJTkVfT1BUX0FMR19O VU06DQo+ICsJCQlsM2Z3ZF9zZXRfYWxnKG9wdGFyZyk7DQo+ICsJCQlicmVhazsNCj4gIAkJZGVm YXVsdDoNCj4gIAkJCXByaW50X3VzYWdlKHByZ25hbWUpOw0KPiAgCQkJcmV0dXJuIC0xOw0KPiBA QCAtOTIzLDcgKzk5Miw3IEBAIHBhcnNlX2FyZ3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiAg CSAqIGFzIGRlZmF1bHQgbWF0Y2guDQo+ICAJICovDQo+ICAJaWYgKGxvb2t1cF9tb2RlID09IEwz RldEX0xPT0tVUF9ERUZBVUxUKSB7DQo+IC0JCWZwcmludGYoc3RkZXJyLCAiTmVpdGhlciBMUE0s IEVNLCBvciBGSUIgc2VsZWN0ZWQsIGRlZmF1bHRpbmcgdG8gTFBNXG4iKTsNCj4gKwkJZnByaW50 ZihzdGRlcnIsICJOZWl0aGVyIEFDTCwgTFBNLCBFTSwgb3IgRklCIHNlbGVjdGVkLCBkZWZhdWx0 aW5nIHRvIExQTVxuIik7DQo+ICAJCWxvb2t1cF9tb2RlID0gTDNGV0RfTE9PS1VQX0xQTTsNCj4g IAl9DQo+IA0KPiBAQCAtOTM3LDYgKzEwMDYsMTIgQEAgcGFyc2VfYXJncyhpbnQgYXJnYywgY2hh ciAqKmFyZ3YpDQo+ICAJCWhhc2hfZW50cnlfbnVtYmVyID0gSEFTSF9FTlRSWV9OVU1CRVJfREVG QVVMVDsNCj4gIAl9DQo+IA0KPiArCS8qIEZvciBBQ0wsIHVwZGF0ZSBwb3J0IGNvbmZpZyByc3Mg aGFzaCBmaWx0ZXIgKi8NCj4gKwlpZiAobG9va3VwX21vZGUgPT0gTDNGV0RfTE9PS1VQX0FDTCkg ew0KPiArCQlwb3J0X2NvbmYucnhfYWR2X2NvbmYucnNzX2NvbmYucnNzX2hmIHw9DQo+ICsJCQkJ UlRFX0VUSF9SU1NfVURQIHwgUlRFX0VUSF9SU1NfVENQIHwgUlRFX0VUSF9SU1NfU0NUUDsNCj4g Kwl9DQo+ICsNCj4gIAlpZiAob3B0aW5kID49IDApDQo+ICAJCWFyZ3Zbb3B0aW5kLTFdID0gcHJn bmFtZTsNCj4gDQo+IEBAIC05OTIsNyArMTA2Nyw3IEBAIGluaXRfbWVtKHVpbnQxNl90IHBvcnRp ZCwgdW5zaWduZWQgaW50IG5iX21idWYpDQo+ICAJCQkJcHJpbnRmKCJBbGxvY2F0ZWQgbWJ1ZiBw b29sIG9uIHNvY2tldCAlZFxuIiwNCj4gIAkJCQkJc29ja2V0aWQpOw0KPiANCj4gLQkJCS8qIFNl dHVwIExQTSwgRU0oZi5lIEhhc2gpIG9yIEZJQi4gQnV0LCBvbmx5IG9uY2UgcGVyDQo+ICsJCQkv KiBTZXR1cCBBQ0wsIExQTSwgRU0oZi5lIEhhc2gpIG9yIEZJQi4gQnV0LCBvbmx5IG9uY2UgcGVy DQo+ICAJCQkgKiBhdmFpbGFibGUgc29ja2V0Lg0KPiAgCQkJICovDQo+ICAJCQlpZiAoIWxrcF9w ZXJfc29ja2V0W3NvY2tldGlkXSkgew0KPiBkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvbDNmd2QvbWVz b24uYnVpbGQgYi9leGFtcGxlcy9sM2Z3ZC9tZXNvbi5idWlsZA0KPiBpbmRleCAwODMwYjNlYjMx Li4yZmEwMGU1Yjc0IDEwMDY0NA0KPiAtLS0gYS9leGFtcGxlcy9sM2Z3ZC9tZXNvbi5idWlsZA0K PiArKysgYi9leGFtcGxlcy9sM2Z3ZC9tZXNvbi5idWlsZA0KPiBAQCAtNyw4ICs3LDkgQEANCj4g ICMgRFBESyBpbnN0YW5jZSwgdXNlICdtYWtlJw0KPiANCj4gIGFsbG93X2V4cGVyaW1lbnRhbF9h cGlzID0gdHJ1ZQ0KPiAtZGVwcyArPSBbJ2hhc2gnLCAnbHBtJywgJ2ZpYicsICdldmVudGRldidd DQo+ICtkZXBzICs9IFsnaGFzaCcsICdscG0nLCAnZmliJywgJ2V2ZW50ZGV2JywgJ2FjbCddDQo+ ICBzb3VyY2VzID0gZmlsZXMoDQo+ICsgICAgICAgICdsM2Z3ZF9hY2wuYycsDQo+ICAgICAgICAg ICdsM2Z3ZF9lbS5jJywNCj4gICAgICAgICAgJ2wzZndkX2V2ZW50LmMnLA0KPiAgICAgICAgICAn bDNmd2RfZXZlbnRfaW50ZXJuYWxfcG9ydC5jJywNCj4gZGlmZiAtLWdpdCBhL2V4YW1wbGVzL21l c29uLmJ1aWxkIGIvZXhhbXBsZXMvbWVzb24uYnVpbGQNCj4gaW5kZXggMjY4NDIyYTI1Ny4uNzhk ZTBlMWYzNyAxMDA2NDQNCj4gLS0tIGEvZXhhbXBsZXMvbWVzb24uYnVpbGQNCj4gKysrIGIvZXhh bXBsZXMvbWVzb24uYnVpbGQNCj4gQEAgLTMyLDcgKzMyLDYgQEAgYWxsX2V4YW1wbGVzID0gWw0K PiAgICAgICAgICAnbDJmd2Qtam9ic3RhdHMnLA0KPiAgICAgICAgICAnbDJmd2Qta2VlcGFsaXZl JywNCj4gICAgICAgICAgJ2wzZndkJywNCj4gLSAgICAgICAgJ2wzZndkLWFjbCcsDQo+ICAgICAg ICAgICdsM2Z3ZC1ncmFwaCcsDQo+ICAgICAgICAgICdsM2Z3ZC1wb3dlcicsDQo+ICAgICAgICAg ICdsaW5rX3N0YXR1c19pbnRlcnJ1cHQnLA0KPiAtLQ0KPiAyLjI1LjENCg0K