From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 866ECA04BA; Thu, 1 Oct 2020 23:12:10 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C6A941D5C7; Thu, 1 Oct 2020 23:12:08 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by dpdk.org (Postfix) with ESMTP id 587241D5B9 for ; Thu, 1 Oct 2020 23:12:06 +0200 (CEST) IronPort-SDR: sXCkAB1C0MyL3GC0PZN32y2S6xRmkdeTVntp3X5L9J6rDGyOXEqhX8gwly7KyB3ciplaFVX5am IqpjzqLznATg== X-IronPort-AV: E=McAfee;i="6000,8403,9761"; a="142241029" X-IronPort-AV: E=Sophos;i="5.77,325,1596524400"; d="scan'208";a="142241029" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Oct 2020 14:12:02 -0700 IronPort-SDR: jd7SxGL94jxHmIUd7PNoBrQ+rRQjfs8hRYdreqCL8lSW4FjFKlH2NFoUrMwH421efxGK786NH7 4sH6qVnvCwgw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,325,1596524400"; d="scan'208";a="341757161" Received: from orsmsx605.amr.corp.intel.com ([10.22.229.18]) by orsmga008.jf.intel.com with ESMTP; 01 Oct 2020 14:12:02 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 1 Oct 2020 14:12:01 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 1 Oct 2020 14:12:01 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 1 Oct 2020 14:12:01 -0700 Received: from NAM10-DM6-obe.outbound.protection.outlook.com (104.47.58.106) 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.1713.5; Thu, 1 Oct 2020 14:12:01 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DWGBgTFcWLhue5zYzJA5ziqT/snbQWTlQjtxFMBVX5XEVfNDKR4pPL8mFAQFVw89hwGpNCu6paxN0LcMjaVaiiAqRXG8dO4JgMWtwNQGyIo7IGtNN7YjuIr5ec/2badtHV/kVF9GAC4wfC4YuDuNkeGsnhn1G/R1o2dIjHuL57xCahqEdgmaSzS2Om4imnlvLYy8QFwznsnARH1VJRkFkSRO7V7BhB5MCxusRFxJRImmEn6MPQeNuVapzEFk2qN6jyJpG9d0t/7sSuB2fJnqHfoCNO+7l4oOQ93P2Upnc9CjngJRKaKZriTvUGejt7tXFYE7CsM1ODfebvjNpsCilg== 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-SenderADCheck; bh=pwnbznTRc2boswjBVpsEUzJQJAuyos2DpC8T0ITgvtQ=; b=mQn79EPUyO/OWbm6dKspVLf/YhmIlIJ5fvuW6MKGmvXW2j8LtIvIJ8bV+NDc/y9cMUXyIXHFNGwMeR3sCoil8Gaa4nTGIL5/7X91O8YudYwL4WlPd18Jqi4WRC4c85Hh7ELjnqMdME2uXiiIE5zMWC5Cn44x/ORIN/UMH41N2x89ePn9FDOqnFzq4xpQTPSgrD+s/4/vRvmwEofVRQjita2RrcLX+qEzzmyzwpREFdLFm4WEIELV3H852/mYcblixxT/3fU422iV0YHeaz12btj3l31K9qUlbMS5HM46Wk02XhX2WaVrZHo8/eUT54ITCSjXb96wwDv3RAhhUGW0Og== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pwnbznTRc2boswjBVpsEUzJQJAuyos2DpC8T0ITgvtQ=; b=Unkkh/DN2sXp1/kMSmRaLZjVoAU6Y1Hc7RWidQpvoDRt7fBRXj+AliGDdRPAptkKpaKhHzrgW0yIYbvTCXNfa7T49nsCVe5cULhq5QoFkRvGBYOwMjQAleIfbm+A6QPjDf1ZYQT6aTzlqvJE2PTEWl4wO8YLUrBTfuJwMh/pXuA= Received: from BY5PR11MB4451.namprd11.prod.outlook.com (2603:10b6:a03:1cb::30) by BY5PR11MB4133.namprd11.prod.outlook.com (2603:10b6:a03:18f::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.37; Thu, 1 Oct 2020 21:11:58 +0000 Received: from BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508]) by BY5PR11MB4451.namprd11.prod.outlook.com ([fe80::4162:97e1:7d04:a508%7]) with mapi id 15.20.3412.028; Thu, 1 Oct 2020 21:11:58 +0000 From: "Chautru, Nicolas" To: Tom Rix , "dev@dpdk.org" , "akhil.goyal@nxp.com" CC: "Richardson, Bruce" , "Xu, Rosen" , "dave.burley@accelercomm.com" , "aidan.goddard@accelercomm.com" , "Yigit, Ferruh" , "Liu, Tianjiao" Thread-Topic: [dpdk-dev] [PATCH v9 10/10] baseband/acc100: add configure function Thread-Index: AQHWlffiv22Ey+zXR0yoVpCMua5GCamBnFOAgAAw/xCAASOugIAAUaQQ Date: Thu, 1 Oct 2020 21:11:58 +0000 Message-ID: References: <1597796731-57841-12-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-1-git-send-email-nicolas.chautru@intel.com> <1601339385-117424-11-git-send-email-nicolas.chautru@intel.com> <66758688-f00e-c757-0b9e-5bb365ace5de@redhat.com> <0d31a887-6a52-d885-8b50-486d573f5975@redhat.com> In-Reply-To: <0d31a887-6a52-d885-8b50-486d573f5975@redhat.com> 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.5.1.3 authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [45.28.143.88] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b6a9567d-515b-4803-cb69-08d8664ea20b x-ms-traffictypediagnostic: BY5PR11MB4133: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:9508; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: UKkoGDeFBc4QyYYB4yIbP6HQnU/OsR2Ehw1tc1kgJ4gZGrkKMy10RAsCN7KEfmm9H/Mliyijmtnt7xhPsXAahUDYPp46/9V5i96F/qsT6/wr/dJCDUp5uChAuIPrdtaKECjhsomr7XYP1L76bDNmCHdB1SBPDlH80HgjWpjXVt7VT46+75IU4i6ebDiu8nR8Jxv+ydVPjA/3iK9mZg7FiLgOvgQLVxxXeyMJ9ZFWWpLvuYtN8hAyZSdjZ94vdGWHPc0JIiYSzZn6cvx1sm01xza3oKzknVQrXaHBhZQrsXTwuW11WAo6hkNm6/9uh9qN 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:(4636009)(366004)(396003)(346002)(376002)(136003)(39860400002)(107886003)(52536014)(4326008)(66946007)(53546011)(66556008)(6506007)(83380400001)(66446008)(7696005)(64756008)(66476007)(19627235002)(8676002)(5660300002)(76116006)(8936002)(2906002)(86362001)(55016002)(33656002)(9686003)(110136005)(30864003)(26005)(186003)(71200400001)(54906003)(316002)(478600001)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: oO5rL+a6eoTavU/p6QwNFaHlpr71bd6dK9ma5pxWHxnRJLTL6T5F78qCBWSUFE90MnIFkn9VKOi8LaEzO8gkiYyhJJsCZFf+SuF8ahW6pvTxfW7JgZhfj81RP8XmRBneFKM22jtYieW4O4WLR3oDyIjxskxNZeMNjct5+UAjHUfAUkCB/K6abxsFwTCnwTRYuw9Jx7vu2nq2q8x6iLzKM71iZveqoaLK0ATQnsH13nPpfpnzdi6lUfgatp9zVlYc7Hpkk29sCy8Wi+f/xUrLgmIBGgTUr2JOO3qgyHlagXIZCafSqx0glDpurWjXxQsJlg7T9UidUAy/F5Scdb1JPPjjB2sG2uBaz08P0K7VbsBZXGPFXe/47BB+N8dh4uoMiYikV/VyylwgdroA+yz8cC4mZbJLROECPEti9V9J0YvblkBhNCMCPmQOWfzMRdTaWEbkLzCGKdAxb6wcjLLcjGFE9X/pmRuYCZuOloDWHInn79/zYAbCf15PTEcFA2Bh8HFIgJVkCNv/je5J3sTqC7kOwdXG+n1AoK6p4yRL4cRPAhHuacJJUaY6F1g4tG0bdqP3Uyw8jFfEFuN02GnqY5H7JNvyc5UHyd4mX4njZdAx4TaJt0UtdGOfdwrl+njCa422G6uELkO+U1cpAccCNA== 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: b6a9567d-515b-4803-cb69-08d8664ea20b X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Oct 2020 21:11:58.2091 (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: x8PyP/e8unvqz5IXwT6GyiZLOGvqhdI9j73aEQkFAzAFJ7FWjFiWOYl+Zo1E4AMKlXJUkckuLvcyBjBKxWjyA7ILgu1nRw/66KOc1qzmuds= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR11MB4133 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v9 10/10] baseband/acc100: add configure function X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgVG9tLCANCg0KPiBGcm9tOiBUb20gUml4IDx0cml4QHJlZGhhdC5jb20+DQo+IE9uIDkvMzAv MjAgMzo1NCBQTSwgQ2hhdXRydSwgTmljb2xhcyB3cm90ZToNCj4gPiBIaSBUb20sDQo+ID4NCj4g Pj4gRnJvbTogVG9tIFJpeCA8dHJpeEByZWRoYXQuY29tPg0KPiA+PiBPbiA5LzI4LzIwIDU6Mjkg UE0sIE5pY29sYXMgQ2hhdXRydSB3cm90ZToNCj4gPj4+IEFkZCBjb25maWd1cmUgZnVuY3Rpb24g dG8gY29uZmlndXJlIHRoZSBQRiBmcm9tIHdpdGhpbiB0aGUNCj4gPj4+IGJiZGV2LXRlc3QgaXRz ZWxmIHdpdGhvdXQgZXh0ZXJuYWwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiB0aGUgZGV2aWNl Lg0KPiA+Pj4NCj4gPj4+IFNpZ25lZC1vZmYtYnk6IE5pY29sYXMgQ2hhdXRydSA8bmljb2xhcy5j aGF1dHJ1QGludGVsLmNvbT4NCj4gPj4+IEFja2VkLWJ5OiBMaXUgVGlhbmppYW8gPFRpYW5qaWFv LmxpdUBpbnRlbC5jb20+DQo+ID4+PiAtLS0NCj4gPj4+ICBhcHAvdGVzdC1iYmRldi90ZXN0X2Ji ZGV2X3BlcmYuYyAgICAgICAgICAgICAgICAgICB8ICA3MiArKysNCj4gPj4+ICBkb2MvZ3VpZGVz L3JlbF9ub3Rlcy9yZWxlYXNlXzIwXzExLnJzdCAgICAgICAgICAgICB8ICAgNSArDQo+ID4+PiAg ZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgfCAgIDIg Kw0KPiA+Pj4gIGRyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfY2ZnLmggICAgICAg ICAgIHwgIDE3ICsNCj4gPj4+ICBkcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX3Bt ZC5jICAgICAgICAgICB8IDUwNQ0KPiA+PiArKysrKysrKysrKysrKysrKysrKysNCj4gPj4+ICAu Li4vYWNjMTAwL3J0ZV9wbWRfYmJkZXZfYWNjMTAwX3ZlcnNpb24ubWFwICAgICAgICB8ICAgNyAr DQo+ID4+PiAgNiBmaWxlcyBjaGFuZ2VkLCA2MDggaW5zZXJ0aW9ucygrKQ0KPiA+Pj4NCj4gPj4+ IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1iYmRldi90ZXN0X2JiZGV2X3BlcmYuYw0KPiA+Pj4gYi9h cHAvdGVzdC1iYmRldi90ZXN0X2JiZGV2X3BlcmYuYw0KPiA+Pj4gaW5kZXggNDVjMGQ2Mi4uMzJm MjNmZiAxMDA2NDQNCj4gPj4+IC0tLSBhL2FwcC90ZXN0LWJiZGV2L3Rlc3RfYmJkZXZfcGVyZi5j DQo+ID4+PiArKysgYi9hcHAvdGVzdC1iYmRldi90ZXN0X2JiZGV2X3BlcmYuYw0KPiA+Pj4gQEAg LTUyLDYgKzUyLDE4IEBADQo+ID4+PiAgI2RlZmluZSBGTFJfNUdfVElNRU9VVCA2MTANCj4gPj4+ ICAjZW5kaWYNCj4gPj4+DQo+ID4+PiArI2lmZGVmIFJURV9MSUJSVEVfUE1EX0JCREVWX0FDQzEw MA0KPiA+Pj4gKyNpbmNsdWRlIDxydGVfYWNjMTAwX2NmZy5oPg0KPiA+Pj4gKyNkZWZpbmUgQUND MTAwUEZfRFJJVkVSX05BTUUgICAoImludGVsX2FjYzEwMF9wZiIpDQo+ID4+PiArI2RlZmluZSBB Q0MxMDBWRl9EUklWRVJfTkFNRSAgICgiaW50ZWxfYWNjMTAwX3ZmIikNCj4gPj4+ICsjZGVmaW5l IEFDQzEwMF9RTUdSX05VTV9BUVMgMTYNCj4gPj4+ICsjZGVmaW5lIEFDQzEwMF9RTUdSX05VTV9R R1MgMg0KPiA+Pj4gKyNkZWZpbmUgQUNDMTAwX1FNR1JfQVFfREVQVEggNQ0KPiA+Pj4gKyNkZWZp bmUgQUNDMTAwX1FNR1JfSU5WQUxJRF9JRFggLTENCj4gPj4+ICsjZGVmaW5lIEFDQzEwMF9RTUdS X1JSIDENCj4gPj4+ICsjZGVmaW5lIEFDQzEwMF9RT1NfR0JSIDANCj4gPj4+ICsjZW5kaWYNCj4g Pj4+ICsNCj4gPj4+ICAjZGVmaW5lIE9QU19DQUNIRV9TSVpFIDI1NlUNCj4gPj4+ICAjZGVmaW5l IE9QU19QT09MX1NJWkVfTUlOIDUxMVUgLyogMC41SyBwZXIgcXVldWUgKi8NCj4gPj4+DQo+ID4+ PiBAQCAtNjUzLDYgKzY2NSw2NiBAQCB0eXBlZGVmIGludCAodGVzdF9jYXNlX2Z1bmN0aW9uKShz dHJ1Y3QNCj4gPj4gYWN0aXZlX2RldmljZSAqYWQsDQo+ID4+PiAgCQkJCWluZm8tPmRldl9uYW1l KTsNCj4gPj4+ICAJfQ0KPiA+Pj4gICNlbmRpZg0KPiA+Pj4gKyNpZmRlZiBSVEVfTElCUlRFX1BN RF9CQkRFVl9BQ0MxMDANCj4gPj4gc2VlbXMgbGlrZSB0aGlzIGZ1bmN0aW9uIHdvdWxkIGJyZWFr IGlmIG9uZSBvZiB0aGUgb3RoZXIgYmJkZXYncyB3ZXJlDQo+ID4+ICNkZWZpbmVkLg0KPiA+IE5v IHRoZXNlIGFyZSBpbmRlcGVuZGVudC4gQnkgZGVmYXVsdCB0aGV5IGFyZSBhbGwgZGVmaW5lZC4N Cj4gb2sNCj4gPg0KPiA+DQo+ID4+PiArCWlmICgoZ2V0X2luaXRfZGV2aWNlKCkgPT0gdHJ1ZSkg JiYNCj4gPj4+ICsJCSghc3RyY21wKGluZm8tPmRydi5kcml2ZXJfbmFtZSwNCj4gPj4gQUNDMTAw UEZfRFJJVkVSX05BTUUpKSkgew0KPiA+Pj4gKwkJc3RydWN0IGFjYzEwMF9jb25mIGNvbmY7DQo+ ID4+PiArCQl1bnNpZ25lZCBpbnQgaTsNCj4gPj4+ICsNCj4gPj4+ICsJCXByaW50ZigiQ29uZmln dXJlIEFDQzEwMCBGRUMgRHJpdmVyICVzIHdpdGggZGVmYXVsdA0KPiA+PiB2YWx1ZXNcbiIsDQo+ ID4+PiArCQkJCWluZm8tPmRydi5kcml2ZXJfbmFtZSk7DQo+ID4+PiArDQo+ID4+PiArCQkvKiBj bGVhciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYmVmb3JlIGluaXRpYWxpemF0aW9uICovDQo+ID4+ PiArCQltZW1zZXQoJmNvbmYsIDAsIHNpemVvZihzdHJ1Y3QgYWNjMTAwX2NvbmYpKTsNCj4gPj4+ ICsNCj4gPj4+ICsJCS8qIEFsd2F5cyBzZXQgaW4gUEYgbW9kZSBmb3IgYnVpbHQtaW4gY29uZmln dXJhdGlvbiAqLw0KPiA+Pj4gKwkJY29uZi5wZl9tb2RlX2VuID0gdHJ1ZTsNCj4gPj4+ICsJCWZv ciAoaSA9IDA7IGkgPCBSVEVfQUNDMTAwX05VTV9WRlM7ICsraSkgew0KPiA+Pj4gKwkJCWNvbmYu YXJiX2RsXzRnW2ldLmdicl90aHJlc2hvbGQxID0NCj4gPj4gQUNDMTAwX1FPU19HQlI7DQo+ID4+ PiArCQkJY29uZi5hcmJfZGxfNGdbaV0uZ2JyX3RocmVzaG9sZDEgPQ0KPiA+PiBBQ0MxMDBfUU9T X0dCUjsNCj4gPj4+ICsJCQljb25mLmFyYl9kbF80Z1tpXS5yb3VuZF9yb2Jpbl93ZWlnaHQgPQ0K PiA+PiBBQ0MxMDBfUU1HUl9SUjsNCj4gPj4+ICsJCQljb25mLmFyYl91bF80Z1tpXS5nYnJfdGhy ZXNob2xkMSA9DQo+ID4+IEFDQzEwMF9RT1NfR0JSOw0KPiA+Pj4gKwkJCWNvbmYuYXJiX3VsXzRn W2ldLmdicl90aHJlc2hvbGQxID0NCj4gPj4gQUNDMTAwX1FPU19HQlI7DQo+ID4+PiArCQkJY29u Zi5hcmJfdWxfNGdbaV0ucm91bmRfcm9iaW5fd2VpZ2h0ID0NCj4gPj4gQUNDMTAwX1FNR1JfUlI7 DQo+ID4+PiArCQkJY29uZi5hcmJfZGxfNWdbaV0uZ2JyX3RocmVzaG9sZDEgPQ0KPiA+PiBBQ0Mx MDBfUU9TX0dCUjsNCj4gPj4+ICsJCQljb25mLmFyYl9kbF81Z1tpXS5nYnJfdGhyZXNob2xkMSA9 DQo+ID4+IEFDQzEwMF9RT1NfR0JSOw0KPiA+Pj4gKwkJCWNvbmYuYXJiX2RsXzVnW2ldLnJvdW5k X3JvYmluX3dlaWdodCA9DQo+ID4+IEFDQzEwMF9RTUdSX1JSOw0KPiA+Pj4gKwkJCWNvbmYuYXJi X3VsXzVnW2ldLmdicl90aHJlc2hvbGQxID0NCj4gPj4gQUNDMTAwX1FPU19HQlI7DQo+ID4+PiAr CQkJY29uZi5hcmJfdWxfNWdbaV0uZ2JyX3RocmVzaG9sZDEgPQ0KPiA+PiBBQ0MxMDBfUU9TX0dC UjsNCj4gPj4+ICsJCQljb25mLmFyYl91bF81Z1tpXS5yb3VuZF9yb2Jpbl93ZWlnaHQgPQ0KPiA+ PiBBQ0MxMDBfUU1HUl9SUjsNCj4gPj4+ICsJCX0NCj4gPj4+ICsNCj4gPj4+ICsJCWNvbmYuaW5w dXRfcG9zX2xscl8xX2JpdCA9IHRydWU7DQo+ID4+PiArCQljb25mLm91dHB1dF9wb3NfbGxyXzFf Yml0ID0gdHJ1ZTsNCj4gPj4+ICsJCWNvbmYubnVtX3ZmX2J1bmRsZXMgPSAxOyAvKio8IE51bWJl ciBvZiBWRiBidW5kbGVzIHRvDQo+ID4+IHNldHVwICovDQo+ID4+PiArDQo+ID4+PiArCQljb25m LnFfdWxfNGcubnVtX3Fncm91cHMgPSBBQ0MxMDBfUU1HUl9OVU1fUUdTOw0KPiA+Pj4gKwkJY29u Zi5xX3VsXzRnLmZpcnN0X3Fncm91cF9pbmRleCA9DQo+ID4+IEFDQzEwMF9RTUdSX0lOVkFMSURf SURYOw0KPiA+Pj4gKwkJY29uZi5xX3VsXzRnLm51bV9hcXNfcGVyX2dyb3VwcyA9DQo+ID4+IEFD QzEwMF9RTUdSX05VTV9BUVM7DQo+ID4+PiArCQljb25mLnFfdWxfNGcuYXFfZGVwdGhfbG9nMiA9 IEFDQzEwMF9RTUdSX0FRX0RFUFRIOw0KPiA+Pj4gKwkJY29uZi5xX2RsXzRnLm51bV9xZ3JvdXBz ID0gQUNDMTAwX1FNR1JfTlVNX1FHUzsNCj4gPj4+ICsJCWNvbmYucV9kbF80Zy5maXJzdF9xZ3Jv dXBfaW5kZXggPQ0KPiA+PiBBQ0MxMDBfUU1HUl9JTlZBTElEX0lEWDsNCj4gPj4+ICsJCWNvbmYu cV9kbF80Zy5udW1fYXFzX3Blcl9ncm91cHMgPQ0KPiA+PiBBQ0MxMDBfUU1HUl9OVU1fQVFTOw0K PiA+Pj4gKwkJY29uZi5xX2RsXzRnLmFxX2RlcHRoX2xvZzIgPSBBQ0MxMDBfUU1HUl9BUV9ERVBU SDsNCj4gPj4+ICsJCWNvbmYucV91bF81Zy5udW1fcWdyb3VwcyA9IEFDQzEwMF9RTUdSX05VTV9R R1M7DQo+ID4+PiArCQljb25mLnFfdWxfNWcuZmlyc3RfcWdyb3VwX2luZGV4ID0NCj4gPj4gQUND MTAwX1FNR1JfSU5WQUxJRF9JRFg7DQo+ID4+PiArCQljb25mLnFfdWxfNWcubnVtX2Fxc19wZXJf Z3JvdXBzID0NCj4gPj4gQUNDMTAwX1FNR1JfTlVNX0FRUzsNCj4gPj4+ICsJCWNvbmYucV91bF81 Zy5hcV9kZXB0aF9sb2cyID0gQUNDMTAwX1FNR1JfQVFfREVQVEg7DQo+ID4+PiArCQljb25mLnFf ZGxfNWcubnVtX3Fncm91cHMgPSBBQ0MxMDBfUU1HUl9OVU1fUUdTOw0KPiA+Pj4gKwkJY29uZi5x X2RsXzVnLmZpcnN0X3Fncm91cF9pbmRleCA9DQo+ID4+IEFDQzEwMF9RTUdSX0lOVkFMSURfSURY Ow0KPiA+Pj4gKwkJY29uZi5xX2RsXzVnLm51bV9hcXNfcGVyX2dyb3VwcyA9DQo+ID4+IEFDQzEw MF9RTUdSX05VTV9BUVM7DQo+ID4+PiArCQljb25mLnFfZGxfNWcuYXFfZGVwdGhfbG9nMiA9IEFD QzEwMF9RTUdSX0FRX0RFUFRIOw0KPiA+Pj4gKw0KPiA+Pj4gKwkJLyogc2V0dXAgUEYgd2l0aCBj b25maWd1cmF0aW9uIGluZm9ybWF0aW9uICovDQo+ID4+PiArCQlyZXQgPSBhY2MxMDBfY29uZmln dXJlKGluZm8tPmRldl9uYW1lLCAmY29uZik7DQo+ID4+PiArCQlURVNUX0FTU0VSVF9TVUNDRVNT KHJldCwNCj4gPj4+ICsJCQkJIkZhaWxlZCB0byBjb25maWd1cmUgQUNDMTAwIFBGIGZvciBiYmRl dg0KPiA+PiAlcyIsDQo+ID4+PiArCQkJCWluZm8tPmRldl9uYW1lKTsNCj4gPj4+ICsJCS8qIExl dCdzIHJlZnJlc2ggdGhpcyBub3cgdGhpcyBpcyBjb25maWd1cmVkICovDQo+ID4+PiArCX0NCj4g Pj4+ICsJcnRlX2JiZGV2X2luZm9fZ2V0KGRldl9pZCwgaW5mbyk7DQo+ID4+IFRoZSBvdGhlciBi YmRldidzIGRvIG5vdCBjYWxsIHJ0ZV9iYmRldl9pbmZvX2dldCwgY2FuIHRoaXMgYmUgcmVtb3Zl ZCA/DQo+ID4gQWN0dWFsbHkgaXQgc2hvdWxkIGJlIGFkZGVkIG91dHNpZGUgZm9yIGFsbCB2ZXJz aW9ucw0KPiA+IHBvc3QtY29uZmlndXJhaW9uLiBUaGFua3MNCj4gPg0KPiA+Pj4gKyNlbmRpZg0K PiA+Pj4gKw0KPiA+Pj4gIAluYl9xdWV1ZXMgPSBSVEVfTUlOKHJ0ZV9sY29yZV9jb3VudCgpLCBp bmZvLQ0KPiBkcnYubWF4X251bV9xdWV1ZXMpOw0KPiA+Pj4gIAluYl9xdWV1ZXMgPSBSVEVfTUlO KG5iX3F1ZXVlcywgKHVuc2lnbmVkIGludCkgTUFYX1FVRVVFUyk7DQo+ID4+Pg0KPiA+Pj4gZGlm ZiAtLWdpdCBhL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjBfMTEucnN0DQo+ID4+PiBi L2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjBfMTEucnN0DQo+ID4+PiBpbmRleCA3M2Fj MDhmLi5jOGQwNTg2IDEwMDY0NA0KPiA+Pj4gLS0tIGEvZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVs ZWFzZV8yMF8xMS5yc3QNCj4gPj4+ICsrKyBiL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2Vf MjBfMTEucnN0DQo+ID4+PiBAQCAtNTUsNiArNTUsMTEgQEAgTmV3IEZlYXR1cmVzDQo+ID4+PiAg ICAgICBBbHNvLCBtYWtlIHN1cmUgdG8gc3RhcnQgdGhlIGFjdHVhbCB0ZXh0IGF0IHRoZSBtYXJn aW4uDQo+ID4+PiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQo+ID4+Pg0KPiA+Pj4gKyogKipBZGRlZCBJbnRlbCBBQ0MxMDAgYmJk ZXYgUE1ELioqDQo+ID4+PiArDQo+ID4+PiArICBBZGRlZCBhIG5ldyBgYGFjYzEwMGBgIGJiZGV2 IGRyaXZlciBmb3IgdGhlIEludGVsXCB8cmVnfCBBQ0MxMDANCj4gPj4+ICsgYWNjZWxlcmF0b3Ig IGFsc28ga25vd24gYXMgTW91bnQgQnJ5Y2UuICBTZWUgdGhlDQo+ID4+PiArIDpkb2M6YC4uL2Ji ZGV2cy9hY2MxMDBgIEJCREVWIGd1aWRlIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcyBuZXcNCj4g ZHJpdmVyLg0KPiA+Pj4NCj4gPj4+ICBSZW1vdmVkIEl0ZW1zDQo+ID4+PiAgLS0tLS0tLS0tLS0t LQ0KPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL21lc29uLmJ1aWxk DQo+ID4+PiBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL21lc29uLmJ1aWxkDQo+ID4+PiBpbmRl eCA4YWZhZmMyLi43YWM0NGRjIDEwMDY0NA0KPiA+Pj4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9h Y2MxMDAvbWVzb24uYnVpbGQNCj4gPj4+ICsrKyBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL21l c29uLmJ1aWxkDQo+ID4+PiBAQCAtNCwzICs0LDUgQEANCj4gPj4+ICBkZXBzICs9IFsnYmJkZXYn LCAnYnVzX3ZkZXYnLCAncmluZycsICdwY2knLCAnYnVzX3BjaSddDQo+ID4+Pg0KPiA+Pj4gIHNv dXJjZXMgPSBmaWxlcygncnRlX2FjYzEwMF9wbWQuYycpDQo+ID4+PiArDQo+ID4+PiAraW5zdGFs bF9oZWFkZXJzKCdydGVfYWNjMTAwX2NmZy5oJykNCj4gPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX2NmZy5oDQo+ID4+PiBiL2RyaXZlcnMvYmFzZWJh bmQvYWNjMTAwL3J0ZV9hY2MxMDBfY2ZnLmgNCj4gPj4+IGluZGV4IDczYmJlMzYuLjdmNTIzYmMg MTAwNjQ0DQo+ID4+PiAtLS0gYS9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX2Nm Zy5oDQo+ID4+PiArKysgYi9kcml2ZXJzL2Jhc2ViYW5kL2FjYzEwMC9ydGVfYWNjMTAwX2NmZy5o DQo+ID4+PiBAQCAtODksNiArODksMjMgQEAgc3RydWN0IGFjYzEwMF9jb25mIHsNCj4gPj4+ICAJ c3RydWN0IHJ0ZV9hcmJpdHJhdGlvbl90IGFyYl9kbF81Z1tSVEVfQUNDMTAwX05VTV9WRlNdOyAg fTsNCj4gPj4+DQo+ID4+PiArLyoqDQo+ID4+PiArICogQ29uZmlndXJlIGEgQUNDMTAwIGRldmlj ZQ0KPiA+Pj4gKyAqDQo+ID4+PiArICogQHBhcmFtIGRldl9uYW1lDQo+ID4+PiArICogICBUaGUg bmFtZSBvZiB0aGUgZGV2aWNlLiBUaGlzIGlzIHRoZSBzaG9ydCBmb3JtIG9mIFBDSSBCREYsIGUu Zy4NCj4gMDA6MDEuMC4NCj4gPj4+ICsgKiAgIEl0IGNhbiBhbHNvIGJlIHJldHJpZXZlZCBmb3Ig YSBiYmRldiBkZXZpY2UgZnJvbSB0aGUgZGV2X25hbWUgZmllbGQNCj4gaW4NCj4gPj4gdGhlDQo+ ID4+PiArICogICBydGVfYmJkZXZfaW5mbyBzdHJ1Y3R1cmUgcmV0dXJuZWQgYnkgcnRlX2JiZGV2 X2luZm9fZ2V0KCkuDQo+ID4+PiArICogQHBhcmFtIGNvbmYNCj4gPj4+ICsgKiAgIENvbmZpZ3Vy YXRpb24gdG8gYXBwbHkgdG8gQUNDMTAwIEhXLg0KPiA+Pj4gKyAqDQo+ID4+PiArICogQHJldHVy bg0KPiA+Pj4gKyAqICAgWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJl Lg0KPiA+Pj4gKyAqLw0KPiA+Pj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+Pj4gK2ludA0KPiA+ Pj4gK2FjYzEwMF9jb25maWd1cmUoY29uc3QgY2hhciAqZGV2X25hbWUsIHN0cnVjdCBhY2MxMDBf Y29uZiAqY29uZik7DQo+ID4+PiArDQo+ID4+PiAgI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4+PiAg fQ0KPiA+Pj4gICNlbmRpZg0KPiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZWJhbmQvYWNj MTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4gPj4+IGIvZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAvcnRl X2FjYzEwMF9wbWQuYw0KPiA+Pj4gaW5kZXggMzU4OTgxNC4uYjUwZGQzMiAxMDA2NDQNCj4gPj4+ IC0tLSBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4gPj4+ICsr KyBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9hY2MxMDBfcG1kLmMNCj4gPj4+IEBAIC04 NSw2ICs4NSwyNiBAQA0KPiA+Pj4NCj4gPj4+ICBlbnVtIHtVTF80RyA9IDAsIFVMXzVHLCBETF80 RywgRExfNUcsIE5VTV9BQ0N9Ow0KPiA+Pj4NCj4gPj4+ICsvKiBSZXR1cm4gdGhlIGFjY2VsZXJh dG9yIGVudW0gZm9yIGEgUXVldWUgR3JvdXAgSW5kZXggKi8gc3RhdGljDQo+ID4+PiAraW5saW5l IGludCBhY2NGcm9tUWdpZChpbnQgcWdfaWR4LCBjb25zdCBzdHJ1Y3QgYWNjMTAwX2NvbmYNCj4g Pj4+ICsqYWNjMTAwX2NvbmYpIHsNCj4gPj4+ICsJaW50IGFjY1FnW0FDQzEwMF9OVU1fUUdSUFNd Ow0KPiA+Pj4gKwlpbnQgTnVtUUdyb3Vwc1BlckZuW05VTV9BQ0NdOw0KPiA+Pj4gKwlpbnQgYWNj LCBxZ0lkeCwgcWdJbmRleCA9IDA7DQo+ID4+PiArCWZvciAocWdJZHggPSAwOyBxZ0lkeCA8IEFD QzEwMF9OVU1fUUdSUFM7IHFnSWR4KyspDQo+ID4+PiArCQlhY2NRZ1txZ0lkeF0gPSAwOw0KPiA+ Pj4gKwlOdW1RR3JvdXBzUGVyRm5bVUxfNEddID0gYWNjMTAwX2NvbmYtPnFfdWxfNGcubnVtX3Fn cm91cHM7DQo+ID4+PiArCU51bVFHcm91cHNQZXJGbltVTF81R10gPSBhY2MxMDBfY29uZi0+cV91 bF81Zy5udW1fcWdyb3VwczsNCj4gPj4+ICsJTnVtUUdyb3Vwc1BlckZuW0RMXzRHXSA9IGFjYzEw MF9jb25mLT5xX2RsXzRnLm51bV9xZ3JvdXBzOw0KPiA+Pj4gKwlOdW1RR3JvdXBzUGVyRm5bRExf NUddID0gYWNjMTAwX2NvbmYtPnFfZGxfNWcubnVtX3Fncm91cHM7DQo+ID4+PiArCWZvciAoYWNj ID0gVUxfNEc7ICBhY2MgPCBOVU1fQUNDOyBhY2MrKykNCj4gPj4+ICsJCWZvciAocWdJZHggPSAw OyBxZ0lkeCA8IE51bVFHcm91cHNQZXJGblthY2NdOyBxZ0lkeCsrKQ0KPiA+Pj4gKwkJCWFjY1Fn W3FnSW5kZXgrK10gPSBhY2M7DQo+ID4+IFRoaXMgbG9va3MgaW5lZmZpY2llbnQsIGlzIHRoZXJl IGEgd2F5IHRoaXMgY291bGQgYmUgY2FsY3VsYXRlZA0KPiA+PiB3aXRob3V0IGZpbGxpbmcgYXJy YXlzIHRvDQo+ID4+DQo+ID4+IGFjY2VzcyAxIHZhbHVlID8NCj4gPiBUaGF0IGlzIG5vdCB0aW1l IGNyaXRpY2FsLCBhbmQgdGhlIHNhbWUgY29tbW9uIGNvZGUgaXMgcnVuIGVhY2ggdGltZS4NCj4g b2sNCj4gPg0KPiA+Pj4gKwlhY2MgPSBhY2NRZ1txZ19pZHhdOw0KPiA+Pj4gKwlyZXR1cm4gYWNj Ow0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICAvKiBSZXR1cm4gdGhlIHF1ZXVlIHRvcG9sb2d5 IGZvciBhIFF1ZXVlIEdyb3VwIEluZGV4ICovICBzdGF0aWMNCj4gPj4+IGlubGluZSB2b2lkICBx dG9wRnJvbUFjYyhzdHJ1Y3QgcnRlX3FfdG9wb2xvZ3lfdCAqKnF0b3AsIGludA0KPiA+Pj4gYWNj X2VudW0sIEBAIC0xMTMsNiArMTMzLDMwIEBADQo+ID4+PiAgCSpxdG9wID0gcF9xdG9wOw0KPiA+ Pj4gIH0NCj4gPj4+DQo+ID4+PiArLyogUmV0dXJuIHRoZSBBUSBkZXB0aCBmb3IgYSBRdWV1ZSBH cm91cCBJbmRleCAqLyBzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2FxRGVwdGgoaW50IHFnX2lk eCwgc3RydWN0IGFjYzEwMF9jb25mICphY2MxMDBfY29uZikgew0KPiA+Pj4gKwlzdHJ1Y3QgcnRl X3FfdG9wb2xvZ3lfdCAqcV90b3AgPSBOVUxMOw0KPiA+Pj4gKwlpbnQgYWNjX2VudW0gPSBhY2NG cm9tUWdpZChxZ19pZHgsIGFjYzEwMF9jb25mKTsNCj4gPj4+ICsJcXRvcEZyb21BY2MoJnFfdG9w LCBhY2NfZW51bSwgYWNjMTAwX2NvbmYpOw0KPiA+Pj4gKwlpZiAodW5saWtlbHkocV90b3AgPT0g TlVMTCkpDQo+ID4+PiArCQlyZXR1cm4gMDsNCj4gPj4gVGhpcyBlcnJvciBpcyBub3QgaGFuZGxl ZCB3ZWxsIGJlIHRoZSBjYWxsZXJzLg0KPiA+Pg0KPiA+PiBhcU51bSBpcyBzaW1pbGFyLg0KPiA+ IFRoaXMgZmFpbHMgaW4gYSBjb25zaXN0ZW50IGJhc2lzLCBieSBoYXZpbmcgbm90IHF1ZXVlIGF2 YWlsYWJsZSBhbmQgaGFuZGxpbmcNCj4gdGhpcyBhcyB0aGUgZGVmYXVsdCBjYXNlLg0KPiBvaw0K PiA+DQo+ID4+PiArCXJldHVybiBxX3RvcC0+YXFfZGVwdGhfbG9nMjsNCj4gPj4+ICt9DQo+ID4+ PiArDQo+ID4+PiArLyogUmV0dXJuIHRoZSBBUSBkZXB0aCBmb3IgYSBRdWV1ZSBHcm91cCBJbmRl eCAqLyBzdGF0aWMgaW5saW5lIGludA0KPiA+Pj4gK2FxTnVtKGludCBxZ19pZHgsIHN0cnVjdCBh Y2MxMDBfY29uZiAqYWNjMTAwX2NvbmYpIHsNCj4gPj4+ICsJc3RydWN0IHJ0ZV9xX3RvcG9sb2d5 X3QgKnFfdG9wID0gTlVMTDsNCj4gPj4+ICsJaW50IGFjY19lbnVtID0gYWNjRnJvbVFnaWQocWdf aWR4LCBhY2MxMDBfY29uZik7DQo+ID4+PiArCXF0b3BGcm9tQWNjKCZxX3RvcCwgYWNjX2VudW0s IGFjYzEwMF9jb25mKTsNCj4gPj4+ICsJaWYgKHVubGlrZWx5KHFfdG9wID09IE5VTEwpKQ0KPiA+ Pj4gKwkJcmV0dXJuIDA7DQo+ID4+PiArCXJldHVybiBxX3RvcC0+bnVtX2Fxc19wZXJfZ3JvdXBz Ow0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICBzdGF0aWMgdm9pZA0KPiA+Pj4gIGluaXRRVG9w KHN0cnVjdCBhY2MxMDBfY29uZiAqYWNjMTAwX2NvbmYpICB7IEBAIC00MTc3LDMgKzQyMjEsNDY0 DQo+ID4+PiBAQCBzdGF0aWMgaW50IGFjYzEwMF9wY2lfcmVtb3ZlKHN0cnVjdCBydGVfcGNpX2Rl dmljZSAqcGNpX2RldikNCj4gPj4+IFJURV9QTURfUkVHSVNURVJfUENJX1RBQkxFKEFDQzEwMFBG X0RSSVZFUl9OQU1FLA0KPiA+Pj4gcGNpX2lkX2FjYzEwMF9wZl9tYXApOw0KPiA+PiBSVEVfUE1E X1JFR0lTVEVSX1BDSShBQ0MxMDBWRl9EUklWRVJfTkFNRSwNCj4gPj4+IGFjYzEwMF9wY2lfdmZf ZHJpdmVyKTsNCj4gPj4+IFJURV9QTURfUkVHSVNURVJfUENJX1RBQkxFKEFDQzEwMFZGX0RSSVZF Ul9OQU1FLA0KPiA+Pj4gcGNpX2lkX2FjYzEwMF92Zl9tYXApOw0KPiA+Pj4gKw0KPiA+Pj4gKy8q DQo+ID4+PiArICogSW1wbGVtZW50YXRpb24gdG8gZml4IHRoZSBwb3dlciBvbiBzdGF0dXMgb2Yg c29tZSA1R1VMIGVuZ2luZXMNCj4gPj4+ICsgKiBUaGlzIHJlcXVpcmVzIERNQSBwZXJtaXNzaW9u IGlmIHBvcnRlZCBvdXRzaWRlIERQREsNCj4gPj4gVGhpcyBzb3VuZHMgbGlrZSBhIHdvcmthcm91 bmQsIGNhbiBtb3JlIGRldGFpbCBiZSBhZGRlZCBoZXJlID8NCj4gPiBUaGVyZSBhcmUgY29tbWVu dHMgdGhyb3VnaCB0aGUgY29kZSBJIGJlbGlldmU6DQo+ID4gICAtIC8qIERldGVjdCBlbmdpbmVz IGluIHVuZGVmaW5lZCBzdGF0ZSAqLw0KPiA+ICAgLSAvKiBGb3JjZSBlYWNoIGVuZ2luZSB3aGlj aCBpcyBpbiB1bnNwZWNpZmllZCBzdGF0ZSAqLw0KPiA+ICAgLSAvKiBSZXNldCBMRFBDIENvcmVz ICovDQo+ID4gICAtIC8qIENoZWNrIGVuZ2luZSBwb3dlci1vbiBzdGF0dXMgYWdhaW4gKi8gRG8g eW91IGJlbGlldmUgdGhpcyBpcyBub3QNCj4gZXhwbGljaXQgZW5vdWdoLiBQb3dlci1vbiBzdGF0 dXMgbWF5IGJlIGluIGFuIHVuZGVmaW5lZCBzdGF0ZSBoZW5jZSB0aGlzDQo+IGVuZ2luZSBhcmUg YXZ0aXZhdGUgd2l0aCBkdW1teSBwYXlsb2FkIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZSBpbiBhDQo+ IHByZWRpY2FibGUgc3RhdGUgb25jZSBjb25maWd1cmF0aW9uIGlzIGRvbmUuDQo+IA0KPiBZZXMs IG5vdCBleHBsaWNpdCBlbm91Z2guIFRoZXkgZG8gbm90IHNheSBpdCBpcyBhIHdvcmthcm91bmQg c28gc29tZW9uZSBlbHNlDQo+IHdvdWxkIG5vdCBrbm93IHRoYXQNCj4gDQo+IHRoaXMgaXMgbmVl ZGVkIG9yIGlzIGxpa2VseSBuZWVkcyBhZGp1c3RpbmcgaW4gdGhlIGZ1dHVyZS7CoCBNYXliZSBj aGFuZ2UNCj4gDQo+IC8qIENoZWNrIGVuZ2luZSBwb3dlci1vbiBzdGF0dXMgYWdhaW4gKi8gdG8N Cj4gDQo+IC8qDQo+IA0KPiDCoCogUG93ZXItb24gc3RhdHVzIG1heSBiZSBpbiBhbiB1bmRlZmlu ZWQgc3RhdGUuDQo+IA0KPiDCoCogQWN0aXZlIHRoaXMgZW5naW5lIHdpdGggYSBkdW1teSBwYXls b2FkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMNCj4gZGVmaW5lZC4NCj4gDQo+IMKgKi8NCj4g DQoNCk9LIEkgd2lsbCBhZGQgYSBiaXQgbW9yZSBpbiBjb21tZW50cy4gVGhhbmtzDQoNCg0KPiBU b20NCj4gDQo+ID4+PiArICovDQo+ID4+PiArc3RhdGljIHZvaWQNCj4gPj4+ICtwb3dlcm9uX2Ns ZWFudXAoc3RydWN0IHJ0ZV9iYmRldiAqYmJkZXYsIHN0cnVjdCBhY2MxMDBfZGV2aWNlICpkLA0K PiA+Pj4gKwkJc3RydWN0IGFjYzEwMF9jb25mICpjb25mKQ0KPiA+Pj4gK3sNCj4gPj4+ICsJaW50 IGksIHRlbXBsYXRlX2lkeCwgcWdfaWR4Ow0KPiA+Pj4gKwl1aW50MzJfdCBhZGRyZXNzLCBzdGF0 dXMsIHBheWxvYWQ7DQo+ID4+PiArCXByaW50ZigiTmVlZCB0byBjbGVhciBwb3dlci1vbiA1R1VM IHN0YXR1cyBpbiBpbnRlcm5hbCBtZW1vcnlcbiIpOw0KPiA+Pj4gKwkvKiBSZXNldCBMRFBDIENv cmVzICovDQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBBQ0MxMDBfRU5HSU5FU19NQVg7IGkrKykN Cj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUoZCwgSFdQZkZlY1VsNWdDbnRybFJlZyArDQo+ID4+ PiArCQkJCUFDQzEwMF9FTkdJTkVfT0ZGU0VUICogaSwNCj4gPj4gQUNDMTAwX1JFU0VUX0hJKTsN Cj4gPj4+ICsJdXNsZWVwKExPTkdfV0FJVCk7DQo+ID4+PiArCWZvciAoaSA9IDA7IGkgPCBBQ0Mx MDBfRU5HSU5FU19NQVg7IGkrKykNCj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUoZCwgSFdQZkZl Y1VsNWdDbnRybFJlZyArDQo+ID4+PiArCQkJCUFDQzEwMF9FTkdJTkVfT0ZGU0VUICogaSwNCj4g Pj4gQUNDMTAwX1JFU0VUX0xPKTsNCj4gPj4+ICsJdXNsZWVwKExPTkdfV0FJVCk7DQo+ID4+PiAr CS8qIFByZXBhcmUgZHVtbXkgd29ya2xvYWQgKi8NCj4gPj4+ICsJYWxsb2NfMng2NG1iX3N3X3Jp bmdzX21lbShiYmRldiwgZCwgMCk7DQo+ID4+PiArCS8qIFNldCBiYXNlIGFkZHJlc3NlcyAqLw0K PiA+Pj4gKwl1aW50MzJfdCBwaHlzX2hpZ2ggPSAodWludDMyX3QpKGQtPnN3X3JpbmdzX3BoeXMg Pj4gMzIpOw0KPiA+Pj4gKwl1aW50MzJfdCBwaHlzX2xvdyAgPSAodWludDMyX3QpKGQtPnN3X3Jp bmdzX3BoeXMgJg0KPiA+Pj4gKwkJCX4oQUNDMTAwX1NJWkVfNjRNQllURS0xKSk7DQo+ID4+PiAr CWFjYzEwMF9yZWdfd3JpdGUoZCwgSFdQZkRtYUZlYzVHdWxEZXNjQmFzZUhpUmVnVmYsDQo+ID4+ IHBoeXNfaGlnaCk7DQo+ID4+PiArCWFjYzEwMF9yZWdfd3JpdGUoZCwgSFdQZkRtYUZlYzVHdWxE ZXNjQmFzZUxvUmVnVmYsIHBoeXNfbG93KTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogRGVzY3JpcHRv ciBmb3IgYSBkdW1teSA1R1VMIGNvZGUgYmxvY2sgcHJvY2Vzc2luZyovDQo+ID4+PiArCXVuaW9u IGFjYzEwMF9kbWFfZGVzYyAqZGVzYyA9IE5VTEw7DQo+ID4+PiArCWRlc2MgPSBkLT5zd19yaW5n czsNCj4gPj4+ICsJZGVzYy0+cmVxLmRhdGFfcHRyc1swXS5hZGRyZXNzID0gZC0+c3dfcmluZ3Nf cGh5cyArDQo+ID4+PiArCQkJQUNDMTAwX0RFU0NfRkNXX09GRlNFVDsNCj4gPj4+ICsJZGVzYy0+ cmVxLmRhdGFfcHRyc1swXS5ibGVuID0gQUNDMTAwX0ZDV19MRF9CTEVOOw0KPiA+Pj4gKwlkZXNj LT5yZXEuZGF0YV9wdHJzWzBdLmJsa2lkID0gQUNDMTAwX0RNQV9CTEtJRF9GQ1c7DQo+ID4+PiAr CWRlc2MtPnJlcS5kYXRhX3B0cnNbMF0ubGFzdCA9IDA7DQo+ID4+PiArCWRlc2MtPnJlcS5kYXRh X3B0cnNbMF0uZG1hX2V4dCA9IDA7DQo+ID4+PiArCWRlc2MtPnJlcS5kYXRhX3B0cnNbMV0uYWRk cmVzcyA9IGQtPnN3X3JpbmdzX3BoeXMgKyA1MTI7DQo+ID4+PiArCWRlc2MtPnJlcS5kYXRhX3B0 cnNbMV0uYmxraWQgPSBBQ0MxMDBfRE1BX0JMS0lEX0lOOw0KPiA+Pj4gKwlkZXNjLT5yZXEuZGF0 YV9wdHJzWzFdLmxhc3QgPSAxOw0KPiA+Pj4gKwlkZXNjLT5yZXEuZGF0YV9wdHJzWzFdLmRtYV9l eHQgPSAwOw0KPiA+Pj4gKwlkZXNjLT5yZXEuZGF0YV9wdHJzWzFdLmJsZW4gPSA0NDsNCj4gPj4+ ICsJZGVzYy0+cmVxLmRhdGFfcHRyc1syXS5hZGRyZXNzID0gZC0+c3dfcmluZ3NfcGh5cyArIDEw MjQ7DQo+ID4+PiArCWRlc2MtPnJlcS5kYXRhX3B0cnNbMl0uYmxraWQgPSBBQ0MxMDBfRE1BX0JM S0lEX09VVF9FTkM7DQo+ID4+PiArCWRlc2MtPnJlcS5kYXRhX3B0cnNbMl0ubGFzdCA9IDE7DQo+ ID4+PiArCWRlc2MtPnJlcS5kYXRhX3B0cnNbMl0uZG1hX2V4dCA9IDA7DQo+ID4+PiArCWRlc2Mt PnJlcS5kYXRhX3B0cnNbMl0uYmxlbiA9IDU7DQo+ID4+PiArCS8qIER1bW15IEZDVyAqLw0KPiA+ Pj4gKwlkZXNjLT5yZXEuZmN3X2xkLkZDV3ZlcnNpb24gPSBBQ0MxMDBfRkNXX1ZFUjsNCj4gPj4+ ICsJZGVzYy0+cmVxLmZjd19sZC5xbSA9IDE7DQo+ID4+PiArCWRlc2MtPnJlcS5mY3dfbGQubmZp bGxlciA9IDMwOw0KPiA+Pj4gKwlkZXNjLT5yZXEuZmN3X2xkLkJHID0gMiAtIDE7DQo+ID4+PiAr CWRlc2MtPnJlcS5mY3dfbGQuWmMgPSA3Ow0KPiA+Pj4gKwlkZXNjLT5yZXEuZmN3X2xkLm5jYiA9 IDM1MDsNCj4gPj4+ICsJZGVzYy0+cmVxLmZjd19sZC5ybV9lID0gNDsNCj4gPj4+ICsJZGVzYy0+ cmVxLmZjd19sZC5pdG1heCA9IDEwOw0KPiA+Pj4gKwlkZXNjLT5yZXEuZmN3X2xkLmdhaW5faSA9 IDE7DQo+ID4+PiArCWRlc2MtPnJlcS5mY3dfbGQuZ2Fpbl9oID0gMTsNCj4gPj4+ICsNCj4gPj4+ ICsJaW50IGVuZ2luZXNfdG9fcmVzdGFydFtTSUdfVUxfNUdfTEFTVCArIDFdID0gezB9Ow0KPiA+ Pj4gKwlpbnQgbnVtX2ZhaWxlZF9lbmdpbmUgPSAwOw0KPiA+Pj4gKwkvKiBEZXRlY3QgZW5naW5l cyBpbiB1bmRlZmluZWQgc3RhdGUgKi8NCj4gPj4+ICsJZm9yICh0ZW1wbGF0ZV9pZHggPSBTSUdf VUxfNUc7IHRlbXBsYXRlX2lkeCA8PSBTSUdfVUxfNUdfTEFTVDsNCj4gPj4+ICsJCQl0ZW1wbGF0 ZV9pZHgrKykgew0KPiA+Pj4gKwkJLyogQ2hlY2sgZW5naW5lIHBvd2VyLW9uIHN0YXR1cyAqLw0K PiA+Pj4gKwkJYWRkcmVzcyA9IEh3UGZGZWNVbDVnSWJEZWJ1Z1JlZyArDQo+ID4+PiArCQkJCUFD QzEwMF9FTkdJTkVfT0ZGU0VUICogdGVtcGxhdGVfaWR4Ow0KPiA+Pj4gKwkJc3RhdHVzID0gKGFj YzEwMF9yZWdfcmVhZChkLCBhZGRyZXNzKSA+PiA0KSAmIDB4RjsNCj4gPj4+ICsJCWlmIChzdGF0 dXMgPT0gMCkgew0KPiA+Pj4gKwkJCWVuZ2luZXNfdG9fcmVzdGFydFtudW1fZmFpbGVkX2VuZ2lu ZV0gPQ0KPiA+PiB0ZW1wbGF0ZV9pZHg7DQo+ID4+PiArCQkJbnVtX2ZhaWxlZF9lbmdpbmUrKzsN Cj4gPj4+ICsJCX0NCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpbnQgbnVtUXFzQWNjID0g Y29uZi0+cV91bF81Zy5udW1fcWdyb3VwczsNCj4gPj4+ICsJaW50IG51bVFncyA9IGNvbmYtPnFf dWxfNWcubnVtX3Fncm91cHM7DQo+ID4+PiArCXBheWxvYWQgPSAwOw0KPiA+Pj4gKwlmb3IgKHFn X2lkeCA9IG51bVFxc0FjYzsgcWdfaWR4IDwgKG51bVFncyArIG51bVFxc0FjYyk7DQo+ID4+IHFn X2lkeCsrKQ0KPiA+Pj4gKwkJcGF5bG9hZCB8PSAoMSA8PCBxZ19pZHgpOw0KPiA+Pj4gKwkvKiBG b3JjZSBlYWNoIGVuZ2luZSB3aGljaCBpcyBpbiB1bnNwZWNpZmllZCBzdGF0ZSAqLw0KPiA+Pj4g Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZhaWxlZF9lbmdpbmU7IGkrKykgew0KPiA+Pj4gKwkJaW50 IGZhaWxlZF9lbmdpbmUgPSBlbmdpbmVzX3RvX3Jlc3RhcnRbaV07DQo+ID4+PiArCQlwcmludGYo IkZvcmNlIGVuZ2luZSAlZFxuIiwgZmFpbGVkX2VuZ2luZSk7DQo+ID4+PiArCQlmb3IgKHRlbXBs YXRlX2lkeCA9IFNJR19VTF81RzsgdGVtcGxhdGVfaWR4IDw9DQo+ID4+IFNJR19VTF81R19MQVNU Ow0KPiA+Pj4gKwkJCQl0ZW1wbGF0ZV9pZHgrKykgew0KPiA+Pj4gKwkJCWFkZHJlc3MgPSBIV1Bm UW1nckdycFRtcGxhdGVSZWc0SW5keA0KPiA+Pj4gKwkJCQkJKyBCWVRFU19JTl9XT1JEICogdGVt cGxhdGVfaWR4Ow0KPiA+Pj4gKwkJCWlmICh0ZW1wbGF0ZV9pZHggPT0gZmFpbGVkX2VuZ2luZSkN Cj4gPj4+ICsJCQkJYWNjMTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ ICsJCQllbHNlDQo+ID4+PiArCQkJCWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRkcmVzcywgMCk7DQo+ ID4+PiArCQl9DQo+ID4+PiArCQkvKiBSZXNldCBkZXNjcmlwdG9yIGhlYWRlciAqLw0KPiA+Pj4g KwkJZGVzYy0+cmVxLndvcmQwID0gQUNDMTAwX0RNQV9ERVNDX1RZUEU7DQo+ID4+PiArCQlkZXNj LT5yZXEud29yZDEgPSAwOw0KPiA+Pj4gKwkJZGVzYy0+cmVxLndvcmQyID0gMDsNCj4gPj4+ICsJ CWRlc2MtPnJlcS53b3JkMyA9IDA7DQo+ID4+PiArCQlkZXNjLT5yZXEubnVtQ0JzID0gMTsNCj4g Pj4+ICsJCWRlc2MtPnJlcS5tMmRsZW4gPSAyOw0KPiA+Pj4gKwkJZGVzYy0+cmVxLmQybWxlbiA9 IDE7DQo+ID4+PiArCQkvKiBFbnF1ZXVlIHRoZSBjb2RlIGJsb2NrIGZvciBwcm9jZXNzaW5nICov DQo+ID4+PiArCQl1bmlvbiBhY2MxMDBfZW5xdWV1ZV9yZWdfZm10IGVucV9yZXE7DQo+ID4+PiAr CQllbnFfcmVxLnZhbCA9IDA7DQo+ID4+PiArCQllbnFfcmVxLmFkZHJfb2Zmc2V0ID0gQUNDMTAw X0RFU0NfT0ZGU0VUOw0KPiA+Pj4gKwkJZW5xX3JlcS5udW1fZWxlbSA9IDE7DQo+ID4+PiArCQll bnFfcmVxLnJlcV9lbGVtX2FkZHIgPSAwOw0KPiA+Pj4gKwkJcnRlX3dtYigpOw0KPiA+Pj4gKwkJ YWNjMTAwX3JlZ193cml0ZShkLCBIV1BmUW1nckluZ3Jlc3NBcSArIDB4MTAwLA0KPiA+PiBlbnFf cmVxLnZhbCk7DQo+ID4+PiArCQl1c2xlZXAoTE9OR19XQUlUICogMTAwKTsNCj4gPj4+ICsJCWlm IChkZXNjLT5yZXEud29yZDAgIT0gMikNCj4gPj4+ICsJCQlwcmludGYoIkRNQSBSZXNwb25zZSAl IyJQUkl4MzIiXG4iLCBkZXNjLQ0KPiA+Pj4gcmVxLndvcmQwKTsNCj4gPj4+ICsJfQ0KPiA+Pj4g Kw0KPiA+Pj4gKwkvKiBSZXNldCBMRFBDIENvcmVzICovDQo+ID4+PiArCWZvciAoaSA9IDA7IGkg PCBBQ0MxMDBfRU5HSU5FU19NQVg7IGkrKykNCj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUoZCwg SFdQZkZlY1VsNWdDbnRybFJlZyArDQo+ID4+PiArCQkJCUFDQzEwMF9FTkdJTkVfT0ZGU0VUICog aSwNCj4gPj4gQUNDMTAwX1JFU0VUX0hJKTsNCj4gPj4+ICsJdXNsZWVwKExPTkdfV0FJVCk7DQo+ ID4+PiArCWZvciAoaSA9IDA7IGkgPCBBQ0MxMDBfRU5HSU5FU19NQVg7IGkrKykNCj4gPj4+ICsJ CWFjYzEwMF9yZWdfd3JpdGUoZCwgSFdQZkZlY1VsNWdDbnRybFJlZyArDQo+ID4+PiArCQkJCUFD QzEwMF9FTkdJTkVfT0ZGU0VUICogaSwNCj4gPj4gQUNDMTAwX1JFU0VUX0xPKTsNCj4gPj4+ICsJ dXNsZWVwKExPTkdfV0FJVCk7DQo+ID4+PiArCWFjYzEwMF9yZWdfd3JpdGUoZCwgSFdQZkhpNUdI YXJkUmVzZXRSZWcsDQo+ID4+IEFDQzEwMF9SRVNFVF9IQVJEKTsNCj4gPj4+ICsJdXNsZWVwKExP TkdfV0FJVCk7DQo+ID4+PiArCWludCBudW1FbmdpbmVzID0gMDsNCj4gPj4+ICsJLyogQ2hlY2sg ZW5naW5lIHBvd2VyLW9uIHN0YXR1cyBhZ2FpbiAqLw0KPiA+Pj4gKwlmb3IgKHRlbXBsYXRlX2lk eCA9IFNJR19VTF81RzsgdGVtcGxhdGVfaWR4IDw9IFNJR19VTF81R19MQVNUOw0KPiA+Pj4gKwkJ CXRlbXBsYXRlX2lkeCsrKSB7DQo+ID4+PiArCQlhZGRyZXNzID0gSHdQZkZlY1VsNWdJYkRlYnVn UmVnICsNCj4gPj4+ICsJCQkJQUNDMTAwX0VOR0lORV9PRkZTRVQgKiB0ZW1wbGF0ZV9pZHg7DQo+ ID4+PiArCQlzdGF0dXMgPSAoYWNjMTAwX3JlZ19yZWFkKGQsIGFkZHJlc3MpID4+IDQpICYgMHhG Ow0KPiA+Pj4gKwkJYWRkcmVzcyA9IEhXUGZRbWdyR3JwVG1wbGF0ZVJlZzRJbmR4DQo+ID4+PiAr CQkJCSsgQllURVNfSU5fV09SRCAqIHRlbXBsYXRlX2lkeDsNCj4gPj4+ICsJCWlmIChzdGF0dXMg PT0gMSkgew0KPiA+Pj4gKwkJCWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRkcmVzcywgcGF5bG9hZCk7 DQo+ID4+PiArCQkJbnVtRW5naW5lcysrOw0KPiA+Pj4gKwkJfSBlbHNlDQo+ID4+PiArCQkJYWNj MTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCAwKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwlwcmludGYo Ik51bWJlciBvZiA1R1VMIGVuZ2luZXMgJWRcbiIsIG51bUVuZ2luZXMpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwlpZiAoZC0+c3dfcmluZ3NfYmFzZSAhPSBOVUxMKQ0KPiA+Pj4gKwkJcnRlX2ZyZWUoZC0+ c3dfcmluZ3NfYmFzZSk7DQo+ID4+PiArCXVzbGVlcChMT05HX1dBSVQpOw0KPiA+Pj4gK30NCj4g Pj4+ICsNCj4gPj4+ICsvKiBJbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgYSBBQ0MxMDAgZGV2aWNl IHByaW9yIHRvIHJ1bm5pbmcNCj4gPj4+ICtjb25maWd1cmUoKSAqLyBpbnQgYWNjMTAwX2NvbmZp Z3VyZShjb25zdCBjaGFyICpkZXZfbmFtZSwgc3RydWN0DQo+ID4+PiArYWNjMTAwX2NvbmYgKmNv bmYpIHsNCj4gPj4+ICsJcnRlX2JiZGV2X2xvZyhJTkZPLCAiYWNjMTAwX2NvbmZpZ3VyZSIpOw0K PiA+Pj4gKwl1aW50MzJfdCBwYXlsb2FkLCBhZGRyZXNzLCBzdGF0dXM7DQo+ID4+IG1heWJlIHZh bHVlIG9yIGRhdGEgd291bGQgYmUgYSBiZXR0ZXIgdmFyaWFibGUgbmFtZSB0aGFuIHBheWxvYWQu DQo+ID4+DQo+ID4+IHdvdWxkIG1lYW4gY2hhbmdpbmcgYWNjMTAwX3JlZ193cml0ZQ0KPiA+IHRy YW5zcGFyZW50IHRvIG1lLCBidXQgY2FuIGNoYW5nZSBnaXZlbiBEUERLIHVzZXMgdGVybSB2YWx1 ZS4NCj4gPg0KPiA+DQo+ID4+PiArCWludCBxZ19pZHgsIHRlbXBsYXRlX2lkeCwgdmZfaWR4LCBh Y2MsIGk7DQo+ID4+PiArCXN0cnVjdCBydGVfYmJkZXYgKmJiZGV2ID0gcnRlX2JiZGV2X2dldF9u YW1lZF9kZXYoZGV2X25hbWUpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDb21waWxlIHRpbWUgY2hl Y2tzICovDQo+ID4+PiArCVJURV9CVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhY2MxMDBfZG1h X3JlcV9kZXNjKSAhPSAyNTYpOw0KPiA+Pj4gKwlSVEVfQlVJTERfQlVHX09OKHNpemVvZih1bmlv biBhY2MxMDBfZG1hX2Rlc2MpICE9IDI1Nik7DQo+ID4+PiArCVJURV9CVUlMRF9CVUdfT04oc2l6 ZW9mKHN0cnVjdCBhY2MxMDBfZmN3X3RkKSAhPSAyNCk7DQo+ID4+PiArCVJURV9CVUlMRF9CVUdf T04oc2l6ZW9mKHN0cnVjdCBhY2MxMDBfZmN3X3RlKSAhPSAzMik7DQo+ID4+PiArDQo+ID4+PiAr CWlmIChiYmRldiA9PSBOVUxMKSB7DQo+ID4+PiArCQlydGVfYmJkZXZfbG9nKEVSUiwNCj4gPj4+ ICsJCSJJbnZhbGlkIGRldl9uYW1lICglcyksIG9yIGRldmljZSBpcyBub3QgeWV0IGluaXRpYWxp c2VkIiwNCj4gPj4+ICsJCWRldl9uYW1lKTsNCj4gPj4+ICsJCXJldHVybiAtRU5PREVWOw0KPiA+ Pj4gKwl9DQo+ID4+PiArCXN0cnVjdCBhY2MxMDBfZGV2aWNlICpkID0gYmJkZXYtPmRhdGEtPmRl dl9wcml2YXRlOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBTdG9yZSBjb25maWd1cmF0aW9uICovDQo+ ID4+PiArCXJ0ZV9tZW1jcHkoJmQtPmFjYzEwMF9jb25mLCBjb25mLCBzaXplb2YoZC0+YWNjMTAw X2NvbmYpKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogUENJZSBCcmlkZ2UgY29uZmlndXJhdGlvbiAq Lw0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIEh3UGZQY2llR3BleEJyaWRnZUNvbnRyb2ws DQo+ID4+IEFDQzEwMF9DRkdfUENJX0JSSURHRSk7DQo+ID4+PiArCWZvciAoaSA9IDE7IGkgPCAx NzsgaSsrKQ0KPiA+PiAxNyBpcyBhIG1hZ2ljIG51bWJlciwgdXNlIGEgI2RlZmluZQ0KPiA+Pg0K PiA+PiB0aGlzIGlzIGEgZ2VuZXJhbCBpc3N1ZS4NCj4gPiBUaGVzZSBhcmUgb25seSB1c2VkIG9u Y2UgYnV0IHN0aWxsIGFncmVlZC4NCj4gPg0KPiA+Pj4gKwkJYWNjMTAwX3JlZ193cml0ZShkLA0K PiA+Pj4gKw0KPiA+PiAJSHdQZlBjaWVHcGV4QXhpQWRkck1hcHBpbmdXaW5kb3dQZXhCYXNlSGln aA0KPiA+Pj4gKwkJCQkrIGkgKiAxNiwgMCk7DQo+ID4+PiArDQo+ID4+PiArCS8qIFBDSWUgTGlu ayBUcmFpbmlpbmcgYW5kIFN0YXR1cyBTdGF0ZSBNYWNoaW5lICovDQo+ID4+PiArCWFjYzEwMF9y ZWdfd3JpdGUoZCwgSHdQZlBjaWVHcGV4THRzc21TdGF0ZUNudHJsLCAweERGQzAwMDAwKTsNCj4g Pj4+ICsNCj4gPj4+ICsJLyogUHJldmVudCBibG9ja2luZyBBWEkgcmVhZCBvbiBCUkVTUCBmb3Ig QVhJIFdyaXRlICovDQo+ID4+PiArCWFkZHJlc3MgPSBId1BmUGNpZUdwZXhBeGlQaW9Db250cm9s Ow0KPiA+Pj4gKwlwYXlsb2FkID0gQUNDMTAwX0NGR19QQ0lfQVhJOw0KPiA+Pj4gKwlhY2MxMDBf cmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiA1R0RM IFBMTCBwaGFzZSBzaGlmdCAqLw0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIEhXUGZDaGFE bDVnUGxsUGhzaGZ0MCwgMHgxKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogRXhwbGljaXRseSByZWxl YXNpbmcgQVhJIGFzIHRoaXMgbWF5IGJlIHN0b3BwZWQgYWZ0ZXIgUEYgRkxSL0JNRSAqLw0KPiA+ Pj4gKwlhZGRyZXNzID0gSFdQZkRtYUF4aUNvbnRyb2w7DQo+ID4+PiArCXBheWxvYWQgPSAxOw0K PiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKw0K PiA+Pj4gKwkvKiBERFIgQ29uZmlndXJhdGlvbiAqLw0KPiA+Pj4gKwlhZGRyZXNzID0gSFdQZkRk ckJjVGltNjsNCj4gPj4+ICsJcGF5bG9hZCA9IGFjYzEwMF9yZWdfcmVhZChkLCBhZGRyZXNzKTsN Cj4gPj4+ICsJcGF5bG9hZCAmPSAweEZGRkZGRkZCOyAvKiBCaXQgMiAqLyAjaWZkZWYgQUNDMTAw X0REUl9FQ0NfRU5BQkxFDQo+ID4+PiArCXBheWxvYWQgfD0gMHg0Ow0KPiA+Pj4gKyNlbmRpZg0K PiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKwlh ZGRyZXNzID0gSFdQZkRkclBoeURxc0NvdW50TnVtOw0KPiA+Pj4gKyNpZmRlZiBBQ0MxMDBfRERS X0VDQ19FTkFCTEUNCj4gPj4+ICsJcGF5bG9hZCA9IDk7DQo+ID4+PiArI2Vsc2UNCj4gPj4+ICsJ cGF5bG9hZCA9IDg7DQo+ID4+PiArI2VuZGlmDQo+ID4+PiArCWFjYzEwMF9yZWdfd3JpdGUoZCwg YWRkcmVzcywgcGF5bG9hZCk7DQo+ID4+PiArDQo+ID4+PiArCS8qIFNldCBkZWZhdWx0IGRlc2Ny aXB0b3Igc2lnbmF0dXJlICovDQo+ID4+PiArCWFkZHJlc3MgPSBIV1BmRG1hRGVzY3JpcHRvclNp Z25hdHV0dXJlOw0KPiA+Pj4gKwlwYXlsb2FkID0gMDsNCj4gPj4+ICsJYWNjMTAwX3JlZ193cml0 ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogRW5hYmxlIHRoZSBF cnJvciBEZXRlY3Rpb24gaW4gRE1BICovDQo+ID4+PiArCXBheWxvYWQgPSBBQ0MxMDBfQ0ZHX0RN QV9FUlJPUjsNCj4gPj4+ICsJYWRkcmVzcyA9IEhXUGZEbWFFcnJvckRldGVjdGlvbkVuOw0KPiA+ Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKw0KPiA+ Pj4gKwkvKiBBWEkgQ2FjaGUgY29uZmlndXJhdGlvbiAqLw0KPiA+Pj4gKwlwYXlsb2FkID0gQUND MTAwX0NGR19BWElfQ0FDSEU7DQo+ID4+PiArCWFkZHJlc3MgPSBIV1BmRG1hQXhjYWNoZVJlZzsN Cj4gPj4+ICsJYWNjMTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsN Cj4gPj4+ICsJLyogRGVmYXVsdCBETUEgQ29uZmlndXJhdGlvbiAoUW1nciBFbmFibGVkKSAqLw0K PiA+Pj4gKwlhZGRyZXNzID0gSFdQZkRtYUNvbmZpZzBSZWc7DQo+ID4+PiArCXBheWxvYWQgPSAw Ow0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4g KwlhZGRyZXNzID0gSFdQZkRtYVFtYW5lbjsNCj4gPj4+ICsJcGF5bG9hZCA9IDA7DQo+ID4+PiAr CWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRkcmVzcywgcGF5bG9hZCk7DQo+ID4+PiArDQo+ID4+PiAr CS8qIERlZmF1bHQgUkxJTS9BTEVOIGNvbmZpZ3VyYXRpb24gKi8NCj4gPj4+ICsJYWRkcmVzcyA9 IEhXUGZEbWFDb25maWcxUmVnOw0KPiA+Pj4gKwlwYXlsb2FkID0gKDEgPDwgMzEpICsgKDIzIDw8 IDgpICsgKDEgPDwgNikgKyA3Ow0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3Ms IHBheWxvYWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDb25maWd1cmUgRE1BIFFtYW5hZ2VyIGFk ZHJlc3NlcyAqLw0KPiA+Pj4gKwlhZGRyZXNzID0gSFdQZkRtYVFtZ3JBZGRyUmVnOw0KPiA+Pj4g KwlwYXlsb2FkID0gSFdQZlFtZ3JFZ3Jlc3NRdWV1ZXNUZW1wbGF0ZTsNCj4gPj4+ICsJYWNjMTAw X3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogPT09 PT0gUW1nciBDb25maWd1cmF0aW9uID09PT09ICovDQo+ID4+PiArCS8qIENvbmZpZ3VyYXRpb24g b2YgdGhlIEFRdWV1ZSBEZXB0aCBRTUdSX0dSUF8wX0RFUFRIX0xPRzINCj4gPj4gZm9yIFVMICov DQo+ID4+PiArCWludCB0b3RhbFFncyA9IGNvbmYtPnFfdWxfNGcubnVtX3Fncm91cHMgKw0KPiA+ Pj4gKwkJCWNvbmYtPnFfdWxfNWcubnVtX3Fncm91cHMgKw0KPiA+Pj4gKwkJCWNvbmYtPnFfZGxf NGcubnVtX3Fncm91cHMgKw0KPiA+Pj4gKwkJCWNvbmYtPnFfZGxfNWcubnVtX3Fncm91cHM7DQo+ ID4+PiArCWZvciAocWdfaWR4ID0gMDsgcWdfaWR4IDwgdG90YWxRZ3M7IHFnX2lkeCsrKSB7DQo+ ID4+PiArCQlhZGRyZXNzID0gSFdQZlFtZ3JEZXB0aExvZzJHcnAgKw0KPiA+Pj4gKwkJQllURVNf SU5fV09SRCAqIHFnX2lkeDsNCj4gPj4+ICsJCXBheWxvYWQgPSBhcURlcHRoKHFnX2lkeCwgY29u Zik7DQo+ID4+PiArCQlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+ Pj4gKwkJYWRkcmVzcyA9IEhXUGZRbWdyVGhvbGRHcnAgKw0KPiA+Pj4gKwkJQllURVNfSU5fV09S RCAqIHFnX2lkeDsNCj4gPj4+ICsJCXBheWxvYWQgPSAoMSA8PCAxNikgKyAoMSA8PCAoYXFEZXB0 aChxZ19pZHgsIGNvbmYpIC0gMSkpOw0KPiA+Pj4gKwkJYWNjMTAwX3JlZ193cml0ZShkLCBhZGRy ZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBUZW1wbGF0ZSBQ cmlvcml0eSBpbiBpbmNyZW1lbnRhbCBvcmRlciAqLw0KPiA+Pj4gKwlmb3IgKHRlbXBsYXRlX2lk eCA9IDA7IHRlbXBsYXRlX2lkeCA8IEFDQzEwMF9OVU1fVE1QTDsNCj4gPj4+ICsJCQl0ZW1wbGF0 ZV9pZHgrKykgew0KPiA+Pj4gKwkJYWRkcmVzcyA9IEhXUGZRbWdyR3JwVG1wbGF0ZVJlZzBJbmR4 ICsNCj4gPj4+ICsJCUJZVEVTX0lOX1dPUkQgKiAodGVtcGxhdGVfaWR4ICUgOCk7DQo+ID4+PiAr CQlwYXlsb2FkID0gVE1QTF9QUklfMDsNCj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRk cmVzcywgcGF5bG9hZCk7DQo+ID4+PiArCQlhZGRyZXNzID0gSFdQZlFtZ3JHcnBUbXBsYXRlUmVn MUluZHggKw0KPiA+Pj4gKwkJQllURVNfSU5fV09SRCAqICh0ZW1wbGF0ZV9pZHggJSA4KTsNCj4g Pj4+ICsJCXBheWxvYWQgPSBUTVBMX1BSSV8xOw0KPiA+Pj4gKwkJYWNjMTAwX3JlZ193cml0ZShk LCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJCWFkZHJlc3MgPSBIV1BmUW1nckdycFRtcGxh dGVSZWcyaW5keCArDQo+ID4+PiArCQlCWVRFU19JTl9XT1JEICogKHRlbXBsYXRlX2lkeCAlIDgp Ow0KPiA+Pj4gKwkJcGF5bG9hZCA9IFRNUExfUFJJXzI7DQo+ID4+PiArCQlhY2MxMDBfcmVnX3dy aXRlKGQsIGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKwkJYWRkcmVzcyA9IEhXUGZRbWdyR3Jw VG1wbGF0ZVJlZzNJbmR4ICsNCj4gPj4+ICsJCUJZVEVTX0lOX1dPUkQgKiAodGVtcGxhdGVfaWR4 ICUgOCk7DQo+ID4+PiArCQlwYXlsb2FkID0gVE1QTF9QUklfMzsNCj4gPj4+ICsJCWFjYzEwMF9y ZWdfd3JpdGUoZCwgYWRkcmVzcywgcGF5bG9hZCk7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ ICsJYWRkcmVzcyA9IEhXUGZRbWdyR3JwUHJpb3JpdHk7DQo+ID4+PiArCXBheWxvYWQgPSBBQ0Mx MDBfQ0ZHX1FNR1JfSElfUDsNCj4gPj4+ICsJYWNjMTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBw YXlsb2FkKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogVGVtcGxhdGUgQ29uZmlndXJhdGlvbiAqLw0K PiA+Pj4gKwlmb3IgKHRlbXBsYXRlX2lkeCA9IDA7IHRlbXBsYXRlX2lkeCA8IEFDQzEwMF9OVU1f VE1QTDsNCj4gPj4gdGVtcGxhdGVfaWR4KyspIHsNCj4gPj4+ICsJCXBheWxvYWQgPSAwOw0KPiA+ Pj4gKwkJYWRkcmVzcyA9IEhXUGZRbWdyR3JwVG1wbGF0ZVJlZzRJbmR4DQo+ID4+PiArCQkJCSsg QllURVNfSU5fV09SRCAqIHRlbXBsYXRlX2lkeDsNCj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUo ZCwgYWRkcmVzcywgcGF5bG9hZCk7DQo+ID4+PiArCX0NCj4gPj4+ICsJLyogNEdVTCAqLw0KPiA+ Pj4gKwlpbnQgbnVtUWdzID0gY29uZi0+cV91bF80Zy5udW1fcWdyb3VwczsNCj4gPj4+ICsJaW50 IG51bVFxc0FjYyA9IDA7DQo+ID4+PiArCXBheWxvYWQgPSAwOw0KPiA+Pj4gKwlmb3IgKHFnX2lk eCA9IG51bVFxc0FjYzsgcWdfaWR4IDwgKG51bVFncyArIG51bVFxc0FjYyk7DQo+ID4+IHFnX2lk eCsrKQ0KPiA+Pj4gKwkJcGF5bG9hZCB8PSAoMSA8PCBxZ19pZHgpOw0KPiA+Pj4gKwlmb3IgKHRl bXBsYXRlX2lkeCA9IFNJR19VTF80RzsgdGVtcGxhdGVfaWR4IDw9IFNJR19VTF80R19MQVNUOw0K PiA+Pj4gKwkJCXRlbXBsYXRlX2lkeCsrKSB7DQo+ID4+PiArCQlhZGRyZXNzID0gSFdQZlFtZ3JH cnBUbXBsYXRlUmVnNEluZHgNCj4gPj4+ICsJCQkJKyBCWVRFU19JTl9XT1JEKnRlbXBsYXRlX2lk eDsNCj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRkcmVzcywgcGF5bG9hZCk7DQo+ID4+ PiArCX0NCj4gPj4+ICsJLyogNUdVTCAqLw0KPiA+Pj4gKwludW1RcXNBY2MgKz0gbnVtUWdzOw0K PiA+Pj4gKwludW1RZ3MJPSBjb25mLT5xX3VsXzVnLm51bV9xZ3JvdXBzOw0KPiA+Pj4gKwlwYXls b2FkID0gMDsNCj4gPj4+ICsJaW50IG51bUVuZ2luZXMgPSAwOw0KPiA+Pj4gKwlmb3IgKHFnX2lk eCA9IG51bVFxc0FjYzsgcWdfaWR4IDwgKG51bVFncyArIG51bVFxc0FjYyk7DQo+ID4+IHFnX2lk eCsrKQ0KPiA+Pj4gKwkJcGF5bG9hZCB8PSAoMSA8PCBxZ19pZHgpOw0KPiA+Pj4gKwlmb3IgKHRl bXBsYXRlX2lkeCA9IFNJR19VTF81RzsgdGVtcGxhdGVfaWR4IDw9IFNJR19VTF81R19MQVNUOw0K PiA+Pj4gKwkJCXRlbXBsYXRlX2lkeCsrKSB7DQo+ID4+PiArCQkvKiBDaGVjayBlbmdpbmUgcG93 ZXItb24gc3RhdHVzICovDQo+ID4+PiArCQlhZGRyZXNzID0gSHdQZkZlY1VsNWdJYkRlYnVnUmVn ICsNCj4gPj4+ICsJCQkJQUNDMTAwX0VOR0lORV9PRkZTRVQgKiB0ZW1wbGF0ZV9pZHg7DQo+ID4+ PiArCQlzdGF0dXMgPSAoYWNjMTAwX3JlZ19yZWFkKGQsIGFkZHJlc3MpID4+IDQpICYgMHhGOw0K PiA+Pj4gKwkJYWRkcmVzcyA9IEhXUGZRbWdyR3JwVG1wbGF0ZVJlZzRJbmR4DQo+ID4+PiArCQkJ CSsgQllURVNfSU5fV09SRCAqIHRlbXBsYXRlX2lkeDsNCj4gPj4+ICsJCWlmIChzdGF0dXMgPT0g MSkgew0KPiA+Pj4gKwkJCWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRkcmVzcywgcGF5bG9hZCk7DQo+ ID4+PiArCQkJbnVtRW5naW5lcysrOw0KPiA+Pj4gKwkJfSBlbHNlDQo+ID4+PiArCQkJYWNjMTAw X3JlZ193cml0ZShkLCBhZGRyZXNzLCAwKTsNCj4gPj4+ICsJCSNpZiBSVEVfQUNDMTAwX1NJTkdM RV9GRUMgPT0gMQ0KPiA+PiAjaWYgc2hvdWxkIGJlIGF0IHN0YXJ0IG9mIGxpbmUNCj4gPiBvaw0K PiA+DQo+ID4+PiArCQlwYXlsb2FkID0gMDsNCj4gPj4+ICsJCSNlbmRpZg0KPiA+Pj4gKwl9DQo+ ID4+PiArCXByaW50ZigiTnVtYmVyIG9mIDVHVUwgZW5naW5lcyAlZFxuIiwgbnVtRW5naW5lcyk7 DQo+ID4+PiArCS8qIDRHREwgKi8NCj4gPj4+ICsJbnVtUXFzQWNjICs9IG51bVFnczsNCj4gPj4+ ICsJbnVtUWdzCT0gY29uZi0+cV9kbF80Zy5udW1fcWdyb3VwczsNCj4gPj4+ICsJcGF5bG9hZCA9 IDA7DQo+ID4+PiArCWZvciAocWdfaWR4ID0gbnVtUXFzQWNjOyBxZ19pZHggPCAobnVtUWdzICsg bnVtUXFzQWNjKTsNCj4gPj4gcWdfaWR4KyspDQo+ID4+PiArCQlwYXlsb2FkIHw9ICgxIDw8IHFn X2lkeCk7DQo+ID4+PiArCWZvciAodGVtcGxhdGVfaWR4ID0gU0lHX0RMXzRHOyB0ZW1wbGF0ZV9p ZHggPD0gU0lHX0RMXzRHX0xBU1Q7DQo+ID4+PiArCQkJdGVtcGxhdGVfaWR4KyspIHsNCj4gPj4+ ICsJCWFkZHJlc3MgPSBIV1BmUW1nckdycFRtcGxhdGVSZWc0SW5keA0KPiA+Pj4gKwkJCQkrIEJZ VEVTX0lOX1dPUkQqdGVtcGxhdGVfaWR4Ow0KPiA+Pj4gKwkJYWNjMTAwX3JlZ193cml0ZShkLCBh ZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJCSNpZiBSVEVfQUNDMTAwX1NJTkdMRV9GRUMgPT0g MQ0KPiA+Pj4gKwkJCXBheWxvYWQgPSAwOw0KPiA+Pj4gKwkJI2VuZGlmDQo+ID4+PiArCX0NCj4g Pj4+ICsJLyogNUdETCAqLw0KPiA+Pj4gKwludW1RcXNBY2MgKz0gbnVtUWdzOw0KPiA+Pj4gKwlu dW1RZ3MJPSBjb25mLT5xX2RsXzVnLm51bV9xZ3JvdXBzOw0KPiA+Pj4gKwlwYXlsb2FkID0gMDsN Cj4gPj4+ICsJZm9yIChxZ19pZHggPSBudW1RcXNBY2M7IHFnX2lkeCA8IChudW1RZ3MgKyBudW1R cXNBY2MpOw0KPiA+PiBxZ19pZHgrKykNCj4gPj4+ICsJCXBheWxvYWQgfD0gKDEgPDwgcWdfaWR4 KTsNCj4gPj4+ICsJZm9yICh0ZW1wbGF0ZV9pZHggPSBTSUdfRExfNUc7IHRlbXBsYXRlX2lkeCA8 PSBTSUdfRExfNUdfTEFTVDsNCj4gPj4+ICsJCQl0ZW1wbGF0ZV9pZHgrKykgew0KPiA+Pj4gKwkJ YWRkcmVzcyA9IEhXUGZRbWdyR3JwVG1wbGF0ZVJlZzRJbmR4DQo+ID4+PiArCQkJCSsgQllURVNf SU5fV09SRCp0ZW1wbGF0ZV9pZHg7DQo+ID4+PiArCQlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJl c3MsIHBheWxvYWQpOw0KPiA+Pj4gKwkJI2lmIFJURV9BQ0MxMDBfU0lOR0xFX0ZFQyA9PSAxDQo+ ID4+PiArCQlwYXlsb2FkID0gMDsNCj4gPj4+ICsJCSNlbmRpZg0KPiA+Pj4gKwl9DQo+ID4+PiAr DQo+ID4+PiArCS8qIFF1ZXVlIEdyb3VwIEZ1bmN0aW9uIG1hcHBpbmcgKi8NCj4gPj4+ICsJaW50 IHFtYW5fZnVuY19pZFs1XSA9IHswLCAyLCAxLCAzLCA0fTsNCj4gPj4+ICsJYWRkcmVzcyA9IEhX UGZRbWdyR3JwRnVuY3Rpb24wOw0KPiA+Pj4gKwlwYXlsb2FkID0gMDsNCj4gPj4+ICsJZm9yIChx Z19pZHggPSAwOyBxZ19pZHggPCA4OyBxZ19pZHgrKykgew0KPiA+Pj4gKwkJYWNjID0gYWNjRnJv bVFnaWQocWdfaWR4LCBjb25mKTsNCj4gPj4+ICsJCXBheWxvYWQgfD0gcW1hbl9mdW5jX2lkW2Fj Y108PChxZ19pZHggKiA0KTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQs IGFkZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDb25maWd1cmF0aW9uIG9m IHRoZSBBcmJpdHJhdGlvbiBRR3JvdXAgZGVwdGggdG8gMSAqLw0KPiA+Pj4gKwlmb3IgKHFnX2lk eCA9IDA7IHFnX2lkeCA8IHRvdGFsUWdzOyBxZ19pZHgrKykgew0KPiA+Pj4gKwkJYWRkcmVzcyA9 IEhXUGZRbWdyQXJiUURlcHRoR3JwICsNCj4gPj4+ICsJCUJZVEVTX0lOX1dPUkQgKiBxZ19pZHg7 DQo+ID4+PiArCQlwYXlsb2FkID0gMDsNCj4gPj4+ICsJCWFjYzEwMF9yZWdfd3JpdGUoZCwgYWRk cmVzcywgcGF5bG9hZCk7DQo+ID4+PiArCX0NCj4gPj4+ICsNCj4gPj4+ICsJLyogRW5hYmxpbmcg QVF1ZXVlcyB0aHJvdWdoIHRoZSBRdWV1ZSBoaWVyYXJjaHkqLw0KPiA+Pj4gKwlmb3IgKHZmX2lk eCA9IDA7IHZmX2lkeCA8IEFDQzEwMF9OVU1fVkZTOyB2Zl9pZHgrKykgew0KPiA+Pj4gKwkJZm9y IChxZ19pZHggPSAwOyBxZ19pZHggPCBBQ0MxMDBfTlVNX1FHUlBTOyBxZ19pZHgrKykgew0KPiA+ Pj4gKwkJCXBheWxvYWQgPSAwOw0KPiA+Pj4gKwkJCWlmICh2Zl9pZHggPCBjb25mLT5udW1fdmZf YnVuZGxlcyAmJg0KPiA+Pj4gKwkJCQkJcWdfaWR4IDwgdG90YWxRZ3MpDQo+ID4+PiArCQkJCXBh eWxvYWQgPSAoMSA8PCBhcU51bShxZ19pZHgsIGNvbmYpKSAtIDE7DQo+ID4+PiArCQkJYWRkcmVz cyA9IEhXUGZRbWdyQXFFbmFibGVWZg0KPiA+Pj4gKwkJCQkJKyB2Zl9pZHggKiBCWVRFU19JTl9X T1JEOw0KPiA+Pj4gKwkJCXBheWxvYWQgKz0gKHFnX2lkeCA8PCAxNik7DQo+ID4+PiArCQkJYWNj MTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJCX0NCj4gPj4+ICsJ fQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBUaGlzIHBvaW50ZXIgdG8gQVJBTSAoMjU2a0IpIGlzIHNo aWZ0ZWQgYnkgMiAoNEIgcGVyIHJlZ2lzdGVyKSAqLw0KPiA+Pj4gKwl1aW50MzJfdCBhcmFtX2Fk ZHJlc3MgPSAwOw0KPiA+Pj4gKwlmb3IgKHFnX2lkeCA9IDA7IHFnX2lkeCA8IHRvdGFsUWdzOyBx Z19pZHgrKykgew0KPiA+Pj4gKwkJZm9yICh2Zl9pZHggPSAwOyB2Zl9pZHggPCBjb25mLT5udW1f dmZfYnVuZGxlczsgdmZfaWR4KyspIHsNCj4gPj4+ICsJCQlhZGRyZXNzID0gSFdQZlFtZ3JWZkJh c2VBZGRyICsgdmZfaWR4DQo+ID4+PiArCQkJCQkqIEJZVEVTX0lOX1dPUkQgKyBxZ19pZHgNCj4g Pj4+ICsJCQkJCSogQllURVNfSU5fV09SRCAqIDY0Ow0KPiA+Pj4gKwkJCXBheWxvYWQgPSBhcmFt X2FkZHJlc3M7DQo+ID4+PiArCQkJYWNjMTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2Fk KTsNCj4gPj4+ICsJCQkvKiBPZmZzZXQgQVJBTSBBZGRyZXNzIGZvciBuZXh0IG1lbW9yeSBiYW5r DQo+ID4+PiArCQkJICogLSBpbmNyZW1lbnQgb2YgNEINCj4gPj4+ICsJCQkgKi8NCj4gPj4+ICsJ CQlhcmFtX2FkZHJlc3MgKz0gYXFOdW0ocWdfaWR4LCBjb25mKSAqDQo+ID4+PiArCQkJCQkoMSA8 PCBhcURlcHRoKHFnX2lkeCwgY29uZikpOw0KPiA+Pj4gKwkJfQ0KPiA+Pj4gKwl9DQo+ID4+PiAr DQo+ID4+PiArCWlmIChhcmFtX2FkZHJlc3MgPiBXT1JEU19JTl9BUkFNX1NJWkUpIHsNCj4gPj4+ ICsJCXJ0ZV9iYmRldl9sb2coRVJSLCAiQVJBTSBDb25maWd1cmF0aW9uIG5vdCBmaXR0aW5nICVk DQo+ID4+ICVkXG4iLA0KPiA+Pj4gKwkJCQlhcmFtX2FkZHJlc3MsIFdPUkRTX0lOX0FSQU1fU0la RSk7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4g KwkvKiA9PT09IEhJIENvbmZpZ3VyYXRpb24gPT09PSAqLw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBQ cmV2ZW50IEJsb2NrIG9uIFRyYW5zbWl0IEVycm9yICovDQo+ID4+PiArCWFkZHJlc3MgPSBIV1Bm SGlCbG9ja1RyYW5zbWl0T25FcnJvckVuOw0KPiA+Pj4gKwlwYXlsb2FkID0gMDsNCj4gPj4+ICsJ YWNjMTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJLyogUHJldmVu dHMgdG8gZHJvcCBNU0kgKi8NCj4gPj4+ICsJYWRkcmVzcyA9IEhXUGZIaU1zaURyb3BFbmFibGVS ZWc7DQo+ID4+PiArCXBheWxvYWQgPSAwOw0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFk ZHJlc3MsIHBheWxvYWQpOw0KPiA+Pj4gKwkvKiBTZXQgdGhlIFBGIE1vZGUgcmVnaXN0ZXIgKi8N Cj4gPj4+ICsJYWRkcmVzcyA9IEhXUGZIaVBmTW9kZTsNCj4gPj4+ICsJcGF5bG9hZCA9IChjb25m LT5wZl9tb2RlX2VuKSA/IDIgOiAwOw0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJl c3MsIHBheWxvYWQpOw0KPiA+Pj4gKwkvKiBFbmFibGUgRXJyb3IgRGV0ZWN0aW9uIGluIEhXICov DQo+ID4+PiArCWFkZHJlc3MgPSBIV1BmRG1hRXJyb3JEZXRlY3Rpb25FbjsNCj4gPj4+ICsJcGF5 bG9hZCA9IDB4M0Q3Ow0KPiA+Pj4gKwlhY2MxMDBfcmVnX3dyaXRlKGQsIGFkZHJlc3MsIHBheWxv YWQpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBRb1Mgb3ZlcmZsb3cgaW5pdCAqLw0KPiA+Pj4gKwlw YXlsb2FkID0gMTsNCj4gPj4+ICsJYWRkcmVzcyA9IEhXUGZRb3Ntb25BRXZhbE92ZXJmbG93MDsN Cj4gPj4+ICsJYWNjMTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJ YWRkcmVzcyA9IEhXUGZRb3Ntb25CRXZhbE92ZXJmbG93MDsNCj4gPj4+ICsJYWNjMTAwX3JlZ193 cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogSEFSUSBERFIg Q29uZmlndXJhdGlvbiAqLw0KPiA+Pj4gKwl1bnNpZ25lZCBpbnQgZGRyU2l6ZUluTWIgPSA1MTI7 IC8qIEZpeGVkIHRvIDUxMiBNQiBwZXIgVkYgZm9yIG5vdw0KPiA+PiAqLw0KPiA+Pj4gKwlmb3Ig KHZmX2lkeCA9IDA7IHZmX2lkeCA8IGNvbmYtPm51bV92Zl9idW5kbGVzOyB2Zl9pZHgrKykgew0K PiA+Pj4gKwkJYWRkcmVzcyA9IEhXUGZEbWFWZkRkckJhc2VSdyArIHZmX2lkeA0KPiA+Pj4gKwkJ CQkqIDB4MTA7DQo+ID4+PiArCQlwYXlsb2FkID0gKCh2Zl9pZHggKiAoZGRyU2l6ZUluTWIgLyA2 NCkpIDw8IDE2KSArDQo+ID4+PiArCQkJCShkZHJTaXplSW5NYiAtIDEpOw0KPiA+Pj4gKwkJYWNj MTAwX3JlZ193cml0ZShkLCBhZGRyZXNzLCBwYXlsb2FkKTsNCj4gPj4+ICsJfQ0KPiA+Pj4gKwl1 c2xlZXAoTE9OR19XQUlUKTsNCj4gPj4gSXMgc2xlZXAgbmVlZGVkIGhlcmUgPyB0aGUgcmVnX3dy aXRlIGhhcyBvbmUuDQo+ID4gVGhpcyBvbmUgaXMgbmVlZGVkIG9uIHRvcA0KPiA+DQo+ID4+PiAr DQo+ID4+IFNpbmNlIHRoaXMgc2VlbXMgbGlrZSBhIHdvcmthcm91bmQsIGFkZCBhIGNvbW1lbnQg aGVyZS4NCj4gPiBmYWlyIGVub3VnaCwgb2ssIHRoYW5rcw0KPiA+DQo+ID4+IFRvbQ0KPiA+Pg0K PiA+Pj4gKwlpZiAobnVtRW5naW5lcyA8IChTSUdfVUxfNUdfTEFTVCArIDEpKQ0KPiA+Pj4gKwkJ cG93ZXJvbl9jbGVhbnVwKGJiZGV2LCBkLCBjb25mKTsNCj4gPj4+ICsNCj4gPj4+ICsJcnRlX2Ji ZGV2X2xvZ19kZWJ1ZygiUEYgVGlwIGNvbmZpZ3VyYXRpb24gY29tcGxldGUgZm9yICVzIiwNCj4g Pj4gZGV2X25hbWUpOw0KPiA+Pj4gKwlyZXR1cm4gMDsNCj4gPj4+ICt9DQo+ID4+PiBkaWZmIC0t Z2l0DQo+ID4+PiBhL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9wbWRfYmJkZXZfYWNjMTAw X3ZlcnNpb24ubWFwDQo+ID4+PiBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9wbWRfYmJk ZXZfYWNjMTAwX3ZlcnNpb24ubWFwDQo+ID4+PiBpbmRleCA0YTc2ZDFkLi45MWMyMzRkIDEwMDY0 NA0KPiA+Pj4gLS0tIGEvZHJpdmVycy9iYXNlYmFuZC9hY2MxMDAvcnRlX3BtZF9iYmRldl9hY2Mx MDBfdmVyc2lvbi5tYXANCj4gPj4+ICsrKyBiL2RyaXZlcnMvYmFzZWJhbmQvYWNjMTAwL3J0ZV9w bWRfYmJkZXZfYWNjMTAwX3ZlcnNpb24ubWFwDQo+ID4+PiBAQCAtMSwzICsxLDEwIEBADQo+ID4+ PiAgRFBES18yMSB7DQo+ID4+PiAgCWxvY2FsOiAqOw0KPiA+Pj4gIH07DQo+ID4+PiArDQo+ID4+ PiArRVhQRVJJTUVOVEFMIHsNCj4gPj4+ICsJZ2xvYmFsOg0KPiA+Pj4gKw0KPiA+Pj4gKwlhY2Mx MDBfY29uZmlndXJlOw0KPiA+Pj4gKw0KPiA+Pj4gK307DQoNCg==