From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 00DF1A0548; Sat, 24 Sep 2022 02:20:32 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9D8474067B; Sat, 24 Sep 2022 02:20:32 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 6758B400D4 for ; Sat, 24 Sep 2022 02:20:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663978830; x=1695514830; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=vA2U1yM/0VAHdawvX0EP1+oz6AeJ+Z1Lha3x5iHcg3U=; b=hlGkU3QuDKfRNM9KfPzqvZ7asVypTIrg/1VS6UjYIx6yTiQ42g+ReoxX cvAI9ZWoxnHzf7IM4Id3rXQJ2jaulHlsKZzBCSHUw9DbpX7b0XJ65QIwA KIPN8LKDHZSY/ITjrIjhl01T7tLcjbOK4e5R/nPUOYdXUwJ+IgW9IF7DY 8JCicWIHiOVy8aD6NOTz6xYKxN7Oy5JswpxzEQ/acegxaIbJQUA9PyV/l HhvPtcPemkdrkIJpCgDV4cnRp36Qre9ILU72/gfN2VUEbLRyXkmYkOPcn l3IaVAyaJ/8Em87STLKDDmhJAm9v5mOxqmbplu0vbjtrAAOdpU0hkL08v A==; X-IronPort-AV: E=McAfee;i="6500,9779,10479"; a="298323918" X-IronPort-AV: E=Sophos;i="5.93,340,1654585200"; d="scan'208";a="298323918" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2022 17:20:29 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,340,1654585200"; d="scan'208";a="651148605" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga008.jf.intel.com with ESMTP; 23 Sep 2022 17:20:29 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 17:20:28 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 23 Sep 2022 17:20:28 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31 via Frontend Transport; Fri, 23 Sep 2022 17:20:28 -0700 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (104.47.74.47) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2375.31; Fri, 23 Sep 2022 17:20:28 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ed9LJHFvlZAndFBFwnHVmMXzcaaXF9jb7+Z/2m32geTnl2IrH5CETJz4MtQsOA8AtNJ50ujBXb48LSE2Jw+z4Jabve4ZGCj0+6wbGfjmzYCWPrtFbKeAukc8NuFL+sq2htvk/bPj6Xp07LZfosMUyvHeYlQSGlp7PprROlVRhmTTH7Smjrd2WE1N2tud82WZvuNgND+o8e85TffRlCaML5c1J5ITJlySoVNa6Q2rcHCFO1tyjKIfyOsHhCvBuQRe5KCZoM68bKZlaoNtn63GF8FJ3K5IW/5P4yyNAagagMARZ/1hsPApA7lrIWJixLz0WxIqRlHGLcV7m++I1aP0+Q== 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=vA2U1yM/0VAHdawvX0EP1+oz6AeJ+Z1Lha3x5iHcg3U=; b=ZKQdPENulRzQhRgkPfPGIsbbckI5AiOawW6RxCF6JtdfxDt4xOvbN8wIFf2rlk4zWALfobXC02g+LUZMpND51OLiNd5+l18etesmNKOJHDhcVH6us0sjFnRCP/kr8J6QPJPejHcQ0DUwXdxLVwwGgL/RQffTnVxo+O6hAovpJQ6AaQV4MW1WvNqC1yuAjv36REr8ZDvskdjQYlA1TNs/sVi9Izc7oxCLxRFCztjRxbc+K0lXoxn0yoHFiDfxMu8FgGdW4sap1R0W6fkZ/ylc8QETQ2zRpUpk2YdyJlxAyQksGu9+BB27iu2h/oS/UOhs0whwPf8xrN9eMBCB6iiX+A== 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 BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by CH0PR11MB5475.namprd11.prod.outlook.com (2603:10b6:610:d6::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5654.22; Sat, 24 Sep 2022 00:20:25 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::e6be:3feb:17fd:bdcf%7]) with mapi id 15.20.5654.020; Sat, 24 Sep 2022 00:20:25 +0000 From: "Chautru, Nicolas" To: Maxime Coquelin , "dev@dpdk.org" , "thomas@monjalon.net" CC: "trix@redhat.com" , "mdr@ashroe.eu" , "Richardson, Bruce" , "hemant.agrawal@nxp.com" , "david.marchand@redhat.com" , "stephen@networkplumber.org" , "Vargas, Hernan" Subject: RE: [PATCH v4 13/14] baseband/acc: add PF configure companion function Thread-Topic: [PATCH v4 13/14] baseband/acc: add PF configure companion function Thread-Index: AQHYzho4s4dWr25tGk2FKgUVmYjxUq3swM8AgAD5bBA= Date: Sat, 24 Sep 2022 00:20:25 +0000 Message-ID: References: <1663806460-45162-1-git-send-email-nicolas.chautru@intel.com> <1663806460-45162-14-git-send-email-nicolas.chautru@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.500.17 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: BY5PR11MB4451:EE_|CH0PR11MB5475:EE_ x-ms-office365-filtering-correlation-id: 71e24438-5da7-46f7-e03b-08da9dc293c3 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: tPJOzZ+bawhKpIubJ9E15NUSUyLaS9AhLJzm/1PEL6gxkexA5JCnJBYH0dMzrq5i0+vU1E0f7BBPKDsCI9k9Vc4758KlA0mNyBZRHpM2Ubhz/fSBiH6/kTJOn7un0BmapLvjWKoy7O75HwQe9svPJ6eEl9RRLJQY8EAjg8Z7GZBUdN6Als6McMPfICRKVAZG73+Nq2M82OxYyhZwhI7tI6z1RPMXYRn/3oTjqXKuAxKF9b0JsQLbubZ1Yt1cLb9cNq7vccFazlqlV2QN+fi2OT+eBAWNVNngeJ0gQSBNLMR8sLc8VeZN6oubyho6swAq5bCUgdBGaA+lobu4otnCboyC5OCdiCUFwgPbFi032kDhuHNaQ+ozEjaYar/RBa1i4flf0QxEfUrBqd91EhwqNgfgBL7SYFADlVs3A9y4Jx0mcaofCK+euz83ijMsdrFUgy+cR9fTfWG6N/Ew0S6j40ri09massW0lOz8hxSQ5XOZlqcYy3FIk3Rr40FuVJd70Ap/okwtC/dkrMKwpOBk+Lzy/Ts8Xm5XP1OLPv4jiyjFDmAihD42dmbgwPQZLhN3qPQN2EaO47r4z6nrYPW+n3LtB6jHAg+t9j8wMY/y0Q/NoDs3VF8z+zXRry36fI8sMEkkzssrFJwOV3oV7yWgoT6yBnXC7xV07o57wppyyJYTnoF5bd+s0JA7IPvrrLkdbCHx8BS7RDGexIze4YnW26cqCIGDXzhFjSTODADfQqx9Xff9fyXrzYVxeGPZTOVDaBQ/0C1GEM8YeIZwSoWAPQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR11MB4451.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(346002)(39860400002)(136003)(376002)(396003)(366004)(451199015)(64756008)(66446008)(66946007)(66556008)(66476007)(76116006)(4326008)(19627235002)(8936002)(8676002)(316002)(110136005)(54906003)(41300700001)(107886003)(2906002)(82960400001)(53546011)(7696005)(6506007)(9686003)(30864003)(52536014)(478600001)(71200400001)(33656002)(26005)(5660300002)(86362001)(55016003)(186003)(38070700005)(83380400001)(122000001)(38100700002)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Mzc1QkhwMUl0RUVYVVR2N1VzZ2xybFlQS2pWRnEvM1R4TTR3Y1IwRUYwSzM5?= =?utf-8?B?YXNnOExNL2ZqTmVjVU9ZQjRHU09nanpzaFh5amlpMzFGT1crUmZ2ODNHeCtR?= =?utf-8?B?RDNENElhNkdNWUtBUllwOTJjQWxUV1RZVkF5b1lxWit0N3VobHVvbFpteXVR?= =?utf-8?B?Z0E5aFVTTnhMNURPWEMrT2tqOURmUlZXTnh2WVc3NmZmUlErbFQvU3lTdnk2?= =?utf-8?B?OFdhTnhMakk2bW1mNVFOWFZkazZiNm0wcEdvSG4vc3lkNzFaaTJPUDhHbmlM?= =?utf-8?B?UmJrdjdOSk9vU2svOTVHTGkxSjcwTEVhdlVoaXJFUFFYbmVtcFFnTXhTOEEw?= =?utf-8?B?eDE3VE5SbHNJOVQzbGJjWTdOdXA5Z2Z6RDdCbkR1Z1JYdzlNZ0ZoMHI4aVhx?= =?utf-8?B?VUdZTkh6UGsySkNsZjZDV1MyS01uYWdaOUl0cEVoQnE3bWNaRlpGTEhCQjE4?= =?utf-8?B?NEw2TjVFRG44UEpWUjlUdXRNS1NaWVY1WHdYNmpRMCsyTVhNaVNhcUJKZ0Vy?= =?utf-8?B?TUdITnN2UVl6a1pucW5QVlVyZ0xzL1dhcWZBaHhMR2hrWVhpNWJoS1h5RG9G?= =?utf-8?B?VjBnSVFkUjFMcWIzSHU0T3hCT1pOR1hMTG1pNE9yRDV3bzh4UEozenRqQTRR?= =?utf-8?B?Uk8xaHAzd01IOXYxRUV4R2kyWEEvMTR1bXhpV1JWUkVIM3VROUlZSFJ5NHBi?= =?utf-8?B?T05RdjR1TVk1WnZZZEVoMnNnWW90SHNPd0FrcWtJL3pJOWdRSEwrK3ZSaDQ5?= =?utf-8?B?Tmo4anFRYTZ3R0I3ajlRNHdOTC91akttc201bTUxTjlnMUp4emlVcnpMS1ZK?= =?utf-8?B?ZDhHQ2pPRHlWVy9NcytQSnJ4SU9Gald2SVo0K0s4U2JGdTFKdWU0WDJzWE1Q?= =?utf-8?B?Z0FkejdNeko0cExiTExXWUFXb1QwaW5vTmUxWVI4dWdoOEdMR014K25ZR0xS?= =?utf-8?B?OVZtTlRkc3NxTzM3MUZnOFh5TkgrekdWbjJTV0t5ZURzOHlLR1haTzkvWVQ4?= =?utf-8?B?SmxObGlITzM2SytnVTZJNmtzRjJpSmdJUm9iejdxNVRCOTRCWmM1NlBXU0M4?= =?utf-8?B?UUVtUitCUjNyU3NQd2ZEQ0tqb3h1QmlHM1BjbEd1Zzd0cHlhSGtVRVdkdFlO?= =?utf-8?B?RGZZMkJiNTlsN1RxcUpBQnAxODUxUVhRdEFQK0k3REpoY21CNmtVQ0p5TElQ?= =?utf-8?B?Z0ZyMWpKMjg4YmcvdlZvQ01yZ3ZuRUZTaTd1cWg2dC9KZ0NWcjB6SnZLcjN0?= =?utf-8?B?WWdCUWtLRTErMy84SldwZUZIb1B0SEhuUWo2SHFvRE9nb005cWcxWFM2aldl?= =?utf-8?B?b0J4ZXZaZUtrNnlpSmsvQ09xUElkcGF4cjViYVFaK1NKck1QbWljRHd1WHpj?= =?utf-8?B?UXRGeXdoUXEza0dkZUo2ejNKZmNhWjNzZ3kxSmdoQUNxeFI5QUVZb24wRXJ1?= =?utf-8?B?NmU5V2RWRzdnQjFKcFVBZmRGVUFIeHRqV0VwSDBYYXpLV3dSOTVKYTk4bFIw?= =?utf-8?B?bHdPSWI4MVdrRWFBTUNta2tUQzhWVXp1eGUxVzFscEdiRWhPNUxrN3NES0xh?= =?utf-8?B?aDZtcytJS2dyZGVnWDBiVjZKWG9vSWx6QTRpcDBvLzFSSkRIRE1vTDJXVU16?= =?utf-8?B?UjlzRXoxNGNOQXowVGtiY2lvNUVuNjZsems1eGlyZ0lFbThZYXlRdFhONGti?= =?utf-8?B?czczNkEvb0VSdjZmYlNBT2xGdG1SWTNzbUsvTWNyNlMvcFJwVDFSQ3FyektU?= =?utf-8?B?NjBFejFjcnF0TVk0cElxMHdrUFRNN0l1S3RxYmxIb2hRL1ovdm5WZU1Zand4?= =?utf-8?B?OW0yUFlacWFaamZUeWRoYm5MTzlxN2NENTlZVmtFa2JkdHJSTkRrcDQ3WEll?= =?utf-8?B?WTZYS3JmQmVBb0hPUytQam9tSjQvQ1FKV1kwRUIrWFh0SUVucVl2SDR6Zldu?= =?utf-8?B?YlJJUHlHeVNta2FUbzZ3b1J6K2FSWDhTRWhiUUxScFR1Y3MwSjlHOW9TVnE1?= =?utf-8?B?UG80Tlh6Z1NoZC9KYzBNUG5hZ015T1FKT3g1ZitRYXAwZlM1S3FwY3lGeGFx?= =?utf-8?B?T21zV1A1SzBaY2pDOW14ZWVncnB6VzVlVjlqMzQxUk5wdlQ2U2J3cSs5bEd4?= =?utf-8?Q?VBfp1nn8Zd1YSWqp21moD66tW?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR11MB4451.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 71e24438-5da7-46f7-e03b-08da9dc293c3 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Sep 2022 00:20:25.4181 (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: /95Gee2WZm7BdSMJcRfQo+zL3ZtgsZY5rxVdig43glBFDySFSBH2UQg6r+m8Z+vJjgxDizpEuBU6qy3t8O3DXoaxlUmBeV/yFFIdWU0Hg60= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR11MB5475 X-OriginatorOrg: intel.com X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGkgTWF4aW1lLCANClRoYW5rcyB3aWxsIHNlbmQgYW4gdXBkYXRlZCBzZXJpZSBub3cuIE11Y2gg YXBwcmVjaWF0ZWQuIA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1h eGltZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+IFNlbnQ6IEZyaWRh eSwgU2VwdGVtYmVyIDIzLCAyMDIyIDI6MjYgQU0NCj4gVG86IENoYXV0cnUsIE5pY29sYXMgPG5p Y29sYXMuY2hhdXRydUBpbnRlbC5jb20+OyBkZXZAZHBkay5vcmc7DQo+IHRob21hc0Btb25qYWxv bi5uZXQNCj4gQ2M6IHRyaXhAcmVkaGF0LmNvbTsgbWRyQGFzaHJvZS5ldTsgUmljaGFyZHNvbiwg QnJ1Y2UNCj4gPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPjsgaGVtYW50LmFncmF3YWxAbnhw LmNvbTsNCj4gZGF2aWQubWFyY2hhbmRAcmVkaGF0LmNvbTsgc3RlcGhlbkBuZXR3b3JrcGx1bWJl ci5vcmc7IFZhcmdhcywNCj4gSGVybmFuIDxoZXJuYW4udmFyZ2FzQGludGVsLmNvbT4NCj4gU3Vi amVjdDogUmU6IFtQQVRDSCB2NCAxMy8xNF0gYmFzZWJhbmQvYWNjOiBhZGQgUEYgY29uZmlndXJl IGNvbXBhbmlvbg0KPiBmdW5jdGlvbg0KPiANCj4gDQo+IA0KPiBPbiA5LzIyLzIyIDAyOjI3LCBO aWMgQ2hhdXRydSB3cm90ZToNCj4gPiBBZGQgY29uZmlndXJlIGZ1bmN0aW9uIG5vdGFibHkgdG8g Y29uZmlndXJlIHRoZSBkZXZpY2UgZnJvbSB0aGUgUEYNCj4gPiB3aXRoaW4gRFBESyBhbmQgYmJk ZXYtdGVzdCAod2l0aG91dCBleHRlcm5hbCBkZXBlbmRlbmN5KS4NCj4gPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IE5pYyBDaGF1dHJ1IDxuaWNvbGFzLmNoYXV0cnVAaW50ZWwuY29tPg0KPiA+IC0tLQ0K PiA+ICAgYXBwL3Rlc3QtYmJkZXYvdGVzdF9iYmRldl9wZXJmLmMgICAgICB8ICA3MSArKysrKysN Cj4gPiAgIGRyaXZlcnMvYmFzZWJhbmQvYWNjL21lc29uLmJ1aWxkICAgICAgfCAgIDIgKy0NCj4g PiAgIGRyaXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBfY2ZnLmggfCAgNDggKysrKw0KPiA+ ICAgZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYyB8IDQ1Mw0KPiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4gICBkcml2ZXJzL2Jhc2ViYW5kL2FjYy92 ZXJzaW9uLm1hcCAgICAgIHwgICAxICsNCj4gPiAgIDUgZmlsZXMgY2hhbmdlZCwgNTc0IGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2Jhc2ViYW5kL2FjYy9ydGVfYWNjMjAwX2NmZy5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvYXBw L3Rlc3QtYmJkZXYvdGVzdF9iYmRldl9wZXJmLmMNCj4gPiBiL2FwcC90ZXN0LWJiZGV2L3Rlc3Rf YmJkZXZfcGVyZi5jDQo+ID4gaW5kZXggNDFjNzhkZS4uZWM2ZWUyYSAxMDA2NDQNCj4gPiAtLS0g YS9hcHAvdGVzdC1iYmRldi90ZXN0X2JiZGV2X3BlcmYuYw0KPiA+ICsrKyBiL2FwcC90ZXN0LWJi ZGV2L3Rlc3RfYmJkZXZfcGVyZi5jDQo+ID4gQEAgLTYyLDYgKzYyLDE1IEBADQo+ID4gICAjZGVm aW5lIEFDQzEwMF9RTUdSX0lOVkFMSURfSURYIC0xDQo+ID4gICAjZGVmaW5lIEFDQzEwMF9RTUdS X1JSIDENCj4gPiAgICNkZWZpbmUgQUNDMTAwX1FPU19HQlIgMA0KPiA+ICsjaW5jbHVkZSA8cnRl X2FjYzIwMF9jZmcuaD4NCj4gPiArI2RlZmluZSBBQ0MyMDBQRl9EUklWRVJfTkFNRSAgICgiaW50 ZWxfYWNjMjAwX3BmIikNCj4gPiArI2RlZmluZSBBQ0MyMDBWRl9EUklWRVJfTkFNRSAgICgiaW50 ZWxfYWNjMjAwX3ZmIikNCj4gPiArI2RlZmluZSBBQ0MyMDBfUU1HUl9OVU1fQVFTIDE2DQo+ID4g KyNkZWZpbmUgQUNDMjAwX1FNR1JfTlVNX1FHUyAyDQo+ID4gKyNkZWZpbmUgQUNDMjAwX1FNR1Jf QVFfREVQVEggNQ0KPiA+ICsjZGVmaW5lIEFDQzIwMF9RTUdSX0lOVkFMSURfSURYIC0xDQo+ID4g KyNkZWZpbmUgQUNDMjAwX1FNR1JfUlIgMQ0KPiA+ICsjZGVmaW5lIEFDQzIwMF9RT1NfR0JSIDAN Cj4gPiAgICNlbmRpZg0KPiA+DQo+ID4gICAjZGVmaW5lIE9QU19DQUNIRV9TSVpFIDI1NlUNCj4g PiBAQCAtNzYxLDYgKzc3MCw2OCBAQCB0eXBlZGVmIGludCAodGVzdF9jYXNlX2Z1bmN0aW9uKShz dHJ1Y3QNCj4gYWN0aXZlX2RldmljZSAqYWQsDQo+ID4gICAJCQkJIkZhaWxlZCB0byBjb25maWd1 cmUgQUNDMTAwIFBGIGZvciBiYmRldg0KPiAlcyIsDQo+ID4gICAJCQkJaW5mby0+ZGV2X25hbWUp Ow0KPiA+ICAgCX0NCj4gPiArCWlmICgoZ2V0X2luaXRfZGV2aWNlKCkgPT0gdHJ1ZSkgJiYNCj4g PiArCQkoIXN0cmNtcChpbmZvLT5kcnYuZHJpdmVyX25hbWUsIEFDQzIwMFBGX0RSSVZFUl9OQU1F KSkpDQo+IHsNCj4gPiArCQlzdHJ1Y3QgcnRlX2FjY19jb25mIGNvbmY7DQo+ID4gKwkJdW5zaWdu ZWQgaW50IGk7DQo+ID4gKw0KPiA+ICsJCXByaW50ZigiQ29uZmlndXJlIEFDQzIwMCBGRUMgRHJp dmVyICVzIHdpdGggZGVmYXVsdA0KPiB2YWx1ZXNcbiIsDQo+ID4gKwkJCQlpbmZvLT5kcnYuZHJp dmVyX25hbWUpOw0KPiA+ICsNCj4gPiArCQkvKiBjbGVhciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24g YmVmb3JlIGluaXRpYWxpemF0aW9uICovDQo+ID4gKwkJbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yo c3RydWN0IHJ0ZV9hY2NfY29uZikpOw0KPiA+ICsNCj4gPiArCQkvKiBBbHdheXMgc2V0IGluIFBG IG1vZGUgZm9yIGJ1aWx0LWluIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCQljb25mLnBmX21vZGVf ZW4gPSB0cnVlOw0KPiA+ICsJCWZvciAoaSA9IDA7IGkgPCBSVEVfQUNDX05VTV9WRlM7ICsraSkg ew0KPiA+ICsJCQljb25mLmFyYl9kbF80Z1tpXS5nYnJfdGhyZXNob2xkMSA9DQo+IEFDQzIwMF9R T1NfR0JSOw0KPiA+ICsJCQljb25mLmFyYl9kbF80Z1tpXS5nYnJfdGhyZXNob2xkMSA9DQo+IEFD QzIwMF9RT1NfR0JSOw0KPiA+ICsJCQljb25mLmFyYl9kbF80Z1tpXS5yb3VuZF9yb2Jpbl93ZWln aHQgPQ0KPiBBQ0MyMDBfUU1HUl9SUjsNCj4gPiArCQkJY29uZi5hcmJfdWxfNGdbaV0uZ2JyX3Ro cmVzaG9sZDEgPQ0KPiBBQ0MyMDBfUU9TX0dCUjsNCj4gPiArCQkJY29uZi5hcmJfdWxfNGdbaV0u Z2JyX3RocmVzaG9sZDEgPQ0KPiBBQ0MyMDBfUU9TX0dCUjsNCj4gPiArCQkJY29uZi5hcmJfdWxf NGdbaV0ucm91bmRfcm9iaW5fd2VpZ2h0ID0NCj4gQUNDMjAwX1FNR1JfUlI7DQo+ID4gKwkJCWNv bmYuYXJiX2RsXzVnW2ldLmdicl90aHJlc2hvbGQxID0NCj4gQUNDMjAwX1FPU19HQlI7DQo+ID4g KwkJCWNvbmYuYXJiX2RsXzVnW2ldLmdicl90aHJlc2hvbGQxID0NCj4gQUNDMjAwX1FPU19HQlI7 DQo+ID4gKwkJCWNvbmYuYXJiX2RsXzVnW2ldLnJvdW5kX3JvYmluX3dlaWdodCA9DQo+IEFDQzIw MF9RTUdSX1JSOw0KPiA+ICsJCQljb25mLmFyYl91bF81Z1tpXS5nYnJfdGhyZXNob2xkMSA9DQo+ IEFDQzIwMF9RT1NfR0JSOw0KPiA+ICsJCQljb25mLmFyYl91bF81Z1tpXS5nYnJfdGhyZXNob2xk MSA9DQo+IEFDQzIwMF9RT1NfR0JSOw0KPiA+ICsJCQljb25mLmFyYl91bF81Z1tpXS5yb3VuZF9y b2Jpbl93ZWlnaHQgPQ0KPiBBQ0MyMDBfUU1HUl9SUjsNCj4gPiArCQkJY29uZi5hcmJfZmZ0W2ld Lmdicl90aHJlc2hvbGQxID0gQUNDMjAwX1FPU19HQlI7DQo+ID4gKwkJCWNvbmYuYXJiX2ZmdFtp XS5nYnJfdGhyZXNob2xkMSA9IEFDQzIwMF9RT1NfR0JSOw0KPiA+ICsJCQljb25mLmFyYl9mZnRb aV0ucm91bmRfcm9iaW5fd2VpZ2h0ID0NCj4gQUNDMjAwX1FNR1JfUlI7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQljb25mLmlucHV0X3Bvc19sbHJfMV9iaXQgPSB0cnVlOw0KPiA+ICsJCWNvbmYu b3V0cHV0X3Bvc19sbHJfMV9iaXQgPSB0cnVlOw0KPiA+ICsJCWNvbmYubnVtX3ZmX2J1bmRsZXMg PSAxOyAvKio8IE51bWJlciBvZiBWRiBidW5kbGVzIHRvDQo+IHNldHVwICovDQo+ID4gKw0KPiA+ ICsJCWNvbmYucV91bF80Zy5udW1fcWdyb3VwcyA9IEFDQzIwMF9RTUdSX05VTV9RR1M7DQo+ID4g KwkJY29uZi5xX3VsXzRnLmZpcnN0X3Fncm91cF9pbmRleCA9DQo+IEFDQzIwMF9RTUdSX0lOVkFM SURfSURYOw0KPiA+ICsJCWNvbmYucV91bF80Zy5udW1fYXFzX3Blcl9ncm91cHMgPQ0KPiBBQ0My MDBfUU1HUl9OVU1fQVFTOw0KPiA+ICsJCWNvbmYucV91bF80Zy5hcV9kZXB0aF9sb2cyID0gQUND MjAwX1FNR1JfQVFfREVQVEg7DQo+ID4gKwkJY29uZi5xX2RsXzRnLm51bV9xZ3JvdXBzID0gQUND MjAwX1FNR1JfTlVNX1FHUzsNCj4gPiArCQljb25mLnFfZGxfNGcuZmlyc3RfcWdyb3VwX2luZGV4 ID0NCj4gQUNDMjAwX1FNR1JfSU5WQUxJRF9JRFg7DQo+ID4gKwkJY29uZi5xX2RsXzRnLm51bV9h cXNfcGVyX2dyb3VwcyA9DQo+IEFDQzIwMF9RTUdSX05VTV9BUVM7DQo+ID4gKwkJY29uZi5xX2Rs XzRnLmFxX2RlcHRoX2xvZzIgPSBBQ0MyMDBfUU1HUl9BUV9ERVBUSDsNCj4gPiArCQljb25mLnFf dWxfNWcubnVtX3Fncm91cHMgPSBBQ0MyMDBfUU1HUl9OVU1fUUdTOw0KPiA+ICsJCWNvbmYucV91 bF81Zy5maXJzdF9xZ3JvdXBfaW5kZXggPQ0KPiBBQ0MyMDBfUU1HUl9JTlZBTElEX0lEWDsNCj4g PiArCQljb25mLnFfdWxfNWcubnVtX2Fxc19wZXJfZ3JvdXBzID0NCj4gQUNDMjAwX1FNR1JfTlVN X0FRUzsNCj4gPiArCQljb25mLnFfdWxfNWcuYXFfZGVwdGhfbG9nMiA9IEFDQzIwMF9RTUdSX0FR X0RFUFRIOw0KPiA+ICsJCWNvbmYucV9kbF81Zy5udW1fcWdyb3VwcyA9IEFDQzIwMF9RTUdSX05V TV9RR1M7DQo+ID4gKwkJY29uZi5xX2RsXzVnLmZpcnN0X3Fncm91cF9pbmRleCA9DQo+IEFDQzIw MF9RTUdSX0lOVkFMSURfSURYOw0KPiA+ICsJCWNvbmYucV9kbF81Zy5udW1fYXFzX3Blcl9ncm91 cHMgPQ0KPiBBQ0MyMDBfUU1HUl9OVU1fQVFTOw0KPiA+ICsJCWNvbmYucV9kbF81Zy5hcV9kZXB0 aF9sb2cyID0gQUNDMjAwX1FNR1JfQVFfREVQVEg7DQo+ID4gKwkJY29uZi5xX2ZmdC5udW1fcWdy b3VwcyA9IEFDQzIwMF9RTUdSX05VTV9RR1M7DQo+ID4gKwkJY29uZi5xX2ZmdC5maXJzdF9xZ3Jv dXBfaW5kZXggPQ0KPiBBQ0MyMDBfUU1HUl9JTlZBTElEX0lEWDsNCj4gPiArCQljb25mLnFfZmZ0 Lm51bV9hcXNfcGVyX2dyb3VwcyA9DQo+IEFDQzIwMF9RTUdSX05VTV9BUVM7DQo+ID4gKwkJY29u Zi5xX2ZmdC5hcV9kZXB0aF9sb2cyID0gQUNDMjAwX1FNR1JfQVFfREVQVEg7DQo+ID4gKw0KPiA+ ICsJCS8qIHNldHVwIFBGIHdpdGggY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAqLw0KPiA+ICsJ CXJldCA9IHJ0ZV9hY2MyMDBfY29uZmlndXJlKGluZm8tPmRldl9uYW1lLCAmY29uZik7DQo+ID4g KwkJVEVTVF9BU1NFUlRfU1VDQ0VTUyhyZXQsDQo+ID4gKwkJCQkiRmFpbGVkIHRvIGNvbmZpZ3Vy ZSBBQ0MyMDAgUEYgZm9yIGJiZGV2DQo+ICVzIiwNCj4gPiArCQkJCWluZm8tPmRldl9uYW1lKTsN Cj4gPiArCX0NCj4gPiAgICNlbmRpZg0KPiA+ICAgCS8qIExldCdzIHJlZnJlc2ggdGhpcyBub3cg dGhpcyBpcyBjb25maWd1cmVkICovDQo+ID4gICAJcnRlX2JiZGV2X2luZm9fZ2V0KGRldl9pZCwg aW5mbyk7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjL21lc29uLmJ1aWxk DQo+ID4gYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYy9tZXNvbi5idWlsZA0KPiA+IGluZGV4IDYzOTEy ZjAuLjdhZTE2MmEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9hY2MvbWVzb24u YnVpbGQNCj4gPiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYy9tZXNvbi5idWlsZA0KPiA+IEBA IC01LDQgKzUsNCBAQCBkZXBzICs9IFsnYmJkZXYnLCAnYnVzX3ZkZXYnLCAncmluZycsICdwY2kn LA0KPiA+ICdidXNfcGNpJ10NCj4gPg0KPiA+ICAgc291cmNlcyA9IGZpbGVzKCdydGVfYWNjMTAw X3BtZC5jJywgJ3J0ZV9hY2MyMDBfcG1kLmMnKQ0KPiA+DQo+ID4gLWhlYWRlcnMgPSBmaWxlcygn cnRlX2FjYzEwMF9jZmcuaCcpDQo+ID4gK2hlYWRlcnMgPSBmaWxlcygncnRlX2FjYzEwMF9jZmcu aCcsICdydGVfYWNjMjAwX2NmZy5oJykNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlYmFu ZC9hY2MvcnRlX2FjYzIwMF9jZmcuaA0KPiA+IGIvZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2Fj YzIwMF9jZmcuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4u OGJkOWIyMA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2Fj Yy9ydGVfYWNjMjAwX2NmZy5oDQo+ID4gQEAgLTAsMCArMSw0OCBAQA0KPiA+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ID4gKyAqIENvcHlyaWdodChjKSAyMDIy IEludGVsIENvcnBvcmF0aW9uICAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfUlRFX0FDQzIwMF9D RkdfSF8NCj4gPiArI2RlZmluZSBfUlRFX0FDQzIwMF9DRkdfSF8NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBAZmlsZSBydGVfYWNjMjAwX2NmZy5oDQo+ID4gKyAqDQo+ID4gKyAqIEZ1bmN0aW9u cyBmb3IgY29uZmlndXJpbmcgQUNDMjAwIEhXLCBleHBvc2VkIGRpcmVjdGx5IHRvIGFwcGxpY2F0 aW9ucy4NCj4gPiArICogQ29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGVuY29kaW5nL2RlY29kaW5n IGlzIGRvbmUgdGhyb3VnaCB0aGUNCj4gPiArICogbGlicnRlX2JiZGV2IGxpYnJhcnkuDQo+ID4g KyAqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkg bWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZSAgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRl IDxzdGRpbnQuaD4NCj4gPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCj4gPiArI2luY2x1ZGUgInJ0 ZV9hY2NfY29tbW9uX2NmZy5oIg0KPiA+ICsNCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4g K2V4dGVybiAiQyIgew0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBDb25m aWd1cmUgYSBBQ0MyMDAgZGV2aWNlDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBkZXZfbmFtZQ0K PiA+ICsgKiAgIFRoZSBuYW1lIG9mIHRoZSBkZXZpY2UuIFRoaXMgaXMgdGhlIHNob3J0IGZvcm0g b2YgUENJIEJERiwgZS5nLiAwMDowMS4wLg0KPiA+ICsgKiAgIEl0IGNhbiBhbHNvIGJlIHJldHJp ZXZlZCBmb3IgYSBiYmRldiBkZXZpY2UgZnJvbSB0aGUgZGV2X25hbWUgZmllbGQgaW4NCj4gdGhl DQo+ID4gKyAqICAgcnRlX2JiZGV2X2luZm8gc3RydWN0dXJlIHJldHVybmVkIGJ5IHJ0ZV9iYmRl dl9pbmZvX2dldCgpLg0KPiA+ICsgKiBAcGFyYW0gY29uZg0KPiA+ICsgKiAgIENvbmZpZ3VyYXRp b24gdG8gYXBwbHkgdG8gQUNDMjAwIEhXLg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4g KyAqICAgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlLg0KPiA+ICsg Ki8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2ludA0KPiA+ICtydGVfYWNjMjAwX2Nv bmZpZ3VyZShjb25zdCBjaGFyICpkZXZfbmFtZSwgc3RydWN0IHJ0ZV9hY2NfY29uZg0KPiA+ICsq Y29uZik7DQo+ID4gKw0KPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPiArfQ0KPiA+ICsjZW5k aWYNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfUlRFX0FDQzIwMF9DRkdfSF8gKi8NCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYw0KPiA+IGIvZHJp dmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9wbWQuYw0KPiA+IGluZGV4IDNjMjkzMWIuLjIx ZDYxNGQgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9hY2MvcnRlX2FjYzIwMF9w bWQuYw0KPiA+ICsrKyBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjL3J0ZV9hY2MyMDBfcG1kLmMNCj4g PiBAQCAtNDMsNiArNDMsMjcgQEANCj4gPg0KPiA+ICAgZW51bSB7VUxfNEcgPSAwLCBVTF81Rywg RExfNEcsIERMXzVHLCBGRlQsIE5VTV9BQ0N9Ow0KPiA+DQo+ID4gKy8qIFJldHVybiB0aGUgYWNj ZWxlcmF0b3IgZW51bSBmb3IgYSBRdWV1ZSBHcm91cCBJbmRleCAqLyBzdGF0aWMNCj4gPiAraW5s aW5lIGludCBhY2NGcm9tUWdpZChpbnQgcWdfaWR4LCBjb25zdCBzdHJ1Y3QgcnRlX2FjY19jb25m DQo+ID4gKyphY2NfY29uZikgew0KPiA+ICsJaW50IGFjY1FnW0FDQzIwMF9OVU1fUUdSUFNdOw0K PiA+ICsJaW50IE51bVFHcm91cHNQZXJGbltOVU1fQUNDXTsNCj4gPiArCWludCBhY2MsIHFnSWR4 LCBxZ0luZGV4ID0gMDsNCj4gPiArCWZvciAocWdJZHggPSAwOyBxZ0lkeCA8IEFDQzIwMF9OVU1f UUdSUFM7IHFnSWR4KyspDQo+ID4gKwkJYWNjUWdbcWdJZHhdID0gMDsNCj4gPiArCU51bVFHcm91 cHNQZXJGbltVTF80R10gPSBhY2NfY29uZi0+cV91bF80Zy5udW1fcWdyb3VwczsNCj4gPiArCU51 bVFHcm91cHNQZXJGbltVTF81R10gPSBhY2NfY29uZi0+cV91bF81Zy5udW1fcWdyb3VwczsNCj4g PiArCU51bVFHcm91cHNQZXJGbltETF80R10gPSBhY2NfY29uZi0+cV9kbF80Zy5udW1fcWdyb3Vw czsNCj4gPiArCU51bVFHcm91cHNQZXJGbltETF81R10gPSBhY2NfY29uZi0+cV9kbF81Zy5udW1f cWdyb3VwczsNCj4gPiArCU51bVFHcm91cHNQZXJGbltGRlRdID0gYWNjX2NvbmYtPnFfZmZ0Lm51 bV9xZ3JvdXBzOw0KPiA+ICsJZm9yIChhY2MgPSBVTF80RzsgIGFjYyA8IE5VTV9BQ0M7IGFjYysr KQ0KPiA+ICsJCWZvciAocWdJZHggPSAwOyBxZ0lkeCA8IE51bVFHcm91cHNQZXJGblthY2NdOyBx Z0lkeCsrKQ0KPiA+ICsJCQlhY2NRZ1txZ0luZGV4KytdID0gYWNjOw0KPiA+ICsJYWNjID0gYWNj UWdbcWdfaWR4XTsNCj4gPiArCXJldHVybiBhY2M7DQo+ID4gK30NCj4gPiArDQo+ID4gICAvKiBS ZXR1cm4gdGhlIHF1ZXVlIHRvcG9sb2d5IGZvciBhIFF1ZXVlIEdyb3VwIEluZGV4ICovDQo+ID4g ICBzdGF0aWMgaW5saW5lIHZvaWQNCj4gPiAgIHF0b3BGcm9tQWNjKHN0cnVjdCBydGVfYWNjX3F1 ZXVlX3RvcG9sb2d5ICoqcXRvcCwgaW50IGFjY19lbnVtLCBAQA0KPiA+IC03NSw2ICs5NiwzMCBA QA0KPiA+ICAgCSpxdG9wID0gcF9xdG9wOw0KPiA+ICAgfQ0KPiA+DQo+ID4gKy8qIFJldHVybiB0 aGUgQVEgZGVwdGggZm9yIGEgUXVldWUgR3JvdXAgSW5kZXggKi8gc3RhdGljIGlubGluZSBpbnQN Cj4gPiArYXFEZXB0aChpbnQgcWdfaWR4LCBzdHJ1Y3QgcnRlX2FjY19jb25mICphY2NfY29uZikg ew0KPiA+ICsJc3RydWN0IHJ0ZV9hY2NfcXVldWVfdG9wb2xvZ3kgKnFfdG9wID0gTlVMTDsNCj4g PiArCWludCBhY2NfZW51bSA9IGFjY0Zyb21RZ2lkKHFnX2lkeCwgYWNjX2NvbmYpOw0KPiA+ICsJ cXRvcEZyb21BY2MoJnFfdG9wLCBhY2NfZW51bSwgYWNjX2NvbmYpOw0KPiA+ICsJaWYgKHVubGlr ZWx5KHFfdG9wID09IE5VTEwpKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsJcmV0dXJuIHFfdG9w LT5hcV9kZXB0aF9sb2cyOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBSZXR1cm4gdGhlIEFRIGRl cHRoIGZvciBhIFF1ZXVlIEdyb3VwIEluZGV4ICovIHN0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2Fx TnVtKGludCBxZ19pZHgsIHN0cnVjdCBydGVfYWNjX2NvbmYgKmFjY19jb25mKSB7DQo+ID4gKwlz dHJ1Y3QgcnRlX2FjY19xdWV1ZV90b3BvbG9neSAqcV90b3AgPSBOVUxMOw0KPiA+ICsJaW50IGFj Y19lbnVtID0gYWNjRnJvbVFnaWQocWdfaWR4LCBhY2NfY29uZik7DQo+ID4gKwlxdG9wRnJvbUFj YygmcV90b3AsIGFjY19lbnVtLCBhY2NfY29uZik7DQo+ID4gKwlpZiAodW5saWtlbHkocV90b3Ag PT0gTlVMTCkpDQo+ID4gKwkJcmV0dXJuIDA7DQo+ID4gKwlyZXR1cm4gcV90b3AtPm51bV9hcXNf cGVyX2dyb3VwczsNCj4gPiArfQ0KPiANCj4gDQo+IEZvciB0aGUgMyBmdW5jdGlvbnMgYWJvdmUs IHBsZWFzZSBhZGQgbmV3IGxpbmVzIGZvciBjbGFyaXR5Lg0KDQpPSywgZ3VpZGVsaW5lcyB3b3Vs ZCBiZSBnb29kLCBhcyBJIGFtIG5vdCBmdWxseSBjb252aW5jZWQuIEJ1dCB1cGRhdGluZyBpbiBu ZXcgc2VyaWVzLg0KDQo+IA0KPiA+ICsNCj4gPiAgIHN0YXRpYyB2b2lkDQo+ID4gICBpbml0UVRv cChzdHJ1Y3QgcnRlX2FjY19jb25mICphY2NfY29uZikNCj4gPiAgIHsNCj4gPiBAQCAtMzc0MCwz ICszNzg1LDQxMSBAQCBzdGF0aWMgaW50IGFjYzIwMF9wY2lfcHJvYmUoc3RydWN0DQo+IHJ0ZV9w Y2lfZHJpdmVyICpwY2lfZHJ2LA0KPiA+ICAgUlRFX1BNRF9SRUdJU1RFUl9QQ0lfVEFCTEUoQUND MjAwUEZfRFJJVkVSX05BTUUsDQo+IHBjaV9pZF9hY2MyMDBfcGZfbWFwKTsNCj4gPiAgIFJURV9Q TURfUkVHSVNURVJfUENJKEFDQzIwMFZGX0RSSVZFUl9OQU1FLA0KPiBhY2MyMDBfcGNpX3ZmX2Ry aXZlcik7DQo+ID4gICBSVEVfUE1EX1JFR0lTVEVSX1BDSV9UQUJMRShBQ0MyMDBWRl9EUklWRVJf TkFNRSwNCj4gPiBwY2lfaWRfYWNjMjAwX3ZmX21hcCk7DQo+ID4gKw0KPiA+ICsvKiBJbml0aWFs IGNvbmZpZ3VyYXRpb24gb2YgYSBBQ0MyMDAgZGV2aWNlIHByaW9yIHRvIHJ1bm5pbmcNCj4gPiAr Y29uZmlndXJlKCkgKi8gaW50IHJ0ZV9hY2MyMDBfY29uZmlndXJlKGNvbnN0IGNoYXIgKmRldl9u YW1lLCBzdHJ1Y3QNCj4gPiArcnRlX2FjY19jb25mICpjb25mKSB7DQo+ID4gKwlydGVfYmJkZXZf bG9nKElORk8sICJydGVfYWNjMjAwX2NvbmZpZ3VyZSIpOw0KPiA+ICsJdWludDMyX3QgdmFsdWUs IGFkZHJlc3MsIHN0YXR1czsNCj4gPiArCWludCBxZ19pZHgsIHRlbXBsYXRlX2lkeCwgdmZfaWR4 LCBhY2MsIGk7DQo+ID4gKwlzdHJ1Y3QgcnRlX2JiZGV2ICpiYmRldiA9IHJ0ZV9iYmRldl9nZXRf bmFtZWRfZGV2KGRldl9uYW1lKTsNCj4gPiArDQo+ID4gKwkvKiBDb21waWxlIHRpbWUgY2hlY2tz ICovDQo+ID4gKwlSVEVfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYWNjX2RtYV9yZXFfZGVz YykgIT0gMjU2KTsNCj4gPiArCVJURV9CVUlMRF9CVUdfT04oc2l6ZW9mKHVuaW9uIGFjY19kbWFf ZGVzYykgIT0gMjU2KTsNCj4gPiArCVJURV9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhY2Nf ZmN3X3RkKSAhPSAyNCk7DQo+ID4gKwlSVEVfQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYWNj X2Zjd190ZSkgIT0gMzIpOw0KPiA+ICsNCj4gPiArCWlmIChiYmRldiA9PSBOVUxMKSB7DQo+ID4g KwkJcnRlX2JiZGV2X2xvZyhFUlIsDQo+ID4gKwkJIkludmFsaWQgZGV2X25hbWUgKCVzKSwgb3Ig ZGV2aWNlIGlzIG5vdCB5ZXQgaW5pdGlhbGlzZWQiLA0KPiA+ICsJCWRldl9uYW1lKTsNCj4gPiAr CQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCX0NCj4gPiArCXN0cnVjdCBhY2NfZGV2aWNlICpkID0g YmJkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiA+ICsNCj4gPiArCS8qIFN0b3JlIGNvbmZpZ3Vy YXRpb24gKi8NCj4gPiArCXJ0ZV9tZW1jcHkoJmQtPmFjY19jb25mLCBjb25mLCBzaXplb2YoZC0+ YWNjX2NvbmYpKTsNCj4gPiArDQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgd2UgYXJlIGFscmVhZHkg b3V0IG9mIFBHICovDQo+ID4gKwlzdGF0dXMgPSBhY2NfcmVnX3JlYWQoZCwgSFdQZkhpU2VjdGlv blBvd2VyR2F0aW5nQWNrKTsNCj4gPiArCWlmIChzdGF0dXMgPiAwKSB7DQo+ID4gKwkJaWYgKHN0 YXR1cyAhPSBBQ0MyMDBfUEdfTUFTS18wKSB7DQo+ID4gKwkJCXJ0ZV9iYmRldl9sb2coRVJSLCAi VW5leHBlY3RlZCBzdGF0dXMgJXggJXgiLA0KPiA+ICsJCQkJCXN0YXR1cywgQUNDMjAwX1BHX01B U0tfMCk7DQo+ID4gKwkJCXJldHVybiAtRU5PREVWOw0KPiA+ICsJCX0NCj4gPiArCQkvKiBDbG9j ayBnYXRlIHNlY3Rpb25zIHRoYXQgd2lsbCBiZSB1bi1QRyAqLw0KPiA+ICsJCWFjY19yZWdfd3Jp dGUoZCwgSFdQZkhpQ2xrR2F0ZUh5c3RSZWcsIEFDQzIwMF9DTEtfRElTKTsNCj4gPiArCQkvKiBV bi1QRyByZXF1aXJlZCBzZWN0aW9ucyAqLw0KPiA+ICsJCWFjY19yZWdfd3JpdGUoZCwgSFdQZkhp U2VjdGlvblBvd2VyR2F0aW5nUmVxLA0KPiA+ICsJCQkJQUNDMjAwX1BHX01BU0tfMSk7DQo+ID4g KwkJc3RhdHVzID0gYWNjX3JlZ19yZWFkKGQsIEhXUGZIaVNlY3Rpb25Qb3dlckdhdGluZ0Fjayk7 DQo+ID4gKwkJaWYgKHN0YXR1cyAhPSBBQ0MyMDBfUEdfTUFTS18xKSB7DQo+ID4gKwkJCXJ0ZV9i YmRldl9sb2coRVJSLCAiVW5leHBlY3RlZCBzdGF0dXMgJXggJXgiLA0KPiA+ICsJCQkJCXN0YXR1 cywgQUNDMjAwX1BHX01BU0tfMSk7DQo+ID4gKwkJCXJldHVybiAtRU5PREVWOw0KPiA+ICsJCX0N Cj4gPiArCQlhY2NfcmVnX3dyaXRlKGQsIEhXUGZIaVNlY3Rpb25Qb3dlckdhdGluZ1JlcSwNCj4g PiArCQkJCUFDQzIwMF9QR19NQVNLXzIpOw0KPiA+ICsJCXN0YXR1cyA9IGFjY19yZWdfcmVhZChk LCBIV1BmSGlTZWN0aW9uUG93ZXJHYXRpbmdBY2spOw0KPiA+ICsJCWlmIChzdGF0dXMgIT0gQUND MjAwX1BHX01BU0tfMikgew0KPiA+ICsJCQlydGVfYmJkZXZfbG9nKEVSUiwgIlVuZXhwZWN0ZWQg c3RhdHVzICV4ICV4IiwNCj4gPiArCQkJCQlzdGF0dXMsIEFDQzIwMF9QR19NQVNLXzIpOw0KPiA+ ICsJCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArCQl9DQo+ID4gKwkJYWNjX3JlZ193cml0ZShkLCBI V1BmSGlTZWN0aW9uUG93ZXJHYXRpbmdSZXEsDQo+ID4gKwkJCQlBQ0MyMDBfUEdfTUFTS18zKTsN Cj4gPiArCQlzdGF0dXMgPSBhY2NfcmVnX3JlYWQoZCwgSFdQZkhpU2VjdGlvblBvd2VyR2F0aW5n QWNrKTsNCj4gPiArCQlpZiAoc3RhdHVzICE9IEFDQzIwMF9QR19NQVNLXzMpIHsNCj4gPiArCQkJ cnRlX2JiZGV2X2xvZyhFUlIsICJVbmV4cGVjdGVkIHN0YXR1cyAleCAleCIsDQo+ID4gKwkJCQkJ c3RhdHVzLCBBQ0MyMDBfUEdfTUFTS18zKTsNCj4gPiArCQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4g KwkJfQ0KPiA+ICsJCS8qIEVuYWJsZSBjbG9ja3MgZm9yIGFsbCBzZWN0aW9ucyAqLw0KPiA+ICsJ CWFjY19yZWdfd3JpdGUoZCwgSFdQZkhpQ2xrR2F0ZUh5c3RSZWcsIEFDQzIwMF9DTEtfRU4pOw0K PiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIEV4cGxpY2l0bHkgcmVsZWFzaW5nIEFYSSBhcyB0aGlz IG1heSBiZSBzdG9wcGVkIGFmdGVyIFBGIEZMUi9CTUUgKi8NCj4gPiArCWFkZHJlc3MgPSBIV1Bm RG1hQXhpQ29udHJvbDsNCj4gPiArCXZhbHVlID0gMTsNCj4gPiArCWFjY19yZWdfd3JpdGUoZCwg YWRkcmVzcywgdmFsdWUpOw0KPiA+ICsNCj4gPiArCS8qIFNldCB0aGUgZmFicmljIG1vZGUgKi8N Cj4gPiArCWFkZHJlc3MgPSBIV1BmRmFicmljTTJpQnVmZmVyUmVnOw0KPiA+ICsJdmFsdWUgPSBB Q0MyMDBfRkFCUklDX01PREU7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVl KTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgZGVmYXVsdCBkZXNjcmlwdG9yIHNpZ25hdHVyZSAqLw0K PiA+ICsJYWRkcmVzcyA9IEhXUGZEbWFEZXNjcmlwdG9yU2lnbmF0dXR1cmU7DQo+ID4gKwl2YWx1 ZSA9IDA7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsNCj4gPiArDQo+ ID4gKwkvKiBFbmFibGUgdGhlIEVycm9yIERldGVjdGlvbiBpbiBETUEgKi8NCj4gPiArCXZhbHVl ID0gQUNDMjAwX0NGR19ETUFfRVJST1I7DQo+ID4gKwlhZGRyZXNzID0gSFdQZkRtYUVycm9yRGV0 ZWN0aW9uRW47DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsNCj4gPiAr DQo+ID4gKwkvKiBBWEkgQ2FjaGUgY29uZmlndXJhdGlvbiAqLw0KPiA+ICsJdmFsdWUgPSBBQ0My MDBfQ0ZHX0FYSV9DQUNIRTsNCj4gPiArCWFkZHJlc3MgPSBIV1BmRG1hQXhjYWNoZVJlZzsNCj4g PiArCWFjY19yZWdfd3JpdGUoZCwgYWRkcmVzcywgdmFsdWUpOw0KPiA+ICsNCj4gPiArCS8qIERl ZmF1bHQgRE1BIENvbmZpZ3VyYXRpb24gKFFtZ3IgRW5hYmxlZCkgKi8NCj4gPiArCWFkZHJlc3Mg PSBIV1BmRG1hQ29uZmlnMFJlZzsNCj4gPiArCXZhbHVlID0gMDsNCj4gPiArCWFjY19yZWdfd3Jp dGUoZCwgYWRkcmVzcywgdmFsdWUpOw0KPiA+ICsJYWRkcmVzcyA9IEhXUGZEbWFRbWFuZW47DQo+ ID4gKwl2YWx1ZSA9IDA7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsN Cj4gPiArDQo+ID4gKwkvKiBEZWZhdWx0IFJMSU0vQUxFTiBjb25maWd1cmF0aW9uICovDQo+ID4g KwlpbnQgcmxpbSA9IDA7DQo+ID4gKwlpbnQgYWxlbiA9IDE7DQo+ID4gKwlpbnQgdGltZXN0YW1w ID0gMDsNCj4gPiArCWFkZHJlc3MgPSBIV1BmRG1hQ29uZmlnMVJlZzsNCj4gPiArCXZhbHVlID0g KDEgPDwgMzEpICsgKHJsaW0gPDwgOCkgKyAodGltZXN0YW1wIDw8IDYpICsgYWxlbjsNCj4gPiAr CWFjY19yZWdfd3JpdGUoZCwgYWRkcmVzcywgdmFsdWUpOw0KPiA+ICsNCj4gPiArCS8qIERlZmF1 bHQgRkZUIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCWFkZHJlc3MgPSBIV1BmRmZ0Q29uZmlnMDsN Cj4gPiArCXZhbHVlID0gQUNDMjAwX0ZGVF9DRkdfMDsNCj4gPiArCWFjY19yZWdfd3JpdGUoZCwg YWRkcmVzcywgdmFsdWUpOw0KPiA+ICsNCj4gPiArCS8qIENvbmZpZ3VyZSBETUEgUW1hbmFnZXIg YWRkcmVzc2VzICovDQo+ID4gKwlhZGRyZXNzID0gSFdQZkRtYVFtZ3JBZGRyUmVnOw0KPiA+ICsJ dmFsdWUgPSBIV1BmUW1nckVncmVzc1F1ZXVlc1RlbXBsYXRlOw0KPiA+ICsJYWNjX3JlZ193cml0 ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKw0KPiA+ICsJLyogPT09PT0gUW1nciBDb25maWd1 cmF0aW9uID09PT09ICovDQo+ID4gKwkvKiBDb25maWd1cmF0aW9uIG9mIHRoZSBBUXVldWUgRGVw dGggUU1HUl9HUlBfMF9ERVBUSF9MT0cyDQo+IGZvciBVTCAqLw0KPiA+ICsJaW50IHRvdGFsUWdz ID0gY29uZi0+cV91bF80Zy5udW1fcWdyb3VwcyArDQo+ID4gKwkJCWNvbmYtPnFfdWxfNWcubnVt X3Fncm91cHMgKw0KPiA+ICsJCQljb25mLT5xX2RsXzRnLm51bV9xZ3JvdXBzICsNCj4gPiArCQkJ Y29uZi0+cV9kbF81Zy5udW1fcWdyb3VwcyArDQo+ID4gKwkJCWNvbmYtPnFfZmZ0Lm51bV9xZ3Jv dXBzOw0KPiA+ICsJZm9yIChxZ19pZHggPSAwOyBxZ19pZHggPCBBQ0MyMDBfTlVNX1FHUlBTOyBx Z19pZHgrKykgew0KPiA+ICsJCWFkZHJlc3MgPSBIV1BmUW1nckRlcHRoTG9nMkdycCArDQo+ID4g KwkJCQlBQ0NfQllURVNfSU5fV09SRCAqIHFnX2lkeDsNCj4gPiArCQl2YWx1ZSA9IGFxRGVwdGgo cWdfaWR4LCBjb25mKTsNCj4gPiArCQlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsN Cj4gPiArCQlhZGRyZXNzID0gSFdQZlFtZ3JUaG9sZEdycCArDQo+ID4gKwkJCQlBQ0NfQllURVNf SU5fV09SRCAqIHFnX2lkeDsNCj4gPiArCQl2YWx1ZSA9ICgxIDw8IDE2KSArICgxIDw8IChhcURl cHRoKHFnX2lkeCwgY29uZikgLSAxKSk7DQo+ID4gKwkJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNz LCB2YWx1ZSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogVGVtcGxhdGUgUHJpb3JpdHkgaW4g aW5jcmVtZW50YWwgb3JkZXIgKi8NCj4gPiArCWZvciAodGVtcGxhdGVfaWR4ID0gMDsgdGVtcGxh dGVfaWR4IDwgQUNDX05VTV9UTVBMOw0KPiA+ICsJCQl0ZW1wbGF0ZV9pZHgrKykgew0KPiA+ICsJ CWFkZHJlc3MgPSBIV1BmUW1nckdycFRtcGxhdGVSZWcwSW5keCArDQo+IEFDQ19CWVRFU19JTl9X T1JEICogdGVtcGxhdGVfaWR4Ow0KPiA+ICsJCXZhbHVlID0gQUNDX1RNUExfUFJJXzA7DQo+ID4g KwkJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwkJYWRkcmVzcyA9IEhX UGZRbWdyR3JwVG1wbGF0ZVJlZzFJbmR4ICsNCj4gQUNDX0JZVEVTX0lOX1dPUkQgKiB0ZW1wbGF0 ZV9pZHg7DQo+ID4gKwkJdmFsdWUgPSBBQ0NfVE1QTF9QUklfMTsNCj4gPiArCQlhY2NfcmVnX3dy aXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsNCj4gPiArCQlhZGRyZXNzID0gSFdQZlFtZ3JHcnBUbXBs YXRlUmVnMmluZHggKw0KPiBBQ0NfQllURVNfSU5fV09SRCAqIHRlbXBsYXRlX2lkeDsNCj4gPiAr CQl2YWx1ZSA9IEFDQ19UTVBMX1BSSV8yOw0KPiA+ICsJCWFjY19yZWdfd3JpdGUoZCwgYWRkcmVz cywgdmFsdWUpOw0KPiA+ICsJCWFkZHJlc3MgPSBIV1BmUW1nckdycFRtcGxhdGVSZWczSW5keCAr DQo+IEFDQ19CWVRFU19JTl9XT1JEICogdGVtcGxhdGVfaWR4Ow0KPiA+ICsJCXZhbHVlID0gQUND X1RNUExfUFJJXzM7DQo+ID4gKwkJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJYWRkcmVzcyA9IEhXUGZRbWdyR3JwUHJpb3JpdHk7DQo+ID4g Kwl2YWx1ZSA9IEFDQzIwMF9DRkdfUU1HUl9ISV9QOw0KPiA+ICsJYWNjX3JlZ193cml0ZShkLCBh ZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKw0KPiA+ICsJLyogVGVtcGxhdGUgQ29uZmlndXJhdGlvbiAq Lw0KPiA+ICsJZm9yICh0ZW1wbGF0ZV9pZHggPSAwOyB0ZW1wbGF0ZV9pZHggPCBBQ0NfTlVNX1RN UEw7DQo+ID4gKwkJCXRlbXBsYXRlX2lkeCsrKSB7DQo+ID4gKwkJdmFsdWUgPSAwOw0KPiA+ICsJ CWFkZHJlc3MgPSBIV1BmUW1nckdycFRtcGxhdGVSZWc0SW5keA0KPiA+ICsJCQkJKyBBQ0NfQllU RVNfSU5fV09SRCAqIHRlbXBsYXRlX2lkeDsNCj4gPiArCQlhY2NfcmVnX3dyaXRlKGQsIGFkZHJl c3MsIHZhbHVlKTsNCj4gPiArCX0NCj4gPiArCS8qIDRHVUwgKi8NCj4gPiArCWludCBudW1RZ3Mg PSBjb25mLT5xX3VsXzRnLm51bV9xZ3JvdXBzOw0KPiA+ICsJaW50IG51bVFxc0FjYyA9IDA7DQo+ IA0KPiBEb24ndCBtaXggZGVjbGFyYXRpb25zICYgY29kZSwgaGVyZSBhbmQgZWxzZXdoZXJlIGlu IHRoaXMgZnVuY3Rpb24uDQoNCk9LDQoNCj4gDQo+ID4gKwl2YWx1ZSA9IDA7DQo+ID4gKwlmb3Ig KHFnX2lkeCA9IG51bVFxc0FjYzsgcWdfaWR4IDwgKG51bVFncyArIG51bVFxc0FjYyk7DQo+IHFn X2lkeCsrKQ0KPiA+ICsJCXZhbHVlIHw9ICgxIDw8IHFnX2lkeCk7DQo+ID4gKwlmb3IgKHRlbXBs YXRlX2lkeCA9IEFDQzIwMF9TSUdfVUxfNEc7DQo+ID4gKwkJCXRlbXBsYXRlX2lkeCA8PSBBQ0My MDBfU0lHX1VMXzRHX0xBU1Q7DQo+ID4gKwkJCXRlbXBsYXRlX2lkeCsrKSB7DQo+ID4gKwkJYWRk cmVzcyA9IEhXUGZRbWdyR3JwVG1wbGF0ZVJlZzRJbmR4DQo+ID4gKwkJCQkrIEFDQ19CWVRFU19J Tl9XT1JEICogdGVtcGxhdGVfaWR4Ow0KPiA+ICsJCWFjY19yZWdfd3JpdGUoZCwgYWRkcmVzcywg dmFsdWUpOw0KPiA+ICsJfQ0KPiA+ICsJLyogNUdVTCAqLw0KPiA+ICsJbnVtUXFzQWNjICs9IG51 bVFnczsNCj4gPiArCW51bVFncwk9IGNvbmYtPnFfdWxfNWcubnVtX3Fncm91cHM7DQo+ID4gKwl2 YWx1ZSA9IDA7DQo+ID4gKwlpbnQgbnVtRW5naW5lcyA9IDA7DQo+ID4gKwlmb3IgKHFnX2lkeCA9 IG51bVFxc0FjYzsgcWdfaWR4IDwgKG51bVFncyArIG51bVFxc0FjYyk7DQo+IHFnX2lkeCsrKQ0K PiA+ICsJCXZhbHVlIHw9ICgxIDw8IHFnX2lkeCk7DQo+ID4gKwlmb3IgKHRlbXBsYXRlX2lkeCA9 IEFDQzIwMF9TSUdfVUxfNUc7DQo+ID4gKwkJCXRlbXBsYXRlX2lkeCA8PSBBQ0MyMDBfU0lHX1VM XzVHX0xBU1Q7DQo+ID4gKwkJCXRlbXBsYXRlX2lkeCsrKSB7DQo+ID4gKwkJLyogQ2hlY2sgZW5n aW5lIHBvd2VyLW9uIHN0YXR1cyAqLw0KPiA+ICsJCWFkZHJlc3MgPSBId1BmRmVjVWw1Z0liRGVi dWdSZWcgKyBBQ0NfRU5HSU5FX09GRlNFVA0KPiAqIHRlbXBsYXRlX2lkeDsNCj4gPiArCQlzdGF0 dXMgPSAoYWNjX3JlZ19yZWFkKGQsIGFkZHJlc3MpID4+IDQpICYgMHg3Ow0KPiA+ICsJCWFkZHJl c3MgPSBIV1BmUW1nckdycFRtcGxhdGVSZWc0SW5keA0KPiA+ICsJCQkJKyBBQ0NfQllURVNfSU5f V09SRCAqIHRlbXBsYXRlX2lkeDsNCj4gPiArCQlpZiAoc3RhdHVzID09IDEpIHsNCj4gPiArCQkJ YWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwkJCW51bUVuZ2luZXMrKzsN Cj4gPiArCQl9IGVsc2UNCj4gPiArCQkJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCAwKTsNCj4g PiArCX0NCj4gPiArCXByaW50ZigiTnVtYmVyIG9mIDVHVUwgZW5naW5lcyAlZFxuIiwgbnVtRW5n aW5lcyk7DQo+ID4gKwkvKiA0R0RMICovDQo+ID4gKwludW1RcXNBY2MgKz0gbnVtUWdzOw0KPiA+ ICsJbnVtUWdzCT0gY29uZi0+cV9kbF80Zy5udW1fcWdyb3VwczsNCj4gPiArCXZhbHVlID0gMDsN Cj4gPiArCWZvciAocWdfaWR4ID0gbnVtUXFzQWNjOyBxZ19pZHggPCAobnVtUWdzICsgbnVtUXFz QWNjKTsNCj4gcWdfaWR4KyspDQo+ID4gKwkJdmFsdWUgfD0gKDEgPDwgcWdfaWR4KTsNCj4gPiAr CWZvciAodGVtcGxhdGVfaWR4ID0gQUNDMjAwX1NJR19ETF80RzsNCj4gPiArCQkJdGVtcGxhdGVf aWR4IDw9IEFDQzIwMF9TSUdfRExfNEdfTEFTVDsNCj4gPiArCQkJdGVtcGxhdGVfaWR4KyspIHsN Cj4gPiArCQlhZGRyZXNzID0gSFdQZlFtZ3JHcnBUbXBsYXRlUmVnNEluZHgNCj4gPiArCQkJCSsg QUNDX0JZVEVTX0lOX1dPUkQgKiB0ZW1wbGF0ZV9pZHg7DQo+ID4gKwkJYWNjX3JlZ193cml0ZShk LCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwl9DQo+ID4gKwkvKiA1R0RMICovDQo+ID4gKwludW1R cXNBY2MgKz0gbnVtUWdzOw0KPiA+ICsJbnVtUWdzCT0gY29uZi0+cV9kbF81Zy5udW1fcWdyb3Vw czsNCj4gPiArCXZhbHVlID0gMDsNCj4gPiArCWZvciAocWdfaWR4ID0gbnVtUXFzQWNjOyBxZ19p ZHggPCAobnVtUWdzICsgbnVtUXFzQWNjKTsNCj4gcWdfaWR4KyspDQo+ID4gKwkJdmFsdWUgfD0g KDEgPDwgcWdfaWR4KTsNCj4gPiArCWZvciAodGVtcGxhdGVfaWR4ID0gQUNDMjAwX1NJR19ETF81 RzsNCj4gPiArCQkJdGVtcGxhdGVfaWR4IDw9IEFDQzIwMF9TSUdfRExfNUdfTEFTVDsNCj4gPiAr CQkJdGVtcGxhdGVfaWR4KyspIHsNCj4gPiArCQlhZGRyZXNzID0gSFdQZlFtZ3JHcnBUbXBsYXRl UmVnNEluZHgNCj4gPiArCQkJCSsgQUNDX0JZVEVTX0lOX1dPUkQgKiB0ZW1wbGF0ZV9pZHg7DQo+ ID4gKwkJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwl9DQo+ID4gKwkv KiBGRlQgKi8NCj4gPiArCW51bVFxc0FjYyArPSBudW1RZ3M7DQo+ID4gKwludW1RZ3MJPSBjb25m LT5xX2ZmdC5udW1fcWdyb3VwczsNCj4gPiArCXZhbHVlID0gMDsNCj4gPiArCWZvciAocWdfaWR4 ID0gbnVtUXFzQWNjOyBxZ19pZHggPCAobnVtUWdzICsgbnVtUXFzQWNjKTsNCj4gcWdfaWR4Kysp DQo+ID4gKwkJdmFsdWUgfD0gKDEgPDwgcWdfaWR4KTsNCj4gPiArCWZvciAodGVtcGxhdGVfaWR4 ID0gQUNDMjAwX1NJR19GRlQ7DQo+ID4gKwkJCXRlbXBsYXRlX2lkeCA8PSBBQ0MyMDBfU0lHX0ZG VF9MQVNUOw0KPiA+ICsJCQl0ZW1wbGF0ZV9pZHgrKykgew0KPiA+ICsJCWFkZHJlc3MgPSBIV1Bm UW1nckdycFRtcGxhdGVSZWc0SW5keA0KPiA+ICsJCQkJKyBBQ0NfQllURVNfSU5fV09SRCAqIHRl bXBsYXRlX2lkeDsNCj4gPiArCQlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwkvKiBRdWV1ZSBHcm91cCBGdW5jdGlvbiBtYXBwaW5nICovDQo+ ID4gKwlpbnQgcW1hbl9mdW5jX2lkWzhdID0gezAsIDIsIDEsIDMsIDQsIDAsIDAsIDB9Ow0KPiA+ ICsJdmFsdWUgPSAwOw0KPiA+ICsJZm9yIChxZ19pZHggPSAwOyBxZ19pZHggPCBBQ0NfTlVNX1FH UlBTX1BFUl9XT1JEOyBxZ19pZHgrKykgew0KPiA+ICsJCWFjYyA9IGFjY0Zyb21RZ2lkKHFnX2lk eCwgY29uZik7DQo+ID4gKwkJdmFsdWUgfD0gcW1hbl9mdW5jX2lkW2FjY10gPDwgKHFnX2lkeCAq IDQpOw0KPiA+ICsJfQ0KPiA+ICsJYWNjX3JlZ193cml0ZShkLCBIV1BmUW1nckdycEZ1bmN0aW9u MCwgdmFsdWUpOw0KPiA+ICsJdmFsdWUgPSAwOw0KPiA+ICsJZm9yIChxZ19pZHggPSAwOyBxZ19p ZHggPCBBQ0NfTlVNX1FHUlBTX1BFUl9XT1JEOyBxZ19pZHgrKykgew0KPiA+ICsJCWFjYyA9IGFj Y0Zyb21RZ2lkKHFnX2lkeCArIEFDQ19OVU1fUUdSUFNfUEVSX1dPUkQsDQo+IGNvbmYpOw0KPiA+ ICsJCXZhbHVlIHw9IHFtYW5fZnVuY19pZFthY2NdIDw8IChxZ19pZHggKiA0KTsNCj4gPiArCX0N Cj4gPiArCWFjY19yZWdfd3JpdGUoZCwgSFdQZlFtZ3JHcnBGdW5jdGlvbjEsIHZhbHVlKTsNCj4g PiArDQo+ID4gKwkvKiBDb25maWd1cmF0aW9uIG9mIHRoZSBBcmJpdHJhdGlvbiBRR3JvdXAgZGVw dGggdG8gMSAqLw0KPiA+ICsJZm9yIChxZ19pZHggPSAwOyBxZ19pZHggPCBBQ0MyMDBfTlVNX1FH UlBTOyBxZ19pZHgrKykgew0KPiA+ICsJCWFkZHJlc3MgPSBIV1BmUW1nckFyYlFEZXB0aEdycCAr DQo+ID4gKwkJCQlBQ0NfQllURVNfSU5fV09SRCAqIHFnX2lkeDsNCj4gPiArCQl2YWx1ZSA9IDA7 DQo+ID4gKwkJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJLyogVGhpcyBwb2ludGVyIHRvIEFSQU0gKDI1NmtCKSBpcyBzaGlmdGVkIGJ5IDIg KDRCIHBlciByZWdpc3RlcikgKi8NCj4gPiArCXVpbnQzMl90IGFyYW1fYWRkcmVzcyA9IDA7DQo+ ID4gKwlmb3IgKHFnX2lkeCA9IDA7IHFnX2lkeCA8IHRvdGFsUWdzOyBxZ19pZHgrKykgew0KPiA+ ICsJCWZvciAodmZfaWR4ID0gMDsgdmZfaWR4IDwgY29uZi0+bnVtX3ZmX2J1bmRsZXM7IHZmX2lk eCsrKSB7DQo+ID4gKwkJCWFkZHJlc3MgPSBIV1BmUW1nclZmQmFzZUFkZHIgKyB2Zl9pZHgNCj4g PiArCQkJCQkqIEFDQ19CWVRFU19JTl9XT1JEICsgcWdfaWR4DQo+ID4gKwkJCQkJKiBBQ0NfQllU RVNfSU5fV09SRCAqIDY0Ow0KPiA+ICsJCQl2YWx1ZSA9IGFyYW1fYWRkcmVzczsNCj4gPiArCQkJ YWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwkJCS8qIE9mZnNldCBBUkFN IEFkZHJlc3MgZm9yIG5leHQgbWVtb3J5IGJhbmsNCj4gPiArCQkJICogLSBpbmNyZW1lbnQgb2Yg NEINCj4gPiArCQkJICovDQo+ID4gKwkJCWFyYW1fYWRkcmVzcyArPSBhcU51bShxZ19pZHgsIGNv bmYpICoNCj4gPiArCQkJCQkoMSA8PCBhcURlcHRoKHFnX2lkeCwgY29uZikpOw0KPiA+ICsJCX0N Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoYXJhbV9hZGRyZXNzID4gQUNDMjAwX1dPUkRTX0lO X0FSQU1fU0laRSkgew0KPiA+ICsJCXJ0ZV9iYmRldl9sb2coRVJSLCAiQVJBTSBDb25maWd1cmF0 aW9uIG5vdCBmaXR0aW5nICVkDQo+ICVkXG4iLA0KPiA+ICsJCQkJYXJhbV9hZGRyZXNzLA0KPiBB Q0MyMDBfV09SRFNfSU5fQVJBTV9TSVpFKTsNCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwkvKiBQZXJmb3JtYW5jZSB0dW5pbmcgKi8NCj4gPiArCWFjY19yZWdf d3JpdGUoZCwgSFdQZkZhYnJpY0kyTWRtYV93ZWlnaHQsIDB4MEZGRik7DQo+ID4gKwlhY2NfcmVn X3dyaXRlKGQsIEhXUGZEbWE0Z2RsSWJUaGxkLCAweDFmMTApOw0KPiA+ICsNCj4gPiArCS8qID09 PT0gSEkgQ29uZmlndXJhdGlvbiA9PT09ICovDQo+ID4gKw0KPiA+ICsJLyogTm8gSW5mbyBSaW5n L01TSSBieSBkZWZhdWx0ICovDQo+ID4gKwlhZGRyZXNzID0gSFdQZkhpSW5mb1JpbmdJbnRXckVu UmVnUGY7DQo+ID4gKwl2YWx1ZSA9IDA7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3Ms IHZhbHVlKTsNCj4gPiArCWFkZHJlc3MgPSBIV1BmSGlDZmdNc2lJbnRXckVuUmVnUGY7DQo+ID4g Kwl2YWx1ZSA9IDB4RkZGRkZGRkY7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZh bHVlKTsNCj4gPiArCS8qIFByZXZlbnQgQmxvY2sgb24gVHJhbnNtaXQgRXJyb3IgKi8NCj4gPiAr CWFkZHJlc3MgPSBIV1BmSGlCbG9ja1RyYW5zbWl0T25FcnJvckVuOw0KPiA+ICsJdmFsdWUgPSAw Ow0KPiA+ICsJYWNjX3JlZ193cml0ZShkLCBhZGRyZXNzLCB2YWx1ZSk7DQo+ID4gKwkvKiBQcmV2 ZW50cyB0byBkcm9wIE1TSSAqLw0KPiA+ICsJYWRkcmVzcyA9IEhXUGZIaU1zaURyb3BFbmFibGVS ZWc7DQo+ID4gKwl2YWx1ZSA9IDA7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZh bHVlKTsNCj4gPiArCS8qIFNldCB0aGUgUEYgTW9kZSByZWdpc3RlciAqLw0KPiA+ICsJYWRkcmVz cyA9IEhXUGZIaVBmTW9kZTsNCj4gPiArCXZhbHVlID0gKGNvbmYtPnBmX21vZGVfZW4pID8gQUND X1BGX1ZBTCA6IDA7DQo+ID4gKwlhY2NfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHZhbHVlKTsNCj4g PiArDQo+ID4gKwkvKiBRb1Mgb3ZlcmZsb3cgaW5pdCAqLw0KPiA+ICsJdmFsdWUgPSAxOw0KPiA+ ICsJYWRkcmVzcyA9IEhXUGZRb3Ntb25BRXZhbE92ZXJmbG93MDsNCj4gPiArCWFjY19yZWdfd3Jp dGUoZCwgYWRkcmVzcywgdmFsdWUpOw0KPiA+ICsJYWRkcmVzcyA9IEhXUGZRb3Ntb25CRXZhbE92 ZXJmbG93MDsNCj4gPiArCWFjY19yZWdfd3JpdGUoZCwgYWRkcmVzcywgdmFsdWUpOw0KPiA+ICsN Cj4gPiArCS8qIENvbmZpZ3VyZSB0aGUgRkZUIFJBTSBMVVQgKi8NCj4gPiArCXVpbnQzMl90IGZm dF9sdXRbQUNDMjAwX0ZGVF9SQU1fU0laRV0gPSB7DQo+ID4gKwkweDFGRkZGLCAweDFGRkZGLCAw eDFGRkZFLCAweDFGRkZBLCAweDFGRkY2LCAweDFGRkYxLCAweDFGRkVBLA0KPiAweDFGRkUyLA0K PiA+ICsJMHgxRkZEOSwgMHgxRkZDRSwgMHgxRkZDMiwgMHgxRkZCNSwgMHgxRkZBNywgMHgxRkY5 OCwgMHgxRkY4NywNCj4gMHgxRkY3NSwNCj4gPiArCTB4MUZGNjIsIDB4MUZGNEUsIDB4MUZGMzgs IDB4MUZGMjEsIDB4MUZGMDksIDB4MUZFRjAsIDB4MUZFRDYsDQo+IDB4MUZFQkEsDQo+ID4gKwkw eDFGRTlELCAweDFGRTdGLCAweDFGRTVGLCAweDFGRTNGLCAweDFGRTFELCAweDFGREZBLCAweDFG REQ1LA0KPiAweDFGREIwLA0KPiA+ICsJMHgxRkQ4OSwgMHgxRkQ2MSwgMHgxRkQzOCwgMHgxRkQw RCwgMHgxRkNFMSwgMHgxRkNCNCwgMHgxRkM4NiwNCj4gMHgxRkM1NywNCj4gPiArCTB4MUZDMjYs IDB4MUZCRjQsIDB4MUZCQzEsIDB4MUZCOEQsIDB4MUZCNTgsIDB4MUZCMjEsIDB4MUZBRTksDQo+ IDB4MUZBQjAsDQo+ID4gKwkweDFGQTc1LCAweDFGQTNBLCAweDFGOUZELCAweDFGOUJGLCAweDFG OTgwLCAweDFGOTNGLCAweDFGOEZELA0KPiAweDFGOEJBLA0KPiA+ICsJMHgxRjg3NiwgMHgxRjgz MSwgMHgxRjdFQSwgMHgxRjdBMywgMHgxRjc1QSwgMHgxRjcwRiwgMHgxRjZDNCwNCj4gMHgxRjY3 NywNCj4gPiArCTB4MUY2MjksIDB4MUY1REEsIDB4MUY1OEEsIDB4MUY1MzksIDB4MUY0RTYsIDB4 MUY0OTIsIDB4MUY0M0QsDQo+IDB4MUYzRTcsDQo+ID4gKwkweDFGMzhGLCAweDFGMzM3LCAweDFG MkRELCAweDFGMjgxLCAweDFGMjI1LCAweDFGMUM4LCAweDFGMTY5LA0KPiAweDFGMTA5LA0KPiA+ ICsJMHgxRjBBOCwgMHgxRjA0NiwgMHgxRUZFMiwgMHgxRUY3RCwgMHgxRUYxOCwgMHgxRUVCMCwg MHgxRUU0OCwNCj4gMHgxRURERiwNCj4gPiArCTB4MUVENzQsIDB4MUVEMDgsIDB4MUVDOUIsIDB4 MUVDMkQsIDB4MUVCQkUsIDB4MUVCNEQsDQo+IDB4MUVBREIsIDB4MUVBNjgsDQo+ID4gKwkweDFF OUY0LCAweDFFOTdGLCAweDFFOTA4LCAweDFFODkxLCAweDFFODE4LCAweDFFNzlFLCAweDFFNzIy LA0KPiAweDFFNkE2LA0KPiA+ICsJMHgxRTYyOSwgMHgxRTVBQSwgMHgxRTUyQSwgMHgxRTRBOSwg MHgxRTQyNywgMHgxRTNBMywgMHgxRTMxRiwNCj4gMHgxRTI5OSwNCj4gPiArCTB4MUUyMTIsIDB4 MUUxOEEsIDB4MUUxMDEsIDB4MUUwNzYsIDB4MURGRUIsIDB4MURGNUUsIDB4MWRFRDAsDQo+IDB4 MURFNDEsDQo+ID4gKwkweDFEREIxLCAweDFERDIwLCAweDFEQzhELCAweDFEQkZBLCAweDFEQjY1 LCAweDFEQUNGLA0KPiAweDFEQTM4LCAweDFEOUEwLA0KPiA+ICsJMHgxRDkwNywgMHgxRDg2Qywg MHgxRDdEMSwgMHgxRDczNCwgMHgxRDY5NiwgMHgxRDVGNywNCj4gMHgxRDU1NywgMHgxRDRCNiwN Cj4gPiArCTB4MUQ0MTMsIDB4MUQzNzAsIDB4MUQyQ0IsIDB4MUQyMjUsIDB4MUQxN0UsIDB4MUQw RDYsDQo+IDB4MUQwMkQsIDB4MUNGODMsDQo+ID4gKwkweDFDRUQ4LCAweDFDRTJCLCAweDFDRDdF LCAweDFDQ0NGLCAweDFDQzFGLCAweDFDQjZFLA0KPiAweDFDQUJDLCAweDFDQTA5LA0KPiA+ICsJ MHgxQzk1NSwgMHgxQzg5RiwgMHgxQzdFOSwgMHgxQzczMSwgMHgxQzY3OSwgMHgxQzVCRiwgMHgx QzUwNCwNCj4gMHgxQzQ0OCwNCj4gPiArCTB4MUMzOEIsIDB4MUMyQ0QsIDB4MUMyMEUsIDB4MUMx NEUsIDB4MUMwOEMsIDB4MUJGQ0EsIDB4MUJGMDYsDQo+IDB4MUJFNDIsDQo+ID4gKwkweDFCRDdD LCAweDFCQ0I1LCAweDFCQkVELCAweDFCQjI1LCAweDFCQTVCLCAweDFCOTkwLA0KPiAweDFCOEM0 LCAweDFCN0Y2LA0KPiA+ICsJMHgxQjcyOCwgMHgxQjY1OSwgMHgxQjU4OSwgMHgxQjRCNywgMHgx QjNFNSwgMHgxQjMxMSwgMHgxQjIzRCwNCj4gMHgxQjE2NywNCj4gPiArCTB4MUIwOTEsIDB4MUFG QjksIDB4MUFFRTAsIDB4MUFFMDcsIDB4MUFEMkMsIDB4MUFDNTAsIDB4MUFCNzMsDQo+IDB4MUFB OTUsDQo+ID4gKwkweDFBOUI2LCAweDFBOEQ2LCAweDFBN0Y2LCAweDFBNzE0LCAweDFBNjMxLCAw eDFBNTRELCAweDFBNDY4LA0KPiAweDFBMzgyLA0KPiA+ICsJMHgxQTI5QSwgMHgxQTFCMiwgMHgx QTBDOSwgMHgxOUZERiwgMHgxOUVGNCwgMHgxOUUwOCwgMHgxOUQxQiwNCj4gMHgxOUMyRCwNCj4g PiArCTB4MTlCM0UsIDB4MTlBNEUsIDB4MTk5NUQsIDB4MTk4NkIsIDB4MTk3NzgsIDB4MTk2ODQs IDB4MTk1OEYsDQo+IDB4MTk0OTksDQo+ID4gKwkweDE5M0EyLCAweDE5MkFBLCAweDE5MUIxLCAw eDE5MEI4LCAweDE4RkJELCAweDE4RUMxLCAweDE4REM0LA0KPiAweDE4Q0M3LA0KPiA+ICsJMHgx OEJDOCwgMHgxOEFDOCwgMHgxODlDOCwgMHgxODhDNiwgMHgxODdDNCwgMHgxODZDMSwgMHgxODVC QywNCj4gMHgxODRCNywNCj4gPiArCTB4MTgzQjEsIDB4MTgyQUEsIDB4MTgxQTIsIDB4MTgwOTks IDB4MTdGOEYsIDB4MTdFODQsIDB4MTdENzgsDQo+IDB4MTdDNkMsDQo+ID4gKwkweDE3QjVFLCAw eDE3QTRGLCAweDE3OTQwLCAweDE3ODMwLCAweDE3NzFFLCAweDE3NjBDLCAweDE3NEY5LA0KPiAw eDE3M0U1LA0KPiA+ICsJMHgxNzJEMSwgMHgxNzFCQiwgMHgxNzBBNCwgMHgxNkY4RCwgMHgxNkU3 NCwgMHgxNkQ1QiwgMHgxNkM0MSwNCj4gMHgxNkIyNiwNCj4gPiArCTB4MTZBMEEsIDB4MTY4RUQs IDB4MTY3Q0YsIDB4MTY2QjEsIDB4MTY1OTIsIDB4MTY0NzEsIDB4MTYzNTAsDQo+IDB4MTYyMkUs DQo+ID4gKwkweDE2MTBCLCAweDE1RkU4LCAweDE1RUMzLCAweDE1RDlFLCAweDE1Qzc4LCAweDE1 QjUxLCAweDE1QTI5LA0KPiAweDE1OTAwLA0KPiA+ICsJMHgxNTdENywgMHgxNTZBQywgMHgxNTU4 MSwgMHgxNTQ1NSwgMHgxNTMyOCwgMHgxNTFGQiwgMHgxNTBDQywNCj4gMHgxNEY5RCwNCj4gPiAr CTB4MTRFNkQsIDB4MTREM0MsIDB4MTRDMEEsIDB4MTRBRDgsIDB4MTQ5QTQsIDB4MTQ4NzAsIDB4 MTQ3M0IsDQo+IDB4MTQ2MDYsDQo+ID4gKwkweDE0NENGLCAweDE0Mzk4LCAweDE0MjYwLCAweDE0 MTI3LCAweDEzRkVFLCAweDEzRUIzLCAweDEzRDc4LA0KPiAweDEzQzNDLA0KPiA+ICsJMHgxM0Iw MCwgMHgxMzlDMiwgMHgxMzg4NCwgMHgxMzc0NSwgMHgxMzYwNiwgMHgxMzRDNSwgMHgxMzM4NCwN Cj4gMHgxMzI0MiwNCj4gPiArCTB4MTMwRkYsIDB4MTJGQkMsIDB4MTJFNzgsIDB4MTJEMzMsIDB4 MTJCRUUsIDB4MTJBQTcsIDB4MTI5NjAsDQo+IDB4MTI4MTksDQo+ID4gKwkweDEyNkQwLCAweDEy NTg3LCAweDEyNDNELCAweDEyMkYzLCAweDEyMUE4LCAweDEyMDVDLCAweDExRjBGLA0KPiAweDEx REMyLA0KPiA+ICsJMHgxMUM3NCwgMHgxMUIyNSwgMHgxMTlENiwgMHgxMTg4NiwgMHgxMTczNSwg MHgxMTVFMywgMHgxMTQ5MSwNCj4gMHgxMTMzRiwNCj4gPiArCTB4MTExRUIsIDB4MTEwOTcsIDB4 MTBGNDIsIDB4MTBkRUQsIDB4MTBDOTcsIDB4MTBCNDAsIDB4MTA5RTksDQo+IDB4MTA4OTEsDQo+ ID4gKwkweDEwNzM4LCAweDEwNURGLCAweDEwNDg1LCAweDEwMzJCLCAweDEwMUQwLCAweDEwMDc0 LCAweDBGRjE4LA0KPiAweDBGREJCLA0KPiA+ICsJMHgwRkM1RCwgMHgwRkFGRiwgMHgwRjlBMCwg MHgwRjg0MSwgMHgwRjZFMSwgMHgwRjU4MCwgMHgwRjQxRiwNCj4gMHgwRjJCRCwNCj4gPiArCTB4 MEYxNUIsIDB4MEVGRjgsIDB4MEVFOTQsIDB4MEVEMzAsIDB4MEVCQ0MsIDB4MEVBNjcsIDB4MEU5 MDEsDQo+IDB4MEU3OUEsDQo+ID4gKwkweDBFNjMzLCAweDBFNENDLCAweDBFMzY0LCAweDBFMUZC LCAweDBFMDkyLCAweDBERjI5LCAweDBEREJFLA0KPiAweDBEQzU0LA0KPiA+ICsJMHgwREFFOSwg MHgwRDk3RCwgMHgwRDgxMCwgMHgwRDZBNCwgMHgwRDUzNiwgMHgwRDNDOCwNCj4gMHgwRDI1QSwg MHgwRDBFQiwNCj4gPiArCTB4MENGN0MsIDB4MENFMEMsIDB4MENDOUMsIDB4MENCMkIsIDB4MEM5 QjksIDB4MEM4NDcsDQo+IDB4MEM2RDUsIDB4MEM1NjIsDQo+ID4gKwkweDBDM0VGLCAweDBDMjdC LCAweDBDMTA3LCAweDBCRjkyLCAweDBCRTFELCAweDBCQ0E4LCAweDBCQjMyLA0KPiAweDBCOUJC LA0KPiA+ICsJMHgwQjg0NCwgMHgwQjZDRCwgMHgwQjU1NSwgMHgwQjNERCwgMHgwQjI2NCwgMHgw QjBFQiwNCj4gMHgwQUY3MSwgMHgwQURGNywNCj4gPiArCTB4MEFDN0QsIDB4MEFCMDIsIDB4MEE5 ODcsIDB4MEE4MEIsIDB4MEE2OEYsIDB4MEE1MTMsIDB4MEEzOTYsDQo+IDB4MEEyMTksDQo+ID4g KwkweDBBMDlCLCAweDA5RjFELCAweDA5RDlFLCAweDA5QzIwLCAweDA5QUExLCAweDA5OTIxLCAw eDA5N0ExLA0KPiAweDA5NjIxLA0KPiA+ICsJMHgwOTRBMCwgMHgwOTMxRiwgMHgwOTE5RSwgMHgw OTAxQywgMHgwOEU5QSwgMHgwOEQxOCwgMHgwOEI5NSwNCj4gMHgwOEExMiwNCj4gPiArCTB4MDg4 OEYsIDB4MDg3MEIsIDB4MDg1ODcsIDB4MDg0MDIsIDB4MDgyN0UsIDB4MDgwRjksIDB4MDdGNzMs DQo+IDB4MDdERUUsDQo+ID4gKwkweDA3QzY4LCAweDA3QUUyLCAweDA3OTVCLCAweDA3N0Q0LCAw eDA3NjRELCAweDA3NEM2LCAweDA3MzNFLA0KPiAweDA3MUI2LA0KPiA+ICsJMHgwNzAyRSwgMHgw NkVBNiwgMHgwNkQxRCwgMHgwNkI5NCwgMHgwNkEwQiwgMHgwNjg4MSwgMHgwNjZGNywNCj4gMHgw NjU2RCwNCj4gPiArCTB4MDYzRTMsIDB4MDYyNTgsIDB4MDYwQ0UsIDB4MDVGNDMsIDB4MDVEQjcs IDB4MDVDMkMsIDB4MDVBQTAsDQo+IDB4MDU5MTQsDQo+ID4gKwkweDA1Nzg4LCAweDA1NUZDLCAw eDA1NDZGLCAweDA1MkUzLCAweDA1MTU2LCAweDA0RkM5LCAweDA0RTNCLA0KPiAweDA0Q0FFLA0K PiA+ICsJMHgwNEIyMCwgMHgwNDk5MiwgMHgwNDgwNCwgMHgwNDY3NiwgMHgwNDRFOCwgMHgwNDM1 OSwgMHgwNDFDQiwNCj4gMHgwNDAzQywNCj4gPiArCTB4MDNFQUQsIDB4MDNEMUQsIDB4MDNCOEUs IDB4MDM5RkYsIDB4MDM4NkYsIDB4MDM2REYsIDB4MDM1NEYsDQo+IDB4MDMzQkYsDQo+ID4gKwkw eDAzMjJGLCAweDAzMDlGLCAweDAyRjBGLCAweDAyRDdFLCAweDAyQkVFLCAweDAyQTVELCAweDAy OENDLA0KPiAweDAyNzNCLA0KPiA+ICsJMHgwMjVBQSwgMHgwMjQxOSwgMHgwMjI4OCwgMHgwMjBG NywgMHgwMUY2NSwgMHgwMURENCwgMHgwMUM0MywNCj4gMHgwMUFCMSwNCj4gPiArCTB4MDE5MUYs IDB4MDE3OEUsIDB4MDE1RkMsIDB4MDE0NkEsIDB4MDEyRDgsIDB4MDExNDcsIDB4MDBGQjUsDQo+ IDB4MDBFMjMsDQo+ID4gKwkweDAwQzkxLCAweDAwQUZGLCAweDAwOTZELCAweDAwN0RCLCAweDAw NjQ4LCAweDAwNEI2LCAweDAwMzI0LA0KPiA+ICsweDAwMTkyfTsNCj4gPiArDQo+ID4gKwlhY2Nf cmVnX3dyaXRlKGQsIEhXUGZGZnRSYW1QYWdlQWNjZXNzLCBBQ0MyMDBfRkZUX1JBTV9FTiArDQo+ IDY0KTsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBBQ0MyMDBfRkZUX1JBTV9TSVpFOyBpKyspDQo+ ID4gKwkJYWNjX3JlZ193cml0ZShkLCBIV1BmRmZ0UmFtT2ZmICsgaSAqIDQsIGZmdF9sdXRbaV0p Ow0KPiA+ICsJYWNjX3JlZ193cml0ZShkLCBIV1BmRmZ0UmFtUGFnZUFjY2VzcywgQUNDMjAwX0ZG VF9SQU1fRElTKTsNCj4gPiArDQo+ID4gKwkvKiBFbmFibGluZyBBUXVldWVzIHRocm91Z2ggdGhl IFF1ZXVlIGhpZXJhcmNoeSovDQo+ID4gKwlmb3IgKHZmX2lkeCA9IDA7IHZmX2lkeCA8IEFDQzIw MF9OVU1fVkZTOyB2Zl9pZHgrKykgew0KPiA+ICsJCWZvciAocWdfaWR4ID0gMDsgcWdfaWR4IDwg QUNDMjAwX05VTV9RR1JQUzsgcWdfaWR4KyspIHsNCj4gPiArCQkJdmFsdWUgPSAwOw0KPiA+ICsJ CQlpZiAodmZfaWR4IDwgY29uZi0+bnVtX3ZmX2J1bmRsZXMgJiYNCj4gPiArCQkJCQlxZ19pZHgg PCB0b3RhbFFncykNCj4gPiArCQkJCXZhbHVlID0gKDEgPDwgYXFOdW0ocWdfaWR4LCBjb25mKSkg LSAxOw0KPiA+ICsJCQlhZGRyZXNzID0gSFdQZlFtZ3JBcUVuYWJsZVZmDQo+ID4gKwkJCQkJKyB2 Zl9pZHggKiBBQ0NfQllURVNfSU5fV09SRDsNCj4gPiArCQkJdmFsdWUgKz0gKHFnX2lkeCA8PCAx Nik7DQo+ID4gKwkJCWFjY19yZWdfd3JpdGUoZCwgYWRkcmVzcywgdmFsdWUpOw0KPiA+ICsJCX0N Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlydGVfYmJkZXZfbG9nX2RlYnVnKCJQRiBUaXAgY29uZmln dXJhdGlvbiBjb21wbGV0ZSBmb3IgJXMiLA0KPiBkZXZfbmFtZSk7DQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2ViYW5kL2FjYy92ZXJzaW9uLm1h cA0KPiA+IGIvZHJpdmVycy9iYXNlYmFuZC9hY2MvdmVyc2lvbi5tYXANCj4gPiBpbmRleCBiNGZm MTNlLi4yN2ZiYmUzIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjL3ZlcnNp b24ubWFwDQo+ID4gKysrIGIvZHJpdmVycy9iYXNlYmFuZC9hY2MvdmVyc2lvbi5tYXANCj4gPiBA QCAtNiw0ICs2LDUgQEAgRVhQRVJJTUVOVEFMIHsNCj4gPiAgIAlnbG9iYWw6DQo+ID4NCj4gPiAg IAlydGVfYWNjMTB4X2NvbmZpZ3VyZTsNCj4gPiArCXJ0ZV9hY2MyMDBfY29uZmlndXJlOw0KPiA+ ICAgfTsNCg0K