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 0B68345168 for ; Tue, 11 Jul 2023 07:36:21 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E3A8068C541; Tue, 11 Jul 2023 10:36:18 +0300 (EEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1A64068C260 for ; Tue, 11 Jul 2023 10:36: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=1689060975; x=1720596975; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=pUnSJqocGtlZ8+3UIctcqejBrxCu/5RNs6EnA2we+rs=; b=AGkMZV0sPXPw5MruG2jTX9V97uAANlyPCzmNJVIbno1K3jrcKqPjc+Ft 4P8boXoJJE77nUiuE3znd9J6ZlOWZVQpV9DgP8I1i1hNcIKoOG6G+ARyP VObgFbhjb/9OWNMqm8ZgUiEA/RREcIFc8adzVMCmR1aSrHtup8nYD/7gI ne/5CEV3FiM/GRxi1PGPhgr5ZHtCu9e1dAZS0+ijGeOCf4Ve9YpaZCkQi lrIwDZL2HDm862sQaChavdg6pN+D7QxFnzNCTziAia/+ge6roQ6E6ziPj JGAwU7PYwdvj8qvSkEINWdxQ7pl7EktSPVzA6BfrDwj70/8AS2GAneG/n A==; X-IronPort-AV: E=McAfee;i="6600,9927,10767"; a="368050809" X-IronPort-AV: E=Sophos;i="6.01,196,1684825200"; d="scan'208";a="368050809" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jul 2023 00:36:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10767"; a="811096717" X-IronPort-AV: E=Sophos;i="6.01,196,1684825200"; d="scan'208";a="811096717" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by FMSMGA003.fm.intel.com with ESMTP; 11 Jul 2023 00:36:01 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) 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; Tue, 11 Jul 2023 00:36:01 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Tue, 11 Jul 2023 00:36:00 -0700 Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) 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 via Frontend Transport; Tue, 11 Jul 2023 00:36:00 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.168) 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; Tue, 11 Jul 2023 00:35:58 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kLv7okCW/p0tsmru6nSXY66w8GhjIUVMytXc74cq/yBaVe4W03kfGel75DW5m1UHAVvTxdeq9/4MgcUMJktalo5f2p5ShpAtVevo1eYYEm2ed76D6GKnh2dGCZHfMr7siOEIk6p1/xX/3PnHid+yHjfTDNaiCdpsiy5Pbu3Hj/VpsOX3cz+nx6L2xIkoYyn2h3vSMK6CriJgBfS76dzFcCcQ41sOJ8qB7XZghpUrHnBxxHBUdPqlCP72BMvRS8fIlwifM+IOzM45GoOBojXFcM9Qke/CERzKNaBvNfseuEGArrdW+pYQbhjyRaqj+RL9+cY85M+DvTxoFagx1x4zdg== 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=pUnSJqocGtlZ8+3UIctcqejBrxCu/5RNs6EnA2we+rs=; b=bfnVCEgYlKlnIJZ3seF4VdMtwzwS4JciEh5nt/7FaBQdz2LAvH5XxMt98yYCFzxJ5bAHnsymkq6o8o5LWHVBARuMxAzQeG3YxLqygyXf/F8WfUmLMxcqzsoNpVlpGUOUVmvxsr3Vv+tfZC4W3aaHvsRNmtnrzV8NFq6xjCuvDDWL+qA8kXb6IRNNThZkkmM2GWp4XA9rJ/gGFKjQSHVzn/7jj/T3lr5Mq3st+9K/E2yzRi2xgZTf4EYrgV8ZC26JhwbINNtZUKP2z/0RKiHi0Ht4HH7uTvzqdsrYf5po37eaeZTRr3iLL2qGVRdwJ99lJ+YtysG0qB9GN+bLu32gIA== 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 BN9PR11MB5515.namprd11.prod.outlook.com (2603:10b6:408:104::8) by CH3PR11MB8493.namprd11.prod.outlook.com (2603:10b6:610:1bc::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.31; Tue, 11 Jul 2023 07:35:50 +0000 Received: from BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::16c7:a931:6718:45bf]) by BN9PR11MB5515.namprd11.prod.outlook.com ([fe80::16c7:a931:6718:45bf%7]) with mapi id 15.20.6565.028; Tue, 11 Jul 2023 07:35:50 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v3 2/9] avcodec: add D3D12VA hardware accelerated H264 decoding Thread-Index: AQHZlSoK9sOFdhIUNU6cPfcfGmoU9K+0akmA Date: Tue, 11 Jul 2023 07:35:50 +0000 Message-ID: References: <20230602080701.1754-1-tong1.wu@intel.com> <20230602080701.1754-2-tong1.wu@intel.com> In-Reply-To: <20230602080701.1754-2-tong1.wu@intel.com> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-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: BN9PR11MB5515:EE_|CH3PR11MB8493:EE_ x-ms-office365-filtering-correlation-id: 1def881f-b8d5-4af5-c665-08db81e17318 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CocOohm4wBEthvjTuA+DXsPHrS8tN23cNfC/6jiNrcHKS0gsBlN2YQ9ZWFN4qYG12xcoEyc7S8a6iKY27X5KFlL6/ApHFvsPmfnERYxs79Mx0saIFmYcfzJ6fz5kqVYdRL9hN2MbL6eK5g3bnuhyM9StaQfjEL0boYL/HTO4yByV7bZoFVlq/STX+UqPHWWZ0yas4oEpm8Y5s7Lm97V8O6BB9vAJJ+GTg1IzDZj6g1PZdItO7xTKF0rbKF39mapQO4hJ+1mAiAoyYiTlffW3z308O95IX3xdY5XC3DnGYZ0HhER6Yq5CHdTpIkpTYAR+Eck/56IGGIiHKtSjd49jRWv7OOWuYb2YANNB+/43BP4osUKUzF+A7yuNN0XbAracVbYbUmSBoPTArF0W0mUL8u6A78V/4GnUH9yLp0Ok1ObJhCBmwPqc9OVyyytVB7Zr+monCKSsIsC2k0UsDElbpUx0/0J/WTpt0nymrRaf5raAC5whQYlnmT98SDzzfIkuXghD0A8R1U2PQEiUSH0Pi+xHZpuxGeX4+zF6/UEYrMbACFe7UiggsS/3df/zxdIdAaFzznfMOxJS4jObRCLj585m0Ew1OKTD+P4esvGBbM4zxJ6FjqcYzcdyJMWAiMk7XNnAAUGzUqQAcwlZfe/+TM+wtgPqi63eWjW7iXFrj89G2kvqSrGnGShQx7YN8Q7P x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5515.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(136003)(396003)(376002)(39860400002)(346002)(366004)(451199021)(38070700005)(36756003)(86362001)(38100700002)(82960400001)(122000001)(478600001)(71200400001)(19627235002)(41300700001)(54906003)(6486002)(966005)(6512007)(8676002)(8936002)(5660300002)(2906002)(316002)(91956017)(4326008)(6916009)(66556008)(64756008)(66446008)(66946007)(76116006)(66476007)(30864003)(2616005)(26005)(6506007)(107886003)(186003)(83380400001)(21314003)(2004002)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?SGZWY1h3SG1OMHFKdlhNQ3FYSHZHS1FTZHFyLzZhTG9UVTJJUENIdUtuOE5o?= =?utf-8?B?NXlGK3Rrc1h3NDEra2x5dXR0RFdBbEZMWlkrSk4rZWQ4bGhHVEFkeGZPeHpt?= =?utf-8?B?VkZZM3Y4WGUxUjFvQmlPYTgvMURyV2lHWFowSzlHaFlhQmR0YklVb1NVem03?= =?utf-8?B?QitLY1lYNVJCL1JBeTVWbndJcFlMbE9rRmlHOUlYL3dENlBjcndGbXFaT3k2?= =?utf-8?B?RHloNUtNSVVUZWZ2WWJscXpjM3NSUDFsRDczbG15bEtsL3RQQVVOUTJyWWxx?= =?utf-8?B?Wi9rWWJQL0txdm9RN2dlcjkwZHdkS2tDRUlURHlZdUZYWW5RSFRoMTQvMFRF?= =?utf-8?B?ekpaWDMyeFRBeVlwZ2FWdFUvYy9hSGFYanUveHdKQm1UdnptSHNjbUQyeEQx?= =?utf-8?B?RGlEdm4rTjhnYXl6WUF4Wk4zNUsrZUZyN0hTb2krUldqYURzNnd0S21ZWjJN?= =?utf-8?B?TlVVRXVZeFU3a1A1dFh2VnduZTd1dVdnM1VQd0RsZ2V1NEJnS2FjWEtJZldP?= =?utf-8?B?Tk80OHdTQzY3VXRwbG8zbGpCaHpwYWpoMWR4ak9OcHlTc3hXVVkvSWk2dnY4?= =?utf-8?B?U0RlTzVOb2Z0Tk8zMkhwdUlQSmYwdEJzUlZWYmEyL08yTG1saU1rdEFlMVpv?= =?utf-8?B?ajdLMnMvdmVNc2dNT3crN2p3WFZGYTdWNm9EQkMydndxVHFJN2ZBRkJYNVk1?= =?utf-8?B?YnRveTV5QmRKaXUzcWtDZmxNY1FmdHdtUUQ2TEZheVIwY0VFdmkzWXc1USs0?= =?utf-8?B?NWlpSTlqK3ZOSVFwU1BCV2JDcld2aHRuTE16Szhtc1EzaEozd3prSjVuQTVN?= =?utf-8?B?bldTVjQ2RHZELzBaT0hXS1FiZk05bXNiMHJZWUlsN3RYSFBMak53cVozTWRL?= =?utf-8?B?UjVrdWlFWURla2tCRnhwU2duN0hXZURDQjRiSkNQdDFpZlBlU3Y0NFVjOHFV?= =?utf-8?B?RUZhVmR2VlA4K3FXY3UwUGx1MUtPRzBhckZuTG15QmtPNWN0OWtIb0NlT3V5?= =?utf-8?B?TllsS3BoeGM5WnNPZDV6MXBacEltTlpOVGVQN241M3cva2JwUnJDTmRmdXFa?= =?utf-8?B?NU1FMm13WTdrcG56NytvS2M1ZEtrRkxjYkwvYWE3TXhGRWZ1MFN5OGZXT25Z?= =?utf-8?B?TFdLellWRGdJV0JnL3l3MEI4Uk1saFN6VGs4TjdkRkIzdEJJbnlSUFFScmhI?= =?utf-8?B?dERsekgyQnhmSkMrcHlCc2x2S3VQWTRyTlg3VFRmaUlpL0lJckVtTXMvaWNP?= =?utf-8?B?UDhra2dnTVNtSG1WZWlYT0JzMk9IUEN4d2F2WnFrQm9tTHp2a3VEYXZJZG9l?= =?utf-8?B?eExrMWxyUzZ4cnlMOWJQSGZxcW9xaS9CL1h6cGhwUXFFdFU3QXhsNkwwczVC?= =?utf-8?B?bDk3WlIwSFY2SzdZZzNVajNmdjFjZ1NmcEtRYjlpditiYi93Z1NJc1VqS0Iy?= =?utf-8?B?V0U2L2R4UFN2NEd5SEh6WUtDR05Edk91NEhYNnpXOFcwbjBDZU40YXl6YjU2?= =?utf-8?B?Vno0Y2R1a3diMEFZZzcxNnhVN3ZSUDN0eDBKamFGVG9DamxVWDRhUEJFVHMy?= =?utf-8?B?V1VZdkx4dDlkS2FXR1lZYzY4dGlQVzRDTDV6WkZZaHNQMjBOVk9rcytFL0Vs?= =?utf-8?B?dk9YSm1kc2lBVHJZN2VQejZHRkh5RDFrSEt1cWhSTFgrUXVtN1RrYlNkMUdq?= =?utf-8?B?ejhKcExlYkhkeXJuamZzdEtVQjlvcUhxR24zT2RzTFlhZmNvVDhWeFlKRTB6?= =?utf-8?B?ZitpdjVKeXpiZFJyazdqeEFRdGZPODhBRGlRaHV5Nzl5RkZOem9PL0JlSG00?= =?utf-8?B?SHZJNEcxcnJYTVduVzBHR0lsTmlhOFY3ZUVpekdVSlNSd0VYQlBzVjhKMmVB?= =?utf-8?B?S054dVZ2dXZhcEJqcDYvUEIrNldaSEREWHZ0MVFZWjI5akZzem8rbUdReGdT?= =?utf-8?B?NmZ4eUY3VE8zeTJ4a0c3eDlLVmxHRGFzUXBGME1oTCtPTmg0cjA4Snh1b1I5?= =?utf-8?B?U1FienI2R0E2WnM5Vk8zbXdZL3pjQzNjeWtTZ3Y2bnBSaGM0MlM0dUVuZk5T?= =?utf-8?B?UnR4Wkp3M2RUU0dnaWd6UXgxVG9teHd4cVpkcFpmZnRJam1vTldPNVJFSmNs?= =?utf-8?B?d05JaVVIZ1IrZ3h6ekxaYTlLR2JDTU9kQjRQV2ErKzZnazhPbHB3RnY0ODJG?= =?utf-8?B?TFE9PQ==?= Content-ID: MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5515.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1def881f-b8d5-4af5-c665-08db81e17318 X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Jul 2023 07:35:50.1669 (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: JD4XQ9tUGV564kZthgJUcoxEeY6W2fp0ijOaQ/b4VjEssRuHKCgzdR7wtUzCV51LkRcwMqZ6vcHgP8/PBOk8PQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR11MB8493 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v3 2/9] avcodec: add D3D12VA hardware accelerated H264 decoding 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 Cc: "Wu, Tong1" , "toqsxw@outlook.com" 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: T24gVnIsIDIwMjMtMDYtMDIgYXQgMTY6MDYgKzA4MDAsIFRvbmcgV3Ugd3JvdGU6DQo+IEZyb206 IFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4NCj4gDQo+IFRoZSBpbXBsZW1lbnRhdGlv biBpcyBiYXNlZCBvbjoNCj4gaHR0cHM6Ly9sZWFybi5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRv d3Mvd2luMzIvbWVkZm91bmQvZGlyZWN0M2QtMTItdmlkZW8tb3ZlcnZpZXcNCj4gDQo+IFdpdGgg dGhlIERpcmVjdDNEIDEyIHZpZGVvIGRlY29kaW5nIHN1cHBvcnQsIHdlIGNhbiByZW5kZXIgb3Ig cHJvY2Vzcw0KPiB0aGUgZGVjb2RlZCBpbWFnZXMgYnkgdGhlIHBpeGVsIHNoYWRlcnMgb3IgY29t cHV0ZSBzaGFkZXJzIGRpcmVjdGx5DQo+IHdpdGhvdXQgdGhlIGV4dHJhIGNvcHkgb3ZlcmhlYWQs IHdoaWNoIGlzIGJlbmVmaWNpYWwgZXNwZWNpYWxseSBpZiB5b3UNCj4gYXJlIHRyeWluZyB0byBy ZW5kZXIgb3IgcG9zdC1wcm9jZXNzIGEgNEsgb3IgOEsgdmlkZW8uDQo+IA0KPiBUaGUgY29tbWFu ZCBiZWxvdyBpcyBob3cgdG8gZW5hYmxlIGQzZDEydmE6DQo+IGZmbXBlZyAtaHdhY2NlbCBkM2Qx MnZhIC1pIGlucHV0Lm1wNCBvdXRwdXQubXA0DQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBXdSBKaWFu aHVhIDx0b3FzeHdAb3V0bG9vay5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IFRvbmcgV3UgPHRvbmcx Lnd1QGludGVsLmNvbT4NCj4gLS0tDQo+IMKgY29uZmlndXJlwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKw0KPiDCoGxpYmF2Y29kZWMvTWFrZWZpbGXCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDMgKw0KPiDCoGxpYmF2Y29kZWMvZDNkMTF2YS5owqDCoMKgwqDCoMKg wqAgfMKgwqAgMyAtDQo+IMKgbGliYXZjb2RlYy9kM2QxMnZhLmPCoMKgwqDCoMKgwqDCoCB8IDU1 MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gwqBsaWJhdmNvZGVjL2Qz ZDEydmEuaMKgwqDCoMKgwqDCoMKgIHwgMTg0ICsrKysrKysrKysrKw0KPiDCoGxpYmF2Y29kZWMv ZDNkMTJ2YV9oMjY0LmPCoMKgIHwgMjEwICsrKysrKysrKysrKysrDQo+IMKgbGliYXZjb2RlYy9k eHZhMi5jwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAyNCArKw0KPiDCoGxpYmF2Y29kZWMvZHh2YTIu aMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzIC0NCj4gwqBsaWJhdmNvZGVjL2R4dmEyX2gyNjQu Y8KgwqDCoMKgIHzCoCAxMiArLQ0KPiDCoGxpYmF2Y29kZWMvZHh2YTJfaW50ZXJuYWwuaCB8wqAg NjcgKysrLS0NCj4gwqBsaWJhdmNvZGVjL2gyNjRfc2xpY2UuY8KgwqDCoMKgIHzCoMKgIDQgKw0K PiDCoGxpYmF2Y29kZWMvaDI2NGRlYy5jwqDCoMKgwqDCoMKgwqAgfMKgwqAgMyArDQo+IMKgbGli YXZjb2RlYy9od2FjY2Vscy5owqDCoMKgwqDCoMKgIHzCoMKgIDEgKw0KPiDCoGxpYmF2Y29kZWMv aHdjb25maWcuaMKgwqDCoMKgwqDCoCB8wqDCoCAyICsNCj4gwqAxNCBmaWxlcyBjaGFuZ2VkLCAx MDI4IGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygtKQ0KPiDCoGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmNvZGVjL2QzZDEydmEuYw0KPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVj L2QzZDEydmEuaA0KPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2QzZDEydmFfaDI2 NC5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlDQo+IGluZGV4IGI4 NjA2NGUzNmYuLmY1ZGFkNDY1M2YgMTAwNzU1DQo+IC0tLSBhL2NvbmZpZ3VyZQ0KPiArKysgYi9j b25maWd1cmUNCj4gQEAgLTMwMzMsNiArMzAzMyw4IEBAIGgyNjRfZDNkMTF2YV9od2FjY2VsX2Rl cHM9ImQzZDExdmEiDQo+IMKgaDI2NF9kM2QxMXZhX2h3YWNjZWxfc2VsZWN0PSJoMjY0X2RlY29k ZXIiDQo+IMKgaDI2NF9kM2QxMXZhMl9od2FjY2VsX2RlcHM9ImQzZDExdmEiDQo+IMKgaDI2NF9k M2QxMXZhMl9od2FjY2VsX3NlbGVjdD0iaDI2NF9kZWNvZGVyIg0KPiAraDI2NF9kM2QxMnZhX2h3 YWNjZWxfZGVwcz0iZDNkMTJ2YSINCj4gK2gyNjRfZDNkMTJ2YV9od2FjY2VsX3NlbGVjdD0iaDI2 NF9kZWNvZGVyIg0KPiDCoGgyNjRfZHh2YTJfaHdhY2NlbF9kZXBzPSJkeHZhMiINCj4gwqBoMjY0 X2R4dmEyX2h3YWNjZWxfc2VsZWN0PSJoMjY0X2RlY29kZXIiDQo+IMKgaDI2NF9udmRlY19od2Fj Y2VsX2RlcHM9Im52ZGVjIg0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xp YmF2Y29kZWMvTWFrZWZpbGUNCj4gaW5kZXggOWFhY2MxZDQ3Ny4uYWUxNDNkODgyMSAxMDA2NDQN Cj4gLS0tIGEvbGliYXZjb2RlYy9NYWtlZmlsZQ0KPiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxl DQo+IEBAIC05NzcsNiArOTc3LDcgQEAgT0JKUy0kKENPTkZJR19BRFBDTV9aT1JLX0RFQ09ERVIp wqDCoMKgwqDCoMKgwqDCoCArPSBhZHBjbS5vDQo+IGFkcGNtX2RhdGEubw0KPiDCoA0KPiDCoCMg aGFyZHdhcmUgYWNjZWxlcmF0b3JzDQo+IMKgT0JKUy0kKENPTkZJR19EM0QxMVZBKcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR4dmEyLm8NCj4gK09CSlMtJChDT05G SUdfRDNEMTJWQSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBkeHZh Mi5vIGQzZDEydmEubw0KPiDCoE9CSlMtJChDT05GSUdfRFhWQTIpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR4dmEyLm8NCj4gwqBPQkpTLSQoQ09ORklHX05W REVDKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBudmRlYy5v DQo+IMKgT0JKUy0kKENPTkZJR19WQUFQSSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgKz0gdmFhcGlfZGVjb2RlLm8NCj4gQEAgLTk5NCw2ICs5OTUsNyBAQCBPQkpT LSQoQ09ORklHX0gyNjNfVkFBUElfSFdBQ0NFTCnCoMKgwqDCoMKgwqDCoMKgICs9IHZhYXBpX21w ZWc0Lm8NCj4gwqBPQkpTLSQoQ09ORklHX0gyNjNfVklERU9UT09MQk9YX0hXQUNDRUwpwqAgKz0g dmlkZW90b29sYm94Lm8NCj4gwqBPQkpTLSQoQ09ORklHX0gyNjRfRDNEMTFWQV9IV0FDQ0VMKcKg wqDCoMKgwqDCoCArPSBkeHZhMl9oMjY0Lm8NCj4gwqBPQkpTLSQoQ09ORklHX0gyNjRfRFhWQTJf SFdBQ0NFTCnCoMKgwqDCoMKgwqDCoMKgICs9IGR4dmEyX2gyNjQubw0KPiArT0JKUy0kKENPTkZJ R19IMjY0X0QzRDEyVkFfSFdBQ0NFTCnCoMKgwqDCoMKgwqAgKz0gZHh2YTJfaDI2NC5vIGQzZDEy dmFfaDI2NC5vDQo+IMKgT0JKUy0kKENPTkZJR19IMjY0X05WREVDX0hXQUNDRUwpwqDCoMKgwqDC oMKgwqDCoCArPSBudmRlY19oMjY0Lm8NCj4gwqBPQkpTLSQoQ09ORklHX0gyNjRfUVNWX0hXQUND RUwpwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gcXN2ZGVjLm8NCj4gwqBPQkpTLSQoQ09ORklHX0gy NjRfVkFBUElfSFdBQ0NFTCnCoMKgwqDCoMKgwqDCoMKgICs9IHZhYXBpX2gyNjQubw0KPiBAQCAt MTI3Nyw2ICsxMjc5LDcgQEAgU0tJUEhFQURFUlPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0NCj4gJV90YWJsZWdlbi5owqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcDQo+IMKgDQo+IMKgU0tJUEhFQURFUlMtJChDT05GSUdf QU1GKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGFtZmVuYy5oDQo+IMKgU0tJUEhFQURF UlMtJChDT05GSUdfRDNEMTFWQSnCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZDNkMTF2YS5oIGR4dmEy X2ludGVybmFsLmgNCj4gK1NLSVBIRUFERVJTLSQoQ09ORklHX0QzRDEyVkEpwqDCoMKgwqDCoMKg wqDCoMKgICs9IGQzZDEydmEuaA0KPiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0RYVkEyKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKz0gZHh2YTIuaCBkeHZhMl9pbnRlcm5hbC5oDQo+IMKgU0tJUEhF QURFUlMtJChDT05GSUdfSk5JKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGZmam5pLmgN Cj4gwqBTS0lQSEVBREVSUy0kKENPTkZJR19MQ01TMinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9 IGZmbGNtczIuaA0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9kM2QxMXZhLmggYi9saWJhdmNv ZGVjL2QzZDExdmEuaA0KPiBpbmRleCA2ODE2YjZjMWU2Li4yN2Y0MGU1NTE5IDEwMDY0NA0KPiAt LS0gYS9saWJhdmNvZGVjL2QzZDExdmEuaA0KPiArKysgYi9saWJhdmNvZGVjL2QzZDExdmEuaA0K PiBAQCAtNDUsOSArNDUsNiBAQA0KPiDCoCAqIEB7DQo+IMKgICovDQo+IMKgDQo+IC0jZGVmaW5l IEZGX0RYVkEyX1dPUktBUk9VTkRfU0NBTElOR19MSVNUX1pJR1pBRyAxIC8vLzwgV29yayBhcm91 bmQgZm9yDQo+IERpcmVjdDNEMTEgYW5kIG9sZCBVVkQvVVZEKyBBVEkgdmlkZW8gY2FyZHMNCj4g LSNkZWZpbmUgRkZfRFhWQTJfV09SS0FST1VORF9JTlRFTF9DTEVBUlZJREVPwqDCoMKgIDIgLy8v PCBXb3JrIGFyb3VuZCBmb3INCj4gRGlyZWN0M0QxMSBhbmQgb2xkIEludGVsIEdQVXMgd2l0aCBD bGVhclZpZGVvIGludGVyZmFjZQ0KPiAtDQo+IMKgLyoqDQo+IMKgICogVGhpcyBzdHJ1Y3R1cmUg aXMgdXNlZCB0byBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFuZCBkYXRh DQo+IMKgICogdG8gdGhlIERpcmVjdDNEMTEgRkZtcGVnIEhXQWNjZWwgaW1wbGVtZW50YXRpb24u DQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2QzZDEydmEuYyBiL2xpYmF2Y29kZWMvZDNkMTJ2 YS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjdmMWZhYjcy NTENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWJhdmNvZGVjL2QzZDEydmEuYw0KPiBAQCAt MCwwICsxLDU1MiBAQA0KPiArLyoNCj4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbiB2 aWRlbyBkZWNvZGVyDQo+ICsgKg0KPiArICogY29weXJpZ2h0IChjKSAyMDIyLTIwMjMgV3UgSmlh bmh1YSA8dG9xc3h3QG91dGxvb2suY29tPg0KPiArICoNCj4gKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4NCj4gKyAqDQo+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+ICsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCj4gKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KPiArICoNCj4gKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLA0KPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoCBTZWUgdGhlIEdOVQ0KPiArICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gKyAqDQo+ ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljDQo+ICsgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDENCj4gVVNBDQo+ ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGFzc2VydC5oPg0KPiArI2luY2x1ZGUgPHN0cmluZy5o Pg0KPiArI2luY2x1ZGUgPGluaXRndWlkLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJsaWJhdnV0aWwv Y29tbW9uLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2xvZy5oIg0KPiArI2luY2x1ZGUgImxp YmF2dXRpbC90aW1lLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2ltZ3V0aWxzLmgiDQo+ICsj aW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFsLmgiDQo+ICsjaW5j bHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgiDQo+ICsjaW5jbHVkZSAiYXZjb2Rl Yy5oIg0KPiArI2luY2x1ZGUgImRlY29kZS5oIg0KPiArI2luY2x1ZGUgImQzZDEydmEuaCINCj4g Kw0KPiArdHlwZWRlZiBzdHJ1Y3QgQ29tbWFuZEFsbG9jYXRvciB7DQo+ICvCoMKgwqAgSUQzRDEy Q29tbWFuZEFsbG9jYXRvciAqY29tbWFuZF9hbGxvY2F0b3I7DQo+ICvCoMKgwqAgdWludDY0X3Qg ZmVuY2VfdmFsdWU7DQo+ICt9IENvbW1hbmRBbGxvY2F0b3I7DQo+ICsNCj4gK2ludCBmZl9kM2Qx MnZhX2dldF9zdWl0YWJsZV9tYXhfYml0c3RyZWFtX3NpemUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KQ0KPiArew0KPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4ID0gRDNEMTJW QV9GUkFNRVNfQ09OVEVYVChhdmN0eCk7DQo+ICvCoMKgwqAgcmV0dXJuIGF2X2ltYWdlX2dldF9i dWZmZXJfc2l6ZShmcmFtZXNfY3R4LT5zd19mb3JtYXQsIGF2Y3R4LQ0KPiA+Y29kZWRfd2lkdGgs IGF2Y3R4LT5jb2RlZF9oZWlnaHQsIDEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGQzZDEy dmFfZ2V0X3ZhbGlkX2NvbW1hbmRfYWxsb2NhdG9yKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4g SUQzRDEyQ29tbWFuZEFsbG9jYXRvciAqKnBwQWxsb2NhdG9yKQ0KPiArew0KPiArwqDCoMKgIEhS RVNVTFQgaHI7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHQgKmN0eCA9IEQzRDEyVkFf REVDT0RFX0NPTlRFWFQoYXZjdHgpOw0KPiArwqDCoMKgIENvbW1hbmRBbGxvY2F0b3IgYWxsb2Nh dG9yOw0KPiArDQo+ICvCoMKgwqAgaWYgKGF2X2ZpZm9fcGVlayhjdHgtPmFsbG9jYXRvcl9xdWV1 ZSwgJmFsbG9jYXRvciwgMSwgMCkgPj0gMCkgew0KPiArwqDCoMKgwqDCoMKgwqAgdWludDY0X3Qg Y29tcGxldGlvbiA9IElEM0QxMkZlbmNlX0dldENvbXBsZXRlZFZhbHVlKGN0eC0+c3luY19jdHgt DQo+ID5mZW5jZSk7DQo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY29tcGxldGlvbiA+PSBhbGxvY2F0 b3IuZmVuY2VfdmFsdWUpIHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBwQWxsb2NhdG9y ID0gYWxsb2NhdG9yLmNvbW1hbmRfYWxsb2NhdG9yOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdl9maWZvX3JlYWQoY3R4LT5hbGxvY2F0b3JfcXVldWUsICZhbGxvY2F0b3IsIDEpOw0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4g K8KgwqDCoCB9DQo+ICsNCj4gK8KgwqDCoCBociA9IElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5k QWxsb2NhdG9yKGN0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlLA0KPiBEM0QxMl9DT01NQU5EX0xJU1Rf VFlQRV9WSURFT19ERUNPREUsDQo+ICvCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0QxMkNvbW1hbmRB bGxvY2F0b3IsIHBwQWxsb2NhdG9yKTsNCj4gK8KgwqDCoCBpZiAoRkFJTEVEKGhyKSkgew0KPiAr wqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3Jl YXRlIGEgbmV3IGNvbW1hbmQNCj4gYWxsb2NhdG9yIVxuIik7DQo+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiArwqDCoMKgIH0NCj4gKw0KPiArwqDCoMKgIHJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGQzZDEydmFfZGlzY2FyZF9jb21tYW5kX2Fs bG9jYXRvcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+IElEM0QxMkNvbW1hbmRBbGxvY2F0b3Ig KnBBbGxvY2F0b3IsIHVpbnQ2NF90IGZlbmNlX3ZhbHVlKQ0KPiArew0KPiArwqDCoMKgIEQzRDEy VkFEZWNvZGVDb250ZXh0ICpjdHggPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsNCj4g Kw0KPiArwqDCoMKgIENvbW1hbmRBbGxvY2F0b3IgYWxsb2NhdG9yID0gew0KPiArwqDCoMKgwqDC oMKgwqAgLmNvbW1hbmRfYWxsb2NhdG9yID0gcEFsbG9jYXRvciwNCj4gK8KgwqDCoMKgwqDCoMKg IC5mZW5jZV92YWx1ZSA9IGZlbmNlX3ZhbHVlDQo+ICvCoMKgwqAgfTsNCj4gKw0KPiArwqDCoMKg IGlmIChhdl9maWZvX3dyaXRlKGN0eC0+YWxsb2NhdG9yX3F1ZXVlLCAmYWxsb2NhdG9yLCAxKSA8 IDApIHsNCj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX09CSkVDVF9SRUxFQVNFKHBBbGxvY2F0b3Ip Ow0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCj4gK8KgwqDCoCB9 DQo+ICsNCj4gK8KgwqDCoCByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYnVm cmVmX2ZyZWVfaW50ZXJmYWNlKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkNCj4gK3sNCj4g K8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShvcGFxdWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgQVZCdWZmZXJSZWYgKmJ1ZnJlZl93cmFwX2ludGVyZmFjZShJVW5rbm93biAqaWZhY2UpDQo+ ICt7DQo+ICvCoMKgwqAgcmV0dXJuIGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QqKWlmYWNlLCAx LCBidWZyZWZfZnJlZV9pbnRlcmZhY2UsIGlmYWNlLA0KPiAwKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGludCBkM2QxMnZhX2NyZWF0ZV9idWZmZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBVSU5U IHNpemUsDQo+IElEM0QxMlJlc291cmNlICoqcHBSZXNvdWNlKQ0KPiArew0KPiArwqDCoMKgIEQz RDEyVkFEZWNvZGVDb250ZXh0ICpjdHggPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsN Cj4gKw0KPiArwqDCoMKgIEQzRDEyX0hFQVBfUFJPUEVSVElFUyBoZWFwX3Byb3BzID0geyAuVHlw ZSA9IEQzRDEyX0hFQVBfVFlQRV9VUExPQUQgfTsNCj4gKw0KPiArwqDCoMKgIEQzRDEyX1JFU09V UkNFX0RFU0MgZGVzYyA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgIC5EaW1lbnNpb27CoMKgwqDCoMKg wqDCoCA9IEQzRDEyX1JFU09VUkNFX0RJTUVOU0lPTl9CVUZGRVIsDQo+ICvCoMKgwqDCoMKgwqDC oCAuQWxpZ25tZW50wqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9ERUZBVUxUX1JFU09VUkNFX1BMQUNF TUVOVF9BTElHTk1FTlQsDQo+ICvCoMKgwqDCoMKgwqDCoCAuV2lkdGjCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID0gc2l6ZSwNCj4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKg wqDCoCA9IDEsDQo+ICvCoMKgwqDCoMKgwqDCoCAuRGVwdGhPckFycmF5U2l6ZSA9IDEsDQo+ICvC oMKgwqDCoMKgwqDCoCAuTWlwTGV2ZWxzwqDCoMKgwqDCoMKgwqAgPSAxLA0KPiArwqDCoMKgwqDC oMKgwqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRFhHSV9GT1JNQVRfVU5LTk9XTiwN Cj4gK8KgwqDCoMKgwqDCoMKgIC5TYW1wbGVEZXNjwqDCoMKgwqDCoMKgID0geyAuQ291bnQgPSAx LCAuUXVhbGl0eSA9IDAgfSwNCj4gK8KgwqDCoMKgwqDCoMKgIC5MYXlvdXTCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IEQzRDEyX1RFWFRVUkVfTEFZT1VUX1JPV19NQUpPUiwNCj4gK8KgwqDCoMKgwqDC oMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9GTEFHX05P TkUsDQo+ICvCoMKgwqAgfTsNCj4gKw0KPiArwqDCoMKgIEhSRVNVTFQgaHIgPSBJRDNEMTJEZXZp Y2VfQ3JlYXRlQ29tbWl0dGVkUmVzb3VyY2UoY3R4LT5kZXZpY2VfY3R4LQ0KPiA+ZGV2aWNlLCAm aGVhcF9wcm9wcywgRDNEMTJfSEVBUF9GTEFHX05PTkUsDQo+ICvCoMKgwqDCoMKgwqDCoCAmZGVz YywgRDNEMTJfUkVTT1VSQ0VfU1RBVEVfR0VORVJJQ19SRUFELCBOVUxMLCAmSUlEX0lEM0QxMlJl c291cmNlLA0KPiBwcFJlc291Y2UpOw0KPiArDQo+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsN Cj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IGNyZWF0ZSBkM2QxMiBidWZmZXIuXG4iKTsNCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybsKgIEFW RVJST1IoRUlOVkFMKTsNCj4gK8KgwqDCoCB9DQo+ICsNCj4gK8KgwqDCoCByZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGludCBkM2QxMnZhX3dhaXRfZm9yX2dwdShBVkNvZGVjQ29udGV4 dCAqYXZjdHgpDQo+ICt7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHQgKmN0eMKgwqDC oMKgwqAgPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsNCj4gK8KgwqDCoCBBVkQzRDEy VkFTeW5jQ29udGV4dCAqc3luY19jdHggPSBjdHgtPnN5bmNfY3R4Ow0KPiArDQo+ICvCoMKgwqAg cmV0dXJuIGF2X2QzZDEydmFfd2FpdF9xdWV1ZV9pZGxlKHN5bmNfY3R4LCBjdHgtPmNvbW1hbmRf cXVldWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGQzZDEydmFfY3JlYXRlX2RlY29kZXJf aGVhcChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ICt7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29k ZUNvbnRleHTCoMKgICpjdHjCoMKgwqDCoMKgwqDCoCA9IEQzRDEyVkFfREVDT0RFX0NPTlRFWFQo YXZjdHgpOw0KPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0wqDCoMKgwqDCoCAqZnJhbWVzX2N0 eCA9IEQzRDEyVkFfRlJBTUVTX0NPTlRFWFQoYXZjdHgpOw0KPiArwqDCoMKgIEFWRDNEMTJWQURl dmljZUNvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoCA9IGN0eC0+ZGV2aWNlX2N0eDsNCj4gKw0KPiAr wqDCoMKgIEQzRDEyX1ZJREVPX0RFQ09ERVJfSEVBUF9ERVNDIGRlc2MgPSB7DQo+ICvCoMKgwqDC oMKgwqDCoCAuTm9kZU1hc2vCoMKgwqDCoMKgID0gMCwNCj4gK8KgwqDCoMKgwqDCoMKgIC5Db25m aWd1cmF0aW9uID0gY3R4LT5jZmcsDQo+ICvCoMKgwqDCoMKgwqDCoCAuRGVjb2RlV2lkdGjCoMKg ID0gZnJhbWVzX2N0eC0+d2lkdGgsDQo+ICvCoMKgwqDCoMKgwqDCoCAuRGVjb2RlSGVpZ2h0wqAg PSBmcmFtZXNfY3R4LT5oZWlnaHQsDQo+ICvCoMKgwqDCoMKgwqDCoCAuRm9ybWF0wqDCoMKgwqDC oMKgwqAgPSBhdl9kM2QxMnZhX21hcF9zd190b19od19mb3JtYXQoZnJhbWVzX2N0eC0NCj4gPnN3 X2Zvcm1hdCksDQo+ICvCoMKgwqDCoMKgwqDCoCAuRnJhbWVSYXRlwqDCoMKgwqAgPSB7IGF2Y3R4 LT5mcmFtZXJhdGUubnVtLCBhdmN0eC0+ZnJhbWVyYXRlLmRlbiB9LA0KPiArwqDCoMKgwqDCoMKg wqAgLkJpdFJhdGXCoMKgwqDCoMKgwqAgPSBhdmN0eC0+Yml0X3JhdGUsDQo+ICvCoMKgwqDCoMKg wqDCoCAuTWF4RGVjb2RlUGljdHVyZUJ1ZmZlckNvdW50ID0gZnJhbWVzX2N0eC0+aW5pdGlhbF9w b29sX3NpemUsDQo+ICvCoMKgwqAgfTsNCj4gKw0KPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMlZp ZGVvRGV2aWNlX0NyZWF0ZVZpZGVvRGVjb2RlckhlYXAoaHdjdHgtPnZpZGVvX2RldmljZSwNCj4g JmRlc2MsDQo+ICvCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0QxMlZpZGVvRGVjb2RlckhlYXAsICZj dHgtPmRlY29kZXJfaGVhcCkpOw0KPiArDQo+ICvCoMKgwqAgcmV0dXJuIDA7DQo+ICsNCj4gK2Zh aWw6DQo+ICvCoMKgwqAgaWYgKGN0eC0+ZGVjb2Rlcikgew0KPiArwqDCoMKgwqDCoMKgwqAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEM0QxMiBkb2Vzbid0IHN1cHBvcnQgZGVjb2Rpbmcg ZnJhbWVzDQo+IHdpdGggYW4gZXh0ZW50ICINCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIlt3 aWR0aCglZCksIGhlaWdodCglZCldLCBvbiB5b3VyIGRldmljZSFcbiIsIGZyYW1lc19jdHgtPndp ZHRoLA0KPiBmcmFtZXNfY3R4LT5oZWlnaHQpOw0KPiArwqDCoMKgIH0NCj4gKw0KPiArwqDCoMKg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZDNkMTJ2 YV9jcmVhdGVfZGVjb2RlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ICt7DQo+ICvCoMKgwqAg RDNEMTJfVklERU9fREVDT0RFUl9ERVNDIGRlc2M7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNv bnRleHTCoMKgICpjdHjCoMKgwqDCoMKgwqDCoCA9IEQzRDEyVkFfREVDT0RFX0NPTlRFWFQoYXZj dHgpOw0KPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0wqDCoMKgwqDCoCAqZnJhbWVzX2N0eCA9 IEQzRDEyVkFfRlJBTUVTX0NPTlRFWFQoYXZjdHgpOw0KPiArwqDCoMKgIEFWRDNEMTJWQURldmlj ZUNvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoCA9IGN0eC0+ZGV2aWNlX2N0eDsNCj4gKw0KPiArwqDC oMKgIEQzRDEyX0ZFQVRVUkVfREFUQV9WSURFT19ERUNPREVfU1VQUE9SVCBmZWF0dXJlID0gew0K PiArwqDCoMKgwqDCoMKgwqAgLk5vZGVJbmRleMKgwqDCoMKgID0gMCwNCj4gK8KgwqDCoMKgwqDC oMKgIC5Db25maWd1cmF0aW9uID0gY3R4LT5jZmcsDQo+ICvCoMKgwqDCoMKgwqDCoCAuV2lkdGjC oMKgwqDCoMKgwqDCoMKgID0gZnJhbWVzX2N0eC0+d2lkdGgsDQo+ICvCoMKgwqDCoMKgwqDCoCAu SGVpZ2h0wqDCoMKgwqDCoMKgwqAgPSBmcmFtZXNfY3R4LT5oZWlnaHQsDQo+ICvCoMKgwqDCoMKg wqDCoCAuRGVjb2RlRm9ybWF0wqAgPSBhdl9kM2QxMnZhX21hcF9zd190b19od19mb3JtYXQoZnJh bWVzX2N0eC0NCj4gPnN3X2Zvcm1hdCksDQo+ICvCoMKgwqDCoMKgwqDCoCAuRnJhbWVSYXRlwqDC oMKgwqAgPSB7IGF2Y3R4LT5mcmFtZXJhdGUubnVtLCBhdmN0eC0+ZnJhbWVyYXRlLmRlbiB9LA0K PiArwqDCoMKgwqDCoMKgwqAgLkJpdFJhdGXCoMKgwqDCoMKgwqAgPSBhdmN0eC0+Yml0X3JhdGUs DQo+ICvCoMKgwqAgfTsNCj4gKw0KPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMlZpZGVvRGV2aWNl X0NoZWNrRmVhdHVyZVN1cHBvcnQoaHdjdHgtPnZpZGVvX2RldmljZSwNCj4gRDNEMTJfRkVBVFVS RV9WSURFT19ERUNPREVfU1VQUE9SVCwgJmZlYXR1cmUsIHNpemVvZihmZWF0dXJlKSkpOw0KPiAr wqDCoMKgIGlmICghKGZlYXR1cmUuU3VwcG9ydEZsYWdzICYgRDNEMTJfVklERU9fREVDT0RFX1NV UFBPUlRfRkxBR19TVVBQT1JURUQpDQo+IHx8DQo+ICvCoMKgwqDCoMKgwqDCoCAhKGZlYXR1cmUu RGVjb2RlVGllciA+PSBEM0QxMl9WSURFT19ERUNPREVfVElFUl8yKSkgew0KPiArwqDCoMKgwqDC oMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEM0QxMiBkZWNvZGVyIGRvZXNuJ3Qg c3VwcG9ydCBvbiB0aGlzDQo+IGRldmljZVxuIik7DQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g QVZFUlJPUihFSU5WQUwpOw0KPiArwqDCoMKgIH0NCj4gKw0KPiArwqDCoMKgIGRlc2MgPSAoRDNE MTJfVklERU9fREVDT0RFUl9ERVNDKSB7DQo+ICvCoMKgwqDCoMKgwqDCoCAuTm9kZU1hc2sgPSAw LA0KPiArwqDCoMKgwqDCoMKgwqAgLkNvbmZpZ3VyYXRpb24gPSBjdHgtPmNmZywNCj4gK8KgwqDC oCB9Ow0KPiArDQo+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyVmlkZW9EZXZpY2VfQ3JlYXRlVmlk ZW9EZWNvZGVyKGh3Y3R4LT52aWRlb19kZXZpY2UsICZkZXNjLA0KPiAmSUlEX0lEM0QxMlZpZGVv RGVjb2RlciwgJmN0eC0+ZGVjb2RlcikpOw0KPiArDQo+ICvCoMKgwqAgY3R4LT5kZWNvZGVyX3Jl ZiA9IGJ1ZnJlZl93cmFwX2ludGVyZmFjZSgoSVVua25vd24gKiljdHgtPmRlY29kZXIpOw0KPiAr wqDCoMKgIGlmICghY3R4LT5kZWNvZGVyX3JlZikNCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7DQo+ICsNCj4gK8KgwqDCoCByZXR1cm4gMDsNCj4gKw0KPiArZmFpbDoN Cj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIGludCBkM2QxMnZhX2dldF9udW1fc3VyZmFjZXMoZW51bSBBVkNvZGVjSUQgY29kZWNf aWQpDQo+ICt7DQo+ICvCoMKgwqAgaW50IG51bV9zdXJmYWNlcyA9IDE7DQo+ICvCoMKgwqAgc3dp dGNoIChjb2RlY19pZCkgew0KPiArwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfSDI2NDoNCj4gK8Kg wqDCoCBjYXNlIEFWX0NPREVDX0lEX0hFVkM6DQo+ICvCoMKgwqDCoMKgwqDCoCBudW1fc3VyZmFj ZXMgKz0gMTY7DQo+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4gKw0KPiArwqDCoMKgIGNhc2Ug QVZfQ09ERUNfSURfQVYxOg0KPiArwqDCoMKgwqDCoMKgwqAgbnVtX3N1cmZhY2VzICs9IDEyOw0K PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+ICsNCj4gK8KgwqDCoCBjYXNlIEFWX0NPREVDX0lE X1ZQOToNCj4gK8KgwqDCoMKgwqDCoMKgIG51bV9zdXJmYWNlcyArPSA4Ow0KPiArwqDCoMKgwqDC oMKgwqAgYnJlYWs7DQo+ICsNCj4gK8KgwqDCoCBkZWZhdWx0Og0KPiArwqDCoMKgwqDCoMKgwqAg bnVtX3N1cmZhY2VzICs9IDI7DQo+ICvCoMKgwqAgfQ0KPiArDQo+ICvCoMKgwqAgcmV0dXJuIG51 bV9zdXJmYWNlczsNCj4gK30NCj4gKw0KPiAraW50IGZmX2QzZDEydmFfY29tbW9uX2ZyYW1lX3Bh cmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWQnVmZmVyUmVmDQo+ICpod19mcmFtZXNfY3R4 KQ0KPiArew0KPiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0wqDCoMKgwqDCoCAqZnJhbWVzX2N0 eMKgwqAgPSAoQVZIV0ZyYW1lc0NvbnRleHQNCj4gKilod19mcmFtZXNfY3R4LT5kYXRhOw0KPiAr wqDCoMKgIEFWSFdEZXZpY2VDb250ZXh0wqDCoMKgwqDCoCAqZGV2aWNlX2N0eMKgwqAgPSBmcmFt ZXNfY3R4LT5kZXZpY2VfY3R4Ow0KPiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZy YW1lc19od2N0eCA9IGZyYW1lc19jdHgtPmh3Y3R4Ow0KPiArDQo+ICvCoMKgwqAgZnJhbWVzX2N0 eC0+Zm9ybWF0wqDCoMKgID0gQVZfUElYX0ZNVF9EM0QxMjsNCj4gK8KgwqDCoCBmcmFtZXNfY3R4 LT5zd19mb3JtYXQgPSBhdmN0eC0+c3dfcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1lVVjQyMFAxMCA/ DQo+IEFWX1BJWF9GTVRfUDAxMCA6IEFWX1BJWF9GTVRfTlYxMjsNCj4gK8KgwqDCoCBmcmFtZXNf Y3R4LT53aWR0aMKgwqDCoMKgID0gYXZjdHgtPndpZHRoOw0KPiArwqDCoMKgIGZyYW1lc19jdHgt PmhlaWdodMKgwqDCoCA9IGF2Y3R4LT5oZWlnaHQ7DQo+ICsNCj4gK8KgwqDCoCBmcmFtZXNfY3R4 LT5pbml0aWFsX3Bvb2xfc2l6ZSA9IGQzZDEydmFfZ2V0X251bV9zdXJmYWNlcyhhdmN0eC0NCj4g PmNvZGVjX2lkKTsNCj4gKw0KPiArwqDCoMKgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtpbnQg ZmZfZDNkMTJ2YV9kZWNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ICt7DQo+ICvC oMKgwqAgaW50IHJldDsNCj4gK8KgwqDCoCBVSU5UIGJpdHN0cmVhbV9zaXplOw0KPiArwqDCoMKg IEFWSFdGcmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4Ow0KPiArwqDCoMKgIEQzRDEyVkFEZWNvZGVD b250ZXh0ICpjdHggPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsNCj4gKw0KPiArwqDC oMKgIElEM0QxMkNvbW1hbmRBbGxvY2F0b3IgKmNvbW1hbmRfYWxsb2NhdG9yID0gTlVMTDsNCj4g K8KgwqDCoCBEM0QxMl9DT01NQU5EX1FVRVVFX0RFU0MgcXVldWVfZGVzYyA9IHsNCj4gK8KgwqDC oMKgwqDCoMKgIC5UeXBlwqDCoMKgwqAgPSBEM0QxMl9DT01NQU5EX0xJU1RfVFlQRV9WSURFT19E RUNPREUsDQo+ICvCoMKgwqDCoMKgwqDCoCAuUHJpb3JpdHkgPSAwLA0KPiArwqDCoMKgwqDCoMKg wqAgLkZsYWdzwqDCoMKgID0gRDNEMTJfQ09NTUFORF9RVUVVRV9GTEFHX05PTkUsDQo+ICvCoMKg wqDCoMKgwqDCoCAuTm9kZU1hc2sgPSAwDQo+ICvCoMKgwqAgfTsNCj4gKw0KPiArwqDCoMKgIGN0 eC0+cGl4X2ZtdCA9IGF2Y3R4LT5od2FjY2VsLT5waXhfZm10Ow0KPiArDQo+ICvCoMKgwqAgcmV0 ID0gZmZfZGVjb2RlX2dldF9od19mcmFtZXNfY3R4KGF2Y3R4LCBBVl9IV0RFVklDRV9UWVBFX0Qz RDEyVkEpOw0KPiArwqDCoMKgIGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsNCj4gKw0KPiArwqDCoMKgIGZyYW1lc19jdHggPSBEM0QxMlZBX0ZSQU1FU19DT05URVhU KGF2Y3R4KTsNCj4gK8KgwqDCoCBjdHgtPmRldmljZV9jdHggPSAoQVZEM0QxMlZBRGV2aWNlQ29u dGV4dCAqKWZyYW1lc19jdHgtPmRldmljZV9jdHgtDQo+ID5od2N0eDsNCj4gKw0KPiArwqDCoMKg IGlmIChmcmFtZXNfY3R4LT5mb3JtYXQgIT0gY3R4LT5waXhfZm10KSB7DQo+ICvCoMKgwqDCoMKg wqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4Zm10IGZvciBod2Fj Y2VsIVxuIik7DQo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+ICvCoMKgwqAgfQ0KPiAr DQo+ICvCoMKgwqAgcmV0ID0gZDNkMTJ2YV9jcmVhdGVfZGVjb2RlcihhdmN0eCk7DQo+ICvCoMKg wqAgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+ICsNCj4gK8Kg wqDCoCByZXQgPSBkM2QxMnZhX2NyZWF0ZV9kZWNvZGVyX2hlYXAoYXZjdHgpOw0KPiArwqDCoMKg IGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOw0KPiArDQo+ICvCoMKg wqAgY3R4LT5tYXhfbnVtX3JlZiA9IGZyYW1lc19jdHgtPmluaXRpYWxfcG9vbF9zaXplOw0KPiAr DQo+ICvCoMKgwqAgYml0c3RyZWFtX3NpemUgPSBmZl9kM2QxMnZhX2dldF9zdWl0YWJsZV9tYXhf Yml0c3RyZWFtX3NpemUoYXZjdHgpOw0KPiArwqDCoMKgIGN0eC0+YnVmZmVycyA9IGF2X2NhbGxv YyhzaXplb2YoSUQzRDEyUmVzb3VyY2UgKiksIGN0eC0+bWF4X251bV9yZWYpOw0KPiArwqDCoMKg IGZvciAoaW50IGkgPSAwOyBpIDwgY3R4LT5tYXhfbnVtX3JlZjsgaSsrKSB7DQo+ICvCoMKgwqDC oMKgwqDCoCByZXQgPSBkM2QxMnZhX2NyZWF0ZV9idWZmZXIoYXZjdHgsIGJpdHN0cmVhbV9zaXpl LCAmY3R4LT5idWZmZXJzW2ldKTsNCj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQgPCAwKQ0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+ICvCoMKgwqAgfQ0KPiArDQo+ICvC oMKgwqAgY3R4LT5yZWZfcmVzb3VyY2VzID0gYXZfY2FsbG9jKHNpemVvZihJRDNEMTJSZXNvdXJj ZSAqKSwgY3R4LQ0KPiA+bWF4X251bV9yZWYpOw0KPiArwqDCoMKgIGlmICghY3R4LT5yZWZfcmVz b3VyY2VzKQ0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCj4gKw0K PiArwqDCoMKgIGN0eC0+cmVmX3N1YnJlc291cmNlcyA9IGF2X2NhbGxvYyhzaXplb2YoVUlOVCks IGN0eC0+bWF4X251bV9yZWYpOw0KPiArwqDCoMKgIGlmICghY3R4LT5yZWZfc3VicmVzb3VyY2Vz KQ0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCj4gKw0KPiArwqDC oMKgIGN0eC0+YWxsb2NhdG9yX3F1ZXVlID0gYXZfZmlmb19hbGxvYzIoY3R4LT5tYXhfbnVtX3Jl ZiwNCj4gc2l6ZW9mKENvbW1hbmRBbGxvY2F0b3IpLCBBVl9GSUZPX0ZMQUdfQVVUT19HUk9XKTsN Cj4gK8KgwqDCoCBpZiAoIWN0eC0+YWxsb2NhdG9yX3F1ZXVlKQ0KPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCj4gKw0KPiArwqDCoMKgIHJldCA9IGF2X2QzZDEydmFf c3luY19jb250ZXh0X2FsbG9jKGN0eC0+ZGV2aWNlX2N0eCwgJmN0eC0+c3luY19jdHgpOw0KPiAr wqDCoMKgIGlmIChyZXQgPCAwKQ0KPiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOw0KPiArDQo+ ICvCoMKgwqAgcmV0ID0gZDNkMTJ2YV9nZXRfdmFsaWRfY29tbWFuZF9hbGxvY2F0b3IoYXZjdHgs ICZjb21tYW5kX2FsbG9jYXRvcik7DQo+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDC oMKgwqDCoCBnb3RvIGZhaWw7DQo+ICsNCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2Vf Q3JlYXRlQ29tbWFuZFF1ZXVlKGN0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlLA0KPiAmcXVldWVfZGVz YywNCj4gK8KgwqDCoMKgwqDCoMKgICZJSURfSUQzRDEyQ29tbWFuZFF1ZXVlLCAmY3R4LT5jb21t YW5kX3F1ZXVlKSk7DQo+ICsNCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRl Q29tbWFuZExpc3QoY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2UsIDAsDQo+IHF1ZXVlX2Rlc2MuVHlw ZSwNCj4gK8KgwqDCoMKgwqDCoMKgIGNvbW1hbmRfYWxsb2NhdG9yLCBOVUxMLCAmSUlEX0lEM0Qx MkNvbW1hbmRMaXN0LCAmY3R4LQ0KPiA+Y29tbWFuZF9saXN0KSk7DQo+ICsNCj4gK8KgwqDCoCBE WF9DSEVDSyhJRDNEMTJWaWRlb0RlY29kZUNvbW1hbmRMaXN0X0Nsb3NlKGN0eC0+Y29tbWFuZF9s aXN0KSk7DQo+ICsNCj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kUXVldWVfRXhlY3V0ZUNvbW1hbmRM aXN0cyhjdHgtPmNvbW1hbmRfcXVldWUsIDEsDQo+IChJRDNEMTJDb21tYW5kTGlzdCAqKikmY3R4 LT5jb21tYW5kX2xpc3QpOw0KPiArDQo+ICvCoMKgwqAgZDNkMTJ2YV93YWl0X2Zvcl9ncHUoYXZj dHgpOw0KPiArDQo+ICvCoMKgwqAgZDNkMTJ2YV9kaXNjYXJkX2NvbW1hbmRfYWxsb2NhdG9yKGF2 Y3R4LCBjb21tYW5kX2FsbG9jYXRvciwgY3R4LQ0KPiA+c3luY19jdHgtPmZlbmNlX3ZhbHVlKTsN Cj4gKw0KPiArwqDCoMKgIHJldHVybiAwOw0KPiArDQo+ICtmYWlsOg0KPiArwqDCoMKgIEQzRDEy X09CSkVDVF9SRUxFQVNFKGNvbW1hbmRfYWxsb2NhdG9yKTsNCj4gK8KgwqDCoCBmZl9kM2QxMnZh X2RlY29kZV91bmluaXQoYXZjdHgpOw0KPiArDQo+ICvCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlO VkFMKTsNCj4gK30NCj4gKw0KPiAraW50IGZmX2QzZDEydmFfZGVjb2RlX3VuaW5pdChBVkNvZGVj Q29udGV4dCAqYXZjdHgpDQo+ICt7DQo+ICvCoMKgwqAgaW50IGksIG51bV9hbGxvY2F0b3IgPSAw Ow0KPiArwqDCoMKgIEQzRDEyVkFEZWNvZGVDb250ZXh0ICpjdHggPSBEM0QxMlZBX0RFQ09ERV9D T05URVhUKGF2Y3R4KTsNCj4gK8KgwqDCoCBDb21tYW5kQWxsb2NhdG9yIGFsbG9jYXRvcjsNCj4g Kw0KPiArwqDCoMKgIGlmIChjdHgtPnN5bmNfY3R4KQ0KPiArwqDCoMKgwqDCoMKgwqAgZDNkMTJ2 YV93YWl0X2Zvcl9ncHUoYXZjdHgpOw0KPiArDQo+ICvCoMKgwqAgYXZfZnJlZXAoJmN0eC0+cmVm X3Jlc291cmNlcyk7DQo+ICsNCj4gK8KgwqDCoCBhdl9mcmVlcCgmY3R4LT5yZWZfc3VicmVzb3Vy Y2VzKTsNCj4gKw0KPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjdHgtPm1heF9udW1fcmVmOyBp KyspDQo+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmJ1ZmZlcnNb aV0pOw0KPiArDQo+ICvCoMKgwqAgYXZfZnJlZXAoJmN0eC0+YnVmZmVycyk7DQo+ICsNCj4gK8Kg wqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmNvbW1hbmRfbGlzdCk7DQo+ICsNCj4gK8Kg wqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgtPmNvbW1hbmRfcXVldWUpOw0KPiArDQo+ICvC oMKgwqAgaWYgKGN0eC0+YWxsb2NhdG9yX3F1ZXVlKSB7DQo+ICvCoMKgwqDCoMKgwqDCoCB3aGls ZSAoYXZfZmlmb19yZWFkKGN0eC0+YWxsb2NhdG9yX3F1ZXVlLCAmYWxsb2NhdG9yLCAxKSA+PSAw KSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51bV9hbGxvY2F0b3IrKzsNCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoYWxsb2NhdG9yLmNvbW1hbmRf YWxsb2NhdG9yKTsNCj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4gKw0KPiArwqDCoMKgwqDCoMKgwqAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlRvdGFsIG51bWJlciBvZiBjb21tYW5kIGFs bG9jYXRvcnMNCj4gcmV1c2VkOiAlZFxuIiwgbnVtX2FsbG9jYXRvcik7DQo+ICvCoMKgwqAgfQ0K PiArDQo+ICvCoMKgwqAgYXZfZmlmb19mcmVlcDIoJmN0eC0+YWxsb2NhdG9yX3F1ZXVlKTsNCj4g Kw0KPiArwqDCoMKgIGF2X2QzZDEydmFfc3luY19jb250ZXh0X2ZyZWUoJmN0eC0+c3luY19jdHgp Ow0KPiArDQo+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5kZWNvZGVyX2hlYXAp Ow0KPiArDQo+ICvCoMKgwqAgYXZfYnVmZmVyX3VucmVmKCZjdHgtPmRlY29kZXJfcmVmKTsNCj4g Kw0KPiArwqDCoMKgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgSUQzRDEyUmVzb3Vy Y2UgKmdldF9zdXJmYWNlKGNvbnN0IEFWRnJhbWUgKmZyYW1lKQ0KPiArew0KPiArwqDCoMKgIHJl dHVybiAoSUQzRDEyUmVzb3VyY2UgKilmcmFtZS0+ZGF0YVswXTsNCj4gK30NCj4gKw0KPiAraW50 cHRyX3QgZmZfZDNkMTJ2YV9nZXRfc3VyZmFjZV9pbmRleChBVkNvZGVjQ29udGV4dCAqY3R4LCBj b25zdCBBVkZyYW1lKg0KPiBmcmFtZSkNCj4gK3sNCj4gK8KgwqDCoCByZXR1cm4gKGludHB0cl90 KWZyYW1lLT5kYXRhWzFdOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgQVZEM0QxMlZBU3luY0NvbnRl eHQgKmQzZDEydmFfZ2V0X3N5bmNfY29udGV4dChjb25zdCBBVkZyYW1lICpmcmFtZSkNCj4gK3sN Cj4gK8KgwqDCoCByZXR1cm4gKEFWRDNEMTJWQVN5bmNDb250ZXh0ICopZnJhbWUtPmRhdGFbMl07 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9iZWdpbl91cGRhdGVfcmVmZXJlbmNl X2ZyYW1lcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+IEQzRDEyX1JFU09VUkNFX0JBUlJJRVIg KmJhcnJpZXJzLCBpbnQgaW5kZXgpDQo+ICt7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNvbnRl eHTCoMKgICpjdHjCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2 Y3R4KTsNCj4gK8KgwqDCoCBBVkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmZyYW1lc19jdHjC oMKgID0gRDNEMTJWQV9GUkFNRVNfQ09OVEVYVChhdmN0eCk7DQo+ICvCoMKgwqAgQVZEM0QxMlZB RnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7DQo+ICsNCj4g K8KgwqDCoCBpbnQgbnVtX2JhcnJpZXIgPSAwOw0KPiArDQo+ICvCoMKgwqAgZm9yIChpbnQgaSA9 IDA7IGkgPCBjdHgtPm1heF9udW1fcmVmOyBpKyspIHsNCj4gK8KgwqDCoMKgwqDCoMKgIGlmIChj dHgtPnJlZl9yZXNvdXJjZXNbaV0gJiYgY3R4LT5yZWZfcmVzb3VyY2VzW2ldICE9IGZyYW1lc19o d2N0eC0NCj4gPnRleHR1cmVfaW5mb3NbaW5kZXhdLnRleHR1cmUpIHsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYmFycmllcnNbbnVtX2JhcnJpZXJdLlR5cGXCoCA9DQo+IEQzRDEyX1JFU09V UkNFX0JBUlJJRVJfVFlQRV9UUkFOU0lUSU9OOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi YXJyaWVyc1tudW1fYmFycmllcl0uRmxhZ3MgPSBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSX0ZMQUdf Tk9ORTsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFycmllcnNbbnVtX2JhcnJpZXJdLlRy YW5zaXRpb24gPQ0KPiAoRDNEMTJfUkVTT1VSQ0VfVFJBTlNJVElPTl9CQVJSSUVSKXsNCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucFJlc291cmNlwqDCoCA9IGN0eC0+cmVmX3Jl c291cmNlc1tpXSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuU3VicmVzb3Vy Y2UgPSAwLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TdGF0ZUJlZm9yZSA9 IEQzRDEyX1JFU09VUkNFX1NUQVRFX0NPTU1PTiwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAuU3RhdGVBZnRlcsKgID0gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fREVDT0RF X1JFQUQsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH07DQo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIG51bV9iYXJyaWVyKys7DQo+ICvCoMKgwqDCoMKgwqDCoCB9DQo+ICvCoMKgwqAgfQ0K PiArDQo+ICvCoMKgwqAgcmV0dXJuIG51bV9iYXJyaWVyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBkM2QxMnZhX2VuZF91cGRhdGVfcmVmZXJlbmNlX2ZyYW1lcyhBVkNvZGVjQ29udGV4dCAq YXZjdHgsDQo+IEQzRDEyX1JFU09VUkNFX0JBUlJJRVIgKmJhcnJpZXJzLCBpbnQgaW5kZXgpDQo+ ICt7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHTCoMKgICpjdHjCoMKgwqDCoMKgwqDC oMKgwqAgPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsNCj4gK8KgwqDCoCBBVkhXRnJh bWVzQ29udGV4dMKgwqDCoMKgwqAgKmZyYW1lc19jdHjCoMKgID0gRDNEMTJWQV9GUkFNRVNfQ09O VEVYVChhdmN0eCk7DQo+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3 Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7DQo+ICvCoMKgwqAgaW50IG51bV9iYXJyaWVyID0gMDsN Cj4gKw0KPiArwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgY3R4LT5tYXhfbnVtX3JlZjsgaSsr KSB7DQo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5yZWZfcmVzb3VyY2VzW2ldICYmIGN0eC0+ cmVmX3Jlc291cmNlc1tpXSAhPSBmcmFtZXNfaHdjdHgtDQo+ID50ZXh0dXJlX2luZm9zW2luZGV4 XS50ZXh0dXJlKSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhcnJpZXJzW251bV9iYXJy aWVyXS5UcmFuc2l0aW9uLnBSZXNvdXJjZSA9IGN0eC0NCj4gPnJlZl9yZXNvdXJjZXNbaV07DQo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhcnJpZXJzW251bV9iYXJyaWVyXS5GbGFncyA9IEQz RDEyX1JFU09VUkNFX0JBUlJJRVJfRkxBR19OT05FOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBiYXJyaWVyc1tudW1fYmFycmllcl0uVHJhbnNpdGlvbi5TdGF0ZUJlZm9yZSA9DQo+IEQzRDEy X1JFU09VUkNFX1NUQVRFX1ZJREVPX0RFQ09ERV9SRUFEOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBiYXJyaWVyc1tudW1fYmFycmllcl0uVHJhbnNpdGlvbi5TdGF0ZUFmdGVyID0NCj4gRDNE MTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OOw0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudW1f YmFycmllcisrOw0KPiArwqDCoMKgwqDCoMKgwqAgfQ0KPiArwqDCoMKgIH0NCj4gK30NCj4gKw0K PiAraW50IGZmX2QzZDEydmFfY29tbW9uX2VuZF9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgs IEFWRnJhbWUgKmZyYW1lLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCB2b2lkICpwcCwgdW5zaWduZWQgcHBfc2l6ZSwN Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29uc3Qgdm9pZCAqcW0sIHVuc2lnbmVkIHFtX3NpemUsDQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCgqdXBkYXRl X2lucHV0X2FyZ3VtZW50cykoQVZDb2RlY0NvbnRleHQgKiwNCj4gRDNEMTJfVklERU9fREVDT0RF X0lOUFVUX1NUUkVBTV9BUkdVTUVOVFMgKiwgSUQzRDEyUmVzb3VyY2UgKikpDQo+ICt7DQo+ICvC oMKgwqAgaW50IHJldDsNCj4gK8KgwqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dMKgwqAgKmN0eMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPQ0KPiBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2 Y3R4KTsNCj4gK8KgwqDCoCBBVkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmZyYW1lc19jdHjC oMKgwqDCoMKgwqDCoCA9DQo+IEQzRDEyVkFfRlJBTUVTX0NPTlRFWFQoYXZjdHgpOw0KPiArwqDC oMKgIEFWRDNEMTJWQUZyYW1lc0NvbnRleHQgKmZyYW1lc19od2N0eMKgwqDCoMKgwqAgPSBmcmFt ZXNfY3R4LT5od2N0eDsNCj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kQWxsb2NhdG9yICpjb21tYW5k X2FsbG9jYXRvciA9IE5VTEw7DQo+ICsNCj4gK8KgwqDCoCBJRDNEMTJSZXNvdXJjZSAqcmVzb3Vy Y2UgPSBnZXRfc3VyZmFjZShmcmFtZSk7DQo+ICvCoMKgwqAgVUlOVCBpbmRleCA9IGZmX2QzZDEy dmFfZ2V0X3N1cmZhY2VfaW5kZXgoYXZjdHgsIGZyYW1lKTsNCj4gK8KgwqDCoCBBVkQzRDEyVkFT eW5jQ29udGV4dCAqc3luY19jdHggPSBkM2QxMnZhX2dldF9zeW5jX2NvbnRleHQoZnJhbWUpOw0K PiArDQo+ICvCoMKgwqAgSUQzRDEyVmlkZW9EZWNvZGVDb21tYW5kTGlzdCAqY21kX2xpc3QgPSBj dHgtPmNvbW1hbmRfbGlzdDsNCj4gK8KgwqDCoCBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSIGJhcnJp ZXJzW0QzRDEyVkFfTUFYX1NVUkZBQ0VTXSA9IHsgMCB9Ow0KPiArDQo+ICvCoMKgwqAgRDNEMTJf VklERU9fREVDT0RFX0lOUFVUX1NUUkVBTV9BUkdVTUVOVFMgaW5wdXRfYXJncyA9IHsNCj4gK8Kg wqDCoMKgwqDCoMKgIC5OdW1GcmFtZUFyZ3VtZW50cyA9IDIsDQo+ICvCoMKgwqDCoMKgwqDCoCAu RnJhbWVBcmd1bWVudHMgPSB7DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFswXSA9IHsNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuVHlwZcKgID0gRDNEMTJfVklERU9fREVD T0RFX0FSR1VNRU5UX1RZUEVfUElDVFVSRV9QQVJBTUVURVJTLA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC5TaXplwqAgPSBwcF9zaXplLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC5wRGF0YSA9ICh2b2lkICopcHAsDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIH0sDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFsxXSA9IHsNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAuVHlwZcKgID0NCj4gRDNEMTJfVklERU9fREVDT0RFX0FSR1VN RU5UX1RZUEVfSU5WRVJTRV9RVUFOVElaQVRJT05fTUFUUklYLA0KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC5TaXplwqAgPSBxbV9zaXplLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC5wRGF0YSA9ICh2b2lkICopcW0sDQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIH0sDQo+ICvCoMKgwqDCoMKgwqDCoCB9LA0KPiArwqDCoMKgwqDCoMKgwqAgLnBIZWFwID0g Y3R4LT5kZWNvZGVyX2hlYXAsDQo+ICvCoMKgwqAgfTsNCj4gKw0KPiArwqDCoMKgIEQzRDEyX1ZJ REVPX0RFQ09ERV9PVVRQVVRfU1RSRUFNX0FSR1VNRU5UUyBvdXRwdXRfYXJncyA9IHsNCj4gK8Kg wqDCoMKgwqDCoMKgIC5Db252ZXJzaW9uQXJndW1lbnRzID0gMCwNCj4gK8KgwqDCoMKgwqDCoMKg IC5PdXRwdXRTdWJyZXNvdXJjZcKgwqAgPSAwLA0KPiArwqDCoMKgwqDCoMKgwqAgLnBPdXRwdXRU ZXh0dXJlMkTCoMKgwqAgPSByZXNvdXJjZSwNCj4gK8KgwqDCoCB9Ow0KPiArDQo+ICvCoMKgwqAg VUlOVCBudW1fYmFycmllciA9IDE7DQo+ICvCoMKgwqAgYmFycmllcnNbMF0gPSAoRDNEMTJfUkVT T1VSQ0VfQkFSUklFUikgew0KPiArwqDCoMKgwqDCoMKgwqAgLlR5cGXCoCA9IEQzRDEyX1JFU09V UkNFX0JBUlJJRVJfVFlQRV9UUkFOU0lUSU9OLA0KPiArwqDCoMKgwqDCoMKgwqAgLkZsYWdzID0g RDNEMTJfUkVTT1VSQ0VfQkFSUklFUl9GTEFHX05PTkUsDQo+ICvCoMKgwqDCoMKgwqDCoCAuVHJh bnNpdGlvbiA9IHsNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLnBSZXNvdXJjZcKgwqAgPSBy ZXNvdXJjZSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN1YnJlc291cmNlID0gMCwNCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN0YXRlQmVmb3JlID0gRDNEMTJfUkVTT1VSQ0VfU1RB VEVfQ09NTU9OLA0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAuU3RhdGVBZnRlcsKgID0gRDNE MTJfUkVTT1VSQ0VfU1RBVEVfVklERU9fREVDT0RFX1dSSVRFLA0KPiArwqDCoMKgwqDCoMKgwqAg fSwNCj4gK8KgwqDCoCB9Ow0KPiArDQo+ICvCoMKgwqAgbWVtc2V0KGN0eC0+cmVmX3Jlc291cmNl cywgMCwgc2l6ZW9mKElEM0QxMlJlc291cmNlICopICogY3R4LQ0KPiA+bWF4X251bV9yZWYpOw0K PiArwqDCoMKgIG1lbXNldChjdHgtPnJlZl9zdWJyZXNvdXJjZXMsIDAsIHNpemVvZihVSU5UKSAq IGN0eC0+bWF4X251bV9yZWYpOw0KPiArwqDCoMKgIGlucHV0X2FyZ3MuUmVmZXJlbmNlRnJhbWVz Lk51bVRleHR1cmUyRHMgPSBjdHgtPm1heF9udW1fcmVmOw0KPiArwqDCoMKgIGlucHV0X2FyZ3Mu UmVmZXJlbmNlRnJhbWVzLnBwVGV4dHVyZTJEc8KgID0gY3R4LT5yZWZfcmVzb3VyY2VzOw0KPiAr wqDCoMKgIGlucHV0X2FyZ3MuUmVmZXJlbmNlRnJhbWVzLnBTdWJyZXNvdXJjZXMgPSBjdHgtPnJl Zl9zdWJyZXNvdXJjZXM7DQo+ICsNCj4gK8KgwqDCoCBhdl9kM2QxMnZhX3dhaXRfaWRsZShzeW5j X2N0eCk7DQo+ICsNCj4gK8KgwqDCoCBpZiAoIXFtKQ0KPiArwqDCoMKgwqDCoMKgwqAgaW5wdXRf YXJncy5OdW1GcmFtZUFyZ3VtZW50cyA9IDE7DQo+ICsNCj4gK8KgwqDCoCByZXQgPSB1cGRhdGVf aW5wdXRfYXJndW1lbnRzKGF2Y3R4LCAmaW5wdXRfYXJncywgY3R4LT5idWZmZXJzW2luZGV4XSk7 DQo+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0K PiArDQo+ICvCoMKgwqAgcmV0ID0gZDNkMTJ2YV9nZXRfdmFsaWRfY29tbWFuZF9hbGxvY2F0b3Io YXZjdHgsICZjb21tYW5kX2FsbG9jYXRvcik7DQo+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+ICsNCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJD b21tYW5kQWxsb2NhdG9yX1Jlc2V0KGNvbW1hbmRfYWxsb2NhdG9yKSk7DQo+ICsNCj4gK8KgwqDC oCBEWF9DSEVDSyhJRDNEMTJWaWRlb0RlY29kZUNvbW1hbmRMaXN0X1Jlc2V0KGNtZF9saXN0LA0K PiBjb21tYW5kX2FsbG9jYXRvcikpOw0KPiArDQo+ICvCoMKgwqAgbnVtX2JhcnJpZXIgKz0gZDNk MTJ2YV9iZWdpbl91cGRhdGVfcmVmZXJlbmNlX2ZyYW1lcyhhdmN0eCwgJmJhcnJpZXJzWzFdLA0K PiBpbmRleCk7DQo+ICsNCj4gK8KgwqDCoCBJRDNEMTJWaWRlb0RlY29kZUNvbW1hbmRMaXN0X1Jl c291cmNlQmFycmllcihjbWRfbGlzdCwgbnVtX2JhcnJpZXIsDQo+IGJhcnJpZXJzKTsNCj4gKw0K PiArwqDCoMKgIElEM0QxMlZpZGVvRGVjb2RlQ29tbWFuZExpc3RfRGVjb2RlRnJhbWUoY21kX2xp c3QsIGN0eC0+ZGVjb2RlciwNCj4gJm91dHB1dF9hcmdzLCAmaW5wdXRfYXJncyk7DQo+ICsNCj4g K8KgwqDCoCBiYXJyaWVyc1swXS5UcmFuc2l0aW9uLlN0YXRlQmVmb3JlID0gYmFycmllcnNbMF0u VHJhbnNpdGlvbi5TdGF0ZUFmdGVyOw0KPiArwqDCoMKgIGJhcnJpZXJzWzBdLlRyYW5zaXRpb24u U3RhdGVBZnRlcsKgID0gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfQ09NTU9OOw0KPiArwqDCoMKgIGQz ZDEydmFfZW5kX3VwZGF0ZV9yZWZlcmVuY2VfZnJhbWVzKGF2Y3R4LCAmYmFycmllcnNbMV0sIGlu ZGV4KTsNCj4gKw0KPiArwqDCoMKgIElEM0QxMlZpZGVvRGVjb2RlQ29tbWFuZExpc3RfUmVzb3Vy Y2VCYXJyaWVyKGNtZF9saXN0LCBudW1fYmFycmllciwNCj4gYmFycmllcnMpOw0KPiArDQo+ICvC oMKgwqAgRFhfQ0hFQ0soSUQzRDEyVmlkZW9EZWNvZGVDb21tYW5kTGlzdF9DbG9zZShjbWRfbGlz dCkpOw0KPiArDQo+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlX0V4ZWN1dGVDb21tYW5kTGlz dHMoY3R4LT5jb21tYW5kX3F1ZXVlLCAxLA0KPiAoSUQzRDEyQ29tbWFuZExpc3QgKiopJmN0eC0+ Y29tbWFuZF9saXN0KTsNCj4gKw0KPiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1hbmRRdWV1 ZV9TaWduYWwoY3R4LT5jb21tYW5kX3F1ZXVlLCBzeW5jX2N0eC0+ZmVuY2UsDQo+ICsrc3luY19j dHgtPmZlbmNlX3ZhbHVlKSk7DQo+ICsNCj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJDb21tYW5k UXVldWVfU2lnbmFsKGN0eC0+Y29tbWFuZF9xdWV1ZSwgY3R4LT5zeW5jX2N0eC0NCj4gPmZlbmNl LCArK2N0eC0+c3luY19jdHgtPmZlbmNlX3ZhbHVlKSk7DQo+ICsNCj4gK8KgwqDCoCByZXQgPSBk M2QxMnZhX2Rpc2NhcmRfY29tbWFuZF9hbGxvY2F0b3IoYXZjdHgsIGNvbW1hbmRfYWxsb2NhdG9y LCBjdHgtDQo+ID5zeW5jX2N0eC0+ZmVuY2VfdmFsdWUpOw0KPiArwqDCoMKgIGlmIChyZXQgPCAw KQ0KPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4gKw0KPiArwqDCoMKgIGlmIChjdHgt PmRldmljZV9jdHgtPnN5bmMpIHsNCj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGF2X2QzZDEydmFf d2FpdF9pZGxlKGN0eC0+c3luY19jdHgpOw0KPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDAp DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+ICvCoMKgwqAgfQ0KPiAr DQo+ICvCoMKgwqAgcmV0dXJuIDA7DQo+ICsNCj4gK2ZhaWw6DQo+ICvCoMKgwqAgaWYgKGNvbW1h bmRfYWxsb2NhdG9yKQ0KPiArwqDCoMKgwqDCoMKgwqAgZDNkMTJ2YV9kaXNjYXJkX2NvbW1hbmRf YWxsb2NhdG9yKGF2Y3R4LCBjb21tYW5kX2FsbG9jYXRvciwgY3R4LQ0KPiA+c3luY19jdHgtPmZl bmNlX3ZhbHVlKTsNCj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPiArfQ0KPiBk aWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9kM2QxMnZhLmggYi9saWJhdmNvZGVjL2QzZDEydmEuaA0K PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwLi5kYTNlN2I3YWI5DQo+ IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliYXZjb2RlYy9kM2QxMnZhLmgNCj4gQEAgLTAsMCAr MSwxODQgQEANCj4gKy8qDQo+ICsgKiBEaXJlY3QzRCAxMiBIVyBhY2NlbGVyYXRpb24gdmlkZW8g ZGVjb2Rlcg0KPiArICoNCj4gKyAqIGNvcHlyaWdodCAoYykgMjAyMi0yMDIzIFd1IEppYW5odWEg PHRvcXN4d0BvdXRsb29rLmNvbT4NCj4gKyAqDQo+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuDQo+ICsgKg0KPiArICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcg0KPiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPiArICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQo+ICsgKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4N Cj4gKyAqDQo+ICsgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwNCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZSBHTlUNCj4gKyAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ICsgKg0KPiArICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYw0KPiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxDQo+IFVTQQ0KPiArICov DQo+ICsNCj4gKyNpZm5kZWYgQVZDT0RFQ19EM0QxMlZBX0gNCj4gKyNkZWZpbmUgQVZDT0RFQ19E M0QxMlZBX0gNCj4gKw0KPiArI2luY2x1ZGUgImxpYmF2dXRpbC9maWZvLmgiDQo+ICsjaW5jbHVk ZSAibGliYXZ1dGlsL2h3Y29udGV4dC5oIg0KPiArI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRl eHRfZDNkMTJ2YS5oIg0KPiArI2luY2x1ZGUgImF2Y29kZWMuaCINCj4gKyNpbmNsdWRlICJpbnRl cm5hbC5oIg0KPiArDQo+ICsvKioNCj4gKyAqIEBicmllZiBUaGlzIHN0cnVjdHVyZSBpcyB1c2Vk IHRvIHByb3ZpZGVzIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYW5kDQo+IGRhdGENCj4g KyAqIHRvIHRoZSBGRm1wZWcgRGlyZWN0M0QgMTIgSFdBY2NlbCBpbXBsZW1lbnRhdGlvbiBmb3Ig dmlkZW8gZGVjb2Rlci4NCj4gKyAqDQo+ICsgKiBUaGUgYXBwbGljYXRpb24gbXVzdCBtYWtlIGl0 IGF2YWlsYWJsZSBhcyBBVkNvZGVjQ29udGV4dC5od2FjY2VsX2NvbnRleHQuDQo+ICsgKi8NCg0K RG9lcyBkM2QxMnZhIHN1cHBvcnQgQVZDb2RlY0NvbnRleHQuaHdhY2NlbF9jb250ZXh0ID8gSWYg eWVzLCB5b3Ugc2hvdWxkIG1ha2UNCnRoaXMgZmlsZSBwdWJsaWMsIG1vZGlmeSB0aGUgc3RydWN0 dXJlcyBhbmQgcmVtb3ZlIGFsbCBmZl8gZnVuY3Rpb25zLCBvdGhlcndpc2UNCnVzZXIgY2FuJ3Qg dXNlIHRoZXNlIHN0cnVjdHVyZXMgaW4gYW4gYXBwbGljYXRpb24uIElmIG5vLCBwbGVhc2UgcmVt b3ZlIHRoZQ0KYWJvdmUgY29tbWVudCBhbmQgYmV0dGVyIHRvIHJlbmFtZSB0aGlzIGZpbGUgdG8g ZDNkMTJ2YV9kZWNvZGUuaCBiZWNhdXNlIHRoZQ0Kc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25zIGlu IHRoaXMgZmlsZSBhcmUgZm9yIGQzZDEydmEgZGVjb2RlcnMuIA0KDQpUaGFua3MNCkhhaWhhbw0K DQo+ICt0eXBlZGVmIHN0cnVjdCBEM0QxMlZBRGVjb2RlQ29udGV4dCB7DQo+ICvCoMKgwqAgQVZC dWZmZXJSZWYgKmRlY29kZXJfcmVmOw0KPiArDQo+ICvCoMKgwqAgLyoqDQo+ICvCoMKgwqDCoCAq IEQzRDEyIHZpZGVvIGRlY29kZXINCj4gK8KgwqDCoMKgICovDQo+ICvCoMKgwqAgSUQzRDEyVmlk ZW9EZWNvZGVyICpkZWNvZGVyOw0KPiArDQo+ICvCoMKgwqAgLyoqDQo+ICvCoMKgwqDCoCAqIEQz RDEyIHZpZGVvIGRlY29kZXIgaGVhcA0KPiArwqDCoMKgwqAgKi8NCj4gK8KgwqDCoCBJRDNEMTJW aWRlb0RlY29kZXJIZWFwICpkZWNvZGVyX2hlYXA7DQo+ICsNCj4gK8KgwqDCoCAvKioNCj4gK8Kg wqDCoMKgICogRDNEMTIgY29uZmlndXJhdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZGVjb2Rlcg0K PiArwqDCoMKgwqAgKg0KPiArwqDCoMKgwqAgKiBTcGVjaWZpZWQgYnkgZGVjb2RlcnMNCj4gK8Kg wqDCoMKgICovDQo+ICvCoMKgwqAgRDNEMTJfVklERU9fREVDT0RFX0NPTkZJR1VSQVRJT04gY2Zn Ow0KPiArDQo+ICvCoMKgwqAgLyoqDQo+ICvCoMKgwqDCoCAqIEEgY2FjaGVkIHF1ZXVlIGZvciBy ZXVzaW5nIHRoZSBEM0QxMiBjb21tYW5kIGFsbG9jYXRvcnMNCj4gK8KgwqDCoMKgICoNCj4gK8Kg wqDCoMKgICogQHNlZQ0KPiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93 cy93aW4zMi9kaXJlY3QzZDEyL3JlY29yZGluZy1jb21tYW5kLWxpc3RzLWFuZC1idW5kbGVzI2lk M2QxMmNvbW1hbmRhbGxvY2F0b3INCj4gK8KgwqDCoMKgICovDQo+ICvCoMKgwqAgQVZGaWZvICph bGxvY2F0b3JfcXVldWU7DQo+ICsNCj4gK8KgwqDCoCAvKioNCj4gK8KgwqDCoMKgICogRDNEMTIg Y29tbWFuZCBxdWV1ZQ0KPiArwqDCoMKgwqAgKi8NCj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kUXVl dWUgKmNvbW1hbmRfcXVldWU7DQo+ICsNCj4gK8KgwqDCoCAvKioNCj4gK8KgwqDCoMKgICogRDNE MTIgdmlkZW8gZGVjb2RlIGNvbW1hbmQgbGlzdA0KPiArwqDCoMKgwqAgKi8NCj4gK8KgwqDCoCBJ RDNEMTJWaWRlb0RlY29kZUNvbW1hbmRMaXN0ICpjb21tYW5kX2xpc3Q7DQo+ICsNCj4gK8KgwqDC oCAvKioNCj4gK8KgwqDCoMKgICogVGhlIGFycmF5IG9mIGJ1ZmZlciByZXNvdXJjZXMgdXNlZCB0 byB1cGxvYWQgY29tcHJlc3NlZCBiaXRzdHJlYW0NCj4gK8KgwqDCoMKgICoNCj4gK8KgwqDCoMKg ICogVGhlIGJ1ZmZlcnMubGVuZ3RoIGlzIHRoZSBzYW1lIGFzIEQzRDEyVkFEZWNvZGVDb250ZXh0 Lm1heF9udW1fcmVmDQo+ICvCoMKgwqDCoCAqLw0KPiArwqDCoMKgIElEM0QxMlJlc291cmNlICoq YnVmZmVyczsNCj4gKw0KPiArwqDCoMKgIC8qKg0KPiArwqDCoMKgwqAgKiBUaGUgYXJyYXkgb2Yg cmVzb3VyY2VzIHVzZWQgZm9yIHJlZmVyZW5jZSBmcmFtZXMNCj4gK8KgwqDCoMKgICoNCj4gK8Kg wqDCoMKgICogVGhlIHJlZl9yZXNvdXJjZXMubGVuZ3RoIGlzIHRoZSBzYW1lIGFzDQo+IEQzRDEy VkFEZWNvZGVDb250ZXh0Lm1heF9udW1fcmVmDQo+ICvCoMKgwqDCoCAqLw0KPiArwqDCoMKgIElE M0QxMlJlc291cmNlICoqcmVmX3Jlc291cmNlczsNCj4gKw0KPiArwqDCoMKgIC8qKg0KPiArwqDC oMKgwqAgKiBUaGUgYXJyYXkgb2Ygc3VicmVzb3VyY2VzIHVzZWQgZm9yIHJlZmVyZW5jZSBmcmFt ZXMNCj4gK8KgwqDCoMKgICoNCj4gK8KgwqDCoMKgICogVGhlIHJlZl9zdWJyZXNvdXJjZXMubGVu Z3RoIGlzIHRoZSBzYW1lIGFzDQo+IEQzRDEyVkFEZWNvZGVDb250ZXh0Lm1heF9udW1fcmVmDQo+ ICvCoMKgwqDCoCAqLw0KPiArwqDCoMKgIFVJTlQgKnJlZl9zdWJyZXNvdXJjZXM7DQo+ICsNCj4g K8KgwqDCoCAvKioNCj4gK8KgwqDCoMKgICogTWF4aW11bSBudW1iZXIgb2YgcmVmZXJlbmNlIGZy YW1lcw0KPiArwqDCoMKgwqAgKi8NCj4gK8KgwqDCoCBVSU5UIG1heF9udW1fcmVmOw0KPiArDQo+ ICvCoMKgwqAgLyoqDQo+ICvCoMKgwqDCoCAqIFRoZSBzeW5jIGNvbnRleHQgdXNlZCB0byBzeW5j IGNvbW1hbmQgcXVldWUNCj4gK8KgwqDCoMKgICovDQo+ICvCoMKgwqAgQVZEM0QxMlZBU3luY0Nv bnRleHQgKnN5bmNfY3R4Ow0KPiArDQo+ICvCoMKgwqAgLyoqDQo+ICvCoMKgwqDCoCAqIEEgcG9p bnRlciB0byBBVkQzRDEyVkFEZXZpY2VDb250ZXh0IHVzZWQgdG8gY3JlYXRlIEQzRDEyIG9iamVj dHMNCj4gK8KgwqDCoMKgICovDQo+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqZGV2 aWNlX2N0eDsNCj4gKw0KPiArwqDCoMKgIC8qKg0KPiArwqDCoMKgwqAgKiBQaXhlbCBmb3JtYXQN Cj4gK8KgwqDCoMKgICovDQo+ICvCoMKgwqAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQ7DQo+ ICsNCj4gK8KgwqDCoCAvKioNCj4gK8KgwqDCoMKgICogUHJpdmF0ZSB0byB0aGUgRkZtcGVnIEFW SFdBY2NlbCBpbXBsZW1lbnRhdGlvbg0KPiArwqDCoMKgwqAgKi8NCj4gK8KgwqDCoCB1bnNpZ25l ZCByZXBvcnRfaWQ7DQo+ICt9IEQzRDEyVkFEZWNvZGVDb250ZXh0Ow0KPiArDQo+ICsvKioNCj4g KyAqIEB9DQo+ICsgKi8NCj4gKw0KPiArI2RlZmluZSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2 Y3R4KSAoKEQzRDEyVkFEZWNvZGVDb250ZXh0ICopKChhdmN0eCktDQo+ID5pbnRlcm5hbC0+aHdh Y2NlbF9wcml2X2RhdGEpKQ0KPiArI2RlZmluZSBEM0QxMlZBX0ZSQU1FU19DT05URVhUKGF2Y3R4 KSAoKEFWSFdGcmFtZXNDb250ZXh0ICopKGF2Y3R4KS0NCj4gPmh3X2ZyYW1lc19jdHgtPmRhdGEp DQo+ICsNCj4gKy8qKg0KPiArICogQGJyaWVmIEdldCBhIHN1aXRhYmxlIG1heGltdW0gYml0c3Ry ZWFtIHNpemUNCj4gKyAqDQo+ICsgKiBDcmVhdGluZyBhbmQgZGVzdHJveWluZyBhIHJlc291cmNl IG9uIGQzZDEyIG5lZWRzIHN5bmMgYW5kIHJlYWxsb2NhdGlvbiwNCj4gc28gdXNlIHRoaXMgZnVu Y3Rpb24NCj4gKyAqIHRvIGhlbHAgYWxsb2NhdGUgYSBiaWcgZW5vdWdoIGJpdHN0cmVhbSBidWZm ZXIgdG8gYXZvaWQgcmVjcmVhdGluZw0KPiByZXNvdXJjZXMgd2hlbiBkZWNvZGluZy4NCj4gKyAq DQo+ICsgKiBAcmV0dXJuIHRoZSBzdWl0YWJsZSBzaXplDQo+ICsgKi8NCj4gK2ludCBmZl9kM2Qx MnZhX2dldF9zdWl0YWJsZV9tYXhfYml0c3RyZWFtX3NpemUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAYnJpZWYgaW5pdCBEM0QxMlZBRGVjb2RlQ29udGV4dA0K PiArICoNCj4gKyAqIEByZXR1cm4gRXJyb3IgY29kZSAocmV0IDwgMCBpZiBmYWlsZWQpDQo+ICsg Ki8NCj4gK2ludCBmZl9kM2QxMnZhX2RlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCk7 DQo+ICsNCj4gKy8qKg0KPiArICogQGJyaWVmIHVuaW5pdCBEM0QxMlZBRGVjb2RlQ29udGV4dA0K PiArICoNCj4gKyAqIEByZXR1cm4gRXJyb3IgY29kZSAocmV0IDwgMCBpZiBmYWlsZWQpDQo+ICsg Ki8NCj4gK2ludCBmZl9kM2QxMnZhX2RlY29kZV91bmluaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBAYnJpZWYgZDNkMTJ2YSBjb21tb24gZnJhbWUgcGFyYW1z DQo+ICsgKg0KPiArICogQHJldHVybiBFcnJvciBjb2RlIChyZXQgPCAwIGlmIGZhaWxlZCkNCj4g KyAqLw0KPiAraW50IGZmX2QzZDEydmFfY29tbW9uX2ZyYW1lX3BhcmFtcyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgsIEFWQnVmZmVyUmVmDQo+ICpod19mcmFtZXNfY3R4KTsNCj4gKw0KPiArLyoqDQo+ ICsgKiBAYnJpZWYgZDNkMTJ2YSBjb21tb24gZW5kIGZyYW1lDQo+ICsgKg0KPiArICogQHBhcmFt IGF2Y3R4wqDCoMKgIGNvZGVjIGNvbnRleHQNCj4gKyAqIEBwYXJhbSBmcmFtZcKgwqDCoCBjdXJy ZW50IG91dHB1dCBmcmFtZQ0KPiArICogQHBhcmFtIHBwwqDCoMKgwqDCoMKgIHBpY3R1cmUgcGFy YW1ldGVycw0KPiArICogQHBhcmFtIHBwX3NpemXCoCB0aGUgc2l6ZSBvZiB0aGUgcGljdHVyZSBw YXJhbWV0ZXJzDQo+ICsgKiBAcGFyYW0gcW3CoMKgwqDCoMKgwqAgcXVhbnRpemF0aW9uIG1hdHJp eA0KPiArICogQHBhcmFtIHFtX3NpemXCoCB0aGUgc2l6ZSBvZiB0aGUgcXVhbnRpemF0aW9uIG1h dHJpeA0KPiArICogQHBhcmFtIGNhbGxiYWNrIHVwZGF0ZSBkZWNvZGVyLXNwZWNpZmllZCBpbnB1 dCBzdHJlYW0gYXJndW1lbnRzDQo+ICsgKiBAcmV0dXJuIEVycm9yIGNvZGUgKHJldCA8IDAgaWYg ZmFpbGVkKQ0KPiArICovDQo+ICtpbnQgZmZfZDNkMTJ2YV9jb21tb25fZW5kX2ZyYW1lKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsDQo+ICvCoMKgwqAgY29uc3Qgdm9pZCAq cHAsIHVuc2lnbmVkIHBwX3NpemUsDQo+ICvCoMKgwqAgY29uc3Qgdm9pZCAqcW0sIHVuc2lnbmVk IHFtX3NpemUsDQo+ICvCoMKgwqAgaW50KCopKEFWQ29kZWNDb250ZXh0ICosIEQzRDEyX1ZJREVP X0RFQ09ERV9JTlBVVF9TVFJFQU1fQVJHVU1FTlRTICosDQo+IElEM0QxMlJlc291cmNlICopKTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBAYnJpZWYgZ2V0IHN1cmZhY2UgaW5kZXgNCj4gKyAqDQo+ICsg KiBAcmV0dXJuIGluZGV4DQo+ICsgKi8NCj4gK2ludHB0cl90IGZmX2QzZDEydmFfZ2V0X3N1cmZh Y2VfaW5kZXgoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBBVkZyYW1lDQo+ICpmcmFtZSk7 DQo+ICsNCj4gKyNlbmRpZiAvKiBBVkNPREVDX0QzRDEyVkFfREVDX0ggKi8NCj4gZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvZDNkMTJ2YV9oMjY0LmMgYi9saWJhdmNvZGVjL2QzZDEydmFfaDI2NC5j DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAuLjA4MTBhMDM0YjQN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWJhdmNvZGVjL2QzZDEydmFfaDI2NC5jDQo+IEBA IC0wLDAgKzEsMjEwIEBADQo+ICsvKg0KPiArICogRGlyZWN0M0QgMTIgaDI2NCBIVyBhY2NlbGVy YXRpb24NCj4gKyAqDQo+ICsgKiBjb3B5cmlnaHQgKGMpIDIwMjItMjAyMyBXdSBKaWFuaHVhIDx0 b3FzeHdAb3V0bG9vay5jb20+DQo+ICsgKg0KPiArICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLg0KPiArICoNCj4gKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3INCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KPiArICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQo+ ICsgKg0KPiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsDQo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLsKgIFNlZSB0aGUgR05VDQo+ICsgKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KPiArICoNCj4gKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMNCj4gKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUNCj4gKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQ0KPiBVU0ENCj4gKyAqLw0K PiArDQo+ICsjaW5jbHVkZSAiY29uZmlnX2NvbXBvbmVudHMuaCINCj4gKyNpbmNsdWRlICJsaWJh dnV0aWwvYXZhc3NlcnQuaCINCj4gKyNpbmNsdWRlICJoMjY0ZGVjLmgiDQo+ICsjaW5jbHVkZSAi aDI2NGRhdGEuaCINCj4gKyNpbmNsdWRlICJoMjY0X3BzLmgiDQo+ICsjaW5jbHVkZSAibXBlZ3V0 aWxzLmgiDQo+ICsjaW5jbHVkZSAiZHh2YTJfaW50ZXJuYWwuaCINCj4gKyNpbmNsdWRlICJkM2Qx MnZhLmgiDQo+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFs LmgiDQo+ICsjaW5jbHVkZSA8ZHh2YS5oPg0KPiArDQo+ICt0eXBlZGVmIHN0cnVjdCBIMjY0RGVj b2RlUGljdHVyZUNvbnRleHQgew0KPiArwqDCoMKgIERYVkFfUGljUGFyYW1zX0gyNjTCoMKgIHBw Ow0KPiArwqDCoMKgIERYVkFfUW1hdHJpeF9IMjY0wqDCoMKgwqAgcW07DQo+ICvCoMKgwqAgdW5z aWduZWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzbGljZV9jb3VudDsNCj4gK8KgwqDCoCBE WFZBX1NsaWNlX0gyNjRfU2hvcnQgc2xpY2Vfc2hvcnRbTUFYX1NMSUNFU107DQo+ICvCoMKgwqAg Y29uc3QgdWludDhfdMKgwqDCoMKgwqDCoMKgwqAgKmJpdHN0cmVhbTsNCj4gK8KgwqDCoCB1bnNp Z25lZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJpdHN0cmVhbV9zaXplOw0KPiArfSBIMjY0 RGVjb2RlUGljdHVyZUNvbnRleHQ7DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZpbGxfc2xpY2Vfc2hv cnQoRFhWQV9TbGljZV9IMjY0X1Nob3J0ICpzbGljZSwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIHBvc2l0aW9uLCB1 bnNpZ25lZCBzaXplKQ0KPiArew0KPiArwqDCoMKgIG1lbXNldChzbGljZSwgMCwgc2l6ZW9mKCpz bGljZSkpOw0KPiArwqDCoMKgIHNsaWNlLT5CU05BTHVuaXREYXRhTG9jYXRpb24gPSBwb3NpdGlv bjsNCj4gK8KgwqDCoCBzbGljZS0+U2xpY2VCeXRlc0luQnVmZmVywqDCoMKgID0gc2l6ZTsNCj4g K8KgwqDCoCBzbGljZS0+d0JhZFNsaWNlQ2hvcHBpbmfCoMKgwqDCoCA9IDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9oMjY0X3N0YXJ0X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICph dmN0eCwNCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhdl91bnVzZWQgY29uc3QgdWludDhfdCAqYnVmZmVyLA0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGF2X3VudXNlZCB1aW50MzJfdCBzaXplKQ0KPiArew0KPiArwqDCoMKgIGNvbnN0 IEgyNjRDb250ZXh0wqDCoMKgwqDCoMKgwqAgKmjCoMKgwqDCoMKgwqAgPSBhdmN0eC0+cHJpdl9k YXRhOw0KPiArwqDCoMKgIEgyNjREZWNvZGVQaWN0dXJlQ29udGV4dCAqY3R4X3BpYyA9IGgtPmN1 cl9waWNfcHRyLQ0KPiA+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7DQo+ICvCoMKgwqAgRDNEMTJW QURlY29kZUNvbnRleHTCoMKgwqDCoCAqY3R4wqDCoMKgwqAgPSBEM0QxMlZBX0RFQ09ERV9DT05U RVhUKGF2Y3R4KTsNCj4gKw0KPiArwqDCoMKgIGlmICghY3R4KQ0KPiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC0xOw0KPiArDQo+ICvCoMKgwqAgYXNzZXJ0KGN0eF9waWMpOw0KPiArDQo+ICvCoMKg wqAgZmZfZHh2YTJfaDI2NF9maWxsX3BpY3R1cmVfcGFyYW1ldGVycyhhdmN0eCwgKEFWRFhWQUNv bnRleHQgKiljdHgsDQo+ICZjdHhfcGljLT5wcCk7DQo+ICsNCj4gK8KgwqDCoCBmZl9keHZhMl9o MjY0X2ZpbGxfc2NhbGluZ19saXN0cyhhdmN0eCwgKEFWRFhWQUNvbnRleHQgKiljdHgsICZjdHhf cGljLQ0KPiA+cW0pOw0KPiArDQo+ICvCoMKgwqAgY3R4X3BpYy0+c2xpY2VfY291bnTCoMKgwqAg PSAwOw0KPiArwqDCoMKgIGN0eF9waWMtPmJpdHN0cmVhbV9zaXplID0gMDsNCj4gK8KgwqDCoCBj dHhfcGljLT5iaXRzdHJlYW3CoMKgwqDCoMKgID0gTlVMTDsNCj4gKw0KPiArwqDCoMKgIHJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGQzZDEydmFfaDI2NF9kZWNvZGVfc2xpY2Uo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCB1aW50OF90DQo+ICpidWZmZXIsIHVpbnQzMl90 IHNpemUpDQo+ICt7DQo+ICvCoMKgwqAgdW5zaWduZWQgcG9zaXRpb247DQo+ICvCoMKgwqAgY29u c3QgSDI2NENvbnRleHTCoMKgwqDCoMKgwqDCoCAqaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiArwqDCoMKgIGNvbnN0IEgyNjRTbGljZUNvbnRleHTC oMKgICpzbMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gJmgtPnNsaWNlX2N0eFswXTsNCj4g K8KgwqDCoCBjb25zdCBIMjY0UGljdHVyZcKgwqDCoMKgwqDCoMKgICpjdXJyZW50X3BpY3R1cmUg PSBoLT5jdXJfcGljX3B0cjsNCj4gK8KgwqDCoCBIMjY0RGVjb2RlUGljdHVyZUNvbnRleHQgKmN0 eF9waWPCoMKgwqDCoMKgwqDCoMKgID0gY3VycmVudF9waWN0dXJlLQ0KPiA+aHdhY2NlbF9waWN0 dXJlX3ByaXZhdGU7DQo+ICsNCj4gK8KgwqDCoCBpZiAoY3R4X3BpYy0+c2xpY2VfY291bnQgPj0g TUFYX1NMSUNFUykNCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVSUk9SKEVSQU5HRSk7DQo+ ICsNCj4gK8KgwqDCoCBpZiAoIWN0eF9waWMtPmJpdHN0cmVhbSkNCj4gK8KgwqDCoMKgwqDCoMKg IGN0eF9waWMtPmJpdHN0cmVhbSA9IGJ1ZmZlcjsNCj4gK8KgwqDCoCBjdHhfcGljLT5iaXRzdHJl YW1fc2l6ZSArPSBzaXplOw0KPiArDQo+ICvCoMKgwqAgcG9zaXRpb24gPSBidWZmZXIgLSBjdHhf cGljLT5iaXRzdHJlYW07DQo+ICvCoMKgwqAgZmlsbF9zbGljZV9zaG9ydCgmY3R4X3BpYy0+c2xp Y2Vfc2hvcnRbY3R4X3BpYy0+c2xpY2VfY291bnRdLCBwb3NpdGlvbiwNCj4gc2l6ZSk7DQo+ICvC oMKgwqAgY3R4X3BpYy0+c2xpY2VfY291bnQrKzsNCj4gKw0KPiArwqDCoMKgIGlmIChzbC0+c2xp Y2VfdHlwZSAhPSBBVl9QSUNUVVJFX1RZUEVfSSAmJiBzbC0+c2xpY2VfdHlwZSAhPQ0KPiBBVl9Q SUNUVVJFX1RZUEVfU0kpDQo+ICvCoMKgwqDCoMKgwqDCoCBjdHhfcGljLT5wcC53Qml0RmllbGRz ICY9IH4oMSA8PCAxNSk7IC8qIFNldCBJbnRyYVBpY0ZsYWcgdG8gMCAqLw0KPiArDQo+ICvCoMKg wqAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgU1RBUlRfQ09ERSA2NTUzNg0KPiAr I2RlZmluZSBTVEFSVF9DT0RFX1NJWkUgMw0KPiArc3RhdGljIGludCB1cGRhdGVfaW5wdXRfYXJn dW1lbnRzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4gRDNEMTJfVklERU9fREVDT0RFX0lOUFVU X1NUUkVBTV9BUkdVTUVOVFMgKmlucHV0X2FyZ3MsIElEM0QxMlJlc291cmNlICpidWZmZXIpDQo+ ICt7DQo+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHTCoMKgwqDCoCAqY3R4wqDCoMKgwqDC oMKgwqDCoMKgID0gRDNEMTJWQV9ERUNPREVfQ09OVEVYVChhdmN0eCk7DQo+ICvCoMKgwqAgQVZI V0ZyYW1lc0NvbnRleHTCoMKgwqDCoMKgwqDCoCAqZnJhbWVzX2N0eMKgwqAgPSBEM0QxMlZBX0ZS QU1FU19DT05URVhUKGF2Y3R4KTsNCj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0wqDC oCAqZnJhbWVzX2h3Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7DQo+ICsNCj4gK8KgwqDCoCBjb25z dCBIMjY0Q29udGV4dMKgwqDCoMKgwqDCoMKgICpowqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCA9IGF2Y3R4LT5wcml2X2RhdGE7DQo+ICvCoMKgwqAgY29uc3QgSDI2NFBpY3R1cmXCoMKgwqDC oMKgwqDCoCAqY3VycmVudF9waWN0dXJlID0gaC0+Y3VyX3BpY19wdHI7DQo+ICvCoMKgwqAgSDI2 NERlY29kZVBpY3R1cmVDb250ZXh0ICpjdHhfcGljwqDCoMKgwqDCoMKgwqDCoCA9IGN1cnJlbnRf cGljdHVyZS0NCj4gPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOw0KPiArDQo+ICvCoMKgwqAgaW50 IGksIGluZGV4Ow0KPiArwqDCoMKgIHVpbnQ4X3QgKm1hcHBlZF9kYXRhLCAqbWFwcGVkX3B0cjsN Cj4gK8KgwqDCoCBEWFZBX1NsaWNlX0gyNjRfU2hvcnQgKnNsaWNlOw0KPiArwqDCoMKgIEQzRDEy X1ZJREVPX0RFQ09ERV9GUkFNRV9BUkdVTUVOVCAqYXJnczsNCj4gKw0KPiArwqDCoMKgIGlmIChG QUlMRUQoSUQzRDEyUmVzb3VyY2VfTWFwKGJ1ZmZlciwgMCwgTlVMTCwgJm1hcHBlZF9kYXRhKSkp IHsNCj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVk IHRvIG1hcCBEM0QxMiBCdWZmZXINCj4gcmVzb3VyY2UhXG4iKTsNCj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7DQo+ICvCoMKgwqAgfQ0KPiArDQo+ICvCoMKgwqAgbWFw cGVkX3B0ciA9IG1hcHBlZF9kYXRhOw0KPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBjdHhfcGlj LT5zbGljZV9jb3VudDsgaSsrKSB7DQo+ICvCoMKgwqDCoMKgwqDCoCBVSU5UIHBvc2l0aW9uLCBz aXplOw0KPiArwqDCoMKgwqDCoMKgwqAgc2xpY2UgPSAmY3R4X3BpYy0+c2xpY2Vfc2hvcnRbaV07 DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgIHBvc2l0aW9uID0gc2xpY2UtPkJTTkFMdW5pdERhdGFM b2NhdGlvbjsNCj4gK8KgwqDCoMKgwqDCoMKgIHNpemXCoMKgwqDCoCA9IHNsaWNlLT5TbGljZUJ5 dGVzSW5CdWZmZXI7DQo+ICsNCj4gK8KgwqDCoMKgwqDCoMKgIHNsaWNlLT5TbGljZUJ5dGVzSW5C dWZmZXIgKz0gU1RBUlRfQ09ERV9TSVpFOw0KPiArwqDCoMKgwqDCoMKgwqAgc2xpY2UtPkJTTkFM dW5pdERhdGFMb2NhdGlvbiA9IG1hcHBlZF9wdHIgLSBtYXBwZWRfZGF0YTsNCj4gKw0KPiArwqDC oMKgwqDCoMKgwqAgKih1aW50MzJfdCAqKW1hcHBlZF9wdHIgPSBTVEFSVF9DT0RFOw0KPiArwqDC oMKgwqDCoMKgwqAgbWFwcGVkX3B0ciArPSBTVEFSVF9DT0RFX1NJWkU7DQo+ICsNCj4gK8KgwqDC oMKgwqDCoMKgIG1lbWNweShtYXBwZWRfcHRyLCAmY3R4X3BpYy0+Yml0c3RyZWFtW3Bvc2l0aW9u XSwgc2l6ZSk7DQo+ICvCoMKgwqDCoMKgwqDCoCBtYXBwZWRfcHRyICs9IHNpemU7DQo+ICvCoMKg wqAgfQ0KPiArDQo+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2VfVW5tYXAoYnVmZmVyLCAwLCBOVUxM KTsNCj4gKw0KPiArwqDCoMKgIGlucHV0X2FyZ3MtPkNvbXByZXNzZWRCaXRzdHJlYW0gPQ0KPiAo RDNEMTJfVklERU9fREVDT0RFX0NPTVBSRVNTRURfQklUU1RSRUFNKXsNCj4gK8KgwqDCoMKgwqDC oMKgIC5wQnVmZmVyID0gYnVmZmVyLA0KPiArwqDCoMKgwqDCoMKgwqAgLk9mZnNldMKgID0gMCwN Cj4gK8KgwqDCoMKgwqDCoMKgIC5TaXplwqDCoMKgID0gbWFwcGVkX3B0ciAtIG1hcHBlZF9kYXRh LA0KPiArwqDCoMKgIH07DQo+ICsNCj4gK8KgwqDCoCBhcmdzID0gJmlucHV0X2FyZ3MtPkZyYW1l QXJndW1lbnRzW2lucHV0X2FyZ3MtPk51bUZyYW1lQXJndW1lbnRzKytdOw0KPiArwqDCoMKgIGFy Z3MtPlR5cGXCoCA9IEQzRDEyX1ZJREVPX0RFQ09ERV9BUkdVTUVOVF9UWVBFX1NMSUNFX0NPTlRS T0w7DQo+ICvCoMKgwqAgYXJncy0+U2l6ZcKgID0gc2l6ZW9mKERYVkFfU2xpY2VfSDI2NF9TaG9y dCkgKiBjdHhfcGljLT5zbGljZV9jb3VudDsNCj4gK8KgwqDCoCBhcmdzLT5wRGF0YSA9IGN0eF9w aWMtPnNsaWNlX3Nob3J0Ow0KPiArDQo+ICvCoMKgwqAgaW5kZXggPSBjdHhfcGljLT5wcC5DdXJy UGljLkluZGV4N0JpdHM7DQo+ICvCoMKgwqAgY3R4LT5yZWZfcmVzb3VyY2VzW2luZGV4XSA9IGZy YW1lc19od2N0eC0+dGV4dHVyZV9pbmZvc1tpbmRleF0udGV4dHVyZTsNCj4gK8KgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoY3R4X3BpYy0+cHAuUmVmRnJhbWVMaXN0KTsgaSsr KSB7DQo+ICvCoMKgwqDCoMKgwqDCoCBpbmRleCA9IGN0eF9waWMtPnBwLlJlZkZyYW1lTGlzdFtp XS5JbmRleDdCaXRzOw0KPiArwqDCoMKgwqDCoMKgwqAgaWYgKGluZGV4ICE9IDB4N2YpDQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0eC0+cmVmX3Jlc291cmNlc1tpbmRleF0gPSBmcmFtZXNf aHdjdHgtDQo+ID50ZXh0dXJlX2luZm9zW2luZGV4XS50ZXh0dXJlOw0KPiArwqDCoMKgIH0NCj4g Kw0KPiArwqDCoMKgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGQzZDEydmFf aDI2NF9lbmRfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KPiArew0KPiArwqDCoMKgIEgy NjRDb250ZXh0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqaMKgwqDCoMKgwqDCoCA9IGF2 Y3R4LT5wcml2X2RhdGE7DQo+ICvCoMKgwqAgSDI2NERlY29kZVBpY3R1cmVDb250ZXh0wqAgKmN0 eF9waWMgPSBoLT5jdXJfcGljX3B0ci0NCj4gPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOw0KPiAr wqDCoMKgIEgyNjRTbGljZUNvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqAgKnNswqDCoMKgwqDCoCA9 ICZoLT5zbGljZV9jdHhbMF07DQo+ICsNCj4gK8KgwqDCoCBpbnQgcmV0Ow0KPiArDQo+ICvCoMKg wqAgaWYgKGN0eF9waWMtPnNsaWNlX2NvdW50IDw9IDAgfHwgY3R4X3BpYy0+Yml0c3RyZWFtX3Np emUgPD0gMCkNCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtMTsNCj4gKw0KPiArwqDCoMKgIHJl dCA9IGZmX2QzZDEydmFfY29tbW9uX2VuZF9mcmFtZShhdmN0eCwgaC0+Y3VyX3BpY19wdHItPmYs DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY3R4X3BpYy0+cHAsIHNpemVvZihjdHhfcGljLT5wcCks DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmY3R4X3BpYy0+cW0sIHNpemVvZihjdHhfcGljLT5xbSks DQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1cGRhdGVfaW5wdXRfYXJndW1lbnRzKTsNCj4gK8KgwqDC oCBpZiAoIXJldCkNCj4gK8KgwqDCoMKgwqDCoMKgIGZmX2gyNjRfZHJhd19ob3Jpel9iYW5kKGgs IHNsLCAwLCBoLT5hdmN0eC0+aGVpZ2h0KTsNCj4gKw0KPiArwqDCoMKgIHJldHVybiByZXQ7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9oMjY0X2RlY29kZV9pbml0KEFWQ29kZWND b250ZXh0ICphdmN0eCkNCj4gK3sNCj4gK8KgwqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dCAqY3R4 ID0gRDNEMTJWQV9ERUNPREVfQ09OVEVYVChhdmN0eCk7DQo+ICsNCj4gK8KgwqDCoCBjdHgtPmNm Zy5EZWNvZGVQcm9maWxlID0gRDNEMTJfVklERU9fREVDT0RFX1BST0ZJTEVfSDI2NDsNCj4gKw0K PiArwqDCoMKgIHJldHVybiBmZl9kM2QxMnZhX2RlY29kZV9pbml0KGF2Y3R4KTsNCj4gK30NCj4g Kw0KPiArI2lmIENPTkZJR19IMjY0X0QzRDEyVkFfSFdBQ0NFTA0KPiArY29uc3QgQVZIV0FjY2Vs IGZmX2gyNjRfZDNkMTJ2YV9od2FjY2VsID0gew0KPiArwqDCoMKgIC5uYW1lwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSAiaDI2NF9kM2QxMnZhIiwNCj4gK8KgwqDCoCAudHlwZcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gQVZNRURJQV9UWVBFX1ZJREVPLA0KPiAr wqDCoMKgIC5pZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFWX0NPREVD X0lEX0gyNjQsDQo+ICvCoMKgwqAgLnBpeF9mbXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IEFWX1BJWF9GTVRfRDNEMTIsDQo+ICvCoMKgwqAgLmluaXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCA9IGQzZDEydmFfaDI2NF9kZWNvZGVfaW5pdCwNCj4gK8KgwqDCoCAudW5pbml0 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IGZmX2QzZDEydmFfZGVjb2RlX3VuaW5pdCwN Cj4gK8KgwqDCoCAuc3RhcnRfZnJhbWXCoMKgwqDCoMKgwqDCoMKgwqAgPSBkM2QxMnZhX2gyNjRf c3RhcnRfZnJhbWUsDQo+ICvCoMKgwqAgLmRlY29kZV9zbGljZcKgwqDCoMKgwqDCoMKgwqAgPSBk M2QxMnZhX2gyNjRfZGVjb2RlX3NsaWNlLA0KPiArwqDCoMKgIC5lbmRfZnJhbWXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gZDNkMTJ2YV9oMjY0X2VuZF9mcmFtZSwNCj4gK8KgwqDCoCAuZnJhbWVf cGFyYW1zwqDCoMKgwqDCoMKgwqDCoCA9IGZmX2QzZDEydmFfY29tbW9uX2ZyYW1lX3BhcmFtcywN Cj4gK8KgwqDCoCAuZnJhbWVfcHJpdl9kYXRhX3NpemUgPSBzaXplb2YoSDI2NERlY29kZVBpY3R1 cmVDb250ZXh0KSwNCj4gK8KgwqDCoCAucHJpdl9kYXRhX3NpemXCoMKgwqDCoMKgwqAgPSBzaXpl b2YoRDNEMTJWQURlY29kZUNvbnRleHQpLA0KPiArfTsNCj4gKyNlbmRpZg0KPiBkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy9keHZhMi5jIGIvbGliYXZjb2RlYy9keHZhMi5jDQo+IGluZGV4IDU2OGQ2 ODZmMzkuLmIyMmVhM2U4ZjIgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvZHh2YTIuYw0KPiAr KysgYi9saWJhdmNvZGVjL2R4dmEyLmMNCj4gQEAgLTc3NCw2ICs3NzQsMTAgQEAgdW5zaWduZWQg ZmZfZHh2YTJfZ2V0X3N1cmZhY2VfaW5kZXgoY29uc3QgQVZDb2RlY0NvbnRleHQNCj4gKmF2Y3R4 LA0KPiDCoMKgwqDCoCB2b2lkICpzdXJmYWNlID0gZ2V0X3N1cmZhY2UoYXZjdHgsIGZyYW1lKTsN Cj4gwqDCoMKgwqAgdW5zaWduZWQgaTsNCj4gwqANCj4gKyNpZiBDT05GSUdfRDNEMTJWQQ0KPiAr wqDCoMKgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0QzRDEyKQ0KPiArwqDCoMKg wqDCoMKgwqAgcmV0dXJuIChpbnRwdHJfdClmcmFtZS0+ZGF0YVsxXTsNCj4gKyNlbmRpZg0KPiDC oCNpZiBDT05GSUdfRDNEMTFWQQ0KPiDCoMKgwqDCoCBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZf UElYX0ZNVF9EM0QxMSkNCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gKGludHB0cl90KWZyYW1l LT5kYXRhWzFdOw0KPiBAQCAtMTA1NiwzICsxMDYwLDIzIEBAIGludCBmZl9keHZhMl9pc19kM2Qx MShjb25zdCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+IMKgwqDCoMKgIGVsc2UNCj4gwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gMDsNCj4gwqB9DQo+ICsNCj4gK3Vuc2lnbmVkICpmZl9keHZhMl9n ZXRfcmVwb3J0X2lkKGNvbnN0IEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZEWFZBQ29udGV4dA0K PiAqY3R4KQ0KPiArew0KPiArwqDCoMKgIHVuc2lnbmVkICpyZXBvcnRfaWQgPSBOVUxMOw0KPiAr DQo+ICsjaWYgQ09ORklHX0QzRDEyVkENCj4gK8KgwqDCoCBpZiAoYXZjdHgtPnBpeF9mbXQgPT0g QVZfUElYX0ZNVF9EM0QxMikNCj4gK8KgwqDCoMKgwqDCoMKgIHJlcG9ydF9pZCA9ICZjdHgtPmQz ZDEydmEucmVwb3J0X2lkOw0KPiArI2VuZGlmDQo+ICsjaWYgQ09ORklHX0QzRDExVkENCj4gK8Kg wqDCoCBpZiAoZmZfZHh2YTJfaXNfZDNkMTEoYXZjdHgpKQ0KPiArwqDCoMKgwqDCoMKgwqAgcmVw b3J0X2lkID0gJmN0eC0+ZDNkMTF2YS5yZXBvcnRfaWQ7DQo+ICsjZW5kaWYNCj4gKyNpZiBDT05G SUdfRFhWQTINCj4gK8KgwqDCoCBpZiAoYXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9EWFZB Ml9WTEQpDQo+ICvCoMKgwqDCoMKgwqDCoCByZXBvcnRfaWQgPSAmY3R4LT5keHZhMi5yZXBvcnRf aWQ7DQo+ICsjZW5kaWYNCj4gKw0KPiArwqDCoMKgIHJldHVybiByZXBvcnRfaWQ7DQo+ICt9DQo+ IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2R4dmEyLmggYi9saWJhdmNvZGVjL2R4dmEyLmgNCj4g aW5kZXggMjJjOTM5OTJmMi4uYmRlYzYxMTJlOSAxMDA2NDQNCj4gLS0tIGEvbGliYXZjb2RlYy9k eHZhMi5oDQo+ICsrKyBiL2xpYmF2Y29kZWMvZHh2YTIuaA0KPiBAQCAtNDUsOSArNDUsNiBAQA0K PiDCoCAqIEB7DQo+IMKgICovDQo+IMKgDQo+IC0jZGVmaW5lIEZGX0RYVkEyX1dPUktBUk9VTkRf U0NBTElOR19MSVNUX1pJR1pBRyAxIC8vLzwgV29yayBhcm91bmQgZm9yIERYVkEyDQo+IGFuZCBv bGQgVVZEL1VWRCsgQVRJIHZpZGVvIGNhcmRzDQo+IC0jZGVmaW5lIEZGX0RYVkEyX1dPUktBUk9V TkRfSU5URUxfQ0xFQVJWSURFT8KgwqDCoCAyIC8vLzwgV29yayBhcm91bmQgZm9yIERYVkEyDQo+ IGFuZCBvbGQgSW50ZWwgR1BVcyB3aXRoIENsZWFyVmlkZW8gaW50ZXJmYWNlDQo+IC0NCj4gwqAv KioNCj4gwqAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHByb3ZpZGVzIHRoZSBuZWNlc3Nh cnkgY29uZmlndXJhdGlvbnMgYW5kIGRhdGENCj4gwqAgKiB0byB0aGUgRFhWQTIgRkZtcGVnIEhX QWNjZWwgaW1wbGVtZW50YXRpb24uDQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2R4dmEyX2gy NjQuYyBiL2xpYmF2Y29kZWMvZHh2YTJfaDI2NC5jDQo+IGluZGV4IDYzMDBiMTQxOGQuLjdhMDc2 ZWE5ODEgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvZHh2YTJfaDI2NC5jDQo+ICsrKyBiL2xp YmF2Y29kZWMvZHh2YTJfaDI2NC5jDQo+IEBAIC00Nyw5ICs0NywxMCBAQCBzdGF0aWMgdm9pZCBm aWxsX3BpY3R1cmVfZW50cnkoRFhWQV9QaWNFbnRyeV9IMjY0ICpwaWMsDQo+IMKgwqDCoMKgIHBp Yy0+YlBpY0VudHJ5ID0gaW5kZXggfCAoZmxhZyA8PCA3KTsNCj4gwqB9DQo+IMKgDQo+IC1zdGF0 aWMgdm9pZCBmaWxsX3BpY3R1cmVfcGFyYW1ldGVycyhjb25zdCBBVkNvZGVjQ29udGV4dCAqYXZj dHgsDQo+IEFWRFhWQUNvbnRleHQgKmN0eCwgY29uc3QgSDI2NENvbnRleHQgKmgsDQo+ICt2b2lk IGZmX2R4dmEyX2gyNjRfZmlsbF9waWN0dXJlX3BhcmFtZXRlcnMoY29uc3QgQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LA0KPiBBVkRYVkFDb250ZXh0ICpjdHgsDQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEWFZB X1BpY1BhcmFtc19IMjY0ICpwcCkNCj4gwqB7DQo+ICvCoMKgwqAgY29uc3QgSDI2NENvbnRleHQg KmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gYXZjdHgtPnByaXZfZGF0YTsNCj4gwqDC oMKgwqAgY29uc3QgSDI2NFBpY3R1cmUgKmN1cnJlbnRfcGljdHVyZSA9IGgtPmN1cl9waWNfcHRy Ow0KPiDCoMKgwqDCoCBjb25zdCBTUFMgKnNwcyA9IGgtPnBzLnNwczsNCj4gwqDCoMKgwqAgY29u c3QgUFBTICpwcHMgPSBoLT5wcy5wcHM7DQo+IEBAIC0xNjMsOSArMTY0LDEwIEBAIHN0YXRpYyB2 b2lkIGZpbGxfcGljdHVyZV9wYXJhbWV0ZXJzKGNvbnN0IEFWQ29kZWNDb250ZXh0DQo+ICphdmN0 eCwgQVZEWFZBQ29udGV4dCAqDQo+IMKgwqDCoMKgIC8vcHAtPlNsaWNlR3JvdXBNYXBbODEwXTvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIFhYWCBub3QgaW1wbGVtZW50ZWQgYnkgRkZt cGVnDQo+ICovDQo+IMKgfQ0KPiDCoA0KPiAtc3RhdGljIHZvaWQgZmlsbF9zY2FsaW5nX2xpc3Rz KGNvbnN0IEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZEWFZBQ29udGV4dA0KPiAqY3R4LCBjb25z dCBIMjY0Q29udGV4dCAqaCwgRFhWQV9RbWF0cml4X0gyNjQgKnFtKQ0KPiArdm9pZCBmZl9keHZh Ml9oMjY0X2ZpbGxfc2NhbGluZ19saXN0cyhjb25zdCBBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+ IEFWRFhWQUNvbnRleHQgKmN0eCwgRFhWQV9RbWF0cml4X0gyNjQgKnFtKQ0KPiDCoHsNCj4gLcKg wqDCoCBjb25zdCBQUFMgKnBwcyA9IGgtPnBzLnBwczsNCj4gK8KgwqDCoCBjb25zdCBIMjY0Q29u dGV4dCAqaMKgwqAgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPiArwqDCoMKgIGNvbnN0IFBQU8KgwqDC oMKgwqDCoMKgwqAgKnBwcyA9IGgtPnBzLnBwczsNCj4gwqDCoMKgwqAgdW5zaWduZWQgaSwgajsN Cj4gwqDCoMKgwqAgbWVtc2V0KHFtLCAwLCBzaXplb2YoKnFtKSk7DQo+IMKgwqDCoMKgIGlmIChE WFZBX0NPTlRFWFRfV09SS0FST1VORChhdmN0eCwgY3R4KSAmDQo+IEZGX0RYVkEyX1dPUktBUk9V TkRfU0NBTElOR19MSVNUX1pJR1pBRykgew0KPiBAQCAtNDUzLDEwICs0NTUsMTAgQEAgc3RhdGlj IGludCBkeHZhMl9oMjY0X3N0YXJ0X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4gwqDC oMKgwqAgYXNzZXJ0KGN0eF9waWMpOw0KPiDCoA0KPiDCoMKgwqDCoCAvKiBGaWxsIHVwIERYVkFf UGljUGFyYW1zX0gyNjQgKi8NCj4gLcKgwqDCoCBmaWxsX3BpY3R1cmVfcGFyYW1ldGVycyhhdmN0 eCwgY3R4LCBoLCAmY3R4X3BpYy0+cHApOw0KPiArwqDCoMKgIGZmX2R4dmEyX2gyNjRfZmlsbF9w aWN0dXJlX3BhcmFtZXRlcnMoYXZjdHgsIGN0eCwgJmN0eF9waWMtPnBwKTsNCj4gwqANCj4gwqDC oMKgwqAgLyogRmlsbCB1cCBEWFZBX1FtYXRyaXhfSDI2NCAqLw0KPiAtwqDCoMKgIGZpbGxfc2Nh bGluZ19saXN0cyhhdmN0eCwgY3R4LCBoLCAmY3R4X3BpYy0+cW0pOw0KPiArwqDCoMKgIGZmX2R4 dmEyX2gyNjRfZmlsbF9zY2FsaW5nX2xpc3RzKGF2Y3R4LCBjdHgsICZjdHhfcGljLT5xbSk7DQo+ IMKgDQo+IMKgwqDCoMKgIGN0eF9waWMtPnNsaWNlX2NvdW50wqDCoMKgID0gMDsNCj4gwqDCoMKg wqAgY3R4X3BpYy0+Yml0c3RyZWFtX3NpemUgPSAwOw0KPiBkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy9keHZhMl9pbnRlcm5hbC5oIGIvbGliYXZjb2RlYy9keHZhMl9pbnRlcm5hbC5oDQo+IGluZGV4 IGI4MjJhZjU5Y2QuLmE5YTFmYzA5MGUgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvZHh2YTJf aW50ZXJuYWwuaA0KPiArKysgYi9saWJhdmNvZGVjL2R4dmEyX2ludGVybmFsLmgNCj4gQEAgLTI2 LDE4ICsyNiwzNCBAQA0KPiDCoCNkZWZpbmUgQ09CSk1BQ1JPUw0KPiDCoA0KPiDCoCNpbmNsdWRl ICJjb25maWcuaCINCj4gKyNpbmNsdWRlICJjb25maWdfY29tcG9uZW50cy5oIg0KPiDCoA0KPiDC oC8qIGRlZmluZSB0aGUgcHJvcGVyIENPTSBlbnRyaWVzIGJlZm9yZSBmb3JjaW5nIGRlc2t0b3Ag QVBJcyAqLw0KPiDCoCNpbmNsdWRlIDxvYmpiYXNlLmg+DQo+IMKgDQo+ICsjZGVmaW5lIEZGX0RY VkEyX1dPUktBUk9VTkRfU0NBTElOR19MSVNUX1pJR1pBRyAxIC8vLzwgV29yayBhcm91bmQgZm9y DQo+IERYVkEyL0RpcmVjdDNEMTEgYW5kIG9sZCBVVkQvVVZEKyBBVEkgdmlkZW8gY2FyZHMNCj4g KyNkZWZpbmUgRkZfRFhWQTJfV09SS0FST1VORF9JTlRFTF9DTEVBUlZJREVPwqDCoMKgIDIgLy8v PCBXb3JrIGFyb3VuZCBmb3INCj4gRFhWQTIvRGlyZWN0M0QxMSBhbmQgb2xkIEludGVsIEdQVXMg d2l0aCBDbGVhclZpZGVvIGludGVyZmFjZQ0KPiArDQo+IMKgI2lmIENPTkZJR19EWFZBMg0KPiDC oCNpbmNsdWRlICJkeHZhMi5oIg0KPiDCoCNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2R4 dmEyLmgiDQo+ICsjZGVmaW5lIERYVkEyX1ZBUihjdHgsIHZhcikgY3R4LT5keHZhMi52YXINCj4g KyNlbHNlDQo+ICsjZGVmaW5lIERYVkEyX1ZBUihjdHgsIHZhcikgMA0KPiDCoCNlbmRpZg0KPiAr DQo+IMKgI2lmIENPTkZJR19EM0QxMVZBDQo+IMKgI2luY2x1ZGUgImQzZDExdmEuaCINCj4gwqAj aW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMXZhLmgiDQo+ICsjZGVmaW5lIEQzRDEx VkFfVkFSKGN0eCwgdmFyKSBjdHgtPmQzZDExdmEudmFyDQo+ICsjZWxzZQ0KPiArI2RlZmluZSBE M0QxMVZBX1ZBUihjdHgsIHZhcikgMA0KPiArI2VuZGlmDQo+ICsNCj4gKyNpZiBDT05GSUdfRDNE MTJWQQ0KPiArI2luY2x1ZGUgImQzZDEydmEuaCINCj4gwqAjZW5kaWYNCj4gKw0KPiDCoCNpZiBI QVZFX0RYVkFfSA0KPiDCoC8qIFdoZW4gdGFyZ2V0aW5nIFdJTkFQSV9GQU1JTFlfUEhPTkVfQVBQ IG9yIFdJTkFQSV9GQU1JTFlfQVBQLCBkeHZhLmgNCj4gwqAgKiBkZWZpbmVzIG5vdGhpbmcuIEZv cmNlIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbnMgdG8gYmUgdmlzaWJsZS4gKi8NCj4gQEAgLTYyLDYg Kzc4LDkgQEAgdHlwZWRlZiB1bmlvbiB7DQo+IMKgI2lmIENPTkZJR19EWFZBMg0KPiDCoMKgwqDC oCBzdHJ1Y3QgZHh2YV9jb250ZXh0wqDCoMKgwqDCoCBkeHZhMjsNCj4gwqAjZW5kaWYNCj4gKyNp ZiBDT05GSUdfRDNEMTJWQQ0KPiArwqDCoMKgIHN0cnVjdCBEM0QxMlZBRGVjb2RlQ29udGV4dCBk M2QxMnZhOw0KPiArI2VuZGlmDQo+IMKgfSBBVkRYVkFDb250ZXh0Ow0KPiDCoA0KPiDCoHR5cGVk ZWYgc3RydWN0IEZGRFhWQVNoYXJlZENvbnRleHQgew0KPiBAQCAtMTAxLDM5ICsxMjAsMTkgQEAg dHlwZWRlZiBzdHJ1Y3QgRkZEWFZBU2hhcmVkQ29udGV4dCB7DQo+IMKgI2RlZmluZSBEM0QxMVZB X0NPTlRFWFQoY3R4KSAoJmN0eC0+ZDNkMTF2YSkNCj4gwqAjZGVmaW5lIERYVkEyX0NPTlRFWFQo Y3R4KcKgwqAgKCZjdHgtPmR4dmEyKQ0KPiDCoA0KPiAtI2lmIENPTkZJR19EM0QxMVZBICYmIENP TkZJR19EWFZBMg0KPiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfV09SS0FST1VORChhdmN0eCwgY3R4 KcKgwqDCoMKgIChmZl9keHZhMl9pc19kM2QxMShhdmN0eCkgPw0KPiBjdHgtPmQzZDExdmEud29y a2Fyb3VuZCA6IGN0eC0+ZHh2YTIud29ya2Fyb3VuZCkNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhU X0NPVU5UKGF2Y3R4LCBjdHgpwqDCoMKgwqDCoMKgwqDCoMKgIChmZl9keHZhMl9pc19kM2QxMShh dmN0eCkgPw0KPiBjdHgtPmQzZDExdmEuc3VyZmFjZV9jb3VudCA6IGN0eC0+ZHh2YTIuc3VyZmFj ZV9jb3VudCkNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0RFQ09ERVIoYXZjdHgsIGN0eCnCoMKg wqDCoMKgwqDCoCAoZmZfZHh2YTJfaXNfZDNkMTEoYXZjdHgpID8NCj4gKHZvaWQgKiljdHgtPmQz ZDExdmEuZGVjb2RlciA6ICh2b2lkICopY3R4LT5keHZhMi5kZWNvZGVyKQ0KPiAtI2RlZmluZSBE WFZBX0NPTlRFWFRfUkVQT1JUX0lEKGF2Y3R4LCBjdHgpwqDCoMKgwqDCoCAoKihmZl9keHZhMl9p c19kM2QxMShhdmN0eCkgPw0KPiAmY3R4LT5kM2QxMXZhLnJlcG9ydF9pZCA6ICZjdHgtPmR4dmEy LnJlcG9ydF9pZCkpDQo+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9DRkcoYXZjdHgsIGN0eCnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIChmZl9keHZhMl9pc19kM2QxMShhdmN0eCkgPw0KPiAodm9pZCAq KWN0eC0+ZDNkMTF2YS5jZmcgOiAodm9pZCAqKWN0eC0+ZHh2YTIuY2ZnKQ0KPiAtI2RlZmluZSBE WFZBX0NPTlRFWFRfQ0ZHX0JJVFNUUkVBTShhdmN0eCwgY3R4KcKgIChmZl9keHZhMl9pc19kM2Qx MShhdmN0eCkgPw0KPiBjdHgtPmQzZDExdmEuY2ZnLT5Db25maWdCaXRzdHJlYW1SYXcgOiBjdHgt PmR4dmEyLmNmZy0+Q29uZmlnQml0c3RyZWFtUmF3KQ0KPiAtI2RlZmluZSBEWFZBX0NPTlRFWFRf Q0ZHX0lOVFJBUkVTSUQoYXZjdHgsIGN0eCkgKGZmX2R4dmEyX2lzX2QzZDExKGF2Y3R4KSA/DQo+ IGN0eC0+ZDNkMTF2YS5jZmctPkNvbmZpZ0ludHJhUmVzaWRVbnNpZ25lZCA6IGN0eC0+ZHh2YTIu Y2ZnLQ0KPiA+Q29uZmlnSW50cmFSZXNpZFVuc2lnbmVkKQ0KPiAtI2RlZmluZSBEWFZBX0NPTlRF WFRfQ0ZHX1JFU0lEQUNDRUwoYXZjdHgsIGN0eCkgKGZmX2R4dmEyX2lzX2QzZDExKGF2Y3R4KSA/ DQo+IGN0eC0+ZDNkMTF2YS5jZmctPkNvbmZpZ1Jlc2lkRGlmZkFjY2VsZXJhdG9yIDogY3R4LT5k eHZhMi5jZmctDQo+ID5Db25maWdSZXNpZERpZmZBY2NlbGVyYXRvcikNCj4gKyNkZWZpbmUgRFhW QTJfQ09OVEVYVF9WQVIoYXZjdHgsIGN0eCwgdmFyKSAoYXZjdHgtPnBpeF9mbXQgPT0NCj4gQVZf UElYX0ZNVF9EM0QxMiA/IDAgOiAoZmZfZHh2YTJfaXNfZDNkMTEoYXZjdHgpID8gRDNEMTFWQV9W QVIoY3R4LCB2YXIpIDoNCj4gRFhWQTJfVkFSKGN0eCwgdmFyKSkpDQo+ICsNCj4gKyNkZWZpbmUg RFhWQV9DT05URVhUX1JFUE9SVF9JRChhdmN0eCwgY3R4KcKgwqDCoMKgwqANCj4gKCpmZl9keHZh Ml9nZXRfcmVwb3J0X2lkKGF2Y3R4LCBjdHgpKQ0KPiArI2RlZmluZSBEWFZBX0NPTlRFWFRfV09S S0FST1VORChhdmN0eCwgY3R4KcKgwqDCoMKgIERYVkEyX0NPTlRFWFRfVkFSKGF2Y3R4LCBjdHgs DQo+IHdvcmthcm91bmQpDQo+ICsjZGVmaW5lIERYVkFfQ09OVEVYVF9DT1VOVChhdmN0eCwgY3R4 KcKgwqDCoMKgwqDCoMKgwqDCoCBEWFZBMl9DT05URVhUX1ZBUihhdmN0eCwgY3R4LA0KPiBzdXJm YWNlX2NvdW50KQ0KPiArI2RlZmluZSBEWFZBX0NPTlRFWFRfREVDT0RFUihhdmN0eCwgY3R4KcKg wqDCoMKgwqDCoMKgIChhdmN0eC0+cGl4X2ZtdCA9PQ0KPiBBVl9QSVhfRk1UX0QzRDEyID8gMCA6 IChmZl9keHZhMl9pc19kM2QxMShhdmN0eCkgPyAodm9pZCAqKUQzRDExVkFfVkFSKGN0eCwNCj4g ZGVjb2RlcikgOiAodm9pZCAqKURYVkEyX1ZBUihjdHgsIGRlY29kZXIpKSkNCj4gKyNkZWZpbmUg RFhWQV9DT05URVhUX0NGRyhhdmN0eCwgY3R4KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGF2Y3R4 LT5waXhfZm10ID09DQo+IEFWX1BJWF9GTVRfRDNEMTIgPyAwIDogKGZmX2R4dmEyX2lzX2QzZDEx KGF2Y3R4KSA/ICh2b2lkICopRDNEMTFWQV9WQVIoY3R4LA0KPiBjZmcpIDogKHZvaWQgKilEWFZB Ml9WQVIoY3R4LCBjZmcpKSkNCj4gKyNkZWZpbmUgRFhWQV9DT05URVhUX0NGR19CSVRTVFJFQU0o YXZjdHgsIGN0eCnCoCBEWFZBMl9DT05URVhUX1ZBUihhdmN0eCwgY3R4LA0KPiBjZmctPkNvbmZp Z0JpdHN0cmVhbVJhdykNCj4gKyNkZWZpbmUgRFhWQV9DT05URVhUX0NGR19JTlRSQVJFU0lEKGF2 Y3R4LCBjdHgpIERYVkEyX0NPTlRFWFRfVkFSKGF2Y3R4LCBjdHgsDQo+IGNmZy0+Q29uZmlnSW50 cmFSZXNpZFVuc2lnbmVkKQ0KPiArI2RlZmluZSBEWFZBX0NPTlRFWFRfQ0ZHX1JFU0lEQUNDRUwo YXZjdHgsIGN0eCkgRFhWQTJfQ09OVEVYVF9WQVIoYXZjdHgsIGN0eCwNCj4gY2ZnLT5Db25maWdS ZXNpZERpZmZBY2NlbGVyYXRvcikNCj4gwqAjZGVmaW5lIERYVkFfQ09OVEVYVF9WQUxJRChhdmN0 eCwgY3R4KcKgwqDCoMKgwqDCoMKgwqDCoCAoRFhWQV9DT05URVhUX0RFQ09ERVIoYXZjdHgsDQo+ IGN0eCkgJiYgXA0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBE WFZBX0NPTlRFWFRfQ0ZHKGF2Y3R4LA0KPiBjdHgpwqDCoMKgwqAgJiYgXA0KPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChmZl9keHZhMl9pc19kM2QxMShhdmN0eCkg fHwNCj4gY3R4LT5keHZhMi5zdXJmYWNlX2NvdW50KSkNCj4gLSNlbGlmIENPTkZJR19EWFZBMg0K PiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfV09SS0FST1VORChhdmN0eCwgY3R4KcKgwqDCoMKgIChj dHgtPmR4dmEyLndvcmthcm91bmQpDQo+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9DT1VOVChhdmN0 eCwgY3R4KcKgwqDCoMKgwqDCoMKgwqDCoCAoY3R4LT5keHZhMi5zdXJmYWNlX2NvdW50KQ0KPiAt I2RlZmluZSBEWFZBX0NPTlRFWFRfREVDT0RFUihhdmN0eCwgY3R4KcKgwqDCoMKgwqDCoMKgIChj dHgtPmR4dmEyLmRlY29kZXIpDQo+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9SRVBPUlRfSUQoYXZj dHgsIGN0eCnCoMKgwqDCoMKgICgqKCZjdHgtPmR4dmEyLnJlcG9ydF9pZCkpDQo+IC0jZGVmaW5l IERYVkFfQ09OVEVYVF9DRkcoYXZjdHgsIGN0eCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjdHgt PmR4dmEyLmNmZykNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NGR19CSVRTVFJFQU0oYXZjdHgs IGN0eCnCoCAoY3R4LT5keHZhMi5jZmctDQo+ID5Db25maWdCaXRzdHJlYW1SYXcpDQo+IC0jZGVm aW5lIERYVkFfQ09OVEVYVF9DRkdfSU5UUkFSRVNJRChhdmN0eCwgY3R4KSAoY3R4LT5keHZhMi5j ZmctDQo+ID5Db25maWdJbnRyYVJlc2lkVW5zaWduZWQpDQo+IC0jZGVmaW5lIERYVkFfQ09OVEVY VF9DRkdfUkVTSURBQ0NFTChhdmN0eCwgY3R4KSAoY3R4LT5keHZhMi5jZmctDQo+ID5Db25maWdS ZXNpZERpZmZBY2NlbGVyYXRvcikNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX1ZBTElEKGF2Y3R4 LCBjdHgpwqDCoMKgwqDCoMKgwqDCoMKgIChjdHgtPmR4dmEyLmRlY29kZXIgJiYgY3R4LQ0KPiA+ ZHh2YTIuY2ZnICYmIGN0eC0+ZHh2YTIuc3VyZmFjZV9jb3VudCkNCj4gLSNlbGlmIENPTkZJR19E M0QxMVZBDQo+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9XT1JLQVJPVU5EKGF2Y3R4LCBjdHgpwqDC oMKgwqAgKGN0eC0+ZDNkMTF2YS53b3JrYXJvdW5kKQ0KPiAtI2RlZmluZSBEWFZBX0NPTlRFWFRf Q09VTlQoYXZjdHgsIGN0eCnCoMKgwqDCoMKgwqDCoMKgwqAgKGN0eC0+ZDNkMTF2YS5zdXJmYWNl X2NvdW50KQ0KPiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfREVDT0RFUihhdmN0eCwgY3R4KcKgwqDC oMKgwqDCoMKgIChjdHgtPmQzZDExdmEuZGVjb2RlcikNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhU X1JFUE9SVF9JRChhdmN0eCwgY3R4KcKgwqDCoMKgwqAgKCooJmN0eC0+ZDNkMTF2YS5yZXBvcnRf aWQpKQ0KPiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfQ0ZHKGF2Y3R4LCBjdHgpwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAoY3R4LT5kM2QxMXZhLmNmZykNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NG R19CSVRTVFJFQU0oYXZjdHgsIGN0eCnCoCAoY3R4LT5kM2QxMXZhLmNmZy0NCj4gPkNvbmZpZ0Jp dHN0cmVhbVJhdykNCj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NGR19JTlRSQVJFU0lEKGF2Y3R4 LCBjdHgpIChjdHgtPmQzZDExdmEuY2ZnLQ0KPiA+Q29uZmlnSW50cmFSZXNpZFVuc2lnbmVkKQ0K PiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfQ0ZHX1JFU0lEQUNDRUwoYXZjdHgsIGN0eCkgKGN0eC0+ ZDNkMTF2YS5jZmctDQo+ID5Db25maWdSZXNpZERpZmZBY2NlbGVyYXRvcikNCj4gLSNkZWZpbmUg RFhWQV9DT05URVhUX1ZBTElEKGF2Y3R4LCBjdHgpwqDCoMKgwqDCoMKgwqDCoMKgIChjdHgtPmQz ZDExdmEuZGVjb2RlciAmJiBjdHgtDQo+ID5kM2QxMXZhLmNmZykNCj4gLSNlbmRpZg0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChmZl9keHZhMl9pc19kM2QxMShh dmN0eCkgfHwNCj4gRFhWQTJfVkFSKGN0eCwgc3VyZmFjZV9jb3VudCkpKQ0KPiDCoA0KPiDCoHVu c2lnbmVkIGZmX2R4dmEyX2dldF9zdXJmYWNlX2luZGV4KGNvbnN0IEFWQ29kZWNDb250ZXh0ICph dmN0eCwNCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEFWRFhWQUNvbnRleHQgKiwNCj4gQEAgLTE2 MSw0ICsxNjAsMTAgQEAgaW50IGZmX2R4dmEyX2NvbW1vbl9mcmFtZV9wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LA0KPiDCoA0KPiDCoGludCBmZl9keHZhMl9pc19kM2QxMShjb25zdCBBVkNv ZGVjQ29udGV4dCAqYXZjdHgpOw0KPiDCoA0KPiArdW5zaWduZWQgKmZmX2R4dmEyX2dldF9yZXBv cnRfaWQoY29uc3QgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkRYVkFDb250ZXh0DQo+ICpjdHgp Ow0KPiArDQo+ICt2b2lkIGZmX2R4dmEyX2gyNjRfZmlsbF9waWN0dXJlX3BhcmFtZXRlcnMoY29u c3QgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPiBBVkRYVkFDb250ZXh0ICpjdHgsIERYVkFfUGlj UGFyYW1zX0gyNjQgKnBwKTsNCj4gKw0KPiArdm9pZCBmZl9keHZhMl9oMjY0X2ZpbGxfc2NhbGlu Z19saXN0cyhjb25zdCBBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+IEFWRFhWQUNvbnRleHQgKmN0 eCwgRFhWQV9RbWF0cml4X0gyNjQgKnFtKTsNCj4gKw0KPiDCoCNlbmRpZiAvKiBBVkNPREVDX0RY VkEyX0lOVEVSTkFMX0ggKi8NCj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvaDI2NF9zbGljZS5j IGIvbGliYXZjb2RlYy9oMjY0X3NsaWNlLmMNCj4gaW5kZXggNDFiZjMwZWVmYy4uZGY3MGFkOGEy ZiAxMDA2NDQNCj4gLS0tIGEvbGliYXZjb2RlYy9oMjY0X3NsaWNlLmMNCj4gKysrIGIvbGliYXZj b2RlYy9oMjY0X3NsaWNlLmMNCj4gQEAgLTc3OCw2ICs3NzgsNyBAQCBzdGF0aWMgZW51bSBBVlBp eGVsRm9ybWF0IGdldF9waXhlbF9mb3JtYXQoSDI2NENvbnRleHQgKmgsDQo+IGludCBmb3JjZV9j YWxsYmFjaykNCj4gwqB7DQo+IMKgI2RlZmluZSBIV0FDQ0VMX01BWCAoQ09ORklHX0gyNjRfRFhW QTJfSFdBQ0NFTCArIFwNCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChDT05GSUdfSDI2NF9EM0QxMVZBX0hXQUNDRUwgKiAyKSArIFwNCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ09ORklHX0gyNjRfRDNEMTJWQV9IV0FDQ0VM ICsgXA0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ09ORklH X0gyNjRfTlZERUNfSFdBQ0NFTCArIFwNCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIENPTkZJR19IMjY0X1ZBQVBJX0hXQUNDRUwgKyBcDQo+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDT05GSUdfSDI2NF9WSURFT1RPT0xCT1hf SFdBQ0NFTCArIFwNCj4gQEAgLTg4Myw2ICs4ODQsOSBAQCBzdGF0aWMgZW51bSBBVlBpeGVsRm9y bWF0IGdldF9waXhlbF9mb3JtYXQoSDI2NENvbnRleHQgKmgsDQo+IGludCBmb3JjZV9jYWxsYmFj aykNCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpmbXQrKyA9IEFWX1BJWF9GTVRfRDNEMTFW QV9WTEQ7DQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZm10KysgPSBBVl9QSVhfRk1UX0Qz RDExOw0KPiDCoCNlbmRpZg0KPiArI2lmIENPTkZJR19IMjY0X0QzRDEyVkFfSFdBQ0NFTA0KPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZm10KysgPSBBVl9QSVhfRk1UX0QzRDEyOw0KPiArI2Vu ZGlmDQo+IMKgI2lmIENPTkZJR19IMjY0X1ZBQVBJX0hXQUNDRUwNCj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICpmbXQrKyA9IEFWX1BJWF9GTVRfVkFBUEk7DQo+IMKgI2VuZGlmDQo+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2gyNjRkZWMuYyBiL2xpYmF2Y29kZWMvaDI2NGRlYy5jDQo+IGlu ZGV4IDE5ZjhkYmExMzEuLjg1M2QzMjYyZjcgMTAwNjQ0DQo+IC0tLSBhL2xpYmF2Y29kZWMvaDI2 NGRlYy5jDQo+ICsrKyBiL2xpYmF2Y29kZWMvaDI2NGRlYy5jDQo+IEBAIC0xMDg5LDYgKzEwODks OSBAQCBjb25zdCBGRkNvZGVjIGZmX2gyNjRfZGVjb2RlciA9IHsNCj4gwqAjaWYgQ09ORklHX0gy NjRfRDNEMTFWQTJfSFdBQ0NFTA0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV0FDQ0VMX0QzRDExVkEyKGgyNjQpLA0KPiDC oCNlbmRpZg0KPiArI2lmIENPTkZJR19IMjY0X0QzRDEyVkFfSFdBQ0NFTA0KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXQUND RUxfRDNEMTJWQShoMjY0KSwNCj4gKyNlbmRpZg0KPiDCoCNpZiBDT05GSUdfSDI2NF9OVkRFQ19I V0FDQ0VMDQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIEhXQUNDRUxfTlZERUMoaDI2NCksDQo+IMKgI2VuZGlmDQo+IGRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2h3YWNjZWxzLmggYi9saWJhdmNvZGVjL2h3YWNjZWxzLmgNCj4g aW5kZXggNDhkZmMxN2Y3Mi4uYmU1NDYwNGI4MSAxMDA2NDQNCj4gLS0tIGEvbGliYXZjb2RlYy9o d2FjY2Vscy5oDQo+ICsrKyBiL2xpYmF2Y29kZWMvaHdhY2NlbHMuaA0KPiBAQCAtMzIsNiArMzIs NyBAQCBleHRlcm4gY29uc3QgQVZIV0FjY2VsIGZmX2gyNjNfdmFhcGlfaHdhY2NlbDsNCj4gwqBl eHRlcm4gY29uc3QgQVZIV0FjY2VsIGZmX2gyNjNfdmlkZW90b29sYm94X2h3YWNjZWw7DQo+IMKg ZXh0ZXJuIGNvbnN0IEFWSFdBY2NlbCBmZl9oMjY0X2QzZDExdmFfaHdhY2NlbDsNCj4gwqBleHRl cm4gY29uc3QgQVZIV0FjY2VsIGZmX2gyNjRfZDNkMTF2YTJfaHdhY2NlbDsNCj4gK2V4dGVybiBj b25zdCBBVkhXQWNjZWwgZmZfaDI2NF9kM2QxMnZhX2h3YWNjZWw7DQo+IMKgZXh0ZXJuIGNvbnN0 IEFWSFdBY2NlbCBmZl9oMjY0X2R4dmEyX2h3YWNjZWw7DQo+IMKgZXh0ZXJuIGNvbnN0IEFWSFdB Y2NlbCBmZl9oMjY0X252ZGVjX2h3YWNjZWw7DQo+IMKgZXh0ZXJuIGNvbnN0IEFWSFdBY2NlbCBm Zl9oMjY0X3ZhYXBpX2h3YWNjZWw7DQo+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2h3Y29uZmln LmggYi9saWJhdmNvZGVjL2h3Y29uZmlnLmgNCj4gaW5kZXggZThjNjE4NjE1MS4uZTIwMTE4YzA5 NiAxMDA2NDQNCj4gLS0tIGEvbGliYXZjb2RlYy9od2NvbmZpZy5oDQo+ICsrKyBiL2xpYmF2Y29k ZWMvaHdjb25maWcuaA0KPiBAQCAtODIsNiArODIsOCBAQCB2b2lkIGZmX2h3YWNjZWxfdW5pbml0 KEFWQ29kZWNDb250ZXh0ICphdmN0eCk7DQo+IMKgwqDCoMKgIEhXX0NPTkZJR19IV0FDQ0VMKDEs IDEsIDEsIFZVTEtBTizCoMKgwqDCoMKgwqAgVlVMS0FOLMKgwqDCoMKgwqDCoCBmZl8gIyMgY29k ZWMgIyMNCj4gX3Z1bGthbl9od2FjY2VsKQ0KPiDCoCNkZWZpbmUgSFdBQ0NFTF9EM0QxMVZBKGNv ZGVjKSBcDQo+IMKgwqDCoMKgIEhXX0NPTkZJR19IV0FDQ0VMKDAsIDAsIDEsIEQzRDExVkFfVkxE LMKgIE5PTkUswqDCoMKgwqDCoMKgwqDCoCBmZl8gIyMgY29kZWMgIyMNCj4gX2QzZDExdmFfaHdh Y2NlbCkNCj4gKyNkZWZpbmUgSFdBQ0NFTF9EM0QxMlZBKGNvZGVjKSBcDQo+ICvCoMKgwqAgSFdf Q09ORklHX0hXQUNDRUwoMSwgMSwgMCwgRDNEMTIswqDCoMKgwqDCoMKgwqAgRDNEMTJWQSzCoMKg wqDCoMKgIGZmXyAjIyBjb2RlYyAjIw0KPiBfZDNkMTJ2YV9od2FjY2VsKQ0KPiDCoA0KPiDCoCNk ZWZpbmUgSFdfQ09ORklHX0VOQ09ERVIoZGV2aWNlLCBmcmFtZXMsIGFkX2hvYywgZm9ybWF0LCBk ZXZpY2VfdHlwZV8pIFwNCj4gwqDCoMKgwqAgJihjb25zdCBBVkNvZGVjSFdDb25maWdJbnRlcm5h bCkgeyBcDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6 Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmli ZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVn Lm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K