From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A55F2469BC for ; Tue, 1 Aug 2023 02:54:19 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 73D8F68C402; Tue, 1 Aug 2023 05:54:16 +0300 (EEST) Received: from mgamail.intel.com (mgamail.intel.com [192.55.52.88]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD9EA68BFF8 for ; Tue, 1 Aug 2023 05:54:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1690858454; x=1722394454; h=from:to:subject:date:message-id:references:in-reply-to: content-id:content-transfer-encoding:mime-version; bh=UpLXa/uE5wtNTnpKkgDWLrYF0bCXSmgtUVbRO98Wsqw=; b=evzsmVwSnJraZRx4Mbpw7pvo2zZDwQsYQzAo3Uca/uCpuHZUKDmRyhn0 oG2UsGaRJGt5k1eMvGyKpI3174AAqzDOrHjc/gAZ2+RZm8iXYxghac014 Q6J5AZwOH4Q9L3u2+VIizWN9S5RYzPUYggM9Ho2J2WZRtYzBOkL3BsRQa sRB/YycobgzWrnDKGkbaGLyiDfX99TXc3lZLa3t+IXWIFVhbw5Rv0xrrM dVzZyFj9JNrjC2XR6pI12/rL3EBOe1yomtcoyCFOevGYEOSTtVP5yags5 QXe2zyoEMJ5+ZsIaHyC5XZ8xpAAZr60DfOUU+DlLklm1WZxTnlTcfDhj0 w==; X-IronPort-AV: E=McAfee;i="6600,9927,10788"; a="400131323" X-IronPort-AV: E=Sophos;i="6.01,246,1684825200"; d="scan'208";a="400131323" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Jul 2023 19:54:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10788"; a="705650302" X-IronPort-AV: E=Sophos;i="6.01,246,1684825200"; d="scan'208";a="705650302" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga006.jf.intel.com with ESMTP; 31 Jul 2023 19:54:04 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Mon, 31 Jul 2023 19:54:03 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Mon, 31 Jul 2023 19:54:03 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.47) by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Mon, 31 Jul 2023 19:54:03 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=S3f/D4Ylpg+go1eAr4GtEviz+6XxGNxGWWy93bKu+1U+5fL5oPIFB7hptE+iw2Nk08IYQIV39AcxxYqPJNe2WkukOxGS1rYcBHFzK8BzskSV47ZPnW/eibOaCjMNn4MNwKvfKp24M6yQuRu10YSRDD0eRWS6lR7Cfg1G+PR8EdO8wHbBn/NgnmH0OBpEi7lVopAorw7Sh2Ut2YYJBtD+odH9ZtVj5kFbZVrCVsF4WzFc3B1kOSm9PmLODzidvsscH9XvgdWKxodpZilVdS8fbuLpm6A+2lwzjBbpCgoP2kJUkixlhvr+fUM7+iAW7T5YAFwcbPUXnyKx+nXaAGg7iA== 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=UpLXa/uE5wtNTnpKkgDWLrYF0bCXSmgtUVbRO98Wsqw=; b=QvLvMI6tyEA8SpSkWRebY/C3NHogsmuNiRHTImp9II3e8yGPuAoiIN6aK2Qeg3ohoQIqKPTL1yxnMpebJtpVlLEz1mrpsfXCbR5WJNP1LH/xsYnDpKFSo/5rLgi6JPUAT4+pPrCe3q9Yiy8MIAHQU/oBiq42GbsALjEhP392yi9/jJx6B67KkAFPEwscTyUI81ObO7VIM9X44JOnwg5K/QNHgbbTsdixkklj6FpLcH02MPBoPCf6uQ+ZzdlcddL8TM2H12942NhsoCsiqSFPEuh3m7XfRTMJlPZvHMqDy3O2ggoQp6R5hZmaUY98jqcX2gCVBvQfawuKOrHGhBd5gA== 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 PH0PR11MB5030.namprd11.prod.outlook.com (2603:10b6:510:41::5) by PH7PR11MB8569.namprd11.prod.outlook.com (2603:10b6:510:304::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6631.44; Tue, 1 Aug 2023 02:54:01 +0000 Received: from PH0PR11MB5030.namprd11.prod.outlook.com ([fe80::106:7aae:cf6b:9d53]) by PH0PR11MB5030.namprd11.prod.outlook.com ([fe80::106:7aae:cf6b:9d53%4]) with mapi id 15.20.6631.042; Tue, 1 Aug 2023 02:54:00 +0000 From: "Wang, Fei W" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v2 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder Thread-Index: AQHZuSXdnnUmcc2/AUGAQwgZq5Sqi6/UYi+AgAAdyYCAAFSAgA== Date: Tue, 1 Aug 2023 02:54:00 +0000 Message-ID: References: <20230718031203.87803-1-fei.w.wang@intel.com> <20230718031203.87803-6-fei.w.wang@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.5-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR11MB5030:EE_|PH7PR11MB8569:EE_ x-ms-office365-filtering-correlation-id: 7cff5ea1-e2e4-4d80-1c7d-08db923a8f0b x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: bVqVKuSwA1Gb89jzbtTMBG3krXb3WZDyfqI3/c65WSmLMQVXgS9zsu06u3/xbvBumf/Ll4trPPt9K5xJNc/n0C/sUlxO7RWt53/pDdTwGRPBZhb6FYB46TT7M8LlrkMhTJXsTGbRVSZdsudxczctatIKrZt2+iZWoKv3wuGMDTk1PMJbQksSJrGwPqOPr+kwwt71NQK9yAXcQ97W0qHN9OA9HsCssSTxbSyictZ1c5/OjCnaiS6ZWsHkmpdDHAzfpCkUKi1KkOI5pcRxgqh1tlPY625+QKNRA+4uALqTpdKc+gdpQVd/D/0yMqCTmT9omyCXiNQyf8UCAWw+LzqfnjzQHT6CRi/36az0uMjCgV+3bYmlmICtC3QY+65spvmfztagdBrJHkxs6iYUW3vB4+cS1Ag8Ja2+ipvQ/VPQyYOPKw03xFOzp8RLea3SkUhjHrgCgTJu9fw41QwEKp/nC61mxXJFm7EN46ZHGlzEhBVEUMBv+r6/eobZnoULSkkyvToMgpsAnG4VwUbvD0dDx/ncqgq1YNC3ZSuUg9McwwyF4qvZBxb2B9pGmAR8m6ABW6A9kjl7bdtXCBw/PDpkqjWvUBTceNKGEd8ZRKFeWBYFEghMoUnvoGEM//HaKJ1kLb9O6WUv6YPQ1szySCeOWw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB5030.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(366004)(376002)(396003)(136003)(39860400002)(346002)(451199021)(6486002)(38070700005)(6512007)(86362001)(71200400001)(36756003)(2616005)(186003)(6506007)(83380400001)(26005)(53546011)(38100700002)(82960400001)(5660300002)(8676002)(91956017)(41300700001)(8936002)(76116006)(66946007)(6916009)(64756008)(66446008)(66556008)(66476007)(30864003)(316002)(122000001)(2906002)(478600001)(19627235002)(2004002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bkRlazRqUmxQMlJaY0haSERhb05BS2tycnQ4bFVIbFVPZ1FzK0Q3RXVuSnI2?= =?utf-8?B?V2EvMzV6dnhCNEdKUm5XU0Jidko1Sk1WVlNObjJXZmtOdW5pSGU3WW9Ucy8y?= =?utf-8?B?Nmt6NzBEV2twK0RVWURWTDBHYk85eVc2Q3VhaGJNVzlSc0JkMC9EakVNMjJG?= =?utf-8?B?TmFLc0ZKVzRlQ1hOMXlnYkhvaERGOUZhWVNPMlpxSWsrdThWZ1V2UmwrdkpC?= =?utf-8?B?TkIvR25URGl0bjRVTGJNcHJwZFpSV3FWZU1xTWF6OXR3Q0dBUXBnVkgzR0pT?= =?utf-8?B?Qjh2QUw2OFZmS2NwZVBlMWxvbFdya2tBQmxNbGcwQzEzdTVjRnZmekxmNkhz?= =?utf-8?B?MitybkZPaG1kdVR1ZjNrdDJnZ3BpUlArZVVyQ05TQ0d0eDBuejl5aVpEY1Vx?= =?utf-8?B?KzdqQ2hKcmdzYzYwbmJOK1lvM3UydlBpakFDY2RNSTFWOFVyTGpqdFVZYnhz?= =?utf-8?B?amVCMkVybWtsb0E0VlF3T2NaL3VKbU9rcjN4QXZ3SnhGNEVMY3Q2ZkYraXYw?= =?utf-8?B?N2lFT3lvNEVOTW41Y1ZzZkd4cFk4NFlqSGRDWkZsTndoK0xqZjhqRWVPaEZG?= =?utf-8?B?NzFNcTZDbHluM05WckJQZ01CNmRiNk9McTZEV01QVWx6L05BblRieWVPelNU?= =?utf-8?B?OVB0a2hRRjJDN2FJZDhIUjE4eGs4M1YrL2habnZiTFFRdWNvWlFGZDUxN3hm?= =?utf-8?B?YmhrRE5IL2NwcEhzWXorWTh0M3dFdDFHUlhvRUhldzlrbDFjL0cwZ0t5cThm?= =?utf-8?B?Ylhad0ZnbW80RktZa0NlWWJVR1FzN1BqZ01tWUpDK2VxckVkTWhRQ2lkT3N6?= =?utf-8?B?MllYT2Vrc1FNWS8yZEhsUUx0VS9xTTFsMUJ1WnoxZUVsWEVmMVZaSE0zVlBp?= =?utf-8?B?OGkzQ2JsaTljYVhUZER5RWRyaVc5ZStsSUpncmhrNi9qME80MFErUmozdTN4?= =?utf-8?B?WTZkL1RmVjJoazdKbmIwaVIxc2ozbGV5Nmd0bEhPdU93ekkrVlhRcDAwRHNV?= =?utf-8?B?Y3N1cy9Sb0Nsa0d1NWU0empyN1VtcWsweVdFaE9LalM5ZitsZS9wY3NCYTNE?= =?utf-8?B?d3dqVGFWK0hETFNlT3Fwa1BSeml2UmNsTTdiN3A5eUcxRmRvaEs2U2w0TmJy?= =?utf-8?B?Si9KSFdENnZsRm91ZXFoMEdXbHowWHhZSVFSNU1YRUcwRTZnajUzOHVKcFhX?= =?utf-8?B?VFNzLzBSQjBidGE3MDFjam55YkM4eHkxV1A5NE5SN2Mxb2hNdzNPQ2tjcmlE?= =?utf-8?B?WFhPdytvQlpqeklpeEJIRHp3aVdLNHFQRm11UzdNRXR4ZFc1ZDhqVVlRY0V5?= =?utf-8?B?eG4xR1FNZzAxYW1QdExWb05TOUZlRGVJV3FmUWE3akhhSWlYUXVReERiNm1Q?= =?utf-8?B?NjRQQWRRN1QxQkJBeEU3eFROdXg5cHpQWFgrSFRCbFlvalhQVHBXZXF1Z2Ux?= =?utf-8?B?cGV1d1E5dHZmL09QbURWR3F3MUUxUURaVFEreWI3UDhyMEt5MzVvUWtQbFg0?= =?utf-8?B?bEhrZE1yUXdpRk9qQUs0QnBjdVBvY3B6L3JxcENNR0xxc3Y2K0RlSHI4ZjJm?= =?utf-8?B?Zjh0R3Y1US9KYnE1K2pmT3pKWWJRNFQxNGpUd2VTbDlWZjdpSVphU0Zibmh2?= =?utf-8?B?R2tRZTF6THgxQmN2YTNyR2dpSFAyMERpZ1RQQThtWklmd01HWEw5Sm5tQTlj?= =?utf-8?B?d1UwaXg5UVI3ZW9WWlM0RUVEbEdKUnhyNmxyVEdNcGhMc3ZGRm0vWVloR3NS?= =?utf-8?B?RVJLZ3RDR0c5Tlo1LzZqVklMbDJoV3M2aWZVRkcwU1p1UVJqdE1ZNDU5RVJy?= =?utf-8?B?cmtHbTNxSDJOK2NNSmYvbWZBNFJ2VW5sSVdqaHN1dWpNMHpKTXArNmFDOFlP?= =?utf-8?B?Wi9RTVBBUG5ZcWppcmJWTlNnMFpjdmtPNE5aVjQzT1NjOUcwQWhDRE5jNm04?= =?utf-8?B?YithT0lwZU8wMnVSbkxYb09zckRkSzVDT3hIUDBhN21qQlMrUEIwc2JuYkcx?= =?utf-8?B?b3A4VWs2MnRGeklxLzh1cFZWbE1EbUtXcURXT1lsUVkwL1RVeVBLc2tCY1N0?= =?utf-8?B?T1ltSTVMWlY3d2FKVVR4Mk5CSVY5V1F1L0xBck12Qk9pL2FSNGphQmpuZStF?= =?utf-8?Q?mPywbfGQqROKuQ5u4eOVS1KDo?= Content-ID: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5030.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cff5ea1-e2e4-4d80-1c7d-08db923a8f0b X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Aug 2023 02:54:00.8258 (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: Hkh0p0y2FyEPCvlGzxlXtIVwfPlnbLHcLvcSMyG7fl+87khr+gvB2YVW6/IIHCi6uWLx5+COYgo6RXpkU3L4TA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB8569 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v2 6/6] lavc/vaapi_encode: Add VAAPI AV1 encoder X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gTW9uLCAyMDIzLTA3LTMxIGF0IDIyOjUxICswMTAwLCBOZWFsIEdvbXBhIHdyb3RlOg0KPiBP biBNb24sIEp1bCAzMSwgMjAyMyBhdCA5OjA04oCvUE0gTmVhbCBHb21wYSA8bmdvbXBhMTNAZ21h aWwuY29tPg0KPiB3cm90ZToNCj4gPiBPbiBUdWUsIEp1bCAxOCwgMjAyMyBhdCA0OjEz4oCvQU0g RmVpIFdhbmcNCj4gPiA8ZmVpLncud2FuZy1hdC1pbnRlbC5jb21AZmZtcGVnLm9yZz4gd3JvdGU6 DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBGZWkgV2FuZyA8ZmVpLncud2FuZ0BpbnRlbC5jb20+DQo+ ID4gPiAtLS0NCj4gPiA+IHVwZGF0ZQ0KPiA+ID4gMS4gc2V0IGNvbG9yX3JhbmdlIGluIHNlcXVl bmNlIGhlYWRlci4NCj4gPiA+IA0KPiA+ID4gIENoYW5nZWxvZyAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArDQo+ID4gPiAgY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsN Cj4gPiA+ICBkb2MvZW5jb2RlcnMudGV4aSAgICAgICAgICAgICB8ICAgMTMgKw0KPiA+ID4gIGxp YmF2Y29kZWMvTWFrZWZpbGUgICAgICAgICAgIHwgICAgMSArDQo+ID4gPiAgbGliYXZjb2RlYy9h bGxjb2RlY3MuYyAgICAgICAgfCAgICAxICsNCj4gPiA+ICBsaWJhdmNvZGVjL3ZhYXBpX2VuY29k ZS5jICAgICB8ICAxMjUgKysrLQ0KPiA+ID4gIGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmggICAg IHwgICAxMiArDQo+ID4gPiAgbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMgfCAxMjI5DQo+ ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiA+ICA4IGZpbGVzIGNo YW5nZWQsIDEzNjcgaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25zKC0pDQo+ID4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlX2F2MS5jDQo+ID4gPiANCj4gPiA+ IGRpZmYgLS1naXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cNCj4gPiA+IGluZGV4IDM4NzYwODI4 NDQuLjdhZTliODVkNTIgMTAwNjQ0DQo+ID4gPiAtLS0gYS9DaGFuZ2Vsb2cNCj4gPiA+ICsrKyBi L0NoYW5nZWxvZw0KPiA+ID4gQEAgLTI1LDYgKzI1LDcgQEAgdmVyc2lvbiA8bmV4dD46DQo+ID4g PiAgLSBSYXcgVlZDIGJpdHN0cmVhbSBwYXJzZXIsIG11eGVyIGFuZCBkZW11eGVyDQo+ID4gPiAg LSBCaXRzdHJlYW0gZmlsdGVyIGZvciBlZGl0aW5nIG1ldGFkYXRhIGluIFZWQyBzdHJlYW1zDQo+ ID4gPiAgLSBCaXRzdHJlYW0gZmlsdGVyIGZvciBjb252ZXJ0aW5nIFZWQyBmcm9tIE1QNCB0byBB bm5leCBCDQo+ID4gPiArLSBWQUFQSSBBVjEgZW5jb2Rlcg0KPiA+ID4gDQo+ID4gPiAgdmVyc2lv biA2LjA6DQo+ID4gPiAgLSBSYWRpYW5jZSBIRFIgaW1hZ2Ugc3VwcG9ydA0KPiA+ID4gZGlmZiAt LWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQ0KPiA+ID4gaW5kZXggYjAxOGFiZjEzOS4uZmJj NzI5YjVjNiAxMDA3NTUNCj4gPiA+IC0tLSBhL2NvbmZpZ3VyZQ0KPiA+ID4gKysrIGIvY29uZmln dXJlDQo+ID4gPiBAQCAtMzMyMyw2ICszMzIzLDggQEAgYXYxX3Fzdl9kZWNvZGVyX3NlbGVjdD0i cXN2ZGVjIg0KPiA+ID4gIGF2MV9xc3ZfZW5jb2Rlcl9zZWxlY3Q9InFzdmVuYyINCj4gPiA+ICBh djFfcXN2X2VuY29kZXJfZGVwcz0ibGlidnBsIg0KPiA+ID4gIGF2MV9hbWZfZW5jb2Rlcl9kZXBz PSJhbWYiDQo+ID4gPiArYXYxX3ZhYXBpX2VuY29kZXJfZGVwcz0iVkFFbmNQaWN0dXJlUGFyYW1l dGVyQnVmZmVyQVYxIg0KPiA+ID4gK2F2MV92YWFwaV9lbmNvZGVyX3NlbGVjdD0iY2JzX2F2MSB2 YWFwaV9lbmNvZGUiDQo+ID4gPiANCj4gPiA+ICAjIHBhcnNlcnMNCj4gPiA+ICBhYWNfcGFyc2Vy X3NlbGVjdD0iYWR0c19oZWFkZXIgbXBlZzRhdWRpbyINCj4gPiA+IEBAIC03MTA0LDYgKzcxMDYs NyBAQCBpZiBlbmFibGVkIHZhYXBpOyB0aGVuDQo+ID4gPiAgICAgIGNoZWNrX3R5cGUgInZhL3Zh LmggdmEvdmFfZW5jX2pwZWcuaCINCj4gPiA+ICJWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJK UEVHIg0KPiA+ID4gICAgICBjaGVja190eXBlICJ2YS92YS5oDQo+ID4gPiB2YS92YV9lbmNfdnA4 LmgiICAiVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyVlA4Ig0KPiA+ID4gICAgICBjaGVja190 eXBlICJ2YS92YS5oDQo+ID4gPiB2YS92YV9lbmNfdnA5LmgiICAiVkFFbmNQaWN0dXJlUGFyYW1l dGVyQnVmZmVyVlA5Ig0KPiA+ID4gKyAgICBjaGVja190eXBlICJ2YS92YS5oDQo+ID4gPiB2YS92 YV9lbmNfYXYxLmgiICAiVkFFbmNQaWN0dXJlUGFyYW1ldGVyQnVmZmVyQVYxIg0KPiA+ID4gIGZp DQo+ID4gPiANCj4gPiA+ICBpZiBlbmFibGVkX2FsbCBvcGVuY2wgbGliZHJtIDsgdGhlbg0KPiA+ ID4gZGlmZiAtLWdpdCBhL2RvYy9lbmNvZGVycy50ZXhpIGIvZG9jL2VuY29kZXJzLnRleGkNCj4g PiA+IGluZGV4IDI1ZDZiN2YwOWUuLmZiMzMxZWJkOGUgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kb2Mv ZW5jb2RlcnMudGV4aQ0KPiA+ID4gKysrIGIvZG9jL2VuY29kZXJzLnRleGkNCj4gPiA+IEBAIC0z OTkxLDYgKzM5OTEsMTkgQEAgQXZlcmFnZSB2YXJpYWJsZSBiaXRyYXRlLg0KPiA+ID4gIEVhY2gg ZW5jb2RlciBhbHNvIGhhcyBpdHMgb3duIHNwZWNpZmljIG9wdGlvbnM6DQo+ID4gPiAgQHRhYmxl IEBvcHRpb24NCj4gPiA+IA0KPiA+ID4gK0BpdGVtIGF2MV92YWFwaQ0KPiA+ID4gK0BvcHRpb257 cHJvZmlsZX0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX3Byb2ZpbGV9Lg0KPiA+ID4gK0Bv cHRpb257dGllcn0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7c2VxX3RpZXJ9Lg0KPiA+ID4gK0Bv cHRpb257bGV2ZWx9IHNldHMgdGhlIHZhbHVlIG9mIEBlbXBoe3NlcV9sZXZlbF9pZHh9Lg0KPiA+ ID4gKw0KPiA+ID4gK0B0YWJsZSBAb3B0aW9uDQo+ID4gPiArQGl0ZW0gdGlsZXMNCj4gPiA+ICtT ZXQgdGhlIG51bWJlciBvZiB0aWxlcyB0byBlbmNvZGUgdGhlIGlucHV0IHZpZGVvIHdpdGgsIGFz DQo+ID4gPiBjb2x1bW5zIHggcm93cy4NCj4gPiA+ICsoZGVmYXVsdCBpcyAxeDEpLg0KPiA+ID4g K0BpdGVtIHRpbGVfZ3JvdXBzDQo+ID4gPiArU2V0IHRpbGUgZ3JvdXBzIG51bWJlciAoZGVmYXVs dCBpcyAxKS4NCj4gPiA+ICtAZW5kIHRhYmxlDQo+ID4gPiArDQo+ID4gPiAgQGl0ZW0gaDI2NF92 YWFwaQ0KPiA+ID4gIEBvcHRpb257cHJvZmlsZX0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7cHJv ZmlsZV9pZGN9IGFuZCB0aGUNCj4gPiA+IEBlbXBoe2NvbnN0cmFpbnRfc2V0Kl9mbGFnfXMuDQo+ ID4gPiAgQG9wdGlvbntsZXZlbH0gc2V0cyB0aGUgdmFsdWUgb2YgQGVtcGh7bGV2ZWxfaWRjfS4N Cj4gPiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2VmaWxlIGIvbGliYXZjb2RlYy9NYWtl ZmlsZQ0KPiA+ID4gaW5kZXggM2NkNTk5N2U2NC4uZmUxZTZhYTk5ZCAxMDA2NDQNCj4gPiA+IC0t LSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUNCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvTWFrZWZpbGUN Cj4gPiA+IEBAIC0yNTksNiArMjU5LDcgQEAgT0JKUy0kKENPTkZJR19BVjFfTUVESUFDT0RFQ19E RUNPREVSKSAgKz0NCj4gPiA+IG1lZGlhY29kZWNkZWMubw0KPiA+ID4gIE9CSlMtJChDT05GSUdf QVYxX01FRElBQ09ERUNfRU5DT0RFUikgICs9IG1lZGlhY29kZWNlbmMubw0KPiA+ID4gIE9CSlMt JChDT05GSUdfQVYxX05WRU5DX0VOQ09ERVIpICAgICAgICs9IG52ZW5jX2F2MS5vIG52ZW5jLm8N Cj4gPiA+ICBPQkpTLSQoQ09ORklHX0FWMV9RU1ZfRU5DT0RFUikgICAgICAgICArPSBxc3ZlbmNf YXYxLm8NCj4gPiA+ICtPQkpTLSQoQ09ORklHX0FWMV9WQUFQSV9FTkNPREVSKSAgICAgICArPSB2 YWFwaV9lbmNvZGVfYXYxLm8NCj4gPiA+IGF2MV9wcm9maWxlX2xldmVsLm8NCj4gPiA+ICBPQkpT LSQoQ09ORklHX0FWUk5fREVDT0RFUikgICAgICAgICAgICArPSBhdnJuZGVjLm8NCj4gPiA+ICBP QkpTLSQoQ09ORklHX0FWUlBfREVDT0RFUikgICAgICAgICAgICArPSByMjEwZGVjLm8NCj4gPiA+ ICBPQkpTLSQoQ09ORklHX0FWUlBfRU5DT0RFUikgICAgICAgICAgICArPSByMjEwZW5jLm8NCj4g PiA+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxj b2RlY3MuYw0KPiA+ID4gaW5kZXggODc3NWQxNWE0Zi4uYzQzYzFkN2I0OCAxMDA2NDQNCj4gPiA+ IC0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMNCj4gPiA+ICsrKyBiL2xpYmF2Y29kZWMvYWxs Y29kZWNzLmMNCj4gPiA+IEBAIC04NDQsNiArODQ0LDcgQEAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfYXYxX252ZW5jX2VuY29kZXI7DQo+ID4gPiAgZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYx X3Fzdl9kZWNvZGVyOw0KPiA+ID4gIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2F2MV9xc3ZfZW5j b2RlcjsNCj4gPiA+ICBleHRlcm4gY29uc3QgRkZDb2RlYyBmZl9hdjFfYW1mX2VuY29kZXI7DQo+ ID4gPiArZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfYXYxX3ZhYXBpX2VuY29kZXI7DQo+ID4gPiAg ZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfbGlib3BlbmgyNjRfZW5jb2RlcjsNCj4gPiA+ICBleHRl cm4gY29uc3QgRkZDb2RlYyBmZl9saWJvcGVuaDI2NF9kZWNvZGVyOw0KPiA+ID4gIGV4dGVybiBj b25zdCBGRkNvZGVjIGZmX2gyNjRfYW1mX2VuY29kZXI7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy92YWFwaV9lbmNvZGUuYw0KPiA+ID4gYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZS5j DQo+ID4gPiBpbmRleCAyNjA0ZjEyYjllLi4yOTA3ZTE1OWZiIDEwMDY0NA0KPiA+ID4gLS0tIGEv bGliYXZjb2RlYy92YWFwaV9lbmNvZGUuYw0KPiA+ID4gKysrIGIvbGliYXZjb2RlYy92YWFwaV9l bmNvZGUuYw0KPiA+ID4gQEAgLTY2OSw2ICs2NjksMTUgQEAgc3RhdGljIGludA0KPiA+ID4gdmFh cGlfZW5jb2RlX3NldF9vdXRwdXRfdGltZXN0YW1wKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4g PiA+ICB7DQo+ID4gPiAgICAgIFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZf ZGF0YTsNCj4gPiA+IA0KPiA+ID4gKyAgICAvLyBBVjEgcGFja3MgUCBmcmFtZSBhbmQgbmV4dCBC IGZyYW1lIGludG8gb25lIHBrdCwgYW5kIHVzZXMNCj4gPiA+IHRoZSBvdGhlcg0KPiA+ID4gKyAg ICAvLyByZXBlYXQgZnJhbWUgaGVhZGVyIHBrdCBhdCB0aGUgZGlzcGxheSBvcmRlciBwb3NpdGlv biBvZg0KPiA+ID4gdGhlIFAgZnJhbWUNCj4gPiA+ICsgICAgLy8gdG8gaW5kaWNhdGUgaXRzIGZy YW1lIGluZGV4LiBFYWNoIGZyYW1lIGhhcyBhDQo+ID4gPiBjb3JyZXNwb25kaW5nIHBrdCBpbiBp dHMNCj4gPiA+ICsgICAgLy8gZGlzcGxheSBvcmRlciBwb3NpdGlvbi4gU28gZG9uJ3QgbmVlZCB0 byBjb25zaWRlciBkZWxheQ0KPiA+ID4gZm9yIEFWMSB0aW1lc3RhbXAuDQo+ID4gPiArICAgIGlm IChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7DQo+ID4gPiArICAgICAgICBw a3QtPmR0cyA9IHBrdC0+cHRzIC0gY3R4LT5kdHNfcHRzX2RpZmY7DQo+ID4gPiArICAgICAgICBy ZXR1cm4gMDsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gICAgICBpZiAoY3R4LT5vdXRw dXRfZGVsYXkgPT0gMCkgew0KPiA+ID4gICAgICAgICAgcGt0LT5kdHMgPSBwa3QtPnB0czsNCj4g PiA+ICAgICAgfSBlbHNlIGlmIChwaWMtPmVuY29kZV9vcmRlciA8IGN0eC0+ZGVjb2RlX2RlbGF5 KSB7DQo+ID4gPiBAQCAtNjg5LDkgKzY5OCwxMCBAQCBzdGF0aWMgaW50DQo+ID4gPiB2YWFwaV9l bmNvZGVfb3V0cHV0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4gPiA+ICB7DQo+ID4gPiAgICAg IFZBQVBJRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ICAgICAg VkFDb2RlZEJ1ZmZlclNlZ21lbnQgKmJ1Zl9saXN0LCAqYnVmOw0KPiA+ID4gLSAgICBWQVN0YXR1 cyB2YXM7DQo+ID4gPiArICAgIEFWUGFja2V0ICpwa3RfcHRyID0gcGt0Ow0KPiA+ID4gICAgICBp bnQgdG90YWxfc2l6ZSA9IDA7DQo+ID4gPiAgICAgIHVpbnQ4X3QgKnB0cjsNCj4gPiA+ICsgICAg VkFTdGF0dXMgdmFzOw0KPiA+ID4gICAgICBpbnQgZXJyOw0KPiA+ID4gDQo+ID4gPiAgICAgIGVy ciA9IHZhYXBpX2VuY29kZV93YWl0KGF2Y3R4LCBwaWMpOw0KPiA+ID4gQEAgLTcxMSwxMSArNzIx LDUyIEBAIHN0YXRpYyBpbnQNCj4gPiA+IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LA0KPiA+ID4gICAgICBmb3IgKGJ1ZiA9IGJ1Zl9saXN0OyBidWY7IGJ1ZiA9IGJ1 Zi0+bmV4dCkNCj4gPiA+ICAgICAgICAgIHRvdGFsX3NpemUgKz0gYnVmLT5zaXplOw0KPiA+ID4g DQo+ID4gPiAtICAgIGVyciA9IGZmX2dldF9lbmNvZGVfYnVmZmVyKGF2Y3R4LCBwa3QsIHRvdGFs X3NpemUsIDApOw0KPiA+ID4gLSAgICBwdHIgPSBwa3QtPmRhdGE7DQo+ID4gPiArICAgIC8qKiBy ZXBhY2sgYXYxIGNvZGVkIGZyYW1lIGZvciBub3QgZGlzcGxheSBhbmQgcmVwZWF0IGZyYW1lcw0K PiA+ID4gKi8NCj4gPiA+ICsgICAgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9B VjEpIHsNCj4gPiA+ICsgICAgICAgIGludCBkaXNwbGF5X2ZyYW1lID0gcGljLT5kaXNwbGF5X29y ZGVyIDw9IHBpYy0NCj4gPiA+ID5lbmNvZGVfb3JkZXI7DQo+ID4gPiANCj4gPiA+IC0gICAgaWYg KGVyciA8IDApDQo+ID4gPiAtICAgICAgICBnb3RvIGZhaWxfbWFwcGVkOw0KPiA+ID4gKyAgICAg ICAgaWYgKGRpc3BsYXlfZnJhbWUpIHsNCj4gPiA+ICsgICAgICAgICAgICB0b3RhbF9zaXplICs9 IGN0eC0+aGVhZGVyX2RhdGFfc2l6ZTsNCj4gPiA+ICsgICAgICAgICAgICBlcnIgPSBmZl9nZXRf ZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCB0b3RhbF9zaXplLA0KPiA+ID4gMCk7DQo+ID4gPiAr ICAgICAgICAgICAgaWYgKGVyciA8IDApDQo+ID4gPiArICAgICAgICAgICAgICAgIGdvdG8gZmFp bF9tYXBwZWQ7DQo+ID4gPiArICAgICAgICAgICAgcHRyID0gcGt0LT5kYXRhOw0KPiA+ID4gKw0K PiA+ID4gKyAgICAgICAgICAgIGlmIChjdHgtPmhlYWRlcl9kYXRhX3NpemUpIHsNCj4gPiA+ICsg ICAgICAgICAgICAgICAgbWVtY3B5KHB0ciwgY3R4LT5oZWFkZXJfZGF0YSwgY3R4LQ0KPiA+ID4g PmhlYWRlcl9kYXRhX3NpemUpOw0KPiA+ID4gKyAgICAgICAgICAgICAgICBwdHIgKz0gY3R4LT5o ZWFkZXJfZGF0YV9zaXplOw0KPiA+ID4gKyAgICAgICAgICAgICAgICBjdHgtPmhlYWRlcl9kYXRh X3NpemUgPSAwOw0KPiA+ID4gKyAgICAgICAgICAgIH0NCj4gPiA+ICsgICAgICAgIH0gZWxzZSB7 DQo+ID4gPiArICAgICAgICAgICAgY3R4LT5oZWFkZXJfZGF0YSA9IGF2X3JlYWxsb2MoY3R4LT5o ZWFkZXJfZGF0YSwNCj4gPiA+IHRvdGFsX3NpemUpOw0KPiA+ID4gKyAgICAgICAgICAgIGlmICgh Y3R4LT5oZWFkZXJfZGF0YSkgew0KPiA+ID4gKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT01FTSk7DQo+ID4gPiArICAgICAgICAgICAgICAgIGdvdG8gZmFpbF9tYXBwZWQ7DQo+ID4g PiArICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgICAgIHB0ciA9IGN0eC0+aGVhZGVyX2Rh dGE7DQo+ID4gPiArICAgICAgICAgICAgY3R4LT5oZWFkZXJfZGF0YV9zaXplID0gdG90YWxfc2l6 ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICBpZiAocGljLT50YWlsX3NpemUpIHsNCj4g PiA+ICsgICAgICAgICAgICAgICAgaWYgKGN0eC0+dGFpbF9wa3QtPnNpemUpIHsNCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1IoQVZFUlJPUl9CVUcpOw0KPiA+ID4gKyAg ICAgICAgICAgICAgICAgICAgZ290byBmYWlsX21hcHBlZDsNCj4gPiA+ICsgICAgICAgICAgICAg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgICBlcnIgPSBmZl9nZXRfZW5jb2Rl X2J1ZmZlcihhdmN0eCwgY3R4LT50YWlsX3BrdCwgDQo+ID4gPiBwaWMtPnRhaWxfc2l6ZSwgMCk7 DQo+ID4gPiArICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQ0KPiA+ID4gKyAgICAgICAgICAg ICAgICAgICAgZ290byBmYWlsX21hcHBlZDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgICAg ICAgbWVtY3B5KGN0eC0+dGFpbF9wa3QtPmRhdGEsIHBpYy0+dGFpbF9kYXRhLCBwaWMtDQo+ID4g PiA+dGFpbF9zaXplKTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgcGt0X3B0ciA9IGN0eC0+dGFp bF9wa3Q7DQo+ID4gPiArICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAg ICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgZXJyID0gZmZfZ2V0X2VuY29kZV9idWZmZXIoYXZj dHgsIHBrdCwgdG90YWxfc2l6ZSwgMCk7DQo+ID4gPiArICAgICAgICBwdHIgPSBwa3QtPmRhdGE7 DQo+ID4gPiArDQo+ID4gPiArICAgICAgICBpZiAoZXJyIDwgMCkNCj4gPiA+ICsgICAgICAgICAg ICBnb3RvIGZhaWxfbWFwcGVkOw0KPiA+ID4gKyAgICB9DQo+ID4gPiANCj4gPiA+ICAgICAgZm9y IChidWYgPSBidWZfbGlzdDsgYnVmOyBidWYgPSBidWYtPm5leHQpIHsNCj4gPiA+ICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiT3V0cHV0IGJ1ZmZlcjogJXUgYnl0ZXMgIg0K PiA+ID4gQEAgLTcyNiwxMCArNzc3LDEwIEBAIHN0YXRpYyBpbnQNCj4gPiA+IHZhYXBpX2VuY29k ZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPiA+ID4gICAgICB9DQo+ID4gPiANCj4g PiA+ICAgICAgaWYgKHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVfSURSKQ0KPiA+ID4gLSAgICAg ICAgcGt0LT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVk7DQo+ID4gPiArICAgICAgICBwa3RfcHRy LT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVk7DQo+ID4gPiANCj4gPiA+IC0gICAgcGt0LT5wdHMg PSBwaWMtPnB0czsNCj4gPiA+IC0gICAgcGt0LT5kdXJhdGlvbiA9IHBpYy0+ZHVyYXRpb247DQo+ ID4gPiArICAgIHBrdF9wdHItPnB0cyA9IHBpYy0+cHRzOw0KPiA+ID4gKyAgICBwa3RfcHRyLT5k dXJhdGlvbiA9IHBpYy0+ZHVyYXRpb247DQo+ID4gPiANCj4gPiA+ICAgICAgdmFzID0gdmFVbm1h cEJ1ZmZlcihjdHgtPmh3Y3R4LT5kaXNwbGF5LCBwaWMtDQo+ID4gPiA+b3V0cHV0X2J1ZmZlcik7 DQo+ID4gPiAgICAgIGlmICh2YXMgIT0gVkFfU1RBVFVTX1NVQ0NFU1MpIHsNCj4gPiA+IEBAIC03 NDIsOCArNzkzLDggQEAgc3RhdGljIGludCB2YWFwaV9lbmNvZGVfb3V0cHV0KEFWQ29kZWNDb250 ZXh0DQo+ID4gPiAqYXZjdHgsDQo+ID4gPiAgICAgIC8vIGZvciBuby1kZWxheSBlbmNvZGVycyB0 aGlzIGlzIGhhbmRsZWQgaW4gZ2VuZXJpYyBjb2RlYw0KPiA+ID4gICAgICBpZiAoYXZjdHgtPmNv ZGVjLT5jYXBhYmlsaXRpZXMgJiBBVl9DT0RFQ19DQVBfREVMQVkgJiYNCj4gPiA+ICAgICAgICAg IGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfQ09QWV9PUEFRVUUpIHsNCj4gPiA+IC0gICAg ICAgIHBrdC0+b3BhcXVlICAgICA9IHBpYy0+b3BhcXVlOw0KPiA+ID4gLSAgICAgICAgcGt0LT5v cGFxdWVfcmVmID0gcGljLT5vcGFxdWVfcmVmOw0KPiA+ID4gKyAgICAgICAgcGt0X3B0ci0+b3Bh cXVlICAgICA9IHBpYy0+b3BhcXVlOw0KPiA+ID4gKyAgICAgICAgcGt0X3B0ci0+b3BhcXVlX3Jl ZiA9IHBpYy0+b3BhcXVlX3JlZjsNCj4gPiA+ICAgICAgICAgIHBpYy0+b3BhcXVlX3JlZiA9IE5V TEw7DQo+ID4gPiAgICAgIH0NCj4gPiA+IA0KPiA+ID4gQEAgLTc1Miw2ICs4MDMsOSBAQCBzdGF0 aWMgaW50IHZhYXBpX2VuY29kZV9vdXRwdXQoQVZDb2RlY0NvbnRleHQNCj4gPiA+ICphdmN0eCwN Cj4gPiA+IA0KPiA+ID4gICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBy ZWFkIGZvciBwaWMNCj4gPiA+ICUiUFJJZDY0Ii8lIlBSSWQ2NCIuXG4iLA0KPiA+ID4gICAgICAg ICAgICAgcGljLT5kaXNwbGF5X29yZGVyLCBwaWMtPmVuY29kZV9vcmRlcik7DQo+ID4gPiArDQo+ ID4gPiArICAgIHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3RpbWVzdGFtcChhdmN0eCwgcGljLCBw a3RfcHRyKTsNCj4gPiA+ICsNCj4gPiA+ICAgICAgcmV0dXJuIDA7DQo+ID4gPiANCj4gPiA+ICBm YWlsX21hcHBlZDoNCj4gPiA+IEBAIC0xMTI4LDkgKzExODIsMTkgQEAgc3RhdGljIGludA0KPiA+ ID4gdmFhcGlfZW5jb2RlX3BpY2tfbmV4dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+ID4gPiAN Cj4gPiA+ICAgICAgdmFhcGlfZW5jb2RlX2FkZF9yZWYoYXZjdHgsIHBpYywgcGljLCAwLCAxLCAw KTsNCj4gPiA+ICAgICAgaWYgKHBpYy0+dHlwZSAhPSBQSUNUVVJFX1RZUEVfSURSKSB7DQo+ID4g PiAtICAgICAgICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBzdGFydCwNCj4gPiA+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBQSUNUVVJFX1RZUEVf UCwNCj4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJfY291bnRlciA+IDAsIDAp Ow0KPiA+ID4gKyAgICAgICAgLy8gVE9ETzogYXBwbHkgYm90aCBwcmV2aW91cyBhbmQgZm9yd2Fy ZCBtdWx0aSByZWZlcmVuY2UNCj4gPiA+IGZvciBhbGwgdmFhcGkgZW5jb2RlcnMuDQo+ID4gPiAr ICAgICAgICAvLyBBbmQgTDAvTDEgcmVmZXJlbmNlIGZyYW1lIG51bWJlciBjYW4gYmUgc2V0DQo+ ID4gPiBkeW5hbWljYWxseSB0aHJvdWdoIHF1ZXJ5DQo+ID4gPiArICAgICAgICAvLyBWQUNvbmZp Z0F0dHJpYkVuY01heFJlZkZyYW1lcyBhdHRyaWJ1dGUuDQo+ID4gPiArICAgICAgICBpZiAoYXZj dHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSkgew0KPiA+ID4gKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBjdHgtPm5iX25leHRfcHJldjsgaSsrKQ0KPiA+ID4gKyAgICAgICAgICAg ICAgICB2YWFwaV9lbmNvZGVfYWRkX3JlZihhdmN0eCwgcGljLCBjdHgtDQo+ID4gPiA+bmV4dF9w cmV2W2ldLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMt PnR5cGUgPT0NCj4gPiA+IFBJQ1RVUkVfVFlQRV9QLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBiX2NvdW50ZXIgPiAwLCAwKTsNCj4gPiA+ICsgICAgICAgIH0g ZWxzZQ0KPiA+ID4gKyAgICAgICAgICAgIHZhYXBpX2VuY29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMs IHN0YXJ0LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlw ZSA9PSBQSUNUVVJFX1RZUEVfUCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiX2NvdW50ZXIgPiAwLCAwKTsNCj4gPiA+ICsNCj4gPiA+ICAgICAgICAgIHZhYXBpX2Vu Y29kZV9hZGRfcmVmKGF2Y3R4LCBwaWMsIGN0eC0+bmV4dF9wcmV2W2N0eC0NCj4gPiA+ID5uYl9u ZXh0X3ByZXYgLSAxXSwgMCwgMCwgMSk7DQo+ID4gPiAgICAgIH0NCj4gPiA+IA0KPiA+ID4gQEAg LTEyOTIsNiArMTM1NiwxOSBAQCBpbnQNCj4gPiA+IGZmX3ZhYXBpX2VuY29kZV9yZWNlaXZlX3Bh Y2tldChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0DQo+ID4gPiAqcGt0KQ0KPiA+ID4g ICAgICBBVkZyYW1lICpmcmFtZSA9IGN0eC0+ZnJhbWU7DQo+ID4gPiAgICAgIGludCBlcnI7DQo+ ID4gPiANCj4gPiA+ICtzdGFydDoNCj4gPiA+ICsgICAgLyoqIGlmIG5vIEIgZnJhbWUgYmVmb3Jl IHJlcGVhdCBQIGZyYW1lLCBzZW50IHJlcGVhdCBQIGZyYW1lDQo+ID4gPiBvdXQuICovDQo+ID4g PiArICAgIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxICYmIGN0eC0+dGFp bF9wa3QtDQo+ID4gPiA+c2l6ZSkgew0KPiA+ID4gKyAgICAgICAgZm9yIChWQUFQSUVuY29kZVBp Y3R1cmUgKnRtcCA9IGN0eC0+cGljX3N0YXJ0OyB0bXA7IHRtcA0KPiA+ID4gPSB0bXAtPm5leHQp IHsNCj4gPiA+ICsgICAgICAgICAgICBpZiAodG1wLT50eXBlID09IFBJQ1RVUkVfVFlQRV9CICYm IHRtcC0+cHRzIDwgY3R4LQ0KPiA+ID4gPnRhaWxfcGt0LT5wdHMpDQo+ID4gPiArICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICAgICAgICAgIGVsc2UgaWYgKCF0bXAtPm5leHQpIHsN Cj4gPiA+ICsgICAgICAgICAgICAgICAgYXZfcGFja2V0X21vdmVfcmVmKHBrdCwgY3R4LT50YWls X3BrdCk7DQo+ID4gPiArICAgICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiA+ID4gKyAgICAgICAg ICAgIH0NCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gICAg ICBlcnIgPSBmZl9lbmNvZGVfZ2V0X2ZyYW1lKGF2Y3R4LCBmcmFtZSk7DQo+ID4gPiAgICAgIGlm IChlcnIgPCAwICYmIGVyciAhPSBBVkVSUk9SX0VPRikNCj4gPiA+ICAgICAgICAgIHJldHVybiBl cnI7DQo+ID4gPiBAQCAtMTM1NiwxNyArMTQzMywyMSBAQCBpbnQNCj4gPiA+IGZmX3ZhYXBpX2Vu Y29kZV9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0DQo+ID4g PiAqcGt0KQ0KPiA+ID4gICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiA+ICAgICAgfQ0KPiA+ID4g DQo+ID4gPiAtICAgIHZhYXBpX2VuY29kZV9zZXRfb3V0cHV0X3RpbWVzdGFtcChhdmN0eCwgcGlj LCBwa3QpOw0KPiA+ID4gLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIk91dHB1dCBw YWNrZXQ6IHB0cyAlIlBSSWQ2NCIsDQo+ID4gPiBkdHMgJSJQUklkNjQiLCAiDQo+ID4gPiAtICAg ICAgICAgICAic2l6ZSAldSBieXRlcy5cbiIsIHBrdC0+cHRzLCBwa3QtPmR0cywgcGt0LT5zaXpl KTsNCj4gPiA+IC0NCj4gPiA+ICAgICAgY3R4LT5vdXRwdXRfb3JkZXIgPSBwaWMtPmVuY29kZV9v cmRlcjsNCj4gPiA+ICAgICAgdmFhcGlfZW5jb2RlX2NsZWFyX29sZChhdmN0eCk7DQo+ID4gPiAN Cj4gPiA+ICsgICAgLyoqIGxvb3AgdG8gZ2V0IGFuIGF2YWlsYWJsZSBwa3QgaW4gZW5jb2RlciBm bHVzaGluZy4gKi8NCj4gPiA+ICsgICAgaWYgKGN0eC0+ZW5kX29mX3N0cmVhbSAmJiAhcGt0LT5z aXplKQ0KPiA+ID4gKyAgICAgICAgZ290byBzdGFydDsNCj4gPiA+ICsNCj4gPiA+ICtlbmQ6DQo+ ID4gPiArICAgIGlmIChwa3QtPnNpemUpDQo+ID4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19ERUJVRywgIk91dHB1dCBwYWNrZXQ6IHB0cw0KPiA+ID4gJSJQUklkNjQiLCBkdHMgJSJQ UklkNjQiLCAiDQo+ID4gPiArICAgICAgICAgICAgICAgInNpemUgJXUgYnl0ZXMuXG4iLCBwa3Qt PnB0cywgcGt0LT5kdHMsIHBrdC0NCj4gPiA+ID5zaXplKTsNCj4gPiA+ICsNCj4gPiA+ICAgICAg cmV0dXJuIDA7DQo+ID4gPiAgfQ0KPiA+ID4gDQo+ID4gPiAtDQo+ID4gPiAgc3RhdGljIGF2X2Nv bGQgdm9pZCB2YWFwaV9lbmNvZGVfYWRkX2dsb2JhbF9wYXJhbShBVkNvZGVjQ29udGV4dA0KPiA+ ID4gKmF2Y3R4LCBpbnQgdHlwZSwNCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlciwNCj4gPiA+IHNpemVfdCBzaXplKQ0K PiA+ID4gIHsNCj4gPiA+IEBAIC0yNjY3LDYgKzI3NDgsMTIgQEAgYXZfY29sZCBpbnQNCj4gPiA+ IGZmX3ZhYXBpX2VuY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCj4gPiA+ICAgICAg Y3R4LT5kZXZpY2UgPSAoQVZIV0RldmljZUNvbnRleHQqKWN0eC0+ZGV2aWNlX3JlZi0+ZGF0YTsN Cj4gPiA+ICAgICAgY3R4LT5od2N0eCA9IGN0eC0+ZGV2aWNlLT5od2N0eDsNCj4gPiA+IA0KPiA+ ID4gKyAgICBjdHgtPnRhaWxfcGt0ID0gYXZfcGFja2V0X2FsbG9jKCk7DQo+ID4gPiArICAgIGlm ICghY3R4LT50YWlsX3BrdCkgew0KPiA+ID4gKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0p Ow0KPiA+ID4gKyAgICAgICAgZ290byBmYWlsOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4g PiAgICAgIGVyciA9IHZhYXBpX2VuY29kZV9wcm9maWxlX2VudHJ5cG9pbnQoYXZjdHgpOw0KPiA+ ID4gICAgICBpZiAoZXJyIDwgMCkNCj4gPiA+ICAgICAgICAgIGdvdG8gZmFpbDsNCj4gPiA+IEBA IC0yODU5LDkgKzI5NDYsMTEgQEAgYXZfY29sZCBpbnQNCj4gPiA+IGZmX3ZhYXBpX2VuY29kZV9j bG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ID4gPiAgICAgIH0NCj4gPiA+IA0KPiA+ID4g ICAgICBhdl9mcmFtZV9mcmVlKCZjdHgtPmZyYW1lKTsNCj4gPiA+ICsgICAgYXZfcGFja2V0X2Zy ZWUoJmN0eC0+dGFpbF9wa3QpOw0KPiA+ID4gDQo+ID4gPiAgICAgIGF2X2ZyZWVwKCZjdHgtPmNv ZGVjX3NlcXVlbmNlX3BhcmFtcyk7DQo+ID4gPiAgICAgIGF2X2ZyZWVwKCZjdHgtPmNvZGVjX3Bp Y3R1cmVfcGFyYW1zKTsNCj4gPiA+ICsgICAgYXZfZnJlZXAoJmN0eC0+aGVhZGVyX2RhdGEpOw0K PiA+ID4gICAgICBhdl9maWZvX2ZyZWVwMigmY3R4LT5lbmNvZGVfZmlmbyk7DQo+ID4gPiANCj4g PiA+ICAgICAgYXZfYnVmZmVyX3VucmVmKCZjdHgtPnJlY29uX2ZyYW1lc19yZWYpOw0KPiA+ID4g ZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgNCj4gPiA+IGIvbGliYXZjb2Rl Yy92YWFwaV9lbmNvZGUuaA0KPiA+ID4gaW5kZXggZDU0NTJhMzdiMy4uMDNkZjhkNmQ0NiAxMDA2 NDQNCj4gPiA+IC0tLSBhL2xpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgNCj4gPiA+ICsrKyBiL2xp YmF2Y29kZWMvdmFhcGlfZW5jb2RlLmgNCj4gPiA+IEBAIC0xMzMsNiArMTMzLDExIEBAIHR5cGVk ZWYgc3RydWN0IFZBQVBJRW5jb2RlUGljdHVyZSB7DQo+ID4gPiANCj4gPiA+ICAgICAgaW50ICAg ICAgICAgIG5iX3NsaWNlczsNCj4gPiA+ICAgICAgVkFBUElFbmNvZGVTbGljZSAqc2xpY2VzOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAvKiogVGFpbCBkYXRhIG9mIGN1cnJlbnQgcGljLCB1c2VkIG9u bHkgZm9yIHJlcGVhdCBoZWFkZXIgb2YNCj4gPiA+IEFWMS4gKi8NCj4gPiA+ICsgICAgY2hhciB0 YWlsX2RhdGFbTUFYX1BBUkFNX0JVRkZFUl9TSVpFXTsNCj4gPiA+ICsgICAgLyoqIEJ5dGUgbGVu Z3RoIG9mIHRhaWxfZGF0YS4gKi8NCj4gPiA+ICsgICAgc2l6ZV90IHRhaWxfc2l6ZTsNCj4gPiA+ ICB9IFZBQVBJRW5jb2RlUGljdHVyZTsNCj4gPiA+IA0KPiA+ID4gIHR5cGVkZWYgc3RydWN0IFZB QVBJRW5jb2RlUHJvZmlsZSB7DQo+ID4gPiBAQCAtMzY3LDYgKzM3MiwxMyBAQCB0eXBlZGVmIHN0 cnVjdCBWQUFQSUVuY29kZUNvbnRleHQgew0KPiA+ID4gICAgICBBVkZpZm8gICAgICAgICAgKmVu Y29kZV9maWZvOw0KPiA+ID4gICAgICAvLyBNYXggbnVtYmVyIG9mIGZyYW1lIGJ1ZmZlcmVkIGlu IGVuY29kZXIuDQo+ID4gPiAgICAgIGludCAgICAgICAgICAgICBhc3luY19kZXB0aDsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgLyoqIEhlYWQgZGF0YSBmb3IgY3VycmVudCBvdXRwdXQgcGt0LCB1c2Vk IG9ubHkgZm9yIEFWMS4gKi8NCj4gPiA+ICsgICAgdm9pZCAgKmhlYWRlcl9kYXRhOw0KPiA+ID4g KyAgICBzaXplX3QgaGVhZGVyX2RhdGFfc2l6ZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoqIFN0 b3JlIGF2MSByZXBlYXQgZnJhbWUgaGVhZGVyIHBrdC4gKi8NCj4gPiA+ICsgICAgQVZQYWNrZXQg KnRhaWxfcGt0Ow0KPiA+ID4gIH0gVkFBUElFbmNvZGVDb250ZXh0Ow0KPiA+ID4gDQo+ID4gPiAg ZW51bSB7DQo+ID4gPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMN Cj4gPiA+IGIvbGliYXZjb2RlYy92YWFwaV9lbmNvZGVfYXYxLmMNCj4gPiA+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+ID4gPiBpbmRleCAwMDAwMDAwMDAwLi43NzhjNWIzNWM3DQo+ID4gPiAtLS0g L2Rldi9udWxsDQo+ID4gPiArKysgYi9saWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9hdjEuYw0KPiA+ ID4gQEAgLTAsMCArMSwxMjI5IEBADQo+ID4gPiArLyoNCj4gPiA+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMjMgSW50ZWwgQ29ycG9yYXRpb24NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCj4gPiA+ICsgKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ID4g PiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyDQo+ID4gPiArICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyDQo+ID4gPiB2ZXJzaW9uLg0KPiA+ID4gKyAqDQo+ID4gPiAr ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsDQo+ID4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkNCj4gPiA+IG9mDQo+ID4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KPiA+ID4gR05VDQo+ ID4gPiArICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4N Cj4gPiA+ICsgKg0KPiA+ID4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbA0KPiA+ID4gUHVibGljDQo+ID4gPiArICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPiA+ ID4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUENCj4gPiA+IDAyMTEwLTEzMDEgVVNBDQo+ID4gPiArICovDQo+ID4gPiArDQo+ ID4gPiArI2luY2x1ZGUgPHZhL3ZhLmg+DQo+ID4gPiArI2luY2x1ZGUgPHZhL3ZhX2VuY19hdjEu aD4NCj4gPiA+ICsNCj4gPiA+ICsjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCINCj4gPiA+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIg0KPiA+ID4gKw0KPiA+ID4gKyNpbmNsdWRlICJj YnNfYXYxLmgiDQo+ID4gPiArI2luY2x1ZGUgInB1dF9iaXRzLmgiDQo+ID4gPiArI2luY2x1ZGUg ImNvZGVjX2ludGVybmFsLmgiDQo+ID4gPiArI2luY2x1ZGUgImF2MV9wcm9maWxlX2xldmVsLmgi DQo+ID4gPiArI2luY2x1ZGUgInZhYXBpX2VuY29kZS5oIg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZp bmUgQVYxX01BWF9RVUFOVCAyNTUNCj4gPiA+ICsNCj4gPiA+ICt0eXBlZGVmIHN0cnVjdCBWQUFQ SUVuY29kZUFWMVBpY3R1cmUgew0KPiA+ID4gKyAgICBpbnQ2NF90IGxhc3RfaWRyX2ZyYW1lOw0K PiA+ID4gKyAgICBpbnQgc2xvdDsNCj4gPiA+ICt9IFZBQVBJRW5jb2RlQVYxUGljdHVyZTsNCj4g PiA+ICsNCj4gPiA+ICt0eXBlZGVmIHN0cnVjdCBWQUFQSUVuY29kZUFWMUNvbnRleHQgew0KPiA+ ID4gKyAgICBWQUFQSUVuY29kZUNvbnRleHQgY29tbW9uOw0KPiA+ID4gKyAgICBBVjFSYXdPQlUg c2g7IC8qKjwgc2VxdWVuY2UgaGVhZGVyLiovDQo+ID4gPiArICAgIEFWMVJhd09CVSBmaDsgLyoq PCBmcmFtZSBoZWFkZXIuKi8NCj4gPiA+ICsgICAgQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjYmM7 DQo+ID4gPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgY3VycmVudF9vYnU7DQo+ID4gPiAr ICAgIFZBQ29uZmlnQXR0cmliVmFsRW5jQVYxIGF0dHI7DQo+ID4gPiArICAgIFZBQ29uZmlnQXR0 cmliVmFsRW5jQVYxRXh0MSBhdHRyX2V4dDE7DQo+ID4gPiArICAgIFZBQ29uZmlnQXR0cmliVmFs RW5jQVYxRXh0MiBhdHRyX2V4dDI7DQo+ID4gPiArDQo+ID4gPiArICAgIGNoYXIgc2hfZGF0YVtN QVhfUEFSQU1fQlVGRkVSX1NJWkVdOyAvKio8IGNvZGVkIHNlcXVlbmNlDQo+ID4gPiBoZWFkZXIg ZGF0YS4gKi8NCj4gPiA+ICsgICAgc2l6ZV90IHNoX2RhdGFfbGVuOyAvKio8IGJpdCBsZW5ndGgg b2Ygc2hfZGF0YS4gKi8NCj4gPiA+ICsgICAgY2hhciBmaF9kYXRhW01BWF9QQVJBTV9CVUZGRVJf U0laRV07IC8qKjwgY29kZWQgZnJhbWUgaGVhZGVyDQo+ID4gPiBkYXRhLiAqLw0KPiA+ID4gKyAg ICBzaXplX3QgZmhfZGF0YV9sZW47IC8qKjwgYml0IGxlbmd0aCBvZiBmaF9kYXRhLiAqLw0KPiA+ ID4gKw0KPiA+ID4gKyAgICB1aW50OF90IHVuaWZvcm1fdGlsZTsNCj4gPiA+ICsgICAgdWludDhf dCB1c2VfMTI4eDEyOF9zdXBlcmJsb2NrOw0KPiA+ID4gKyAgICBpbnQgc2JfY29sczsNCj4gPiA+ ICsgICAgaW50IHNiX3Jvd3M7DQo+ID4gPiArICAgIGludCB0aWxlX2NvbHNfbG9nMjsNCj4gPiA+ ICsgICAgaW50IHRpbGVfcm93c19sb2cyOw0KPiA+ID4gKyAgICBpbnQgbWF4X3RpbGVfd2lkdGhf c2I7DQo+ID4gPiArICAgIGludCBtYXhfdGlsZV9oZWlnaHRfc2I7DQo+ID4gPiArICAgIHVpbnQ4 X3Qgd2lkdGhfaW5fc2JzX21pbnVzXzFbQVYxX01BWF9USUxFX0NPTFNdOw0KPiA+ID4gKyAgICB1 aW50OF90IGhlaWdodF9pbl9zYnNfbWludXNfMVtBVjFfTUFYX1RJTEVfUk9XU107DQo+ID4gPiAr DQo+ID4gPiArICAgIGludCBtaW5fbG9nMl90aWxlX2NvbHM7DQo+ID4gPiArICAgIGludCBtYXhf bG9nMl90aWxlX2NvbHM7DQo+ID4gPiArICAgIGludCBtaW5fbG9nMl90aWxlX3Jvd3M7DQo+ID4g PiArICAgIGludCBtYXhfbG9nMl90aWxlX3Jvd3M7DQo+ID4gPiArDQo+ID4gPiArICAgIGludCBx X2lkeF9pZHI7DQo+ID4gPiArICAgIGludCBxX2lkeF9wOw0KPiA+ID4gKyAgICBpbnQgcV9pZHhf YjsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoqIHVzZXIgb3B0aW9ucyAqLw0KPiA+ID4gKyAgICBp bnQgcHJvZmlsZTsNCj4gPiA+ICsgICAgaW50IGxldmVsOw0KPiA+ID4gKyAgICBpbnQgdGllcjsN Cj4gPiA+ICsgICAgaW50IHRpbGVfY29scywgdGlsZV9yb3dzOw0KPiA+ID4gKyAgICBpbnQgdGls ZV9ncm91cHM7DQo+ID4gPiArfSBWQUFQSUVuY29kZUFWMUNvbnRleHQ7DQo+ID4gPiArDQo+ID4g PiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFfY29uZmlndXJlKEFWQ29kZWND b250ZXh0DQo+ID4gPiAqYXZjdHgpDQo+ID4gPiArew0KPiA+ID4gKyAgICBWQUFQSUVuY29kZUNv bnRleHQgICAgICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ID4gKyAgICBWQUFQSUVuY29k ZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ID4gKyAgICBpbnQgcmV0 Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXQgPSBmZl9jYnNfaW5pdCgmcHJpdi0+Y2JjLCBBVl9D T0RFQ19JRF9BVjEsIGF2Y3R4KTsNCj4gPiA+ICsgICAgaWYgKHJldCA8IDApDQo+ID4gPiArICAg ICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoY3R4LT5yY19tb2RlLT5x dWFsaXR5KSB7DQo+ID4gPiArICAgICAgICBwcml2LT5xX2lkeF9wID0gYXZfY2xpcChjdHgtPnJj X3F1YWxpdHksIDAsDQo+ID4gPiBBVjFfTUFYX1FVQU5UKTsNCj4gPiA+ICsgICAgICAgIGlmIChm YWJzKGF2Y3R4LT5pX3F1YW50X2ZhY3RvcikgPiAwLjApDQo+ID4gPiArICAgICAgICAgICAgcHJp di0+cV9pZHhfaWRyID0NCj4gPiA+ICsgICAgICAgICAgICAgICAgYXZfY2xpcCgoZmFicyhhdmN0 eC0+aV9xdWFudF9mYWN0b3IpICogcHJpdi0NCj4gPiA+ID5xX2lkeF9wICArDQo+ID4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5pX3F1YW50X29mZnNldCkgKyAwLjUsDQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgMCwgQVYxX01BWF9RVUFOVCk7DQo+ID4gPiArICAg ICAgICBlbHNlDQo+ID4gPiArICAgICAgICAgICAgcHJpdi0+cV9pZHhfaWRyID0gcHJpdi0+cV9p ZHhfcDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIGlmIChmYWJzKGF2Y3R4LT5iX3F1YW50X2Zh Y3RvcikgPiAwLjApDQo+ID4gPiArICAgICAgICAgICAgcHJpdi0+cV9pZHhfYiA9DQo+ID4gPiAr ICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMoYXZjdHgtPmJfcXVhbnRfZmFjdG9yKSAqIHBy aXYtDQo+ID4gPiA+cV9pZHhfcCAgKw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBh dmN0eC0+Yl9xdWFudF9vZmZzZXQpICsgMC41LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgIDAsIEFWMV9NQVhfUVVBTlQpOw0KPiA+ID4gKyAgICAgICAgZWxzZQ0KPiA+ID4gKyAgICAg ICAgICAgIHByaXYtPnFfaWR4X2IgPSBwcml2LT5xX2lkeF9wOw0KPiA+ID4gKyAgICB9IGVsc2Ug ew0KPiA+ID4gKyAgICAgICAgLyoqIEFyYml0cmFyeSB2YWx1ZSAqLw0KPiA+ID4gKyAgICAgICAg cHJpdi0+cV9pZHhfaWRyID0gcHJpdi0+cV9pZHhfcCA9IHByaXYtPnFfaWR4X2IgPSAxMjg7DQo+ ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2RlX2F2MV9hZGRfb2J1KEFWQ29kZWND b250ZXh0ICphdmN0eCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICphdSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqb2J1X3VuaXQpDQo+ID4gPiArew0KPiA+ID4gKyAgICBp bnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXQgPSBmZl9jYnNfaW5zZXJ0X3VuaXRfY29u dGVudChhdSwgLTEsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHR5cGUsIG9idV91bml0LCBOVUxMKTsNCj4gPiA+ICsgICAgaWYgKHJldCA8IDApIHsNCj4gPiA+ ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFkZCBPQlUg dW5pdDogIg0KPiA+ID4gKyAgICAgICAgICAgICAgICJ0eXBlID0gJWQuXG4iLCB0eXBlKTsNCj4g PiA+ICsgICAgICAgIHJldHVybiByZXQ7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgdmFhcGlf ZW5jb2RlX2F2MV93cml0ZV9vYnUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGF0YSwgc2l6ZV90DQo+ID4g PiAqZGF0YV9sZW4sDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50DQo+ID4gPiAqYnMpDQo+ID4gPiArew0KPiA+ID4gKyAg ICBWQUFQSUVuY29kZUFWMUNvbnRleHQgKnByaXYgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiA+ID4g KyAgICBpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXQgPSBmZl9jYnNfd3JpdGVfZnJh Z21lbnRfZGF0YShwcml2LT5jYmMsIGJzKTsNCj4gPiA+ICsgICAgaWYgKHJldCA8IDApIHsNCj4g PiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIHdyaXRl IHBhY2tlZA0KPiA+ID4gaGVhZGVyLlxuIik7DQo+ID4gPiArICAgICAgICByZXR1cm4gcmV0Ow0K PiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIGlmICgoc2l6ZV90KTggKiBNQVhfUEFS QU1fQlVGRkVSX1NJWkUgPCA4ICogYnMtPmRhdGFfc2l6ZSAtDQo+ID4gPiBicy0+ZGF0YV9iaXRf cGFkZGluZykgew0KPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJB Y2Nlc3MgdW5pdCB0b28gbGFyZ2U6ICINCj4gPiA+ICsgICAgICAgICAgICAgICAiJXp1IDwgJXp1 LlxuIiwgKHNpemVfdCk4ICoNCj4gPiA+IE1BWF9QQVJBTV9CVUZGRVJfU0laRSwNCj4gPiA+ICsg ICAgICAgICAgICAgICA4ICogYnMtPmRhdGFfc2l6ZSAtIGJzLT5kYXRhX2JpdF9wYWRkaW5nKTsN Cj4gPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NQQyk7DQo+ID4gPiArICAgIH0NCj4g PiA+ICsNCj4gPiA+ICsgICAgbWVtY3B5KGRhdGEsIGJzLT5kYXRhLCBicy0+ZGF0YV9zaXplKTsN Cj4gPiA+ICsgICAgKmRhdGFfbGVuID0gOCAqIGJzLT5kYXRhX3NpemUgLSBicy0+ZGF0YV9iaXRf cGFkZGluZzsNCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4g Kw0KPiA+ID4gK3N0YXRpYyBpbnQgZ2V0X3JlbGF0aXZlX2Rpc3QoY29uc3QgQVYxUmF3U2VxdWVu Y2VIZWFkZXIgKnNlcSwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikNCj4gPiA+ICt7DQo+ID4gPiArICAgIHVuc2lnbmVk IGludCBkaWZmLCBtOw0KPiA+ID4gKyAgICBpZiAoIXNlcS0+ZW5hYmxlX29yZGVyX2hpbnQpDQo+ ID4gPiArICAgICAgICByZXR1cm4gMDsNCj4gPiA+ICsgICAgZGlmZiA9IGEgLSBiOw0KPiA+ID4g KyAgICBtID0gMSA8PCBzZXEtPm9yZGVyX2hpbnRfYml0c19taW51c18xOw0KPiA+ID4gKyAgICBk aWZmID0gKGRpZmYgJiAobSAtIDEpKSAtIChkaWZmICYgbSk7DQo+ID4gPiArICAgIHJldHVybiBk aWZmOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHdyaXRlX25zKFB1dEJp dENvbnRleHQgKnBiYywgdWludDMyX3QgbiwgdWludDMyX3QNCj4gPiA+IHZhbHVlKQ0KPiA+ID4g K3sNCj4gPiA+ICsgICAgdWludDMyX3QgdywgbSwgdiwgZXh0cmFfYml0Ow0KPiA+ID4gKw0KPiA+ ID4gKyAgICB3ID0gYXZfbG9nMihuKSArIDE7DQo+ID4gPiArICAgIG0gPSAoMSA8PCB3KSAtIG47 DQo+ID4gPiArDQo+ID4gPiArICAgIGlmICh2YWx1ZSA8IG0pIHsNCj4gPiA+ICsgICAgICAgIHYg PSB2YWx1ZTsNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKHBiYywgdyAtIDEsIHYpOw0KPiA+ID4g KyAgICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgdiA9IG0gKyAoKHZhbHVlIC0gbSkgPj4gMSk7 DQo+ID4gPiArICAgICAgICBleHRyYV9iaXQgPSAodmFsdWUgLSBtKSAmIDE7DQo+ID4gPiArICAg ICAgICBwdXRfYml0cyhwYmMsIHcgLSAxLCB2KTsNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKHBi YywgMSwgZXh0cmFfYml0KTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1 cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogVGhpcyBBUEkg cHJvdmlkZSB0aGUgbWlubXVtIGltcGxlbWVudGlvbiBhY2NvcmRpbmcgY3VycmVudA0KPiA+ID4g ZW5hYmxlZCBmZWF0dXJlcw0KPiA+ID4gKyAqIGluIGZyYW1lIGhlYWRlci4gSWYgbW9yZSBmZWF0 dXJlcyB3aWxsIGVuYWJsZSBpbiBmdXJ0dXJlLA0KPiA+ID4gcGxlYXNlIG1ha2Ugc3VyZQ0KPiA+ ID4gKyAqIHRoZSByZWxhdGl2ZSBmbGFncyBvZiBmZWF0dXJlcyBzaG91bGQgYmUgcGFja2VkIGNv cnJlY3RseQ0KPiA+ID4gaW50byBmcmFtZSBoZWFkZXINCj4gPiA+ICsgKiBvYnUgaW4gdGhpcyBB UEkuDQo+ID4gPiArICovDQo+ID4gPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRl X2ZyYW1lX2hlYWRlcihBVkNvZGVjQ29udGV4dA0KPiA+ID4gKmF2Y3R4LA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkFBUElFbmNvZGVQaWN0 dXINCj4gPiA+IGUgKnBpYywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKmRhdGEsDQo+ID4gPiBzaXplX3QgKmRhdGFfbGVuKQ0KPiA+ ID4gK3sNCj4gPiA+ICsgICAgVkFBUElFbmNvZGVDb250ZXh0ICAgICAgICAgICAgICAqY3R4ID0g YXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAg ICAgICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgQVYxUmF3T0JVICAgICAg ICAgICAgICAgICAgICAqZmhfb2J1ID0gJnByaXYtPmZoOw0KPiA+ID4gKyAgICBBVjFSYXdPQlUg ICAgICAgICAgICAgICAgICAgICpzaF9vYnUgPSAmcHJpdi0+c2g7DQo+ID4gPiArICAgIEFWMVJh d0ZyYW1lSGVhZGVyICAgICAgICAgICAgICAgICpmaCA9ICZmaF9vYnUtDQo+ID4gPiA+b2J1LmZy YW1lLmhlYWRlcjsNCj4gPiA+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgICAgICAgICAgICAg KnNoID0gJnNoX29idS0NCj4gPiA+ID5vYnUuc2VxdWVuY2VfaGVhZGVyOw0KPiA+ID4gKyAgICBW QUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEgKnZwaWMgPSBwaWMtDQo+ID4gPiA+Y29kZWNf cGljdHVyZV9wYXJhbXM7DQo+ID4gPiArICAgIFB1dEJpdENvbnRleHQgcGJjLCBwYmNfdG1wOw0K PiA+ID4gKyAgICB1aW50OF90IGJ5dGU7DQo+ID4gPiArICAgIGludCBxaW5kZXgsIGNvZGVkX2xv c3NsZXNzOw0KPiA+ID4gKyAgICBpbnQgaWRfbGVuLCBmcmFtZV9pc19pbnRyYSwgc2tpcF9tb2Rl X2FsbG93ZWQ7DQo+ID4gPiArICAgIGludCBzdGFydCwgcGF5bG9hZF9iaXRzLCBvYnVfc2l6ZSwg b2J1X3NpemVfbGVuOw0KPiA+ID4gKyAgICBpbnQgcWluZGV4X29mZnNldCwgbG9vcGZpbHRlcl9v ZmZzZXQ7DQo+ID4gPiArICAgIGludCBjZGVmX3N0YXJ0X29mZnNldCwgY2RlZl9lbmRfb2Zmc2V0 Ow0KPiA+ID4gKyAgICBpbnQgaTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgaW5pdF9wdXRfYml0cygm cGJjLCBkYXRhLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAv Kiogb2J1IGhlYWRlciAqLw0KPiA+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaF9vYnUtPmhl YWRlci5vYnVfZm9yYmlkZGVuX2JpdCk7DQo+ID4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDQsIGZo X29idS0+aGVhZGVyLm9idV90eXBlKTsNCj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgZmhf b2J1LT5oZWFkZXIub2J1X2V4dGVuc2lvbl9mbGFnKTsNCj4gPiA+ICsgICAgcHV0X2JpdHMoJnBi YywgMSwgZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2ZpZWxkKTsNCj4gPiA+ICsgICAgcHV0 X2JpdHMoJnBiYywgMSwgZmhfb2J1LT5oZWFkZXIub2J1X3Jlc2VydmVkXzFiaXQpOw0KPiA+ID4g Kw0KPiA+ID4gKyAgICAvKiogcmVjb3JkIHBiYyBzdGF0dXMgdG8gcmUtd3JpdGUgb2J1IHNpemUg bGF0ZXIuICovDQo+ID4gPiArICAgIGlmIChmaF9vYnUtPmhlYWRlci5vYnVfaGFzX3NpemVfZmll bGQpIHsNCj4gPiA+ICsgICAgICAgIHBiY190bXAgPSBwYmM7DQo+ID4gPiArICAgICAgICBwdXRf Yml0czMyKCZwYmMsIDApOw0KPiA+ID4gKyAgICAgICAgcHV0X2JpdHMzMigmcGJjLCAwKTsNCj4g PiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBzdGFydCA9IHB1dF9iaXRzX2NvdW50KCZw YmMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvKiogdW5jb21wcmVzc2VkX2hlYWRlcigpICovDQo+ ID4gPiArICAgIGlmIChzaC0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcpDQo+ID4gPiAr ICAgICAgICBpZF9sZW4gPSBzaC0+YWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSAr DQo+ID4gPiArICAgICAgICAgICAgICAgICBzaC0+ZGVsdGFfZnJhbWVfaWRfbGVuZ3RoX21pbnVz XzIgKyAzOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBmcmFtZV9pc19pbnRyYSA9IChmaC0+ZnJhbWVf dHlwZSA9PSBBVjFfRlJBTUVfS0VZIHx8DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgIGZo LT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9JTlRSQV9PTkxZKTsNCj4gPiA+ICsgICAgaWYgKCFz aC0+cmVkdWNlZF9zdGlsbF9waWN0dXJlX2hlYWRlcikgew0KPiA+ID4gKyAgICAgICAgcHV0X2Jp dHMoJnBiYywgMSwgZmgtPnNob3dfZXhpc3RpbmdfZnJhbWUpOw0KPiA+ID4gKyAgICAgICAgaWYg KGZoLT5zaG93X2V4aXN0aW5nX2ZyYW1lKSB7DQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMo JnBiYywgMywgZmgtPmZyYW1lX3RvX3Nob3dfbWFwX2lkeCk7DQo+ID4gPiArICAgICAgICAgICAg Z290byB0cmFpbGluZ19iaXRzOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgaWYg KHNoLT5mcmFtZV9pZF9udW1iZXJzX3ByZXNlbnRfZmxhZykNCj4gPiA+ICsgICAgICAgICAgICBw dXRfYml0cygmcGJjLCBpZF9sZW4sIGZoLT5kaXNwbGF5X2ZyYW1lX2lkKTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5mcmFtZV90eXBlKTsNCj4gPiA+ICsg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5zaG93X2ZyYW1lKTsNCj4gPiA+ICsgICAgICAg IGlmICghZmgtPnNob3dfZnJhbWUpDQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPnNob3dhYmxlX2ZyYW1lKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIGlmICghKGZo LT5mcmFtZV90eXBlID09IEFWMV9GUkFNRV9TV0lUQ0ggfHwNCj4gPiA+ICsgICAgICAgICAgICAo ZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBmaC0NCj4gPiA+ID5zaG93X2ZyYW1l KSkpDQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmVycm9yX3Jlc2ls aWVudF9tb2RlKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBwdXRfYml0cygm cGJjLCAxLCBmaC0+ZGlzYWJsZV9jZGZfdXBkYXRlKTsNCj4gPiA+ICsgICAgaWYgKHNoLT5zZXFf Zm9yY2Vfc2NyZWVuX2NvbnRlbnRfdG9vbHMgPT0NCj4gPiA+IEFWMV9TRUxFQ1RfU0NSRUVOX0NP TlRFTlRfVE9PTFMpDQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+YWxsb3df c2NyZWVuX2NvbnRlbnRfdG9vbHMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoZmgtPmFsbG93 X3NjcmVlbl9jb250ZW50X3Rvb2xzICYmIHNoLQ0KPiA+ID4gPnNlcV9mb3JjZV9pbnRlZ2VyX212 ID09IEFWMV9TRUxFQ1RfSU5URUdFUl9NVikNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMs IDEsIGZoLT5mb3JjZV9pbnRlZ2VyX212KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKHNoLT5m cmFtZV9pZF9udW1iZXJzX3ByZXNlbnRfZmxhZykNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZw YmMsIGlkX2xlbiwgZmgtPmN1cnJlbnRfZnJhbWVfaWQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBp ZiAoZmgtPmZyYW1lX3R5cGUgIT0gQVYxX0ZSQU1FX1NXSVRDSCAmJiAhc2gtDQo+ID4gPiA+cmVk dWNlZF9zdGlsbF9waWN0dXJlX2hlYWRlcikNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMs IDEsIGZoLT5mcmFtZV9zaXplX292ZXJyaWRlX2ZsYWcpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBp ZiAoc2gtPmVuYWJsZV9vcmRlcl9oaW50KQ0KPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywg c2gtPm9yZGVyX2hpbnRfYml0c19taW51c18xICsgMSwgZmgtDQo+ID4gPiA+b3JkZXJfaGludCk7 DQo+ID4gPiArDQo+ID4gPiArICAgIGlmICghKGZyYW1lX2lzX2ludHJhIHx8IGZoLT5lcnJvcl9y ZXNpbGllbnRfbW9kZSkpDQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAzLCBmaC0+cHJp bWFyeV9yZWZfZnJhbWUpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoIShmaC0+ZnJhbWVfdHlw ZSA9PSBBVjFfRlJBTUVfU1dJVENIIHx8DQo+ID4gPiArICAgICAgICBmaC0+ZnJhbWVfdHlwZSA9 PSBBVjFfRlJBTUVfS0VZICYmIGZoLT5zaG93X2ZyYW1lKSkNCj4gPiA+ICsgICAgICAgIHB1dF9i aXRzKCZwYmMsIDgsIGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzKTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgaWYgKGZyYW1lX2lzX2ludHJhKSB7DQo+ID4gPiArICAgICAgICAvKiogcmVuZGVyX3NpemUo KSAqLw0KPiA+ID4gKyAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5yZW5kZXJfYW5kX2Zy YW1lX3NpemVfZGlmZmVyZW50KTsNCj4gPiA+ICsgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICAg IGlmICghZnJhbWVfaXNfaW50cmEgJiYgc2gtPmVuYWJsZV9vcmRlcl9oaW50KQ0KPiA+ID4gKyAg ICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5mcmFtZV9yZWZzX3Nob3J0X3NpZ25hbGlu Zyk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVS X0ZSQU1FOyBpKyspIHsNCj4gPiA+ICsgICAgICAgICAgICBpZiAoIWZoLT5mcmFtZV9yZWZzX3No b3J0X3NpZ25hbGluZykNCj4gPiA+ICsgICAgICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMywg ZmgtPnJlZl9mcmFtZV9pZHhbaV0pOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4g KyAgICAgICAgaWYgKCEoZmgtPmZyYW1lX3NpemVfb3ZlcnJpZGVfZmxhZyAmJiAhZmgtDQo+ID4g PiA+ZXJyb3JfcmVzaWxpZW50X21vZGUpKQ0KPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZw YmMsIDEsIGZoLQ0KPiA+ID4gPnJlbmRlcl9hbmRfZnJhbWVfc2l6ZV9kaWZmZXJlbnQpOw0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICAgaWYgKCFmaC0+Zm9yY2VfaW50ZWdlcl9tdikNCj4gPiA+ICsg ICAgICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+YWxsb3dfaGlnaF9wcmVjaXNpb25fbXYp Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgLyoqIHJlYWRfaW50ZXJwb2xhdGlvbl9maWx0ZXIo KSAqLw0KPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmlzX2ZpbHRlcl9zd2l0 Y2hhYmxlKTsNCj4gPiA+ICsgICAgICAgIGlmICghZmgtPmlzX2ZpbHRlcl9zd2l0Y2hhYmxlKQ0K PiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5pbnRlcnBvbGF0aW9uX2Zp bHRlcik7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+aXNf bW90aW9uX21vZGVfc3dpdGNoYWJsZSk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsg ICAgaWYgKCEoc2gtPnJlZHVjZWRfc3RpbGxfcGljdHVyZV9oZWFkZXIgfHwgZmgtDQo+ID4gPiA+ ZGlzYWJsZV9jZGZfdXBkYXRlKSkNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZo LT5kaXNhYmxlX2ZyYW1lX2VuZF91cGRhdGVfY2RmKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoq IHRpbGVfaW5mbygpICovDQo+ID4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT51bmlmb3Jt X3RpbGVfc3BhY2luZ19mbGFnKTsNCj4gPiA+ICsgICAgaWYgKGZoLT51bmlmb3JtX3RpbGVfc3Bh Y2luZ19mbGFnKSB7DQo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dGlsZV9j b2xzX2xvZzIgLSBwcml2LQ0KPiA+ID4gPm1pbl9sb2cyX3RpbGVfY29sczsgaSsrKSB7DQo+ID4g PiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7DQo+ID4gPiArICAgICAgICB9DQo+ ID4gPiArICAgICAgICBpZiAocHJpdi0+dGlsZV9jb2xzX2xvZzIgPCBwcml2LT5tYXhfbG9nMl90 aWxlX2NvbHMpDQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7DQo+ID4g PiArDQo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dGlsZV9yb3dzX2xvZzIg LSBwcml2LQ0KPiA+ID4gPm1pbl9sb2cyX3RpbGVfcm93czsgaSsrKSB7DQo+ID4gPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArICAg ICAgICBpZiAocHJpdi0+dGlsZV9yb3dzX2xvZzIgPCBwcml2LT5tYXhfbG9nMl90aWxlX3Jvd3Mp DQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMCk7DQo+ID4gPiArICAgIH0g ZWxzZSB7DQo+ID4gPiArICAgICAgICBpbnQgc3RhcnRfc2IgPSAwOw0KPiA+ID4gKyAgICAgICAg aW50IG1heF93aWR0aCwgbWF4X2hlaWdodDsNCj4gPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IHN0 YXJ0X3NiIDwgcHJpdi0+c2JfY29sczsgaSsrKSB7DQo+ID4gPiArICAgICAgICAgICAgbWF4X3dp ZHRoID0gRkZNSU4ocHJpdi0+c2JfY29scyAtIHN0YXJ0X3NiLCBwcml2LQ0KPiA+ID4gPm1heF90 aWxlX3dpZHRoX3NiKTsNCj4gPiA+ICsgICAgICAgICAgICB3cml0ZV9ucygmcGJjLCBtYXhfd2lk dGgsIGZoLQ0KPiA+ID4gPndpZHRoX2luX3Nic19taW51c18xW2ldKTsNCj4gPiA+ICsgICAgICAg ICAgICBzdGFydF9zYiArPSBmaC0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gKyAxOw0KPiA+ID4g KyAgICAgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgc3RhcnRfc2IgPSAwOw0KPiA+ID4g KyAgICAgICAgZm9yIChpID0gMDsgc3RhcnRfc2IgPCBwcml2LT5zYl9yb3dzOyBpKyspIHsNCj4g PiA+ICsgICAgICAgICAgICBtYXhfaGVpZ2h0ID0gRkZNSU4ocHJpdi0+c2Jfcm93cyAtIHN0YXJ0 X3NiLCBwcml2LQ0KPiA+ID4gPm1heF90aWxlX2hlaWdodF9zYik7DQo+ID4gPiArICAgICAgICAg ICAgd3JpdGVfbnMoJnBiYywgbWF4X2hlaWdodCwgZmgtDQo+ID4gPiA+aGVpZ2h0X2luX3Nic19t aW51c18xW2ldKTsNCj4gPiA+ICsgICAgICAgICAgICBzdGFydF9zYiArPSBmaC0+aGVpZ2h0X2lu X3Nic19taW51c18xW2ldICsgMTsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ ID4gKw0KPiA+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9jb2xzX2xvZzIgfHwgcHJpdi0+dGlsZV9y b3dzX2xvZzIpIHsNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIHByaXYtPnRpbGVfY29s c19sb2cyICsgcHJpdi0NCj4gPiA+ID50aWxlX3Jvd3NfbG9nMiwgZmgtPmNvbnRleHRfdXBkYXRl X3RpbGVfaWQpOw0KPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMiwgZmgtPnRpbGVfc2l6 ZV9ieXRlc19taW51czEpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIHFpbmRl eF9vZmZzZXQgPSBwdXRfYml0c19jb3VudCgmcGJjKTsNCj4gPiA+ICsgICAgLyoqIHF1YW50aXph dGlvbl9wYXJhbXMoKSAqLw0KPiA+ID4gKyAgICBwdXRfYml0cygmcGJjLCA4LCBmaC0+YmFzZV9x X2lkeCk7DQo+ID4gPiArICAgIHB1dF9iaXRzKCZwYmMsIDEsIGZoLT5kZWx0YV9xX3lfZGMpOw0K PiA+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV91X2RjKTsNCj4gPiA+ICsg ICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmRlbHRhX3FfdV9hYyk7DQo+ID4gPiArICAgIHB1dF9i aXRzKCZwYmMsIDEsIGZoLT51c2luZ19xbWF0cml4KTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoq IHNlZ21lbnRhdGlvbl9wYXJhbXMoKSAqLw0KPiA+ID4gKyAgICBwdXRfYml0cygmcGJjLCAxLCBm aC0+c2VnbWVudGF0aW9uX2VuYWJsZWQpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvKiogZGVsdGFf cV9wYXJhbXMoKSAqLw0KPiA+ID4gKyAgICBpZiAoZmgtPmJhc2VfcV9pZHgpDQo+ID4gPiArICAg ICAgICBwdXRfYml0cygmcGJjLCAxLCBmaC0+ZGVsdGFfcV9wcmVzZW50KTsNCj4gPiA+ICsgICAg aWYgKGZoLT5kZWx0YV9xX3ByZXNlbnQpDQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAy LCBmaC0+ZGVsdGFfcV9yZXMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvKiogZGVsdGFfbGZfcGFy YW1zKCkgKi8NCj4gPiA+ICsgICAgaWYgKGZoLT5kZWx0YV9xX3ByZXNlbnQpIHsNCj4gPiA+ICsg ICAgICAgIGlmICghZmgtPmFsbG93X2ludHJhYmMpDQo+ID4gPiArICAgICAgICAgICAgcHV0X2Jp dHMoJnBiYywgMSwgZmgtPmRlbHRhX2xmX3ByZXNlbnQpOw0KPiA+ID4gKyAgICAgICAgaWYgKGZo LT5kZWx0YV9sZl9wcmVzZW50KSB7DQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywg MiwgZmgtPmRlbHRhX2xmX3Jlcyk7DQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywg MSwgZmgtPmRlbHRhX2xmX211bHRpKTsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgfQ0K PiA+ID4gKw0KPiA+ID4gKyAgICAvKiogY29kZWxvc3NsZXNzICovDQo+ID4gPiArICAgIGNvZGVk X2xvc3NsZXNzID0gMTsNCj4gPiA+ICsgICAgZm9yIChpID0gMDsgaSA8IEFWMV9NQVhfU0VHTUVO VFM7IGkrKykgew0KPiA+ID4gKyAgICAgICAgaWYgKGZoLT5zZWdtZW50YXRpb25fZW5hYmxlZCAm JiBmaC0NCj4gPiA+ID5mZWF0dXJlX2VuYWJsZWRbaV1bQVYxX1NFR19MVkxfQUxUX1FdKQ0KPiA+ ID4gKyAgICAgICAgICAgIHFpbmRleCA9IGZoLT5iYXNlX3FfaWR4ICsgZmgtDQo+ID4gPiA+ZmVh dHVyZV92YWx1ZVtpXVtBVjFfU0VHX0xWTF9BTFRfUV07DQo+ID4gPiArICAgICAgICBlbHNlDQo+ ID4gPiArICAgICAgICAgICAgcWluZGV4ID0gZmgtPmJhc2VfcV9pZHg7DQo+ID4gPiArICAgICAg ICBxaW5kZXggPSBhdl9jbGlwX3VpbnRwMihxaW5kZXgsIDgpOw0KPiA+ID4gKw0KPiA+ID4gKyAg ICAgICAgaWYgKHFpbmRleCB8fCBmaC0+ZGVsdGFfcV95X2RjIHx8IGZoLT5kZWx0YV9xX3VfYWMg fHwNCj4gPiA+IGZoLT5kZWx0YV9xX3VfZGMgfHwNCj4gPiA+ICsgICAgICAgICAgICBmaC0+ZGVs dGFfcV92X2FjIHx8IGZoLT5kZWx0YV9xX3ZfZGMpDQo+ID4gPiArICAgICAgICAgICAgY29kZWRf bG9zc2xlc3MgPSAwOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIGxvb3BmaWx0 ZXJfb2Zmc2V0ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7DQo+ID4gPiArICAgIC8qKiBsb29wX2Zp bHRlcl9wYXJhbXMoKSAqLw0KPiA+ID4gKyAgICBpZiAoIShjb2RlZF9sb3NzbGVzcyB8fCBmaC0+ YWxsb3dfaW50cmFiYykpIHsNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDYsIGZoLT5s b29wX2ZpbHRlcl9sZXZlbFswXSk7DQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCA2LCBm aC0+bG9vcF9maWx0ZXJfbGV2ZWxbMV0pOw0KPiA+ID4gKyAgICAgICAgaWYgKGZoLT5sb29wX2Zp bHRlcl9sZXZlbFswXSB8fCBmaC0NCj4gPiA+ID5sb29wX2ZpbHRlcl9sZXZlbFsxXSkgew0KPiA+ ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMsIDYsIGZoLT5sb29wX2ZpbHRlcl9sZXZlbFsy XSk7DQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgNiwgZmgtPmxvb3BfZmlsdGVy X2xldmVsWzNdKTsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZw YmMsIDMsIGZoLT5sb29wX2ZpbHRlcl9zaGFycG5lc3MpOw0KPiA+ID4gKyAgICAgICAgcHV0X2Jp dHMoJnBiYywgMSwgZmgtPmxvb3BfZmlsdGVyX2RlbHRhX2VuYWJsZWQpOw0KPiA+ID4gKyAgICB9 DQo+ID4gPiArDQo+ID4gPiArICAgIGNkZWZfc3RhcnRfb2Zmc2V0ID0gcHV0X2JpdHNfY291bnQo JnBiYyk7DQo+ID4gPiArICAgIC8qKiBjZGVmX3BhcmFtcygpICovDQo+ID4gPiArICAgIGlmICgh KGNvZGVkX2xvc3NsZXNzIHx8IGZoLT5hbGxvd19pbnRyYWJjIHx8ICFzaC0NCj4gPiA+ID5lbmFi bGVfY2RlZikpIHsNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX2Rh bXBpbmdfbWludXNfMyk7DQo+ID4gPiArICAgICAgICBwdXRfYml0cygmcGJjLCAyLCBmaC0+Y2Rl Zl9iaXRzKTsNCj4gPiA+ICsgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoMSA8PCBmaC0+Y2RlZl9i aXRzKTsgaSsrKSB7DQo+ID4gPiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiYywgNCwgZmgtPmNk ZWZfeV9wcmlfc3RyZW5ndGhbaV0pOw0KPiA+ID4gKyAgICAgICAgICAgIHB1dF9iaXRzKCZwYmMs IDIsIGZoLT5jZGVmX3lfc2VjX3N0cmVuZ3RoW2ldKTsNCj4gPiA+ICsgICAgICAgICAgICBwdXRf Yml0cygmcGJjLCA0LCBmaC0+Y2RlZl91dl9wcmlfc3RyZW5ndGhbaV0pOw0KPiA+ID4gKyAgICAg ICAgICAgIHB1dF9iaXRzKCZwYmMsIDIsIGZoLT5jZGVmX3V2X3NlY19zdHJlbmd0aFtpXSk7DQo+ ID4gPiArICAgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgICAgY2RlZl9lbmRfb2Zmc2V0 ID0gcHV0X2JpdHNfY291bnQoJnBiYyk7DQo+ID4gPiArDQo+ID4gPiArICAgIC8qKiByZWFkX3R4 X21vZGUoKSAqLw0KPiA+ID4gKyAgICBpZiAoZmgtPnR4X21vZGUgPT0gQVYxX1RYX01PREVfU0VM RUNUKQ0KPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7DQo+ID4gPiArICAgIGVs c2UNCj4gPiA+ICsgICAgICAgIHB1dF9iaXRzKCZwYmMsIDEsIDApOw0KPiA+ID4gKw0KPiA+ID4g KyAgICAvKiogZnJhbWVfcmVmZXJlbmNlX21vZGUoKSAqLw0KPiA+ID4gKyAgICBpZiAoIWZyYW1l X2lzX2ludHJhKQ0KPiA+ID4gKyAgICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnJlZmVyZW5j ZV9zZWxlY3QpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvKiogc2tpcF9tb2RlX3BhcmFtcygpICov DQo+ID4gPiArICAgIGlmIChmcmFtZV9pc19pbnRyYSB8fCAhZmgtPnJlZmVyZW5jZV9zZWxlY3Qg fHwgIXNoLQ0KPiA+ID4gPmVuYWJsZV9vcmRlcl9oaW50KQ0KPiA+ID4gKyAgICAgICAgc2tpcF9t b2RlX2FsbG93ZWQgPSAwOw0KPiA+ID4gKyAgICBlbHNlIHsNCj4gPiA+ICsgICAgICAgIGludCBm b3J3YXJkX2lkeCwgYmFja3dhcmRfaWR4Ow0KPiA+ID4gKyAgICAgICAgaW50IHJlZl9oaW50LCBm b3J3YXJkX2hpbnQsIGJhY2t3YXJkX2hpbnQ7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICBmb3J3 YXJkX2lkeCA9IC0xOw0KPiA+ID4gKyAgICAgICAgYmFja3dhcmRfaWR4ID0gLTE7DQo+ID4gPiAr DQo+ID4gPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOyBpKysp IHsNCj4gPiA+ICsgICAgICAgICAgICByZWZfaGludCA9IGZoLT5yZWZfb3JkZXJfaGludFtmaC0+ cmVmX2ZyYW1lX2lkeFtpXV07DQo+ID4gPiArICAgICAgICAgICAgaWYgKGdldF9yZWxhdGl2ZV9k aXN0KHNoLCByZWZfaGludCwgZmgtPm9yZGVyX2hpbnQpDQo+ID4gPiA8IDApIHsNCj4gPiA+ICsg ICAgICAgICAgICAgICAgaWYgKGZvcndhcmRfaWR4IDwgMCB8fCBnZXRfcmVsYXRpdmVfZGlzdChz aCwNCj4gPiA+IHJlZl9oaW50LCBmb3J3YXJkX2lkeCkgPiAwKSB7DQo+ID4gPiArICAgICAgICAg ICAgICAgICAgICBmb3J3YXJkX2lkeCA9IGk7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2hpbnQgPSByZWZfaGludDsNCj4gPiA+ICsgICAgICAgICAgICAgICAgfQ0KPiA+ID4g KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBm aC0NCj4gPiA+ID5vcmRlcl9oaW50KSA+IDApIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgaWYg KGJhY2t3YXJkX2lkeCA8IDAgfHwgZ2V0X3JlbGF0aXZlX2Rpc3Qoc2gsDQo+ID4gPiByZWZfaGlu dCwgYmFja3dhcmRfaGludCkgPCAwKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBiYWNr d2FyZF9pZHggPSBpOw0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgYmFja3dhcmRfaGludCA9 IHJlZl9oaW50Ow0KPiA+ID4gKyAgICAgICAgICAgICAgICB9DQo+ID4gPiArICAgICAgICAgICAg fQ0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgaWYgKGZvcndhcmRfaWR4IDwgMCkN Cj4gPiA+ICsgICAgICAgICAgICBza2lwX21vZGVfYWxsb3dlZCA9IDA7DQo+ID4gPiArICAgICAg ICBlbHNlIGlmIChiYWNrd2FyZF9pZHggPj0gMCkNCj4gPiA+ICsgICAgICAgICAgICBza2lwX21v ZGVfYWxsb3dlZCA9IDE7DQo+ID4gPiArICAgICAgICBlbHNlIHsNCj4gPiA+ICsgICAgICAgICAg ICBpbnQgc2Vjb25kX2ZvcndhcmRfaWR4LCBzZWNvbmRfZm9yd2FyZF9oaW50Ow0KPiA+ID4gKyAg ICAgICAgICAgIHNlY29uZF9mb3J3YXJkX2lkeCA9IC0xOw0KPiA+ID4gKyAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykgew0KPiA+ID4gKyAgICAgICAg ICAgICAgICByZWZfaGludCA9IGZoLT5yZWZfb3JkZXJfaGludFtmaC0NCj4gPiA+ID5yZWZfZnJh bWVfaWR4W2ldXTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgaWYgKGdldF9yZWxhdGl2ZV9kaXN0 KHNoLCByZWZfaGludCwNCj4gPiA+IGZvcndhcmRfaGludCkgPCAwKSB7DQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICBpZiAoc2Vjb25kX2ZvcndhcmRfaWR4IDwgMCB8fA0KPiA+ID4gZ2V0X3Jl bGF0aXZlX2Rpc3Qoc2gsIHJlZl9oaW50LCBzZWNvbmRfZm9yd2FyZF9oaW50KSA+IDApew0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZF9mb3J3YXJkX2lkeCA9IGk7DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kX2ZvcndhcmRfaGludCA9IHJlZl9oaW50 Ow0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgICAgICAgICB9 DQo+ID4gPiArICAgICAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgICAgIGlmIChzZWNvbmRfZm9y d2FyZF9pZHggPCAwKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICBza2lwX21vZGVfYWxsb3dlZCA9 IDA7DQo+ID4gPiArICAgICAgICAgICAgZWxzZQ0KPiA+ID4gKyAgICAgICAgICAgICAgICBza2lw X21vZGVfYWxsb3dlZCA9IDE7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsNCj4gPiA+ICsgICAgaWYgKHNraXBfbW9kZV9hbGxvd2VkKQ0KPiA+ID4gKyAgICAgICAgcHV0 X2JpdHMoJnBiYywgMSwgZmgtPnNraXBfbW9kZV9wcmVzZW50KTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPnJlZHVjZWRfdHhfc2V0KTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgLyoqIGdsb2JhbF9tb3Rpb25fcGFyYW1zKCkgKi8NCj4gPiA+ICsgICAgaWYgKCFmcmFt ZV9pc19pbnRyYSkgew0KPiA+ID4gKyAgICAgICAgZm9yIChpID0gQVYxX1JFRl9GUkFNRV9MQVNU OyBpIDw9IEFWMV9SRUZfRlJBTUVfQUxUUkVGOw0KPiA+ID4gaSsrKSB7DQo+ID4gPiArICAgICAg ICAgICAgcHV0X2JpdHMoJnBiYywgMSwgZmgtPmlzX2dsb2JhbFtpXSk7DQo+ID4gPiArICAgICAg ICAgICAgaWYgKGZoLT5pc19nbG9iYWxbaV0pIHsNCj4gPiA+ICsgICAgICAgICAgICAgICAgcHV0 X2JpdHMoJnBiYywgMSwgZmgtPmlzX3JvdF96b29tW2ldKTsNCj4gPiA+ICsgICAgICAgICAgICAg ICAgaWYgKCFmaC0+aXNfcm90X3pvb21baV0pDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICBw dXRfYml0cygmcGJjLCAxLCBmaC0+aXNfdHJhbnNsYXRpb25baV0pOw0KPiA+ID4gKyAgICAgICAg ICAgIH0NCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gK3Ry YWlsaW5nX2JpdHM6DQo+ID4gPiArICAgIHBheWxvYWRfYml0cyA9IHB1dF9iaXRzX2NvdW50KCZw YmMpIC0gc3RhcnQ7DQo+ID4gPiArDQo+ID4gPiArICAgIC8qKiB0cmFpbGluZ19iaXRzKCkgKi8N Cj4gPiA+ICsgICAgcHV0X2JpdHMoJnBiYywgMSwgMSk7DQo+ID4gPiArICAgIG9idV9zaXplID0g KHB1dF9iaXRzX2NvdW50KCZwYmMpIC0gc3RhcnQgKyA3KSAvIDg7DQo+ID4gPiArICAgIGZvciAo aSA9IDA7IGkgPCBvYnVfc2l6ZSAqIDggLSBwYXlsb2FkX2JpdHMgLSAxOyBpKyspDQo+ID4gPiAr ICAgICAgICBwdXRfYml0cygmcGJjLCAxLCAwKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgZmx1c2hf cHV0X2JpdHMoJnBiYyk7DQo+ID4gPiArICAgICpkYXRhX2xlbiA9IHB1dF9iaXRzX2NvdW50KCZw YmMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvKiogdXBkYXRlIG9idSBzaXplIGluIGJpdHN0cmVh bSAqLw0KPiA+ID4gKyAgICBpZiAoZmhfb2J1LT5oZWFkZXIub2J1X2hhc19zaXplX2ZpZWxkKSB7 DQo+ID4gPiArICAgICAgICBvYnVfc2l6ZV9sZW4gPSBwcml2LQ0KPiA+ID4gPmF0dHJfZXh0Mi5i aXRzLm9idV9zaXplX2J5dGVzX21pbnVzMSArIDE7DQo+ID4gPiArICAgICAgICBmb3IgKGkgPSAw OyBpIDwgb2J1X3NpemVfbGVuOyBpKyspIHsNCj4gPiA+ICsgICAgICAgICAgICBieXRlID0gb2J1 X3NpemUgPj4gKDcgKiBpKSAmIDB4N2Y7DQo+ID4gPiArICAgICAgICAgICAgaWYgKGkgPCBvYnVf c2l6ZV9sZW4gLSAxKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICBieXRlIHw9IDB4ODA7DQo+ID4g PiArICAgICAgICAgICAgcHV0X2JpdHMoJnBiY190bXAsIDgsIGJ5dGUpOw0KPiA+ID4gKyAgICAg ICAgfQ0KPiA+ID4gKyAgICAgICAgZmx1c2hfcHV0X2JpdHMoJnBiY190bXApOw0KPiA+ID4gKyAg ICAgICAgbWVtbW92ZShwYmNfdG1wLmJ1Zl9wdHIsIHBiY190bXAuYnVmX3B0ciArICg4IC0NCj4g PiA+IG9idV9zaXplX2xlbiksIG9idV9zaXplKTsNCj4gPiA+ICsgICAgICAgICpkYXRhX2xlbiAt PSAoOCAtIG9idV9zaXplX2xlbikgKiA4Ow0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ID4gPiAr ICAgIGlmIChmaC0+c2hvd19leGlzdGluZ19mcmFtZSkNCj4gPiA+ICsgICAgICAgIHJldHVybiAw Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoIShjdHgtPnZhX3JjX21vZGUgJiBWQV9SQ19DUVAp KSB7DQo+ID4gPiArICAgICAgICB2cGljLT5taW5fYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4 LT5xbWluLCAxLA0KPiA+ID4gQVYxX01BWF9RVUFOVCk7DQo+ID4gPiArICAgICAgICB2cGljLT5t YXhfYmFzZV9xaW5kZXggPSBhdl9jbGlwKGF2Y3R4LT5xbWF4LCAxLA0KPiA+ID4gQVYxX01BWF9R VUFOVCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICB2cGljLT5iaXRfb2Zmc2V0X3FpbmRleCAg ICAgICAgICAgID0gcWluZGV4X29mZnNldCAtICg4DQo+ID4gPiAtIG9idV9zaXplX2xlbikgKiA4 Ow0KPiA+ID4gKyAgICAgICAgdnBpYy0+Yml0X29mZnNldF9sb29wZmlsdGVyX3BhcmFtcyA9IGxv b3BmaWx0ZXJfb2Zmc2V0IC0NCj4gPiA+ICg4IC0gb2J1X3NpemVfbGVuKSAqIDg7DQo+ID4gPiAr ICAgICAgICB2cGljLT5iaXRfb2Zmc2V0X2NkZWZfcGFyYW1zICAgICAgID0gY2RlZl9zdGFydF9v ZmZzZXQgLQ0KPiA+ID4gKDggLSBvYnVfc2l6ZV9sZW4pICogODsNCj4gPiA+ICsgICAgICAgIHZw aWMtPnNpemVfaW5fYml0c19jZGVmX3BhcmFtcyAgICAgPSBjZGVmX2VuZF9vZmZzZXQgLQ0KPiA+ ID4gY2RlZl9zdGFydF9vZmZzZXQ7DQo+ID4gPiArICAgICAgICB2cGljLT5zaXplX2luX2JpdHNf ZnJhbWVfaGRyX29idSAgID0gKmRhdGFfbGVuOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgdnBp Yy0+Ynl0ZV9vZmZzZXRfZnJhbWVfaGRyX29idV9zaXplID0gKCgocGljLT50eXBlID09DQo+ID4g PiBQSUNUVVJFX1RZUEVfSURSKSA/DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwcml2LT5zaF9kYXRhX2xlbiANCj4gPiA+IC8gOCA6IDApICsN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChm aF9vYnUtDQo+ID4gPiA+aGVhZGVyLm9idV9leHRlbnNpb25fZmxhZyA/DQo+ID4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyIDogMSkpOw0KPiA+ID4g KyAgICB9DQo+ID4gPiArDQo+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgaW50IHRpbGVfbG9nMihpbnQgYmxrU2l6ZSwgaW50IHRhcmdldCkgew0K PiA+ID4gKyAgICBpbnQgazsNCj4gPiA+ICsgICAgZm9yIChrID0gMDsgKGJsa1NpemUgPDwgaykg PCB0YXJnZXQ7IGsrKyk7DQo+ID4gPiArICAgIHJldHVybiBrOw0KPiA+ID4gK30NCj4gPiA+ICsN Cj4gPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfc2V0X3RpbGUoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpw cml2ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgaW50IG1pX2NvbHMsIG1pX3Jvd3Ms IHNiX3NoaWZ0LCBzYl9zaXplOw0KPiA+ID4gKyAgICBpbnQgbWF4X3RpbGVfYXJlYV9zYiwgbWF4 X3RpbGVfYXJlYV9zYl92YXJpZWQ7DQo+ID4gPiArICAgIGludCB0aWxlX3dpZHRoX3NiLCB0aWxl X2hlaWdodF9zYiwgd2lkZXN0X3RpbGVfc2I7DQo+ID4gPiArICAgIGludCBtaW5fbG9nMl90aWxl czsNCj4gPiA+ICsgICAgaW50IHRpbGVfcm93c190bXAsIGk7DQo+ID4gPiArDQo+ID4gPiArICAg IGlmIChwcml2LT50aWxlX2NvbHMgPiBBVjFfTUFYX1RJTEVfQ09MUyB8fA0KPiA+ID4gKyAgICAg ICAgcHJpdi0+dGlsZV9yb3dzID4gQVYxX01BWF9USUxFX1JPV1MpIHsNCj4gPiA+ICsgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB0aWxlIG51bWJlciAlZHglZCwN Cj4gPiA+IHNob3VsZCBsZXNzIHRoYW4gJWR4JWQuXG4iLA0KPiA+ID4gKyAgICAgICAgICAgICAg IHByaXYtPnRpbGVfY29scywgcHJpdi0+dGlsZV9yb3dzLA0KPiA+ID4gQVYxX01BWF9USUxFX0NP TFMsIEFWMV9NQVhfVElMRV9ST1dTKTsNCj4gPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgbWlfY29scyA9IDIgKiAo KGF2Y3R4LT53aWR0aCArIDcpID4+IDMpOw0KPiA+ID4gKyAgICBtaV9yb3dzID0gMiAqICgoYXZj dHgtPmhlaWdodCArIDcpID4+IDMpOw0KPiA+ID4gKyAgICBwcml2LT5zYl9jb2xzID0gcHJpdi0+ dXNlXzEyOHgxMjhfc3VwZXJibG9jayA/DQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAoKG1p X2NvbHMgKyAzMSkgPj4gNSkgOiAoKG1pX2NvbHMgKyAxNSkgPj4NCj4gPiA+IDQpOw0KPiA+ID4g KyAgICBwcml2LT5zYl9yb3dzID0gcHJpdi0+dXNlXzEyOHgxMjhfc3VwZXJibG9jayA/DQo+ID4g PiArICAgICAgICAgICAgICAgICAgICAoKG1pX3Jvd3MgKyAzMSkgPj4gNSkgOiAoKG1pX3Jvd3Mg KyAxNSkgPj4NCj4gPiA+IDQpOw0KPiA+ID4gKyAgICBzYl9zaGlmdCA9IHByaXYtPnVzZV8xMjh4 MTI4X3N1cGVyYmxvY2sgPyA1IDogNDsNCj4gPiA+ICsgICAgc2Jfc2l6ZSAgPSBzYl9zaGlmdCAr IDI7DQo+ID4gPiArICAgIHByaXYtPm1heF90aWxlX3dpZHRoX3NiID0gQVYxX01BWF9USUxFX1dJ RFRIID4+IHNiX3NpemU7DQo+ID4gPiArICAgIG1heF90aWxlX2FyZWFfc2IgPSBBVjFfTUFYX1RJ TEVfQVJFQSAgPj4gKDIgKiBzYl9zaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgcHJpdi0+bWlu X2xvZzJfdGlsZV9jb2xzID0gdGlsZV9sb2cyKHByaXYtDQo+ID4gPiA+bWF4X3RpbGVfd2lkdGhf c2IsIHByaXYtPnNiX2NvbHMpOw0KPiA+ID4gKyAgICBwcml2LT5tYXhfbG9nMl90aWxlX2NvbHMg PSB0aWxlX2xvZzIoMSwgRkZNSU4ocHJpdi0+c2JfY29scywgDQo+ID4gPiBBVjFfTUFYX1RJTEVf Q09MUykpOw0KPiA+ID4gKyAgICBwcml2LT5tYXhfbG9nMl90aWxlX3Jvd3MgPSB0aWxlX2xvZzIo MSwgRkZNSU4ocHJpdi0+c2Jfcm93cywgDQo+ID4gPiBBVjFfTUFYX1RJTEVfUk9XUykpOw0KPiA+ ID4gKyAgICBtaW5fbG9nMl90aWxlcyA9IEZGTUFYKHByaXYtPm1pbl9sb2cyX3RpbGVfY29scywN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlX2xvZzIobWF4X3RpbGVfYXJl YV9zYiwgcHJpdi0NCj4gPiA+ID5zYl9yb3dzICogcHJpdi0+c2JfY29scykpOw0KPiA+ID4gKw0K PiA+ID4gKyAgICBpZiAocHJpdi0+dGlsZV9jb2xzICE9IGF2X2NsaXAocHJpdi0+dGlsZV9jb2xz LCAocHJpdi0NCj4gPiA+ID5zYl9jb2xzICsgcHJpdi0+bWF4X3RpbGVfd2lkdGhfc2IgLSAxKSAv IHByaXYtDQo+ID4gPiA+bWF4X3RpbGVfd2lkdGhfc2IsIHByaXYtPnNiX2NvbHMpKSB7DQo+ID4g PiArICAgICAgICBwcml2LT50aWxlX2NvbHMgPSBhdl9jbGlwKHByaXYtPnRpbGVfY29scywgKHBy aXYtDQo+ID4gPiA+c2JfY29scyArIHByaXYtPm1heF90aWxlX3dpZHRoX3NiIC0gMSkgLyBwcml2 LQ0KPiA+ID4gPm1heF90aWxlX3dpZHRoX3NiLCBwcml2LT5zYl9jb2xzKTsNCj4gPiA+ICsgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgY29scywNCj4g PiA+IGNvcnJlY3QgdG8gJWQuXG4iLCBwcml2LT50aWxlX2NvbHMpOw0KPiA+ID4gKyAgICB9DQo+ ID4gPiArDQo+ID4gPiArICAgIHByaXYtPnRpbGVfY29sc19sb2cyID0gdGlsZV9sb2cyKDEsIHBy aXYtPnRpbGVfY29scyk7DQo+ID4gPiArICAgIHRpbGVfd2lkdGhfc2IgPSAocHJpdi0+c2JfY29s cyArICgxIDw8IHByaXYtPnRpbGVfY29sc19sb2cyKSANCj4gPiA+IC0gMSkgPj4NCj4gPiA+ICsg ICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29sc19sb2cyOw0KPiA+ID4gKw0KPiA+ID4g KyAgICBpZiAocHJpdi0+dGlsZV9yb3dzID4gcHJpdi0+c2Jfcm93cykgew0KPiA+ID4gKyAgICAg ICAgcHJpdi0+dGlsZV9yb3dzID0gcHJpdi0+c2Jfcm93czsNCj4gPiA+ICsgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgcm93cywNCj4gPiA+IGNvcnJl Y3QgdG8gJWQuXG4iLCBwcml2LT50aWxlX3Jvd3MpOw0KPiA+ID4gKyAgICB9DQo+ID4gPiArDQo+ ID4gPiArICAgIGZvciAodGlsZV9yb3dzX3RtcCA9IHByaXYtPnRpbGVfcm93czsgdGlsZV9yb3dz X3RtcCA8PSBwcml2LQ0KPiA+ID4gPnNiX3Jvd3MgJiYgdGlsZV9yb3dzX3RtcCA8PSBBVjFfTUFY X1RJTEVfUk9XUzsgdGlsZV9yb3dzX3RtcCsrKQ0KPiA+ID4gew0KPiA+ID4gKyAgICAgICAgLyoq IHRyeSB1bmlmb3JtZWQgdGlsZS4gKi8NCj4gPiA+ICsgICAgICAgIHByaXYtPnRpbGVfcm93c19s b2cyID0gdGlsZV9sb2cyKDEsIHRpbGVfcm93c190bXApOw0KPiA+ID4gKyAgICAgICAgaWYgKChw cml2LT5zYl9jb2xzICsgdGlsZV93aWR0aF9zYiAtIDEpIC8gdGlsZV93aWR0aF9zYg0KPiA+ID4g PT0gcHJpdi0+dGlsZV9jb2xzKSB7DQo+ID4gPiArICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IHByaXYtPnRpbGVfY29scyAtIDE7IGkrKykNCj4gPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+ d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSB0aWxlX3dpZHRoX3NiIC0NCj4gPiA+IDE7DQo+ID4g PiArICAgICAgICAgICAgcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSBwcml2LT5zYl9j b2xzIC0NCj4gPiA+IChwcml2LT50aWxlX2NvbHMgLSAxKSAqIHRpbGVfd2lkdGhfc2IgLSAxOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgIHRpbGVfaGVpZ2h0X3NiID0gKHByaXYtPnNiX3Jv d3MgKyAoMSA8PCBwcml2LQ0KPiA+ID4gPnRpbGVfcm93c19sb2cyKSAtIDEpID4+DQo+ID4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT50aWxlX3Jvd3NfbG9nMjsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgICAgICAgICBpZiAoKHByaXYtPnNiX3Jvd3MgKyB0aWxlX2hlaWdodF9z YiAtIDEpIC8NCj4gPiA+IHRpbGVfaGVpZ2h0X3NiID09IHRpbGVfcm93c190bXAgJiYNCj4gPiA+ ICsgICAgICAgICAgICAgICAgdGlsZV9oZWlnaHRfc2IgPD0gbWF4X3RpbGVfYXJlYV9zYiAvDQo+ ID4gPiB0aWxlX3dpZHRoX3NiKSB7DQo+ID4gPiArICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCB0aWxlX3Jvd3NfdG1wIC0gMTsgaSsrKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAg cHJpdi0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldID0NCj4gPiA+IHRpbGVfaGVpZ2h0X3NiIC0g MTsNCj4gPiA+ICsgICAgICAgICAgICAgICAgcHJpdi0+aGVpZ2h0X2luX3Nic19taW51c18xW2ld ID0gcHJpdi0+c2Jfcm93cyAtDQo+ID4gPiAodGlsZV9yb3dzX3RtcCAtIDEpICogdGlsZV9oZWln aHRfc2IgLSAxOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgICAgICBwcml2LT51bmlmb3Jt X3RpbGUgPSAxOw0KPiA+ID4gKyAgICAgICAgICAgICAgICBwcml2LT5taW5fbG9nMl90aWxlX3Jv d3MgPSBGRk1BWChtaW5fbG9nMl90aWxlcw0KPiA+ID4gLSBwcml2LT50aWxlX2NvbHNfbG9nMiwg MCk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ID4gKyAgICAg ICAgICAgIH0NCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIC8qKiB0 cnkgbm9uLXVuaWZvcm1lZCB0aWxlLiAqLw0KPiA+ID4gKyAgICAgICAgd2lkZXN0X3RpbGVfc2Ig PSAwOw0KPiA+ID4gKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnRpbGVfY29sczsgaSsr KSB7DQo+ID4gPiArICAgICAgICAgICAgcHJpdi0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV0gPSAo aSArIDEpICogcHJpdi0NCj4gPiA+ID5zYl9jb2xzIC8gcHJpdi0+dGlsZV9jb2xzIC0gaSAqIHBy aXYtPnNiX2NvbHMgLyBwcml2LT50aWxlX2NvbHMNCj4gPiA+IC0gMTsNCj4gPiA+ICsgICAgICAg ICAgICB3aWRlc3RfdGlsZV9zYiA9IEZGTUFYKHdpZGVzdF90aWxlX3NiLCBwcml2LQ0KPiA+ID4g PndpZHRoX2luX3Nic19taW51c18xW2ldICsgMSk7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiAr DQo+ID4gPiArICAgICAgICBpZiAobWluX2xvZzJfdGlsZXMpDQo+ID4gPiArICAgICAgICAgICAg bWF4X3RpbGVfYXJlYV9zYl92YXJpZWQgPSAocHJpdi0+c2Jfcm93cyAqIHByaXYtDQo+ID4gPiA+ c2JfY29scykgPj4gKG1pbl9sb2cyX3RpbGVzICsgMSk7DQo+ID4gPiArICAgICAgICBlbHNlDQo+ ID4gPiArICAgICAgICAgICAgbWF4X3RpbGVfYXJlYV9zYl92YXJpZWQgPSBwcml2LT5zYl9yb3dz ICogcHJpdi0NCj4gPiA+ID5zYl9jb2xzOw0KPiA+ID4gKyAgICAgICAgcHJpdi0+bWF4X3RpbGVf aGVpZ2h0X3NiID0gRkZNQVgoMSwNCj4gPiA+IG1heF90aWxlX2FyZWFfc2JfdmFyaWVkIC8gd2lk ZXN0X3RpbGVfc2IpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgaWYgKHRpbGVfcm93c190bXAg PT0gYXZfY2xpcCh0aWxlX3Jvd3NfdG1wLCAocHJpdi0NCj4gPiA+ID5zYl9yb3dzICsgcHJpdi0+ bWF4X3RpbGVfaGVpZ2h0X3NiIC0gMSkgLyBwcml2LQ0KPiA+ID4gPm1heF90aWxlX2hlaWdodF9z YiwgcHJpdi0+c2Jfcm93cykpIHsNCj4gPiA+ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg dGlsZV9yb3dzX3RtcDsgaSsrKQ0KPiA+ID4gKyAgICAgICAgICAgICAgICBwcml2LT5oZWlnaHRf aW5fc2JzX21pbnVzXzFbaV0gPSAoaSArIDEpICogcHJpdi0NCj4gPiA+ID5zYl9yb3dzIC8gdGls ZV9yb3dzX3RtcCAtIGkgKiBwcml2LT5zYl9yb3dzIC8gdGlsZV9yb3dzX3RtcCAtIDE7DQo+ID4g PiArDQo+ID4gPiArICAgICAgICAgICAgYnJlYWs7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiAr ICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKHByaXYtPnRpbGVfcm93cyAhPSB0aWxlX3Jv d3NfdG1wKSB7DQo+ID4gPiArICAgICAgICBwcml2LT50aWxlX3Jvd3MgPSB0aWxlX3Jvd3NfdG1w Ow0KPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQg dGlsZSByb3dzLA0KPiA+ID4gY29ycmVjdCB0byAlZC5cbiIsIHByaXYtPnRpbGVfcm93cyk7DQo+ ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoqIGNoZWNrIGlmIHRpbGUgY29scy9y b3dzIGlzIHN1cHBvcnRlZCBieSBkcml2ZXIuICovDQo+ID4gPiArICAgIGlmIChwcml2LT5hdHRy X2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWludXMxKSB7DQo+ID4gPiArICAgICAgICBpZiAoKHBy aXYtPnRpbGVfY29scyAqIHByaXYtPnRpbGVfcm93cyAtIDEpID4gcHJpdi0NCj4gPiA+ID5hdHRy X2V4dDIuYml0cy5tYXhfdGlsZV9udW1fbWludXMxKSB7DQo+ID4gPiArICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCB0aWxlIG51bSAlZA0KPiA+ID4g KiAlZCA9ICVkIGJ5IGRyaXZlciwgIg0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAic2hvdWxk IGJlIGxlc3MgdGhhbiAlZC5cbiIsIHByaXYtPnRpbGVfY29scywgDQo+ID4gPiBwcml2LT50aWxl X3Jvd3MsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfY29scyAqIHByaXYt PnRpbGVfcm93cywNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+YXR0cl9leHQyLmJp dHMubWF4X3RpbGVfbnVtX21pbnVzMSArDQo+ID4gPiAxKTsNCj4gPiA+ICsgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ ID4gPiArICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiU2V0dGluZyB0aWxlIGNvbHMv cm93cyB0bw0KPiA+ID4gJWQvJWQuXG4iLA0KPiA+ID4gKyAgICAgICAgICAgcHJpdi0+dGlsZV9j b2xzLCBwcml2LT50aWxlX3Jvd3MpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAvKiogY2hlY2sgaWYg dGlsZSBncm91cCBudW1iZXJzIGlzIHZhbGlkLiAqLw0KPiA+ID4gKyAgICBpZiAocHJpdi0+dGls ZV9ncm91cHMgPiBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MpIHsNCj4gPiA+ICsg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dBUk5JTkcsICJJbnZhbGlkIHRpbGUgZ3JvdXBz DQo+ID4gPiBudW1iZXIgJWQsICINCj4gPiA+ICsgICAgICAgICJjb3JyZWN0IHRvICVkLlxuIiwg cHJpdi0+dGlsZV9ncm91cHMsIHByaXYtPnRpbGVfY29scyAqDQo+ID4gPiBwcml2LT50aWxlX3Jv d3MpOw0KPiA+ID4gKyAgICAgICAgcHJpdi0+dGlsZV9ncm91cHMgPSBwcml2LT50aWxlX2NvbHMg KiBwcml2LT50aWxlX3Jvd3M7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0 dXJuIDA7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2Rl X2F2MV93cml0ZV9zZXF1ZW5jZV9oZWFkZXIoQVZDb2RlY0NvbnRleHQNCj4gPiA+ICphdmN0eCwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKmRhdGEsDQo+ID4gPiBzaXplX3QgKmRhdGFfbGVuKQ0KPiA+ID4gK3sNCj4gPiA+ICsg ICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgbWVtY3B5KGRhdGEsICZwcml2LT5zaF9kYXRhLCBNQVhfUEFSQU1fQlVG RkVSX1NJWkUgKg0KPiA+ID4gc2l6ZW9mKGNoYXIpKTsNCj4gPiA+ICsgICAgKmRhdGFfbGVuID0g cHJpdi0+c2hfZGF0YV9sZW47DQo+ID4gPiArDQo+ID4gPiArICAgIHJldHVybiAwOw0KPiA+ID4g K30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHZhYXBpX2VuY29kZV9hdjFfaW5pdF9zZXF1 ZW5jZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQNCj4gPiA+ICphdmN0eCkNCj4gPiA+ICt7DQo+ID4g PiArICAgIFZBQVBJRW5jb2RlQ29udGV4dCAgICAgICAgICAgICAgICpjdHggPSBhdmN0eC0+cHJp dl9kYXRhOw0KPiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMUNvbnRleHQgICAgICAgICAgICpwcml2 ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAg ICAgICAgKnNoX29idSA9ICZwcml2LT5zaDsNCj4gPiA+ICsgICAgQVYxUmF3U2VxdWVuY2VIZWFk ZXIgICAgICAgICAgICAgICpzaCA9ICZzaF9vYnUtDQo+ID4gPiA+b2J1LnNlcXVlbmNlX2hlYWRl cjsNCj4gPiA+ICsgICAgVkFFbmNTZXF1ZW5jZVBhcmFtZXRlckJ1ZmZlckFWMSAqdnNlcSA9IGN0 eC0NCj4gPiA+ID5jb2RlY19zZXF1ZW5jZV9wYXJhbXM7DQo+ID4gPiArICAgIENvZGVkQml0c3Ry ZWFtRnJhZ21lbnQgICAgICAgICAgICpvYnUgPSAmcHJpdi0+Y3VycmVudF9vYnU7DQo+ID4gPiAr ICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYzsNCj4gPiA+ICsgICAgaW50IHJldDsN Cj4gPiA+ICsNCj4gPiA+ICsgICAgbWVtc2V0KHNoX29idSwgMCwgc2l6ZW9mKCpzaF9vYnUpKTsN Cj4gPiA+ICsgICAgc2hfb2J1LT5oZWFkZXIub2J1X3R5cGUgPSBBVjFfT0JVX1NFUVVFTkNFX0hF QURFUjsNCj4gPiA+ICsNCj4gPiA+ICsgICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocHJp di0+Y29tbW9uLmlucHV0X2ZyYW1lcy0NCj4gPiA+ID5zd19mb3JtYXQpOw0KPiA+ID4gKyAgICBh dl9hc3NlcnQwKGRlc2MpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBzaC0+c2VxX3Byb2ZpbGUgID0g YXZjdHgtPnByb2ZpbGU7DQo+ID4gPiArICAgIGlmICghc2gtPnNlcV9mb3JjZV9zY3JlZW5fY29u dGVudF90b29scykNCj4gPiA+ICsgICAgICAgIHNoLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiA9IEFW MV9TRUxFQ1RfSU5URUdFUl9NVjsNCj4gPiA+ICsgICAgc2gtPmZyYW1lX3dpZHRoX2JpdHNfbWlu dXNfMSAgPSBhdl9sb2cyKGF2Y3R4LT53aWR0aCk7DQo+ID4gPiArICAgIHNoLT5mcmFtZV9oZWln aHRfYml0c19taW51c18xID0gYXZfbG9nMihhdmN0eC0+aGVpZ2h0KTsNCj4gPiA+ICsgICAgc2gt Pm1heF9mcmFtZV93aWR0aF9taW51c18xICAgPSBhdmN0eC0+d2lkdGggLSAxOw0KPiA+ID4gKyAg ICBzaC0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18xICA9IGF2Y3R4LT5oZWlnaHQgLSAxOw0KPiA+ ID4gKyAgICBzaC0+c2VxX3RpZXJbMF0gICAgICAgICAgICAgICA9IHByaXYtPnRpZXI7DQo+ID4g PiArICAgIC8qKiBlbmFibGUgb3JkZXIgaGludCBhbmQgcmVzZXJ2ZSBtYXhpbXVtIDggYml0cyBm b3IgaXQgYnkNCj4gPiA+IGRlZmF1bHQuICovDQo+ID4gPiArICAgIHNoLT5lbmFibGVfb3JkZXJf aGludCAgICAgICAgID0gMTsNCj4gPiA+ICsgICAgc2gtPm9yZGVyX2hpbnRfYml0c19taW51c18x ICAgPSA3Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBzaC0+Y29sb3JfY29uZmlnID0gKEFWMVJhd0Nv bG9yQ29uZmlnKSB7DQo+ID4gPiArICAgICAgICAuaGlnaF9iaXRkZXB0aCAgICAgICAgICAgICAg ICAgID0gZGVzYy0+Y29tcFswXS5kZXB0aCA9PQ0KPiA+ID4gOCA/IDAgOiAxLA0KPiA+ID4gKyAg ICAgICAgLmNvbG9yX3ByaW1hcmllcyAgICAgICAgICAgICAgICA9IGF2Y3R4LQ0KPiA+ID4gPmNv bG9yX3ByaW1hcmllcywNCj4gPiA+ICsgICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3Mg ICAgICAgPSBhdmN0eC0+Y29sb3JfdHJjLA0KPiA+ID4gKyAgICAgICAgLm1hdHJpeF9jb2VmZmlj aWVudHMgICAgICAgICAgICA9IGF2Y3R4LT5jb2xvcnNwYWNlLA0KPiA+ID4gKyAgICAgICAgLmNv bG9yX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZyA9IChhdmN0eC0NCj4gPiA+ID5jb2xvcl9wcmlt YXJpZXMgIT0gQVZDT0xfUFJJX1VOU1BFQ0lGSUVEIHx8DQo+ID4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LQ0KPiA+ID4gPmNvbG9yX3RyYyAgICAg ICAhPSBBVkNPTF9UUkNfVU5TUEVDSUZJRUQgfHwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtDQo+ID4gPiA+Y29sb3JzcGFjZSAgICAgICE9 IEFWQ09MX1NQQ19VTlNQRUNJRklFRCksDQo+ID4gPiArICAgICAgICAuY29sb3JfcmFuZ2UgICAg ICAgICAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yX3JhbmdlID09DQo+ID4gPiBBVkNPTF9SQU5H RV9KUEVHLA0KPiA+ID4gKyAgICAgICAgLnN1YnNhbXBsaW5nX3ggICAgICAgICAgICAgICAgICA9 IGRlc2MtPmxvZzJfY2hyb21hX3csDQo+ID4gPiArICAgICAgICAuc3Vic2FtcGxpbmdfeSAgICAg ICAgICAgICAgICAgID0gZGVzYy0+bG9nMl9jaHJvbWFfaCwNCj4gPiA+ICsgICAgfTsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCAhPSBGRl9MRVZFTF9VTktOT1dOKSB7DQo+ ID4gPiArICAgICAgICBzaC0+c2VxX2xldmVsX2lkeFswXSA9IGF2Y3R4LT5sZXZlbDsNCj4gPiA+ ICsgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICAgIGNvbnN0IEFWMUxldmVsRGVzY3JpcHRvciAq bGV2ZWw7DQo+ID4gPiArICAgICAgICBmbG9hdCBmcmFtZXJhdGU7DQo+ID4gPiArDQo+ID4gPiAr ICAgICAgICBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwICYmIGF2Y3R4LT5mcmFtZXJhdGUu ZGVuID4NCj4gPiA+IDApDQo+ID4gPiArICAgICAgICAgICAgZnJhbWVyYXRlID0gYXZjdHgtPmZy YW1lcmF0ZS5udW0gLyBhdmN0eC0NCj4gPiA+ID5mcmFtZXJhdGUuZGVuOw0KPiA+ID4gKyAgICAg ICAgZWxzZQ0KPiA+ID4gKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IDA7DQo+ID4gPiArDQo+ID4g PiArICAgICAgICBsZXZlbCA9IGZmX2F2MV9ndWVzc19sZXZlbChhdmN0eC0+Yml0X3JhdGUsIHBy aXYtPnRpZXIsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgt PnN1cmZhY2Vfd2lkdGgsIGN0eC0NCj4gPiA+ID5zdXJmYWNlX2hlaWdodCwNCj4gPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnRpbGVfcm93cyAqIHByaXYtDQo+ ID4gPiA+dGlsZV9jb2xzLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJpdi0+dGlsZV9jb2xzLCBmcmFtZXJhdGUpOw0KPiA+ID4gKyAgICAgICAgaWYgKGxldmVs KSB7DQo+ID4gPiArICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlVz aW5nIGxldmVsICVzLlxuIiwNCj4gPiA+IGxldmVsLT5uYW1lKTsNCj4gPiA+ICsgICAgICAgICAg ICBzaC0+c2VxX2xldmVsX2lkeFswXSA9IGxldmVsLT5sZXZlbF9pZHg7DQo+ID4gPiArICAgICAg ICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICJTdHJlYW0gd2lsbCBub3QNCj4gPiA+IGNvbmZvcm0gdG8gIg0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAiYW55IG5vcm1hbCBsZXZlbCwgdXNpbmcgbGV2ZWwgNi4zIGJ5DQo+ID4gPiBk ZWZhdWx0LlxuIik7DQo+ID4gPiArICAgICAgICAgICAgc2gtPnNlcV9sZXZlbF9pZHhbMF0gPSAx OTsNCj4gPiA+ICsgICAgICAgICAgICBzaC0+c2VxX3RpZXJbMF0gPSAxOw0KPiA+ID4gKyAgICAg ICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIHZzZXEtPnNlcV9wcm9maWxlICAgICAgICAg ICAgID0gc2gtPnNlcV9wcm9maWxlOw0KPiA+ID4gKyAgICB2c2VxLT5zZXFfbGV2ZWxfaWR4ICAg ICAgICAgICA9IHNoLT5zZXFfbGV2ZWxfaWR4WzBdOw0KPiA+ID4gKyAgICB2c2VxLT5zZXFfdGll ciAgICAgICAgICAgICAgICA9IHNoLT5zZXFfdGllclswXTsNCj4gPiA+ICsgICAgdnNlcS0+b3Jk ZXJfaGludF9iaXRzX21pbnVzXzEgPSBzaC0+b3JkZXJfaGludF9iaXRzX21pbnVzXzE7DQo+ID4g PiArICAgIHZzZXEtPmludHJhX3BlcmlvZCAgICAgICAgICAgID0gY3R4LT5nb3Bfc2l6ZTsNCj4g PiA+ICsgICAgdnNlcS0+aXBfcGVyaW9kICAgICAgICAgICAgICAgPSBjdHgtPmJfcGVyX3AgKyAx Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICB2c2VxLT5zZXFfZmllbGRzLmJpdHMuZW5hYmxlX29yZGVy X2hpbnQgPSBzaC0NCj4gPiA+ID5lbmFibGVfb3JkZXJfaGludDsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgaWYgKCEoY3R4LT52YV9yY19tb2RlICYgVkFfUkNfQ1FQKSkgew0KPiA+ID4gKyAgICAgICAg dnNlcS0+Yml0c19wZXJfc2Vjb25kID0gY3R4LT52YV9iaXRfcmF0ZTsNCj4gPiA+ICsgICAgICAg IHZzZXEtPnNlcV9maWVsZHMuYml0cy5lbmFibGVfY2RlZiA9IHNoLT5lbmFibGVfY2RlZiA9IDE7 DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2 MV9hZGRfb2J1KGF2Y3R4LCBvYnUsDQo+ID4gPiBBVjFfT0JVX1NFUVVFTkNFX0hFQURFUiwgJnBy aXYtPnNoKTsNCj4gPiA+ICsgICAgaWYgKHJldCA8IDApDQo+ID4gPiArICAgICAgICBnb3RvIGVu ZDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgcmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9vYnUo YXZjdHgsIHByaXYtPnNoX2RhdGEsDQo+ID4gPiAmcHJpdi0+c2hfZGF0YV9sZW4sIG9idSk7DQo+ ID4gPiArICAgIGlmIChyZXQgPCAwKQ0KPiA+ID4gKyAgICAgICAgZ290byBlbmQ7DQo+ID4gPiAr DQo+ID4gPiArZW5kOg0KPiA+ID4gKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQob2J1KTsNCj4g PiA+ICsgICAgcmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGlu dCB2YWFwaV9lbmNvZGVfYXYxX2luaXRfcGljdHVyZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQNCj4g PiA+ICphdmN0eCwNCj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWQUFQSUVuY29kZVBpY3R1DQo+ID4gPiByZSAqcGljKQ0KPiA+ID4gK3sNCj4g PiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAgICAgICpwcml2ID0gYXZjdHgtPnBy aXZfZGF0YTsNCj4gPiA+ICsgICAgVkFBUElFbmNvZGVBVjFQaWN0dXJlICAgICAgICAgICpocGlj ID0gcGljLT5wcml2X2RhdGE7DQo+ID4gPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICAg ICAgKmZoX29idSA9ICZwcml2LT5maDsNCj4gPiA+ICsgICAgQVYxUmF3RnJhbWVIZWFkZXIgICAg ICAgICAgICAgICAgKmZoID0gJmZoX29idS0NCj4gPiA+ID5vYnUuZnJhbWUuaGVhZGVyOw0KPiA+ ID4gKyAgICBWQUVuY1BpY3R1cmVQYXJhbWV0ZXJCdWZmZXJBVjEgKnZwaWMgPSBwaWMtDQo+ID4g PiA+Y29kZWNfcGljdHVyZV9wYXJhbXM7DQo+ID4gPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21l bnQgICAgICAgICAgKm9idSA9ICZwcml2LT5jdXJyZW50X29idTsNCj4gPiA+ICsgICAgVkFBUElF bmNvZGVQaWN0dXJlICAgICpyZWY7DQo+ID4gPiArICAgIFZBQVBJRW5jb2RlQVYxUGljdHVyZSAq aHJlZjsNCj4gPiA+ICsgICAgaW50IHNsb3QsIGk7DQo+ID4gPiArICAgIGludCByZXQ7DQo+ID4g PiArICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QNCj4gPiA+IGRlZmF1bHRfbG9vcF9maWx0ZXJfcmVm X2RlbHRhc1tBVjFfVE9UQUxfUkVGU19QRVJfRlJBTUVdID0NCj4gPiA+ICsgICAgICAgIHsgMSwg MCwgMCwgMCwgLTEsIDAsIC0xLCAtMSB9Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBtZW1zZXQoZmhf b2J1LCAwLCBzaXplb2YoKmZoX29idSkpOw0KPiA+ID4gKyAgICBwaWMtPm5iX3NsaWNlcyA9IHBy aXYtPnRpbGVfZ3JvdXBzOw0KPiA+ID4gKyAgICBmaF9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFW MV9PQlVfRlJBTUVfSEVBREVSOw0KPiA+ID4gKyAgICBmaF9vYnUtPmhlYWRlci5vYnVfaGFzX3Np emVfZmllbGQgPSAxOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBzd2l0Y2ggKHBpYy0+dHlwZSkgew0K PiA+ID4gKyAgICBjYXNlIFBJQ1RVUkVfVFlQRV9JRFI6DQo+ID4gPiArICAgICAgICBhdl9hc3Nl cnQwKHBpYy0+bmJfcmVmc1swXSA9PSAwIHx8IHBpYy0+bmJfcmVmc1sxXSk7DQo+ID4gPiArICAg ICAgICBmaC0+ZnJhbWVfdHlwZSA9IEFWMV9GUkFNRV9LRVk7DQo+ID4gPiArICAgICAgICBmaC0+ cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4RkY7DQo+ID4gPiArICAgICAgICBmaC0+YmFzZV9xX2lk eCA9IHByaXYtPnFfaWR4X2lkcjsNCj4gPiA+ICsgICAgICAgIGhwaWMtPnNsb3QgPSAwOw0KPiA+ ID4gKyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBwaWMtPmRpc3BsYXlfb3JkZXI7DQo+ ID4gPiArICAgICAgICBicmVhazsNCj4gPiA+ICsgICAgY2FzZSBQSUNUVVJFX1RZUEVfUDoNCj4g PiA+ICsgICAgICAgIGF2X2Fzc2VydDAocGljLT5uYl9yZWZzWzBdKTsNCj4gPiA+ICsgICAgICAg IGZoLT5mcmFtZV90eXBlID0gQVYxX0ZSQU1FX0lOVEVSOw0KPiA+ID4gKyAgICAgICAgZmgtPmJh c2VfcV9pZHggPSBwcml2LT5xX2lkeF9wOw0KPiA+ID4gKyAgICAgICAgcmVmID0gcGljLT5yZWZz WzBdW3BpYy0+bmJfcmVmc1swXSAtIDFdOw0KPiA+ID4gKyAgICAgICAgaHJlZiA9IHJlZi0+cHJp dl9kYXRhOw0KPiA+ID4gKyAgICAgICAgaHBpYy0+c2xvdCA9ICFocmVmLT5zbG90Ow0KPiA+ID4g KyAgICAgICAgaHBpYy0+bGFzdF9pZHJfZnJhbWUgPSBocmVmLT5sYXN0X2lkcl9mcmFtZTsNCj4g PiA+ICsgICAgICAgIGZoLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0gMSA8PCBocGljLT5zbG90Ow0K PiA+ID4gKw0KPiA+ID4gKyAgICAgICAgLyoqIHNldCB0aGUgbmVhcmVzdCBmcmFtZSBpbiBMMCBh cyBhbGwgcmVmZXJlbmNlIGZyYW1lLg0KPiA+ID4gKi8NCj4gPiA+ICsgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykgew0KPiA+ID4gKyAgICAgICAgICAgIGZo LT5yZWZfZnJhbWVfaWR4W2ldID0gaHJlZi0+c2xvdDsNCj4gPiA+ICsgICAgICAgIH0NCj4gPiA+ ICsgICAgICAgIGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IGhyZWYtPnNsb3Q7DQo+ID4gPiArICAg ICAgICBmaC0+cmVmX29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSByZWYtPmRpc3BsYXlfb3JkZXIg LQ0KPiA+ID4gaHJlZi0+bGFzdF9pZHJfZnJhbWU7DQo+ID4gPiArICAgICAgICB2cGljLT5yZWZf ZnJhbWVfY3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPQ0KPiA+ID4gQVYxX1JFRl9GUkFNRV9M QVNUOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgLyoqIHNldCB0aGUgMm5kIG5lYXJlc3QgZnJh bWUgaW4gTDAgYXMgR29sZGVuIGZyYW1lLiAqLw0KPiA+ID4gKyAgICAgICAgaWYgKHBpYy0+bmJf cmVmc1swXSA+IDEpIHsNCj4gPiA+ICsgICAgICAgICAgICByZWYgPSBwaWMtPnJlZnNbMF1bcGlj LT5uYl9yZWZzWzBdIC0gMl07DQo+ID4gPiArICAgICAgICAgICAgaHJlZiA9IHJlZi0+cHJpdl9k YXRhOw0KPiA+ID4gKyAgICAgICAgICAgIGZoLT5yZWZfZnJhbWVfaWR4WzNdID0gaHJlZi0+c2xv dDsNCj4gPiA+ICsgICAgICAgICAgICBmaC0+cmVmX29yZGVyX2hpbnRbaHJlZi0+c2xvdF0gPSBy ZWYtPmRpc3BsYXlfb3JkZXINCj4gPiA+IC0gaHJlZi0+bGFzdF9pZHJfZnJhbWU7DQo+ID4gPiAr ICAgICAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRzLnNlYXJjaF9pZHgxID0N Cj4gPiA+IEFWMV9SRUZfRlJBTUVfR09MREVOOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAg ICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGNhc2UgUElDVFVSRV9UWVBFX0I6DQo+ID4gPiArICAg ICAgICBhdl9hc3NlcnQwKHBpYy0+bmJfcmVmc1swXSAmJiBwaWMtPm5iX3JlZnNbMV0pOw0KPiA+ ID4gKyAgICAgICAgZmgtPmZyYW1lX3R5cGUgPSBBVjFfRlJBTUVfSU5URVI7DQo+ID4gPiArICAg ICAgICBmaC0+YmFzZV9xX2lkeCA9IHByaXYtPnFfaWR4X2I7DQo+ID4gPiArICAgICAgICBmaC0+ cmVmcmVzaF9mcmFtZV9mbGFncyA9IDB4MDsNCj4gPiA+ICsgICAgICAgIGZoLT5yZWZlcmVuY2Vf c2VsZWN0ID0gMTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIC8qKiBCIGZyYW1lIHdpbGwgbm90 IGJlIHJlZmVyZW5jZWQsIGRpc2FibGUgaXRzIHJlY29uDQo+ID4gPiBmcmFtZS4gKi8NCj4gPiA+ ICsgICAgICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5kaXNhYmxlX2ZyYW1lX3JlY29uID0g MTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIC8qKiBVc2UgTEFTVF9GUkFNRSBhbmQgQldEUkVG X0ZSQU1FIGZvciByZWZlcmVuY2UuICovDQo+ID4gPiArICAgICAgICB2cGljLT5yZWZfZnJhbWVf Y3RybF9sMC5maWVsZHMuc2VhcmNoX2lkeDAgPQ0KPiA+ID4gQVYxX1JFRl9GUkFNRV9MQVNUOw0K PiA+ID4gKyAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDEuZmllbGRzLnNlYXJjaF9pZHgw ID0NCj4gPiA+IEFWMV9SRUZfRlJBTUVfQldEUkVGOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAg cmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcGljLT5yZWZzWzBdW3BpYy0NCj4gPiA+ ID5uYl9yZWZzWzBdIC0gMV07DQo+ID4gPiArICAgICAgICBocmVmICAgICAgICAgICAgICAgICAg ICAgICAgICAgPSByZWYtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgICAgIGhwaWMtPmxhc3RfaWRy X2ZyYW1lICAgICAgICAgICA9IGhyZWYtPmxhc3RfaWRyX2ZyYW1lOw0KPiA+ID4gKyAgICAgICAg ZmgtPnByaW1hcnlfcmVmX2ZyYW1lICAgICAgICAgID0gaHJlZi0+c2xvdDsNCj4gPiA+ICsgICAg ICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAt DQo+ID4gPiBocmVmLT5sYXN0X2lkcl9mcmFtZTsNCj4gPiA+ICsgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSsrKSB7DQo+ID4gPiArICAgICAgICAgICAgZmgt PnJlZl9mcmFtZV9pZHhbaV0gPSBocmVmLT5zbG90Ow0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4g Kw0KPiA+ID4gKyAgICAgICAgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gcGljLT5y ZWZzWzFdW3BpYy0NCj4gPiA+ID5uYl9yZWZzWzFdIC0gMV07DQo+ID4gPiArICAgICAgICBocmVm ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSByZWYtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAg ICAgIGZoLT5yZWZfb3JkZXJfaGludFtocmVmLT5zbG90XSA9IHJlZi0+ZGlzcGxheV9vcmRlciAt DQo+ID4gPiBocmVmLT5sYXN0X2lkcl9mcmFtZTsNCj4gPiA+ICsgICAgICAgIGZvciAoaSA9IEFW MV9SRUZfRlJBTUVfR09MREVOOyBpIDwgQVYxX1JFRlNfUEVSX0ZSQU1FOw0KPiA+ID4gaSsrKSB7 DQo+ID4gPiArICAgICAgICAgICAgZmgtPnJlZl9mcmFtZV9pZHhbaV0gPSBocmVmLT5zbG90Ow0K PiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAgICAgICAgYnJlYWs7DQo+ID4gPiArICAgIGRlZmF1 bHQ6DQo+ID4gPiArICAgICAgICBhdl9hc3NlcnQwKDAgJiYgImludmFsaWQgcGljdHVyZSB0eXBl Iik7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgZmgtPnNob3dfZnJhbWUgICAg ICAgICAgICAgICAgPSBwaWMtPmRpc3BsYXlfb3JkZXIgPD0gcGljLQ0KPiA+ID4gPmVuY29kZV9v cmRlcjsNCj4gPiA+ICsgICAgZmgtPnNob3dhYmxlX2ZyYW1lICAgICAgICAgICAgPSBmaC0+ZnJh bWVfdHlwZSAhPQ0KPiA+ID4gQVYxX0ZSQU1FX0tFWTsNCj4gPiA+ICsgICAgZmgtPmZyYW1lX3dp ZHRoX21pbnVzXzEgICAgICAgPSBhdmN0eC0+d2lkdGggLSAxOw0KPiA+ID4gKyAgICBmaC0+ZnJh bWVfaGVpZ2h0X21pbnVzXzEgICAgICA9IGF2Y3R4LT5oZWlnaHQgLSAxOw0KPiA+ID4gKyAgICBm aC0+cmVuZGVyX3dpZHRoX21pbnVzXzEgICAgICA9IGZoLT5mcmFtZV93aWR0aF9taW51c18xOw0K PiA+ID4gKyAgICBmaC0+cmVuZGVyX2hlaWdodF9taW51c18xICAgICA9IGZoLT5mcmFtZV9oZWln aHRfbWludXNfMTsNCj4gPiA+ICsgICAgZmgtPm9yZGVyX2hpbnQgICAgICAgICAgICAgICAgPSBw aWMtPmRpc3BsYXlfb3JkZXIgLSBocGljLQ0KPiA+ID4gPmxhc3RfaWRyX2ZyYW1lOw0KPiA+ID4g KyAgICBmaC0+dGlsZV9jb2xzICAgICAgICAgICAgICAgICA9IHByaXYtPnRpbGVfY29sczsNCj4g PiA+ICsgICAgZmgtPnRpbGVfcm93cyAgICAgICAgICAgICAgICAgPSBwcml2LT50aWxlX3Jvd3M7 DQo+ID4gPiArICAgIGZoLT50aWxlX2NvbHNfbG9nMiAgICAgICAgICAgID0gcHJpdi0+dGlsZV9j b2xzX2xvZzI7DQo+ID4gPiArICAgIGZoLT50aWxlX3Jvd3NfbG9nMiAgICAgICAgICAgID0gcHJp di0+dGlsZV9yb3dzX2xvZzI7DQo+ID4gPiArICAgIGZoLT51bmlmb3JtX3RpbGVfc3BhY2luZ19m bGFnID0gcHJpdi0+dW5pZm9ybV90aWxlOw0KPiA+ID4gKyAgICBmaC0+dGlsZV9zaXplX2J5dGVz X21pbnVzMSAgICA9IHByaXYtDQo+ID4gPiA+YXR0cl9leHQyLmJpdHMudGlsZV9zaXplX2J5dGVz X21pbnVzMTsNCj4gPiA+ICsgICAgZmgtPnJlZHVjZWRfdHhfc2V0ICAgICAgICAgICAgPSAxOw0K PiA+ID4gKw0KPiA+ID4gKyAgICAvKiogaWdub3JlIE9OTFlfNHg0IG1vZGUgZm9yIGNvZGVkbG9z c2xlc3MgaXMgbm90IGZ1bGx5DQo+ID4gPiBpbXBsZW1lbnRlZC4gKi8NCj4gPiA+ICsgICAgaWYg KHByaXYtPmF0dHJfZXh0Mi5iaXRzLnR4X21vZGVfc3VwcG9ydCAmIDB4MDQpDQo+ID4gPiArICAg ICAgICBmaC0+dHhfbW9kZSA9IEFWMV9UWF9NT0RFX1NFTEVDVDsNCj4gPiA+ICsgICAgZWxzZSBp ZiAocHJpdi0+YXR0cl9leHQyLmJpdHMudHhfbW9kZV9zdXBwb3J0ICYgMHgwMikNCj4gPiA+ICsg ICAgICAgIGZoLT50eF9tb2RlID0gQVYxX1RYX01PREVfTEFSR0VTVDsNCj4gPiA+ICsgICAgZWxz ZQ0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgZm9yIChpID0gMDsgaSA8IGZoLT50aWxlX2NvbHM7IGkrKykNCj4gPiA+ICsgICAgICAg IGZoLT53aWR0aF9pbl9zYnNfbWludXNfMVtpXSA9IHZwaWMtDQo+ID4gPiA+d2lkdGhfaW5fc2Jz X21pbnVzXzFbaV0gPSBwcml2LT53aWR0aF9pbl9zYnNfbWludXNfMVtpXTsNCj4gPiA+ICsNCj4g PiA+ICsgICAgZm9yIChpID0gMDsgaSA8IGZoLT50aWxlX3Jvd3M7IGkrKykNCj4gPiA+ICsgICAg ICAgIGZoLT5oZWlnaHRfaW5fc2JzX21pbnVzXzFbaV0gPSB2cGljLQ0KPiA+ID4gPmhlaWdodF9p bl9zYnNfbWludXNfMVtpXSA9IHByaXYtPmhlaWdodF9pbl9zYnNfbWludXNfMVtpXTsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgbWVtY3B5KGZoLT5sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLA0KPiA+ID4g ZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzLA0KPiA+ID4gKyAgICAgICAgICAgQVYxX1RP VEFMX1JFRlNfUEVSX0ZSQU1FICogc2l6ZW9mKGludDhfdCkpOw0KPiA+ID4gKw0KPiA+ID4gKyAg ICBpZiAoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1FX0tFWSAmJiBmaC0+c2hvd19mcmFtZSkg ew0KPiA+ID4gKyAgICAgICAgZmgtPmVycm9yX3Jlc2lsaWVudF9tb2RlID0gMTsNCj4gPiA+ICsg ICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBpZiAoZmgtPmZyYW1lX3R5cGUgPT0gQVYxX0ZSQU1F X0tFWSB8fCBmaC0NCj4gPiA+ID5lcnJvcl9yZXNpbGllbnRfbW9kZSkNCj4gPiA+ICsgICAgICAg IGZoLT5wcmltYXJ5X3JlZl9mcmFtZSA9IEFWMV9QUklNQVJZX1JFRl9OT05FOw0KPiA+ID4gKw0K PiA+ID4gKyAgICB2cGljLT5iYXNlX3FpbmRleCAgICAgICAgICA9IGZoLT5iYXNlX3FfaWR4Ow0K PiA+ID4gKyAgICB2cGljLT5mcmFtZV93aWR0aF9taW51c18xICA9IGZoLT5mcmFtZV93aWR0aF9t aW51c18xOw0KPiA+ID4gKyAgICB2cGljLT5mcmFtZV9oZWlnaHRfbWludXNfMSA9IGZoLT5mcmFt ZV9oZWlnaHRfbWludXNfMTsNCj4gPiA+ICsgICAgdnBpYy0+cHJpbWFyeV9yZWZfZnJhbWUgICAg PSBmaC0+cHJpbWFyeV9yZWZfZnJhbWU7DQo+ID4gPiArICAgIHZwaWMtPnJlY29uc3RydWN0ZWRf ZnJhbWUgID0gcGljLT5yZWNvbl9zdXJmYWNlOw0KPiA+ID4gKyAgICB2cGljLT5jb2RlZF9idWYg ICAgICAgICAgICA9IHBpYy0+b3V0cHV0X2J1ZmZlcjsNCj4gPiA+ICsgICAgdnBpYy0+dGlsZV9j b2xzICAgICAgICAgICAgPSBmaC0+dGlsZV9jb2xzOw0KPiA+ID4gKyAgICB2cGljLT50aWxlX3Jv d3MgICAgICAgICAgICA9IGZoLT50aWxlX3Jvd3M7DQo+ID4gPiArICAgIHZwaWMtPm9yZGVyX2hp bnQgICAgICAgICAgID0gZmgtPm9yZGVyX2hpbnQ7DQo+ID4gPiArI2lmIFZBX0NIRUNLX1ZFUlNJ T04oMSwgMTUsIDApDQo+ID4gPiArICAgIHZwaWMtPnJlZnJlc2hfZnJhbWVfZmxhZ3MgID0gZmgt PnJlZnJlc2hfZnJhbWVfZmxhZ3M7DQo+ID4gPiArI2VuZGlmDQo+ID4gPiArDQo+ID4gPiArICAg IHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5lbmFibGVfZnJhbWVfb2J1ICAgICA9IDA7DQo+ID4g PiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0cy5mcmFtZV90eXBlICAgICAgICAgICA9IGZo LQ0KPiA+ID4gPmZyYW1lX3R5cGU7DQo+ID4gPiArICAgIHZwaWMtPnBpY3R1cmVfZmxhZ3MuYml0 cy5yZWR1Y2VkX3R4X3NldCAgICAgICA9IGZoLQ0KPiA+ID4gPnJlZHVjZWRfdHhfc2V0Ow0KPiA+ ID4gKyAgICB2cGljLT5waWN0dXJlX2ZsYWdzLmJpdHMuZXJyb3JfcmVzaWxpZW50X21vZGUgPSBm aC0NCj4gPiA+ID5lcnJvcl9yZXNpbGllbnRfbW9kZTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoq IGxldCBkcml2ZXIgZGVjaWRlIHRvIHVzZSBzaW5nbGUgb3IgY29tcG91bmQgcmVmZXJlbmNlDQo+ ID4gPiBwcmVkaWN0aW9uIG1vZGUuICovDQo+ID4gPiArICAgIHZwaWMtPm1vZGVfY29udHJvbF9m bGFncy5iaXRzLnJlZmVyZW5jZV9tb2RlID0gZmgtDQo+ID4gPiA+cmVmZXJlbmNlX3NlbGVjdCA/ IDIgOiAwOw0KPiA+ID4gKyAgICB2cGljLT5tb2RlX2NvbnRyb2xfZmxhZ3MuYml0cy50eF9tb2Rl ID0gZmgtPnR4X21vZGU7DQo+ID4gPiArDQo+ID4gPiArICAgIHZwaWMtPnRpbGVfZ3JvdXBfb2J1 X2hkcl9pbmZvLmJpdHMub2J1X2hhc19zaXplX2ZpZWxkID0gMTsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgLyoqIHNldCByZWZlcmVuY2UuICovDQo+ID4gPiArICAgIGZvciAoaSA9IDA7IGkgPCBBVjFf UkVGU19QRVJfRlJBTUU7IGkrKykNCj4gPiA+ICsgICAgICAgIHZwaWMtPnJlZl9mcmFtZV9pZHhb aV0gPSBmaC0+cmVmX2ZyYW1lX2lkeFtpXTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgZm9yIChpID0g MDsgaSA8IEZGX0FSUkFZX0VMRU1TKHZwaWMtPnJlZmVyZW5jZV9mcmFtZXMpOyBpKyspDQo+ID4g PiArICAgICAgICB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW2ldID0gVkFfSU5WQUxJRF9TVVJGQUNF Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX1JFRkVSRU5DRV9MSVNU X05VTTsgaSsrKSB7DQo+ID4gPiArICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBpYy0+bmJf cmVmc1tpXTsgaisrKSB7DQo+ID4gPiArICAgICAgICAgICAgVkFBUElFbmNvZGVQaWN0dXJlICpy ZWZfcGljID0gcGljLT5yZWZzW2ldW2pdOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgICAgIHNs b3QgPSAoKFZBQVBJRW5jb2RlQVYxUGljdHVyZSopcmVmX3BpYy0+cHJpdl9kYXRhKS0NCj4gPiA+ ID5zbG90Ow0KPiA+ID4gKyAgICAgICAgICAgIGF2X2Fzc2VydDAodnBpYy0+cmVmZXJlbmNlX2Zy YW1lc1tzbG90XSA9PQ0KPiA+ID4gVkFfSU5WQUxJRF9TVVJGQUNFKTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgICAgICAgICB2cGljLT5yZWZlcmVuY2VfZnJhbWVzW3Nsb3RdID0gcmVmX3BpYy0NCj4g PiA+ID5yZWNvbl9zdXJmYWNlOw0KPiA+ID4gKyAgICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4g PiArDQo+ID4gPiArICAgIC8qKiBwYWNrIGZyYW1lIGhlYWRlciwgYW5kIHNldCB2YSBwYXJhbXMg b2Zmc2V0IGxpa2UNCj4gPiA+IGJpdF9vZmZzZXRfcWluZGV4IGV0Yy4gKi8NCj4gPiA+ICsgICAg cmV0ID0gdmFhcGlfZW5jb2RlX2F2MV93cml0ZV9mcmFtZV9oZWFkZXIoYXZjdHgsIHBpYywgcHJp di0NCj4gPiA+ID5maF9kYXRhLCAmcHJpdi0+ZmhfZGF0YV9sZW4pOw0KPiA+ID4gKyAgICBpZiAo cmV0IDwgMCkNCj4gPiA+ICsgICAgICAgIGdvdG8gZW5kOw0KPiA+ID4gKw0KPiA+ID4gK2VuZDoN Cj4gPiA+ICsgICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7DQo+ID4gPiArICAgIHJldHVy biByZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgdmFhcGlfZW5jb2Rl X2F2MV9pbml0X3NsaWNlX3BhcmFtcyhBVkNvZGVjQ29udGV4dA0KPiA+ID4gKmF2Y3R4LA0KPiA+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUFQSUVu Y29kZVBpY3R1cmUNCj4gPiA+ICpwaWMsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZBQVBJRW5jb2RlU2xpY2UNCj4gPiA+ICpzbGljZSkNCj4g PiA+ICt7DQo+ID4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgICAgICpwcml2ID0gYXZj dHgtPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgVkFFbmNUaWxlR3JvdXBCdWZmZXJBVjEgICp2c2xp Y2UgPSBzbGljZS0NCj4gPiA+ID5jb2RlY19zbGljZV9wYXJhbXM7DQo+ID4gPiArICAgIENvZGVk Qml0c3RyZWFtQVYxQ29udGV4dCAgKmNiY3R4ID0gcHJpdi0+Y2JjLT5wcml2X2RhdGE7DQo+ID4g PiArICAgIGludCBkaXY7DQo+ID4gPiArDQo+ID4gPiArICAgIC8qKiBTZXQgdGlsZSBncm91cCBp bmZvLiAqLw0KPiA+ID4gKyAgICBkaXYgPSBwcml2LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jv d3MgLyBwcml2LT50aWxlX2dyb3VwczsNCj4gPiA+ICsgICAgdnNsaWNlLT50Z19zdGFydCA9IHNs aWNlLT5pbmRleCAqIGRpdjsNCj4gPiA+ICsgICAgaWYgKHNsaWNlLT5pbmRleCA9PSAocHJpdi0+ dGlsZV9ncm91cHMgLSAxKSkgew0KPiA+ID4gKyAgICAgICAgdnNsaWNlLT50Z19lbmQgPSBwcml2 LT50aWxlX2NvbHMgKiBwcml2LT50aWxlX3Jvd3MgLSAxOw0KPiA+ID4gKyAgICAgICAgY2JjdHgt PnNlZW5fZnJhbWVfaGVhZGVyID0gMDsNCj4gPiA+ICsgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAg ICAgIHZzbGljZS0+dGdfZW5kID0gKHNsaWNlLT5pbmRleCArIDEpICogZGl2IC0gMTsNCj4gPiA+ ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiAr DQo+ID4gPiArc3RhdGljIGludCB2YWFwaV9lbmNvZGVfYXYxX3dyaXRlX3BpY3R1cmVfaGVhZGVy KEFWQ29kZWNDb250ZXh0DQo+ID4gPiAqYXZjdHgsDQo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZBQVBJRW5jb2RlUGljdA0KPiA+ID4gdXJl ICpwaWMsDQo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKmRhdGEsDQo+ID4gPiBzaXplX3QgKmRhdGFfbGVuKQ0KPiA+ID4gK3sNCj4g PiA+ICsgICAgVkFBUElFbmNvZGVBVjFDb250ZXh0ICAgICAqcHJpdiA9IGF2Y3R4LT5wcml2X2Rh dGE7DQo+ID4gPiArICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAgICpvYnUgPSAmcHJpdi0+ Y3VycmVudF9vYnU7DQo+ID4gPiArICAgIEFWMVJhd09CVSAgICAgICAgICAgICAgICpmaF9vYnUg PSAmcHJpdi0+Zmg7DQo+ID4gPiArICAgIEFWMVJhd0ZyYW1lSGVhZGVyICAgICAgICpyZXBfZmgg PSAmZmhfb2J1LT5vYnUuZnJhbWVfaGVhZGVyOw0KPiA+ID4gKyAgICBWQUFQSUVuY29kZUFWMVBp Y3R1cmUgKmhyZWY7DQo+ID4gPiArICAgIGludCByZXQgPSAwOw0KPiA+ID4gKw0KPiA+ID4gKyAg ICBwaWMtPnRhaWxfc2l6ZSA9IDA7DQo+ID4gPiArICAgIC8qKiBQYWNrIHJlcGVhdCBmcmFtZSBo ZWFkZXIuICovDQo+ID4gPiArICAgIGlmIChwaWMtPmRpc3BsYXlfb3JkZXIgPiBwaWMtPmVuY29k ZV9vcmRlcikgew0KPiA+ID4gKyAgICAgICAgbWVtc2V0KGZoX29idSwgMCwgc2l6ZW9mKCpmaF9v YnUpKTsNCj4gPiA+ICsgICAgICAgIGhyZWYgPSBwaWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBd IC0gMV0tPnByaXZfZGF0YTsNCj4gPiA+ICsgICAgICAgIGZoX29idS0+aGVhZGVyLm9idV90eXBl ID0gQVYxX09CVV9GUkFNRV9IRUFERVI7DQo+ID4gPiArICAgICAgICBmaF9vYnUtPmhlYWRlci5v YnVfaGFzX3NpemVfZmllbGQgPSAxOw0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICAgcmVwX2ZoLT5z aG93X2V4aXN0aW5nX2ZyYW1lICAgPSAxOw0KPiA+ID4gKyAgICAgICAgcmVwX2ZoLT5mcmFtZV90 b19zaG93X21hcF9pZHggPSBocmVmLT5zbG90ID09IDA7DQo+ID4gPiArICAgICAgICByZXBfZmgt PmZyYW1lX3R5cGUgICAgICAgICAgICA9IEFWMV9GUkFNRV9JTlRFUjsNCj4gPiA+ICsgICAgICAg IHJlcF9maC0+ZnJhbWVfd2lkdGhfbWludXNfMSAgID0gYXZjdHgtPndpZHRoIC0gMTsNCj4gPiA+ ICsgICAgICAgIHJlcF9maC0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgID0gYXZjdHgtPmhlaWdodCAt IDE7DQo+ID4gPiArICAgICAgICByZXBfZmgtPnJlbmRlcl93aWR0aF9taW51c18xICA9IHJlcF9m aC0NCj4gPiA+ID5mcmFtZV93aWR0aF9taW51c18xOw0KPiA+ID4gKyAgICAgICAgcmVwX2ZoLT5y ZW5kZXJfaGVpZ2h0X21pbnVzXzEgPSByZXBfZmgtDQo+ID4gPiA+ZnJhbWVfaGVpZ2h0X21pbnVz XzE7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICByZXQgPSB2YWFwaV9lbmNvZGVfYXYxX3dyaXRl X2ZyYW1lX2hlYWRlcihhdmN0eCwgcGljLA0KPiA+ID4gcGljLT50YWlsX2RhdGEsICZwaWMtPnRh aWxfc2l6ZSk7DQo+ID4gPiArICAgICAgICBpZiAocmV0IDwgMCkNCj4gPiA+ICsgICAgICAgICAg ICBnb3RvIGVuZDsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgIHBpYy0+dGFpbF9zaXplIC89IDg7 DQo+ID4gPiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgbWVtY3B5KGRhdGEsICZwcml2LT5m aF9kYXRhLCBNQVhfUEFSQU1fQlVGRkVSX1NJWkUgKg0KPiA+ID4gc2l6ZW9mKGNoYXIpKTsNCj4g PiA+ICsgICAgKmRhdGFfbGVuID0gcHJpdi0+ZmhfZGF0YV9sZW47DQo+ID4gPiArDQo+ID4gPiAr ZW5kOg0KPiA+ID4gKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQob2J1KTsNCj4gPiA+ICsgICAg cmV0dXJuIHJldDsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGNvbnN0IFZBQVBJ RW5jb2RlUHJvZmlsZSB2YWFwaV9lbmNvZGVfYXYxX3Byb2ZpbGVzW10gPSB7DQo+ID4gPiArICAg IHsgRkZfUFJPRklMRV9BVjFfTUFJTiwgIDgsIDMsIDEsIDEsIFZBUHJvZmlsZUFWMVByb2ZpbGUw IH0sDQo+ID4gPiArICAgIHsgRkZfUFJPRklMRV9BVjFfTUFJTiwgMTAsIDMsIDEsIDEsIFZBUHJv ZmlsZUFWMVByb2ZpbGUwIH0sDQo+ID4gPiArICAgIHsgRkZfUFJPRklMRV9VTktOT1dOIH0NCj4g PiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBWQUFQSUVuY29kZVR5cGUgdmFh cGlfZW5jb2RlX3R5cGVfYXYxID0gew0KPiA+ID4gKyAgICAucHJvZmlsZXMgICAgICAgID0gdmFh cGlfZW5jb2RlX2F2MV9wcm9maWxlcywNCj4gPiA+ICsgICAgLmZsYWdzICAgICAgICAgICA9IEZM QUdfQl9QSUNUVVJFUywNCj4gPiA+ICsgICAgLmRlZmF1bHRfcXVhbGl0eSA9IDI1LA0KPiA+ID4g KyAgICAuY29uZmlndXJlICAgICAgID0gJnZhYXBpX2VuY29kZV9hdjFfY29uZmlndXJlLA0KPiA+ ID4gKw0KPiA+ID4gKyAgICAuc2VxdWVuY2VfaGVhZGVyX3R5cGUgID0gVkFFbmNQYWNrZWRIZWFk ZXJTZXF1ZW5jZSwNCj4gPiA+ICsgICAgLnNlcXVlbmNlX3BhcmFtc19zaXplICA9DQo+ID4gPiBz aXplb2YoVkFFbmNTZXF1ZW5jZVBhcmFtZXRlckJ1ZmZlckFWMSksDQo+ID4gPiArICAgIC5pbml0 X3NlcXVlbmNlX3BhcmFtcyAgPQ0KPiA+ID4gJnZhYXBpX2VuY29kZV9hdjFfaW5pdF9zZXF1ZW5j ZV9wYXJhbXMsDQo+ID4gPiArICAgIC53cml0ZV9zZXF1ZW5jZV9oZWFkZXIgPQ0KPiA+ID4gJnZh YXBpX2VuY29kZV9hdjFfd3JpdGVfc2VxdWVuY2VfaGVhZGVyLA0KPiA+ID4gKw0KPiA+ID4gKyAg ICAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWQUFQSUVuY29kZUFWMVBpY3R1cmUp LA0KPiA+ID4gKyAgICAucGljdHVyZV9oZWFkZXJfdHlwZSAgICA9IFZBRW5jUGFja2VkSGVhZGVy UGljdHVyZSwNCj4gPiA+ICsgICAgLnBpY3R1cmVfcGFyYW1zX3NpemUgICAgPQ0KPiA+ID4gc2l6 ZW9mKFZBRW5jUGljdHVyZVBhcmFtZXRlckJ1ZmZlckFWMSksDQo+ID4gPiArICAgIC5pbml0X3Bp Y3R1cmVfcGFyYW1zICAgID0NCj4gPiA+ICZ2YWFwaV9lbmNvZGVfYXYxX2luaXRfcGljdHVyZV9w YXJhbXMsDQo+ID4gPiArICAgIC53cml0ZV9waWN0dXJlX2hlYWRlciAgID0NCj4gPiA+ICZ2YWFw aV9lbmNvZGVfYXYxX3dyaXRlX3BpY3R1cmVfaGVhZGVyLA0KPiA+ID4gKw0KPiA+ID4gKyAgICAu c2xpY2VfcGFyYW1zX3NpemUgPSBzaXplb2YoVkFFbmNUaWxlR3JvdXBCdWZmZXJBVjEpLA0KPiA+ ID4gKyAgICAuaW5pdF9zbGljZV9wYXJhbXMgPSAmdmFhcGlfZW5jb2RlX2F2MV9pbml0X3NsaWNl X3BhcmFtcywNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBhdl9jb2xkIGludCB2 YWFwaV9lbmNvZGVfYXYxX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KPiA+ID4gK3sNCj4g PiA+ICsgICAgVkFBUElFbmNvZGVDb250ZXh0ICAgICAgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 DQo+ID4gPiArICAgIFZBQVBJRW5jb2RlQVYxQ29udGV4dCAgKnByaXYgPSBhdmN0eC0+cHJpdl9k YXRhOw0KPiA+ID4gKyAgICBWQUNvbmZpZ0F0dHJpYiBhdHRyOw0KPiA+ID4gKyAgICBWQVN0YXR1 cyB2YXM7DQo+ID4gPiArICAgIGludCByZXQ7DQo+ID4gPiArDQo+ID4gPiArICAgIGN0eC0+Y29k ZWMgPSAmdmFhcGlfZW5jb2RlX3R5cGVfYXYxOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBjdHgtPmRl c2lyZWRfcGFja2VkX2hlYWRlcnMgPQ0KPiA+ID4gKyAgICAgICAgVkFfRU5DX1BBQ0tFRF9IRUFE RVJfU0VRVUVOQ0UgfA0KPiA+ID4gKyAgICAgICAgVkFfRU5DX1BBQ0tFRF9IRUFERVJfUElDVFVS RTsNCj4gPiA+ICsNCj4gPiA+ICsgICAgaWYgKGF2Y3R4LT5wcm9maWxlID09IEZGX1BST0ZJTEVf VU5LTk9XTikNCj4gPiA+ICsgICAgICAgIGF2Y3R4LT5wcm9maWxlID0gcHJpdi0+cHJvZmlsZTsN Cj4gPiA+ICsgICAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBGRl9MRVZFTF9VTktOT1dOKQ0KPiA+ID4g KyAgICAgICAgYXZjdHgtPmxldmVsID0gcHJpdi0+bGV2ZWw7DQo+ID4gPiArDQo+ID4gPiArICAg IGlmIChhdmN0eC0+bGV2ZWwgIT0gRkZfTEVWRUxfVU5LTk9XTiAmJiBhdmN0eC0+bGV2ZWwgJg0K PiA+ID4gfjB4MWYpIHsNCj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCBsZXZlbCAlZFxuIiwgYXZjdHgtDQo+ID4gPiA+bGV2ZWwpOw0KPiA+ID4gKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ ID4gKyAgICByZXQgPSBmZl92YWFwaV9lbmNvZGVfaW5pdChhdmN0eCk7DQo+ID4gPiArICAgIGlm IChyZXQgPCAwKQ0KPiA+ID4gKyAgICAgICAgcmV0dXJuIHJldDsNCj4gPiA+ICsNCj4gPiA+ICsg ICAgYXR0ci50eXBlID0gVkFDb25maWdBdHRyaWJFbmNBVjE7DQo+ID4gPiArICAgIHZhcyA9IHZh R2V0Q29uZmlnQXR0cmlidXRlcyhjdHgtPmh3Y3R4LT5kaXNwbGF5LA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT52YV9wcm9maWxlLA0KPiA+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT52YV9lbnRyeXBvaW50LA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0dHIsIDEpOw0KPiA+ID4gKyAgICBpZiAodmFz ICE9IFZBX1NUQVRVU19TVUNDRVNTKSB7DQo+ID4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBxdWVyeSAiDQo+ID4gPiArICAgICAgICAgICAgICAgImNv bmZpZyBhdHRyaWJ1dGU6ICVkICglcykuXG4iLCB2YXMsDQo+ID4gPiB2YUVycm9yU3RyKHZhcykp Ow0KPiA+ID4gKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7DQo+ID4gPiArICAgIH0g ZWxzZSBpZiAoYXR0ci52YWx1ZSA9PSBWQV9BVFRSSUJfTk9UX1NVUFBPUlRFRCkgew0KPiA+ID4g KyAgICAgICAgcHJpdi0+YXR0ci52YWx1ZSA9IDA7DQo+ID4gPiArICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19XQVJOSU5HLCAiQXR0cmlidXRlIHR5cGU6JWQgaXMgbm90DQo+ID4gPiAiDQo+ ID4gPiArICAgICAgICAgICAgICAgInN1cHBvcnRlZC5cbiIsIGF0dHIudHlwZSk7DQo+ID4gPiAr ICAgIH0gZWxzZSB7DQo+ID4gPiArICAgICAgICBwcml2LT5hdHRyLnZhbHVlID0gYXR0ci52YWx1 ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICBhdHRyLnR5cGUgPSBWQUNvbmZp Z0F0dHJpYkVuY0FWMUV4dDE7DQo+ID4gPiArICAgIHZhcyA9IHZhR2V0Q29uZmlnQXR0cmlidXRl cyhjdHgtPmh3Y3R4LT5kaXNwbGF5LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT52YV9wcm9maWxlLA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY3R4LT52YV9lbnRyeXBvaW50LA0KPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmF0dHIsIDEpOw0KPiA+ID4gKyAgICBpZiAodmFzICE9IFZBX1NUQVRVU19TVUND RVNTKSB7DQo+ID4gPiArICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxl ZCB0byBxdWVyeSAiDQo+ID4gPiArICAgICAgICAgICAgICAgImNvbmZpZyBhdHRyaWJ1dGU6ICVk ICglcykuXG4iLCB2YXMsDQo+ID4gPiB2YUVycm9yU3RyKHZhcykpOw0KPiA+ID4gKyAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7DQo+ID4gPiArICAgIH0gZWxzZSBpZiAoYXR0ci52YWx1 ZSA9PSBWQV9BVFRSSUJfTk9UX1NVUFBPUlRFRCkgew0KPiA+ID4gKyAgICAgICAgcHJpdi0+YXR0 cl9leHQxLnZhbHVlID0gMDsNCj4gPiA+ICsgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1dB Uk5JTkcsICJBdHRyaWJ1dGUgdHlwZTolZCBpcyBub3QNCj4gPiA+ICINCj4gPiA+ICsgICAgICAg ICAgICAgICAic3VwcG9ydGVkLlxuIiwgYXR0ci50eXBlKTsNCj4gPiA+ICsgICAgfSBlbHNlIHsN Cj4gPiA+ICsgICAgICAgIHByaXYtPmF0dHJfZXh0MS52YWx1ZSA9IGF0dHIudmFsdWU7DQo+ID4g PiArICAgIH0NCj4gPiA+ICsNCj4gPiA+ICsgICAgLyoqIFRoaXMgYXR0ciBwcm92aWRlcyBlc3Nl bnRpYWwgaW5kaWNhdG9ycywgcmV0dXJuIGVycm9yIGlmDQo+ID4gPiBub3Qgc3VwcG9ydC4gKi8N Cj4gPiA+ICsgICAgYXR0ci50eXBlID0gVkFDb25maWdBdHRyaWJFbmNBVjFFeHQyOw0KPiA+ID4g KyAgICB2YXMgPSB2YUdldENvbmZpZ0F0dHJpYnV0ZXMoY3R4LT5od2N0eC0+ZGlzcGxheSwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfcHJvZmlsZSwNCj4g PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dmFfZW50cnlwb2ludCwN Cj4gPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdHRyLCAxKTsNCj4gPiA+ ICsgICAgaWYgKHZhcyAhPSBWQV9TVEFUVVNfU1VDQ0VTUyB8fCBhdHRyLnZhbHVlID09DQo+ID4g PiBWQV9BVFRSSUJfTk9UX1NVUFBPUlRFRCkgew0KPiA+ID4gKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gcXVlcnkgIg0KPiA+ID4gKyAgICAgICAgICAgICAg ICJjb25maWcgYXR0cmlidXRlOiAlZCAoJXMpLlxuIiwgdmFzLA0KPiA+ID4gdmFFcnJvclN0cih2 YXMpKTsNCj4gPiA+ICsgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOw0KPiA+ID4gKyAg ICB9IGVsc2Ugew0KPiA+ID4gKyAgICAgICAgcHJpdi0+YXR0cl9leHQyLnZhbHVlID0gYXR0ci52 YWx1ZTsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXQgPSB2YWFwaV9lbmNv ZGVfYXYxX3NldF90aWxlKGF2Y3R4KTsNCj4gPiA+ICsgICAgaWYgKHJldCA8IDApDQo+ID4gPiAr ICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1cm4gMDsNCj4gPiA+ ICt9DQo+ID4gPiArDQo+ID4gPiArc3RhdGljIGF2X2NvbGQgaW50IHZhYXBpX2VuY29kZV9hdjFf Y2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KPiA+ID4gK3sNCj4gPiA+ICsgICAgVkFBUElF bmNvZGVBVjFDb250ZXh0ICpwcml2ID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gPiA+ICsNCj4gPiA+ ICsgICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJnByaXYtPmN1cnJlbnRfb2J1KTsNCj4gPiA+ICsg ICAgZmZfY2JzX2Nsb3NlKCZwcml2LT5jYmMpOw0KPiA+ID4gKw0KPiA+ID4gKyAgICByZXR1cm4g ZmZfdmFhcGlfZW5jb2RlX2Nsb3NlKGF2Y3R4KTsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiAr I2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVkFBUElFbmNvZGVBVjFDb250ZXh0LCB4KQ0KPiA+ ID4gKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwNCj4gPiA+IEFWX09Q VF9GTEFHX0VOQ09ESU5HX1BBUkFNKQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBjb25zdCBBVk9w dGlvbiB2YWFwaV9lbmNvZGVfYXYxX29wdGlvbnNbXSA9IHsNCj4gPiA+ICsgICAgVkFBUElfRU5D T0RFX0NPTU1PTl9PUFRJT05TLA0KPiA+ID4gKyAgICBWQUFQSV9FTkNPREVfUkNfT1BUSU9OUywN Cj4gPiA+ICsgICAgeyAicHJvZmlsZSIsICJTZXQgcHJvZmlsZSAoc2VxX3Byb2ZpbGUpIiwNCj4g PiA+ICsgICAgICBPRkZTRVQocHJvZmlsZSksIEFWX09QVF9UWVBFX0lOVCwNCj4gPiA+ICsgICAg ICB7IC5pNjQgPSBGRl9QUk9GSUxFX1VOS05PV04gfSwgRkZfUFJPRklMRV9VTktOT1dOLCAweGZm LA0KPiA+ID4gRkxBR1MsICJwcm9maWxlIiB9LA0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUFJP RklMRShuYW1lLCB2YWx1ZSkgIG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULA0KPiA+ ID4gXA0KPiA+ID4gKyAgICB7IC5pNjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywgInByb2ZpbGUi DQo+ID4gPiArICAgIHsgUFJPRklMRSgibWFpbiIsICAgICAgICAgICAgICAgRkZfUFJPRklMRV9B VjFfTUFJTikgfSwNCj4gPiA+ICsgICAgeyBQUk9GSUxFKCJoaWdoIiwgICAgICAgICAgICAgICBG Rl9QUk9GSUxFX0FWMV9ISUdIKSB9LA0KPiA+ID4gKyAgICB7IFBST0ZJTEUoInByb2Zlc3Npb25h bCIsICAgICAgIEZGX1BST0ZJTEVfQVYxX1BST0ZFU1NJT05BTCkNCj4gPiA+IH0sDQo+ID4gPiAr I3VuZGVmIFBST0ZJTEUNCj4gPiA+ICsNCj4gPiA+ICsgICAgeyAidGllciIsICJTZXQgdGllciAo c2VxX3RpZXIpIiwNCj4gPiA+ICsgICAgICBPRkZTRVQodGllciksIEFWX09QVF9UWVBFX0lOVCwg eyAuaTY0ID0gMCB9LCAwLCAxLCBGTEFHUywNCj4gPiA+ICJ0aWVyIiB9LA0KPiA+ID4gKyAgICB7 ICJtYWluIiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsDQo+ID4gPiArICAgICAgeyAuaTY0 ID0gMCB9LCAwLCAwLCBGTEFHUywgInRpZXIiIH0sDQo+ID4gPiArICAgIHsgImhpZ2giLCBOVUxM LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwNCj4gPiA+ICsgICAgICB7IC5pNjQgPSAxIH0sIDAsIDAs IEZMQUdTLCAidGllciIgfSwNCj4gPiA+ICsgICAgeyAibGV2ZWwiLCAiU2V0IGxldmVsIChzZXFf bGV2ZWxfaWR4KSIsDQo+ID4gPiArICAgICAgT0ZGU0VUKGxldmVsKSwgQVZfT1BUX1RZUEVfSU5U LA0KPiA+ID4gKyAgICAgIHsgLmk2NCA9IEZGX0xFVkVMX1VOS05PV04gfSwgRkZfTEVWRUxfVU5L Tk9XTiwgMHgxZiwNCj4gPiA+IEZMQUdTLCAibGV2ZWwiIH0sDQo+ID4gPiArDQo+ID4gPiArI2Rl ZmluZSBMRVZFTChuYW1lLCB2YWx1ZSkgbmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IFwNCj4gPiA+ICsgICAgICB7IC5pNjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywgImxldmVsIg0K PiA+ID4gKyAgICB7IExFVkVMKCIyLjAiLCAgMCkgfSwNCj4gPiA+ICsgICAgeyBMRVZFTCgiMi4x IiwgIDEpIH0sDQo+ID4gPiArICAgIHsgTEVWRUwoIjMuMCIsICA0KSB9LA0KPiA+ID4gKyAgICB7 IExFVkVMKCIzLjEiLCAgNSkgfSwNCj4gPiA+ICsgICAgeyBMRVZFTCgiNC4wIiwgIDgpIH0sDQo+ ID4gPiArICAgIHsgTEVWRUwoIjQuMSIsICA5KSB9LA0KPiA+ID4gKyAgICB7IExFVkVMKCI1LjAi LCAxMikgfSwNCj4gPiA+ICsgICAgeyBMRVZFTCgiNS4xIiwgMTMpIH0sDQo+ID4gPiArICAgIHsg TEVWRUwoIjUuMiIsIDE0KSB9LA0KPiA+ID4gKyAgICB7IExFVkVMKCI1LjMiLCAxNSkgfSwNCj4g PiA+ICsgICAgeyBMRVZFTCgiNi4wIiwgMTYpIH0sDQo+ID4gPiArICAgIHsgTEVWRUwoIjYuMSIs IDE3KSB9LA0KPiA+ID4gKyAgICB7IExFVkVMKCI2LjIiLCAxOCkgfSwNCj4gPiA+ICsgICAgeyBM RVZFTCgiNi4zIiwgMTkpIH0sDQo+ID4gPiArI3VuZGVmIExFVkVMDQo+ID4gPiArDQo+ID4gPiAr ICAgIHsgInRpbGVzIiwgIlRpbGUgY29sdW1ucyB4IHJvd3MiLA0KPiA+ID4gKyAgICAgIE9GRlNF VCh0aWxlX2NvbHMpLCBBVl9PUFRfVFlQRV9JTUFHRV9TSVpFLCB7IC5zdHIgPSAiMXgxIg0KPiA+ ID4gfSwgMSwgQVYxX01BWF9USUxFX0NPTFMsIEZMQUdTIH0sDQo+ID4gPiArICAgIHsgInRpbGVf Z3JvdXBzIiwgIk51bWJlciBvZiB0aWxlIGdyb3VwcyBmb3IgZW5jb2RpbmciLA0KPiA+ID4gKyAg ICAgIE9GRlNFVCh0aWxlX2dyb3VwcyksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMSB9LCAx LA0KPiA+ID4gQVYxX01BWF9USUxFX1JPV1MgKiBBVjFfTUFYX1RJTEVfQ09MUywgRkxBR1MgfSwN Cj4gPiA+ICsNCj4gPiA+ICsgICAgeyBOVUxMIH0sDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ ICtzdGF0aWMgY29uc3QgRkZDb2RlY0RlZmF1bHQgdmFhcGlfZW5jb2RlX2F2MV9kZWZhdWx0c1td ID0gew0KPiA+ID4gKyAgICB7ICJiIiwgICAgICAgICAgICAgICIwIiAgIH0sDQo+ID4gPiArICAg IHsgImJmIiwgICAgICAgICAgICAgIjciICAgfSwNCj4gPiA+ICsgICAgeyAiZyIsICAgICAgICAg ICAgICAiMTIwIiB9LA0KPiA+ID4gKyAgICB7ICJxbWluIiwgICAgICAgICAgICIxIiAgIH0sDQo+ ID4gPiArICAgIHsgInFtYXgiLCAgICAgICAgICAgIjI1NSIgfSwNCj4gPiA+ICsgICAgeyBOVUxM IH0sDQo+ID4gPiArfTsNCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgY29uc3QgQVZDbGFzcyB2YWFw aV9lbmNvZGVfYXYxX2NsYXNzID0gew0KPiA+ID4gKyAgICAuY2xhc3NfbmFtZSA9ICJhdjFfdmFh cGkiLA0KPiA+ID4gKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRlbV9uYW1lLA0KPiA+ ID4gKyAgICAub3B0aW9uICAgICA9IHZhYXBpX2VuY29kZV9hdjFfb3B0aW9ucywNCj4gPiA+ICsg ICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsDQo+ID4gPiArfTsNCj4gPiA+ ICsNCj4gPiA+ICtjb25zdCBGRkNvZGVjIGZmX2F2MV92YWFwaV9lbmNvZGVyID0gew0KPiA+ID4g KyAgICAucC5uYW1lICAgICAgICAgPSAiYXYxX3ZhYXBpIiwNCj4gPiA+ICsgICAgQ09ERUNfTE9O R19OQU1FKCJBVjEgKFZBQVBJKSIpLA0KPiA+ID4gKyAgICAucC50eXBlICAgICAgICAgPSBBVk1F RElBX1RZUEVfVklERU8sDQo+ID4gPiArICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lE X0FWMSwNCj4gPiA+ICsgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZBQVBJRW5jb2RlQVYx Q29udGV4dCksDQo+ID4gPiArICAgIC5pbml0ICAgICAgICAgICA9ICZ2YWFwaV9lbmNvZGVfYXYx X2luaXQsDQo+ID4gPiArICAgIEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZmZl92YWFwaV9l bmNvZGVfcmVjZWl2ZV9wYWNrZXQpLA0KPiA+ID4gKyAgICAuY2xvc2UgICAgICAgICAgPSAmdmFh cGlfZW5jb2RlX2F2MV9jbG9zZSwNCj4gPiA+ICsgICAgLnAucHJpdl9jbGFzcyAgID0gJnZhYXBp X2VuY29kZV9hdjFfY2xhc3MsDQo+ID4gPiArICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVD X0NBUF9ERUxBWSB8IEFWX0NPREVDX0NBUF9IQVJEV0FSRQ0KPiA+ID4gfA0KPiA+ID4gKyAgICAg ICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRFIxIHwNCj4gPiA+IEFWX0NPREVDX0NBUF9F TkNPREVSX1JFT1JERVJFRF9PUEFRVUUsDQo+ID4gPiArICAgIC5jYXBzX2ludGVybmFsICA9IEZG X0NPREVDX0NBUF9OT1RfSU5JVF9USFJFQURTQUZFIHwNCj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwNCj4gPiA+ICsgICAgLmRlZmF1bHRzICAg ICAgID0gdmFhcGlfZW5jb2RlX2F2MV9kZWZhdWx0cywNCj4gPiA+ICsgICAgLnAucGl4X2ZtdHMg PSAoY29uc3QgZW51bSBBVlBpeGVsRm9ybWF0W10pIHsNCj4gPiA+ICsgICAgICAgIEFWX1BJWF9G TVRfVkFBUEksDQo+ID4gPiArICAgICAgICBBVl9QSVhfRk1UX05PTkUsDQo+ID4gPiArICAgIH0s DQo+ID4gPiArICAgIC5od19jb25maWdzICAgICA9IGZmX3ZhYXBpX2VuY29kZV9od19jb25maWdz LA0KPiA+ID4gKyAgICAucC53cmFwcGVyX25hbWUgPSAidmFhcGkiLA0KPiA+ID4gK307DQo+ID4g PiAtLQ0KPiA+ID4gMi4yNS4xDQo+ID4gPiANCj4gPiANCj4gPiBTZWVtcyBzZW5zaWJsZSwgYnV0 IHlvdXIgc2VuZGVyIGFkZHJlc3MgZ290IHJld3JpdHRlbi4gWW91IG1pZ2h0DQo+ID4gd2FudA0K PiA+IHRvIGFkZCBhbiBhZGRpdGlvbmFsDQo+ID4gDQo+ID4gRnJvbTogRmVpIFdhbmcgPGZlaS53 LndhbmdAaW50ZWwuY29tPg0KDQpUaGlzIGZpZWxkIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgYWRk ZWQgd2hlbiBJIHVzZWQgZ2l0IGVtYWlsLXNlbmQNCmxpa2U6DQoNCnJvb3RAZmVpOn5mZm1wZWcj IGdpdCBzZW5kLWVtYWlsIC0xIC0tc3ViamVjdC1wcmVmaXg9IkZGbXBlZy0NCmRldmVsXVtQQVRD SCB2MSIgLS1hbm5vdGF0ZSAtLXRvIGZlaS53LndhbmdAaW50ZWwuY29tDQoNCkZyb20gYmZlN2Q4 YjRkMDBiMjA5YjMwYzQ5OTJiMGZjNmZlY2YwZThlYzFlYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDENCkZyb206IEZlaSBXYW5nIDxmZWkudy53YW5nQGludGVsLmNvbT4NCkRhdGU6IFR1ZSwgMSBB dWcgMjAyMyAwOToxMToxNCArMDgwMA0KU3ViamVjdDogW0ZGbXBlZy1kZXZlbF1bUEFUQ0ggdjFd IHRlc3QNCg0KVGhpcyBpcyBhIHRlc3QgcGF0Y2guDQoNClNpZ25lZC1vZmYtYnk6IEZlaSBXYW5n IDxmZWkudy53YW5nQGludGVsLmNvbT4NCi0tLQ0KIGxpYmF2Y29kZWMvdmFhcGlfZW5jb2RlLmMg ICAgICB8IDYxICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0NCiBsaWJhdmNvZGVj L3ZhYXBpX2VuY29kZS5oICAgICAgfCAgNCArKysNCiBsaWJhdmNvZGVjL3ZhYXBpX2VuY29kZV9o MjY0LmMgfCA0NyArKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0KIDMgZmlsZXMgY2hhbmdlZCwg ODkgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pDQoNCkZyb20gZmllbGQgbWVzc2FnZSBs b29rcyBnb29kIHdoZW4gSSBzZW5kIHRoZSBtYWlsIHRvIGFsbCBvdGhlcg0KcGVyc29uYWwgYWNj b3VudCwgYnV0IHdpbGwgYmUgcmV3cml0dGVuIHdoZW4gc2VuZCBpdCB0byBmZm1wZWctZGV2ZWwu DQoNCg0KVGhhbmtzDQoNCj4gPiANCj4gPiBhdCB0aGUgdG9wIG9mIHlvdXIgY29tbWl0IG1lc3Nh Z2UgYm9keSBpZiB5b3UgY2FuJ3QgZ2V0IHRoZSAiRnJvbSINCj4gPiBmaWVsZCBpbiB0aGUgZW1h aWxzIHRvIGJlIHNldCBwcm9wZXJseSB3aGVuIHlvdSBzZW5kIHRvIHRoZSBsaXN0Lg0KPiA+IA0K PiA+IE90aGVyd2lzZSB0aGUgcGF0Y2ggc2VyaWVzIExHVE0uIEkgZG9uJ3QgaGF2ZSBhbnkgaGFy ZHdhcmUgdG8NCj4gPiBleGVyY2lzZQ0KPiA+IHRoaXMgY29kZSB3aXRoIHRob3VnaCwgc28gdGhh dCBtYWtlcyByZXZpZXdpbmcgaXRzIGJlaGF2aW9yIGENCj4gPiBsaXR0bGUNCj4gPiB0b3VnaC4N Cj4gPiANCj4gPiBSZWdhcmRsZXNzLCBJIGNhbiBhdCBsZWFzdCBhY2sgaXQuDQo+ID4gDQo+ID4g QWNrZWQtYnk6IE5lYWwgR29tcGEgPG5nb21wYTEzQGdtYWlsLmNvbT4NCj4gPiANCj4gDQo+IE9v cHMsIGZvcmdvdCB0byBhY3R1YWxseSBDQyB5b3UgZm9yIHRoaXMuDQo+IA0KPiANCj4gDQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwg bWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsg YWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJq ZWN0ICJ1bnN1YnNjcmliZSIuCg==