From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50076.outbound.protection.outlook.com [40.107.5.76]) by dpdk.org (Postfix) with ESMTP id 59CAE1B3B5 for ; Mon, 15 Apr 2019 21:46:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kQJqvlfC4FD6tbZfn7Tl5AtfGKDoG/VSh8ZsDvKQVn4=; b=J6IxYuU/0tqvuPhOHv4v6r4O6nofJMx+BG4q9uMFrzRF31pTQ/0a8GogydYWpKA9+aOdG9tD2VgdI+2bcSkHTujiQcWsjgAXPt7skeDWO6nggPRnpj8kc6PHPi3OnW8pXw26hbwuWUjkPG4qAgnSFsuo2DthCqA3NrjVBLrZ4u8= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.152) by VE1PR08MB4638.eurprd08.prod.outlook.com (10.255.27.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1792.17; Mon, 15 Apr 2019 19:46:28 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177%2]) with mapi id 15.20.1792.018; Mon, 15 Apr 2019 19:46:28 +0000 From: Honnappa Nagarahalli To: "Ananyev, Konstantin" , "paulmck@linux.ibm.com" CC: "stephen@networkplumber.org" , "Kovacevic, Marko" , "dev@dpdk.org" , "Gavin Hu (Arm Technology China)" , Dharmik Thakkar , Malvika Gupta , Honnappa Nagarahalli , nd , nd Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism Thread-Index: AQHU78lDsy4W0sThdUi8p6MItiPVFqY2RtWAgADPY4CAANKj8IAFjoGAgAAsN+A= Date: Mon, 15 Apr 2019 19:46:28 +0000 Message-ID: References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-2-honnappa.nagarahalli@arm.com> <20190410181432.GO14111@linux.ibm.com> <20190411152613.GZ14111@linux.ibm.com> <2601191342CEEE43887BDE71AB9772580148A9800A@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB9772580148A9800A@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 73b1de4f-d9a9-4917-89d8-08d6c1db0d6d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600140)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:VE1PR08MB4638; x-ms-traffictypediagnostic: VE1PR08MB4638: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 000800954F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(376002)(346002)(396003)(366004)(189003)(199004)(71190400001)(14454004)(105586002)(2501003)(8936002)(106356001)(8676002)(71200400001)(81166006)(97736004)(68736007)(81156014)(93886005)(52536014)(33656002)(3846002)(5660300002)(6246003)(6116002)(186003)(11346002)(446003)(4326008)(476003)(229853002)(55016002)(53936002)(305945005)(53946003)(7736002)(2906002)(74316002)(102836004)(6436002)(316002)(6506007)(66066001)(256004)(14444005)(478600001)(110136005)(54906003)(72206003)(30864003)(26005)(25786009)(76176011)(486006)(7696005)(99286004)(9686003)(86362001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4638; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: zIOS2MDrUdYCEV/ZgQxVtHb5FOSaTF2TH6OFpp6pPOJQ4BzHrdRCb9WkbtyQOmG+ZcGl5Ce/LIhvz8SR6yXZ6jlNz2uxP+5rJmMazmwt5z32s9CrX5CcRUMTU5MAW4F+4M8RaEUgLgtABX98woHJ1CepmF/IYSXFbrm/es8EV+G0KQaggJQhlqAYvZb7lH7gWAQCgBf4IFhctzIyYmqS8R5/Hwt/uqsnqBORKCKURP3TwtSIYVIhyMKkvgIn+jp8zHeFibeQjpBTz4cv54tObNp0w9pnl/VoQ/rRFKULmNegQGrD2w4BwNvGCauYQoQ4T5fr2aReacqStvP16y/TWtETvimR/Izh0PeqIHvN8hQpTpDgizoMOc1sukVnHw8Mmd/lJHGmToE/txJlX5E+Wld161tuDXpCSse+vId+TVM= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73b1de4f-d9a9-4917-89d8-08d6c1db0d6d X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2019 19:46:28.5404 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4638 Subject: Re: [dpdk-dev] [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism 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: , X-List-Received-Date: Mon, 15 Apr 2019 19:46:30 -0000 PiANCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIFdlZCwgQXByIDEwLCAyMDE5IGF0IDA2OjIwOjA0 QU0gLTA1MDAsIEhvbm5hcHBhIE5hZ2FyYWhhbGxpDQo+ID4gPiB3cm90ZToNCj4gPiA+ID4gPiA+ IEFkZCBSQ1UgbGlicmFyeSBzdXBwb3J0aW5nIHF1aWVzY2VudCBzdGF0ZSBiYXNlZCBtZW1vcnkN Cj4gPiA+ID4gPiA+IHJlY2xhbWF0aW9uDQo+ID4gPiA+ID4gbWV0aG9kLg0KPiA+ID4gPiA+ID4g VGhpcyBsaWJyYXJ5IGhlbHBzIGlkZW50aWZ5IHRoZSBxdWllc2NlbnQgc3RhdGUgb2YgdGhlIHJl YWRlcg0KPiA+ID4gPiA+ID4gdGhyZWFkcyBzbyB0aGF0IHRoZSB3cml0ZXJzIGNhbiBmcmVlIHRo ZSBtZW1vcnkgYXNzb2NpYXRlZA0KPiA+ID4gPiA+ID4gd2l0aCB0aGUgbG9jayBsZXNzIGRhdGEg c3RydWN0dXJlcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEkgZG9uJ3Qgc2VlIGFueSBzaWduIG9m IHJlYWQtc2lkZSBtYXJrZXJzIChyY3VfcmVhZF9sb2NrKCkgYW5kDQo+ID4gPiA+ID4gcmN1X3Jl YWRfdW5sb2NrKCkgaW4gdGhlIExpbnV4IGtlcm5lbCwgdXNlcnNwYWNlIFJDVSwgZXRjLikuDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiBZZXMsIHN0cmljdGx5IHNwZWFraW5nLCB0aGVzZSBhcmUgbm90 IG5lZWRlZCBmb3IgUVNCUiB0bw0KPiA+ID4gPiA+IG9wZXJhdGUsIGJ1dCB0aGV5DQo+ID4gPiA+ IFRoZXNlIEFQSXMgd291bGQgYmUgZW1wdHkgZm9yIFFTQlIuDQo+ID4gPiA+DQo+ID4gPiA+ID4g bWFrZSBpdCB3YXkgZWFzaWVyIHRvIG1haW50YWluIGFuZCBkZWJ1ZyBjb2RlIHVzaW5nIFJDVS4g IEZvcg0KPiA+ID4gPiA+IGV4YW1wbGUsIGdpdmVuIHRoZSByZWFkLXNpZGUgbWFya2VycywgeW91 IGNhbiBjaGVjayBmb3IgZXJyb3JzDQo+ID4gPiA+ID4gbGlrZSBoYXZpbmcgYSBjYWxsIHRvDQo+ ID4gPiA+ID4gcnRlX3JjdV9xc2JyX3F1aWVzY2VudCgpIGluIHRoZSBtaWRkbGUgb2YgYSByZWFk ZXIgcXVpdGUgZWFzaWx5Lg0KPiA+ID4gPiA+IFdpdGhvdXQgdGhvc2UgcmVhZC1zaWRlIG1hcmtl cnMsIGxpZmUgY2FuIGJlIHF1aXRlIGhhcmQgYW5kIHlvdQ0KPiA+ID4gPiA+IHdpbGwgcmVhbGx5 IGhhdGUgeW91cnNlbGYgZm9yIGZhaWxpbmcgdG8gaGF2ZSBwcm92aWRlZCB0aGVtLg0KPiA+ID4g Pg0KPiA+ID4gPiBXYW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3Rvb2QgdGhpcywgZG8geW91IG1l YW4gdGhlIGFwcGxpY2F0aW9uDQo+ID4gPiB3b3VsZCBtYXJrIGJlZm9yZSBhbmQgYWZ0ZXIgYWNj ZXNzaW5nIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgb24NCj4gPiA+IHRoZSByZWFkZXIgc2lk ZT8NCj4gPiA+ID4NCj4gPiA+ID4gcnRlX3JjdV9xc2JyX2xvY2soKQ0KPiA+ID4gPiA8YmVnaW4g YWNjZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4gLi4uDQo+ID4gPiA+IC4uLg0KPiA+ID4gPiA8 ZW5kIGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQo+ID4gPiA+IHJ0ZV9yY3VfcXNicl91 bmxvY2soKQ0KPiA+ID4NCj4gPiA+IFllcywgdGhhdCBpcyB0aGUgaWRlYS4NCj4gPiA+DQo+ID4g PiA+IElmIHNvbWVvbmUgaXMgZGVidWdnaW5nIHRoaXMgY29kZSwgdGhleSBoYXZlIHRvIG1ha2Ug c3VyZSB0aGF0DQo+ID4gPiA+IHRoZXJlIGlzDQo+ID4gPiBhbiB1bmxvY2sgZm9yIGV2ZXJ5IGxv Y2sgYW5kIHRoZXJlIGlzIG5vIGNhbGwgdG8NCj4gPiA+IHJ0ZV9yY3VfcXNicl9xdWllc2NlbnQg aW4gYmV0d2Vlbi4NCj4gPiA+ID4gSXQgc291bmRzIGdvb2QgdG8gbWUuIE9idmlvdXNseSwgdGhl eSB3aWxsIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwNCj4gPiA+ID4gY3ljbGVzDQo+ID4gPiBhcyB3 ZWxsLg0KPiA+ID4gPiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgbXkgdW5kZXJzdGFuZGluZyBpcyBj b3JyZWN0Lg0KPiA+ID4NCj4gPiA+IFllcy4gIEFuZCBpbiBzb21lIHNvcnQgb2YgZGVidWcgbW9k ZSwgeW91IGNvdWxkIGNhcHR1cmUgdGhlIGNvdW50ZXINCj4gPiA+IGF0DQo+ID4gPiBydGVfcmN1 X3FzYnJfbG9jaygpIHRpbWUgYW5kIGNoZWNrIGl0IGF0IHJ0ZV9yY3VfcXNicl91bmxvY2soKSB0 aW1lLg0KPiA+ID4gSWYgdGhlIGNvdW50ZXIgaGFzIGFkdmFuY2VkIHRvbyBmYXIgKG1vcmUgdGhh biBvbmUsIGlmIEkgYW0gbm90IHRvbw0KPiA+ID4gY29uZnVzZWQpIHRoZXJlIGlzIGEgYnVnLiAg QWxzbyBpbiBkZWJ1ZyBtb2RlLCB5b3UgY291bGQgaGF2ZQ0KPiA+ID4gcnRlX3JjdV9xc2JyX2xv Y2soKSBpbmNyZW1lbnQgYSBwZXItdGhyZWFkIGNvdW50ZXIgYW5kDQo+IHJ0ZV9yY3VfcXNicl91 bmxvY2soKSBkZWNyZW1lbnQgaXQuDQo+ID4gPiBJZiB0aGUgY291bnRlciBpcyBub24temVybyBh dCBhIHF1aWVzY2VudCBzdGF0ZSwgdGhlcmUgaXMgYSBidWcuDQo+ID4gPiBBbmQgc28gb24uDQo+ ID4gPg0KPiA+IEFkZGVkIHRoaXMgaW4gVjUNCj4gPg0KPiA+IDxzbmlwPg0KPiA+DQo+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiArLyogR2V0IHRoZSBtZW1vcnkgc2l6ZSBvZiBRU0JSIHZhcmlh YmxlICovIHNpemVfdA0KPiA+ID4gPiA+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBydGVfcmN1X3Fz YnJfZ2V0X21lbXNpemUodWludDMyX3QNCj4gPiA+IG1heF90aHJlYWRzKSB7DQo+ID4gPiA+ID4g PiArCXNpemVfdCBzejsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJaWYgKG1heF90aHJl YWRzID09IDApIHsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJjdV9sb2df dHlwZSwNCj4gPiA+ID4gPiA+ICsJCQkiJXMoKTogSW52YWxpZCBtYXhfdGhyZWFkcyAldVxuIiwN Cj4gPiA+ID4gPiA+ICsJCQlfX2Z1bmNfXywgbWF4X3RocmVhZHMpOw0KPiA+ID4gPiA+ID4gKwkJ cnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJcmV0dXJu IDE7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJc3ogPSBz aXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicik7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAr CS8qIEFkZCB0aGUgc2l6ZSBvZiBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheSAqLw0KPiA+ ID4gPiA+ID4gKwlzeiArPSBzaXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9jbnQpICogbWF4X3Ro cmVhZHM7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCS8qIEFkZCB0aGUgc2l6ZSBvZiB0 aGUgcmVnaXN0ZXJlZCB0aHJlYWQgSUQgYml0bWFwIGFycmF5ICovDQo+ID4gPiA+ID4gPiArCXN6 ICs9IFJURV9RU0JSX1RIUklEX0FSUkFZX1NJWkUobWF4X3RocmVhZHMpOw0KPiA+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ID4gKwlyZXR1cm4gUlRFX0FMSUdOKHN6LCBSVEVfQ0FDSEVfTElORV9TSVpF KTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEdpdmVuIHRoYXQgeW91IGFsaWduIGhlcmUsIHNob3Vs ZCB5b3UgYWxzbyBhbGlnbiBpbiB0aGUgZWFybGllcg0KPiA+ID4gPiA+IHN0ZXBzIGluIHRoZSBj b21wdXRhdGlvbiBvZiBzej8NCj4gPiA+ID4NCj4gPiA+ID4gQWdyZWUuIEkgd2lsbCByZW1vdmUg dGhlIGFsaWduIGhlcmUgYW5kIGtlZXAgdGhlIGVhcmxpZXIgb25lIGFzDQo+ID4gPiA+IHRoZSBp bnRlbnQNCj4gPiA+IGlzIHRvIGFsaWduIHRoZSB0aHJlYWQgSUQgYXJyYXkuDQo+ID4gPg0KPiA+ ID4gU291bmRzIGdvb2QhDQo+ID4gQWRkZWQgdGhpcyBpbiBWNQ0KPiA+DQo+ID4gPg0KPiA+ID4g PiA+ID4gK30NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBJbml0aWFsaXplIGEgcXVp ZXNjZW50IHN0YXRlIHZhcmlhYmxlICovIGludA0KPiA+ID4gPiA+ID4gK19fcnRlX2V4cGVyaW1l bnRhbCBydGVfcmN1X3FzYnJfaW5pdChzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LA0KPiA+ID4gdWlu dDMyX3QgbWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gPiA+ICsJc2l6ZV90IHN6Ow0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gPiArCQlydGVf bG9nKFJURV9MT0dfRVJSLCByY3VfbG9nX3R5cGUsDQo+ID4gPiA+ID4gPiArCQkJIiVzKCk6IElu dmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ID4gPiArCQlydGVf ZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gMTsN Cj4gPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlzeiA9IHJ0ZV9y Y3VfcXNicl9nZXRfbWVtc2l6ZShtYXhfdGhyZWFkcyk7DQo+ID4gPiA+ID4gPiArCWlmIChzeiA9 PSAxKQ0KPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4g PiArCS8qIFNldCBhbGwgdGhlIHRocmVhZHMgdG8gb2ZmbGluZSAqLw0KPiA+ID4gPiA+ID4gKwlt ZW1zZXQodiwgMCwgc3opOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gV2UgY2FsY3VsYXRlIHN6IGhl cmUsIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBjYWxsZXIgbXVzdCBhbHNvDQo+ID4gPiA+ID4gY2Fs Y3VsYXRlIGl0IGluIG9yZGVyIHRvIGNvcnJlY3RseSBhbGxvY2F0ZSB0aGUgbWVtb3J5DQo+ID4g PiA+ID4gcmVmZXJlbmNlZCBieSB0aGUgInYiIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24sIHdp dGggYmFkIHRoaW5ncw0KPiA+ID4gPiA+IGhhcHBlbmluZyBpZiB0aGUgdHdvIGNhbGN1bGF0aW9u cyBnZXQgZGlmZmVyZW50IHJlc3VsdHMuICBTaG91bGQNCj4gPiA+ID4gPiAidiIgaW5zdGVhZCBi ZSBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhpcyBzb3J0IG9mDQo+ IHByb2JsZW0/DQo+ID4gPiA+DQo+ID4gPiA+IEVhcmxpZXIgdmVyc2lvbiBhbGxvY2F0ZWQgdGhl IG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4NCj4gPiA+ID4gSG93ZXZlciwgaXQgd2FzDQo+ ID4gPiBkZWNpZGVkIHRvIGdvIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXMgaXQg cHJvdmlkZXMNCj4gPiA+IGZsZXhpYmlsaXR5IGZvciB0aGUgYXBwbGljYXRpb24gdG8gbWFuYWdl IHRoZSBtZW1vcnkgYXMgaXQgc2VlcyBmaXQuDQo+ID4gPiBGb3IgZXg6IGl0IGNvdWxkIGFsbG9j YXRlIHRoaXMgYXMgcGFydCBvZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhDQo+ID4gPiBzaW5nbGUg YWxsb2NhdGlvbi4gVGhpcyBhbHNvIGZhbGxzIGlubGluZSB3aXRoIHNpbWlsYXIgYXBwcm9hY2gg dGFrZW4gaW4NCj4gb3RoZXIgbGlicmFyaWVzLg0KPiA+ID4NCj4gPiA+IFNvIHRoZSBhbGxvY2F0 b3IgQVBJcyB2YXJ5IHRvbyBtdWNoIHRvIGFsbG93IGEgcG9pbnRlciB0byB0aGUNCj4gPiA+IGRl c2lyZWQgYWxsb2NhdG9yIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCBpbj8gIE9yIGRvIHlvdSBhbHNv IHdhbnQgdG8NCj4gPiA+IGFsbG93IHN0YXRpYyBhbGxvY2F0aW9uPyAgSWYgdGhlIGxhdHRlciwg d291bGQgYSBERUZJTkVfUlRFX1JDVV9RU0JSKCkNCj4gYmUgb2YgdXNlPw0KPiA+ID4NCj4gPiBU aGlzIGlzIGRvbmUgdG8gYWxsb3cgZm9yIGFsbG9jYXRpb24gb2YgbWVtb3J5IGZvciBRUyB2YXJp YWJsZSBhcyBwYXJ0DQo+ID4gb2YgYSBhbm90aGVyIGJpZ2dlciBkYXRhIHN0cnVjdHVyZS4gVGhp cyB3aWxsIGhlbHAgaW4gbm90IGZyYWdtZW50aW5nIHRoZQ0KPiBtZW1vcnkuIEZvciBleDoNCj4g Pg0KPiA+IHN0cnVjdCB4eXogew0KPiA+ICAgICBydGVfcmluZyAqcmluZzsNCj4gPiAgICAgcnRl X3JjdV9xc2JyICp2Ow0KPiA+ICAgICBhYmMgKnQ7DQo+ID4gfTsNCj4gPiBzdHJ1Y3QgeHl6IGM7 DQo+ID4NCj4gPiBNZW1vcnkgZm9yIHRoZSBhYm92ZSBzdHJ1Y3R1cmUgY2FuIGJlIGFsbG9jYXRl ZCBpbiBvbmUgY2h1bmsgYnkNCj4gY2FsY3VsYXRpbmcgdGhlIHNpemUgcmVxdWlyZWQuDQo+ID4N Cj4gPiBJbiBzb21lIHVzZSBjYXNlcyBzdGF0aWMgYWxsb2NhdGlvbiBtaWdodCBiZSBlbm91Z2gg YXMgJ21heF90aHJlYWRzJw0KPiA+IG1pZ2h0IGJlIGEgY29tcGlsZSB0aW1lIGNvbnN0YW50LiBJ IGFtIG5vdCBzdXJlIG9uIGhvdyB0byBzdXBwb3J0IGJvdGgNCj4gZHluYW1pYyBhbmQgc3RhdGlj ICdtYXhfdGhyZWFkcycuDQo+IA0KPiBTYW1lIHRob3VnaHQgaGVyZS0gIHdvdWxkIGJlIGdvb2Qg dG8gaGF2ZSBhIHN0YXRpYyBpbml0aWFsaXplcg0KPiAoREVGSU5FX1JURV9SQ1VfUVNCUiksIGJ1 dCB0aGF0IG1lYW5zIG5ldyBjb21waWxlIHRpbWUgbGltaXQNCj4gKCdtYXhfdGhyZWFkcycpIC0g dGhpbmcgdGhhdCB3ZSB0cnkgdG8gYXZvaWQuDQo+IA0KPiA+DQo+ID4gPiA+ID4gPiArCXYtPm1h eF90aHJlYWRzID0gbWF4X3RocmVhZHM7DQo+ID4gPiA+ID4gPiArCXYtPm51bV9lbGVtcyA9IFJU RV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFkcywNCj4gPiA+ID4gPiA+ICsJCQlSVEVfUVNCUl9U SFJJRF9BUlJBWV9FTE1fU0laRSkgLw0KPiA+ID4gPiA+ID4gKwkJCVJURV9RU0JSX1RIUklEX0FS UkFZX0VMTV9TSVpFOw0KPiA+ID4gPiA+ID4gKwl2LT50b2tlbiA9IFJURV9RU0JSX0NOVF9JTklU Ow0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICt9 DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyogUmVnaXN0ZXIgYSByZWFkZXIgdGhyZWFk IHRvIHJlcG9ydCBpdHMgcXVpZXNjZW50IHN0YXRlDQo+ID4gPiA+ID4gPiArICogb24gYSBRUyB2 YXJpYWJsZS4NCj4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICtpbnQgX19ydGVfZXhwZXJp bWVudGFsDQo+ID4gPiA+ID4gPiArcnRlX3JjdV9xc2JyX3RocmVhZF9yZWdpc3RlcihzdHJ1Y3Qg cnRlX3JjdV9xc2JyICp2LCB1bnNpZ25lZA0KPiA+ID4gPiA+ID4gK2ludA0KPiA+ID4gPiA+ID4g K3RocmVhZF9pZCkgew0KPiA+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaWQsIHN1Y2Nlc3M7 DQo+ID4gPiA+ID4gPiArCXVpbnQ2NF90IG9sZF9ibWFwLCBuZXdfYm1hcDsNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsJaWYgKHYgPT0gTlVMTCB8fCB0aHJlYWRfaWQgPj0gdi0+bWF4X3Ro cmVhZHMpIHsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJjdV9sb2dfdHlw ZSwNCj4gPiA+ID4gPiA+ICsJCQkiJXMoKTogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9f ZnVuY19fKTsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4g PiArDQo+ID4gPiA+ID4gPiArCWlkID0gdGhyZWFkX2lkICYgUlRFX1FTQlJfVEhSSURfTUFTSzsN Cj4gPiA+ID4gPiA+ICsJaSA9IHRocmVhZF9pZCA+PiBSVEVfUVNCUl9USFJJRF9JTkRFWF9TSElG VDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJLyogTWFrZSBzdXJlIHRoYXQgdGhlIGNv dW50ZXIgZm9yIHJlZ2lzdGVyZWQgdGhyZWFkcyBkb2VzDQo+IG5vdA0KPiA+ID4gPiA+ID4gKwkg KiBnbyBvdXQgb2Ygc3luYy4gSGVuY2UsIGFkZGl0aW9uYWwgY2hlY2tzIGFyZSByZXF1aXJlZC4N Cj4gPiA+ID4gPiA+ICsJICovDQo+ID4gPiA+ID4gPiArCS8qIENoZWNrIGlmIHRoZSB0aHJlYWQg aXMgYWxyZWFkeSByZWdpc3RlcmVkICovDQo+ID4gPiA+ID4gPiArCW9sZF9ibWFwID0NCj4gX19h dG9taWNfbG9hZF9uKFJURV9RU0JSX1RIUklEX0FSUkFZX0VMTSh2LCBpKSwNCj4gPiA+ID4gPiA+ ICsJCQkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiA+ID4gKwlpZiAob2xkX2JtYXAgJiAx VUwgPDwgaWQpDQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiA+ICsJZG8gew0KPiA+ID4gPiA+ID4gKwkJbmV3X2JtYXAgPSBvbGRfYm1hcCB8ICgxVUwg PDwgaWQpOw0KPiA+ID4gPiA+ID4gKwkJc3VjY2VzcyA9IF9fYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2UoDQo+ID4gPiA+ID4gPiArDQo+IAlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE0odiwgaSksDQo+ ID4gPiA+ID4gPiArCQkJCQkmb2xkX2JtYXAsICZuZXdfYm1hcCwgMCwNCj4gPiA+ID4gPiA+ICsJ CQkJCV9fQVRPTUlDX1JFTEVBU0UsDQo+ID4gPiA+ID4gX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4g PiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCQlpZiAoc3VjY2VzcykNCj4gPiA+ID4gPiA+ICsJCQlf X2F0b21pY19mZXRjaF9hZGQoJnYtPm51bV90aHJlYWRzLA0KPiA+ID4gPiA+ID4gKwkJCQkJCTEs DQo+IF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiA+ID4gKwkJZWxzZSBpZiAob2xkX2JtYXAg JiAoMVVMIDw8IGlkKSkNCj4gPiA+ID4gPiA+ICsJCQkvKiBTb21lb25lIGVsc2UgcmVnaXN0ZXJl ZCB0aGlzIHRocmVhZC4NCj4gPiA+ID4gPiA+ICsJCQkgKiBDb3VudGVyIHNob3VsZCBub3QgYmUg aW5jcmVtZW50ZWQuDQo+ID4gPiA+ID4gPiArCQkJICovDQo+ID4gPiA+ID4gPiArCQkJcmV0dXJu IDA7DQo+ID4gPiA+ID4gPiArCX0gd2hpbGUgKHN1Y2Nlc3MgPT0gMCk7DQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBUaGlzIHdvdWxkIGJlIHNpbXBsZXIgaWYgdGhyZWFkcyB3ZXJlIHJlcXVpcmVkIHRv IHJlZ2lzdGVyDQo+IHRoZW1zZWx2ZXMuDQo+ID4gPiA+ID4gTWF5YmUgeW91IGhhdmUgdXNlIGNh c2VzIHJlcXVpcmluZyByZWdpc3RyYXRpb24gb2Ygb3RoZXINCj4gPiA+ID4gPiB0aHJlYWRzLCBi dXQgdGhpcyBjYXBhYmlsaXR5IGlzIGFkZGluZyBzaWduaWZpY2FudCBjb21wbGV4aXR5LA0KPiA+ ID4gPiA+IHNvIGl0IG1pZ2h0IGJlIHdvcnRoIHNvbWUgdGhvdWdodC4NCj4gPiA+ID4gPg0KPiA+ ID4gPiBJdCB3YXMgc2ltcGxlIGVhcmxpZXIgKF9fYXRvbWljX2ZldGNoX29yKS4gVGhlIGNvbXBs ZXhpdHkgaXMgYWRkZWQNCj4gPiA+ID4gYXMNCj4gPiA+ICdudW1fdGhyZWFkcycgc2hvdWxkIG5v dCBnbyBvdXQgb2Ygc3luYy4NCj4gPiA+DQo+ID4gPiBIbW1tLi4uDQo+ID4gPg0KPiA+ID4gU28g dGhyZWFkcyBhcmUgYWxsb3dlZCB0byByZWdpc3RlciBvdGhlciB0aHJlYWRzPyAgT3IgaXMgdGhl cmUgc29tZQ0KPiA+ID4gb3RoZXIgcmVhc29uIHRoYXQgY29uY3VycmVudCByZWdpc3RyYXRpb24g aXMgcmVxdWlyZWQ/DQo+ID4gPg0KPiA+IFllcywgY29udHJvbCBwbGFuZSB0aHJlYWRzIGNhbiBy ZWdpc3RlciB0aGUgZmFzdCBwYXRoIHRocmVhZHMuIFRob3VnaCwNCj4gPiBJIGFtIG5vdCBzdXJl IGhvdyB1c2VmdWwgaXQgaXMuIEkgZGlkIG5vdCB3YW50IHRvIGFkZCB0aGUgcmVzdHJpY3Rpb24u IEkNCj4gZXhwZWN0IHRoYXQgcmVhZGVyIHRocmVhZHMgd2lsbCByZWdpc3RlciB0aGVtc2VsdmVz LiBUaGUgcmVhZGVyIHRocmVhZHMNCj4gcmVxdWlyZSBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbiBh cyB0aGV5IGFsbCB3aWxsIGJlIHJ1bm5pbmcgaW4gcGFyYWxsZWwuDQo+ID4gSWYgdGhlIHJlcXVp cmVtZW50IG9mIGtlZXBpbmcgdHJhY2sgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzIHJlZ2lzdGVy ZWQNCj4gY3VycmVudGx5IGdvZXMgYXdheSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgc2lt cGxlLg0KPiA+DQo+ID4gPHNuaXA+DQo+ID4NCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ID4gPiA+ID4gYi9saWIvbGlicnRlX3JjdS9y dGVfcmN1X3FzYnIuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+ID4gPiA+ID4gMDAw MDAwMDAwLi5mZjY5NmFlYWINCj4gPiA+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gPiA+ ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oDQo+ID4gPiA+ID4gPiBAQCAtMCww ICsxLDU1NCBAQA0KPiA+ID4gPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt My1DbGF1c2UNCj4gPiA+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggQXJtIExpbWl0ZWQg ICovDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArI2lmbmRlZiBfUlRFX1JDVV9RU0JSX0hf DQo+ID4gPiA+ID4gPiArI2RlZmluZSBfUlRFX1JDVV9RU0JSX0hfDQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiArICogQGZpbGUNCj4gPiA+ID4gPiA+ICsgKiBS VEUgUXVpZXNjZW50IFN0YXRlIEJhc2VkIFJlY2xhbWF0aW9uIChRU0JSKQ0KPiA+ID4gPiA+ID4g KyAqDQo+ID4gPiA+ID4gPiArICogUXVpZXNjZW50IFN0YXRlIChRUykgaXMgYW55IHBvaW50IGlu IHRoZSB0aHJlYWQgZXhlY3V0aW9uDQo+ID4gPiA+ID4gPiArICogd2hlcmUgdGhlIHRocmVhZCBk b2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgZGF0YQ0KPiA+ID4gPiA+ID4gK3N0cnVjdHVy ZQ0KPiA+ID4gPiA+ID4gKyAqIGluIHNoYXJlZCBtZW1vcnkuIFdoaWxlIHVzaW5nIGxvY2stbGVz cyBkYXRhIHN0cnVjdHVyZXMsDQo+ID4gPiA+ID4gPiArdGhlIHdyaXRlcg0KPiA+ID4gPiA+ID4g KyAqIGNhbiBzYWZlbHkgZnJlZSBtZW1vcnkgb25jZSBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhh dmUNCj4gPiA+ID4gPiA+ICtlbnRlcmVkDQo+ID4gPiA+ID4gPiArICogcXVpZXNjZW50IHN0YXRl Lg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVz IHRoZSBhYmlsaXR5IGZvciB0aGUgcmVhZGVycyB0bw0KPiA+ID4gPiA+ID4gK3JlcG9ydCBxdWll c2NlbnQNCj4gPiA+ID4gPiA+ICsgKiBzdGF0ZSBhbmQgZm9yIHRoZSB3cml0ZXJzIHRvIGlkZW50 aWZ5IHdoZW4gYWxsIHRoZSByZWFkZXJzDQo+ID4gPiA+ID4gPiAraGF2ZQ0KPiA+ID4gPiA+ID4g KyAqIGVudGVyZWQgcXVpZXNjZW50IHN0YXRlLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gPiA+ID4gK2V4dGVy biAiQyIgew0KPiA+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g KyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4g PiA+ID4gPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRl X2NvbW1vbi5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+DQo+ID4gPiA+ ID4gPiArI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxydGVf ZGVidWcuaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gK2V4dGVybiBpbnQgcmN1X2xvZ190eXBlOw0KPiA+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ID4gKyNpZiBSVEVfTE9HX0RQX0xFVkVMID49IFJURV9MT0dfREVCVUcgI2Rl ZmluZQ0KPiA+ID4gUkNVX0RQX0xPRyhsZXZlbCwNCj4gPiA+ID4gPiBmbXQsDQo+ID4gPiA+ID4g PiArYXJncy4uLikgXA0KPiA+ID4gPiA+ID4gKwlydGVfbG9nKFJURV9MT0dfICMjIGxldmVsLCBy Y3VfbG9nX3R5cGUsIFwNCj4gPiA+ID4gPiA+ICsJCSIlcygpOiAiIGZtdCAiXG4iLCBfX2Z1bmNf XywgIyMgYXJncykgI2Vsc2UgI2RlZmluZQ0KPiA+ID4gPiA+ID4gK1JDVV9EUF9MT0cobGV2ZWws IGZtdCwgYXJncy4uLikgI2VuZGlmDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyogUmVn aXN0ZXJlZCB0aHJlYWQgSURzIGFyZSBzdG9yZWQgYXMgYSBiaXRtYXAgb2YgNjRiDQo+ID4gPiA+ ID4gPiArZWxlbWVudA0KPiA+ID4gYXJyYXkuDQo+ID4gPiA+ID4gPiArICogR2l2ZW4gdGhyZWFk IGlkIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBpbmRleCBpbnRvIHRoZQ0KPiA+ID4gPiA+ID4g K2FycmF5IGFuZA0KPiA+ID4gPiA+ID4gKyAqIHRoZSBpZCB3aXRoaW4gdGhlIGFycmF5IGVsZW1l bnQuDQo+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArI2RlZmluZSBSVEVfUVNCUl9USFJJ RF9BUlJBWV9FTE1fU0laRSAoc2l6ZW9mKHVpbnQ2NF90KSAqIDgpDQo+ID4gPiA+ID4gI2RlZmlu ZQ0KPiA+ID4gPiA+ID4gK1JURV9RU0JSX1RIUklEX0FSUkFZX1NJWkUobWF4X3RocmVhZHMpIFwN Cj4gPiA+ID4gPiA+ICsJUlRFX0FMSUdOKFJURV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFkcywg XA0KPiA+ID4gPiA+ID4gKwkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJWkUpID4+IDMsDQo+ ID4gPiA+ID4gUlRFX0NBQ0hFX0xJTkVfU0laRSkgI2RlZmluZQ0KPiA+ID4gPiA+ID4gK1JURV9R U0JSX1RIUklEX0FSUkFZX0VMTSh2LCBpKSAoKHVpbnQ2NF90ICopIFwNCj4gPiA+ID4gPiA+ICsJ KChzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCAqKSh2ICsgMSkgKyB2LT5tYXhfdGhyZWFkcykgKyBp KQ0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgUlRFX1FTQlJfVEhSSURfSU5ERVhfU0hJRlQgNiAjZGVm aW5lDQo+ID4gPiBSVEVfUVNCUl9USFJJRF9NQVNLDQo+ID4gPiA+ID4gPiArMHgzZg0KPiA+ID4g PiA+ICNkZWZpbmUNCj4gPiA+ID4gPiA+ICtSVEVfUVNCUl9USFJJRF9JTlZBTElEIDB4ZmZmZmZm ZmYNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBXb3JrZXIgdGhyZWFkIGNvdW50ZXIg Ki8NCj4gPiA+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCB7DQo+ID4gPiA+ID4gPiAr CXVpbnQ2NF90IGNudDsNCj4gPiA+ID4gPiA+ICsJLyoqPCBRdWllc2NlbnQgc3RhdGUgY291bnRl ci4gVmFsdWUgMCBpbmRpY2F0ZXMgdGhlIHRocmVhZA0KPiA+ID4gPiA+ID4gK2lzIG9mZmxpbmUg Ki8gfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyNk ZWZpbmUgUlRFX1FTQlJfQ05UX1RIUl9PRkZMSU5FIDAgI2RlZmluZQ0KPiA+ID4gUlRFX1FTQlJf Q05UX0lOSVQgMQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qIFJURSBRdWllc2NlbnQg U3RhdGUgdmFyaWFibGUgc3RydWN0dXJlLg0KPiA+ID4gPiA+ID4gKyAqIFRoaXMgc3RydWN0dXJl IGhhcyB0d28gZWxlbWVudHMgdGhhdCB2YXJ5IGluIHNpemUgYmFzZWQgb24NCj4gPiA+ID4gPiA+ ICt0aGUNCj4gPiA+ID4gPiA+ICsgKiAnbWF4X3RocmVhZHMnIHBhcmFtZXRlci4NCj4gPiA+ID4g PiA+ICsgKiAxKSBRdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheQ0KPiA+ID4gPiA+ID4gKyAq IDIpIFJlZ2lzdGVyIHRocmVhZCBJRCBhcnJheSAgKi8gc3RydWN0IHJ0ZV9yY3VfcXNiciB7DQo+ ID4gPiA+ID4gPiArCXVpbnQ2NF90IHRva2VuIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gPiA+ ID4gPiArCS8qKjwgQ291bnRlciB0byBhbGxvdyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCBxdWll c2NlbnQNCj4gPiA+ID4gPiA+ICtzdGF0ZSBxdWVyaWVzICovDQo+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiArCXVpbnQzMl90IG51bV9lbGVtcyBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4g PiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGhyZWFkIElEIGFycmF5ICov DQo+ID4gPiA+ID4gPiArCXVpbnQzMl90IG51bV90aHJlYWRzOw0KPiA+ID4gPiA+ID4gKwkvKio8 IE51bWJlciBvZiB0aHJlYWRzIGN1cnJlbnRseSB1c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ ID4gPiA+ID4gPiArCXVpbnQzMl90IG1heF90aHJlYWRzOw0KPiA+ID4gPiA+ID4gKwkvKio8IE1h eGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdXNpbmcgdGhpcyBRUyB2YXJpYWJsZSAqLw0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCBxc2JyX2NudFsw XSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiA+ID4gKwkvKio8IFF1aWVzY2VudCBzdGF0 ZSBjb3VudGVyIGFycmF5IG9mICdtYXhfdGhyZWFkcycNCj4gZWxlbWVudHMNCj4gPiA+ID4gPiA+ ICsqLw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkvKio8IFJlZ2lzdGVyZWQgdGhyZWFk IElEcyBhcmUgc3RvcmVkIGluIGEgYml0bWFwIGFycmF5LA0KPiA+ID4gPiA+ID4gKwkgKiAgIGFm dGVyIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheS4NCj4gPiA+ID4gPiA+ICsJICov DQo+ID4gPiA+ID4gPiArfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiA+ID4gKw0KPiA+ DQo+ID4gPHNuaXA+DQo+ID4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBDaGVjayB0 aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgZm9yIHJlZ2lzdGVyZWQgdGhyZWFkcw0KPiA+ID4g PiA+ID4gK29ubHksIGFzc3VtaW5nDQo+ID4gPiA+ID4gPiArICogdGhhdCBub3QgYWxsIHRocmVh ZHMgaGF2ZSByZWdpc3RlcmVkLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gK3N0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ID4gPiA+ID4gK19fcmN1X3FzYnJfY2hlY2tf c2VsZWN0aXZlKHN0cnVjdCBydGVfcmN1X3FzYnIgKnYsIHVpbnQ2NF90DQo+ID4gPiA+ID4gPiAr dCwgYm9vbA0KPiA+ID4gPiA+ID4gK3dhaXQpIHsNCj4gPiA+ID4gPiA+ICsJdWludDMyX3QgaSwg aiwgaWQ7DQo+ID4gPiA+ID4gPiArCXVpbnQ2NF90IGJtYXA7DQo+ID4gPiA+ID4gPiArCXVpbnQ2 NF90IGM7DQo+ID4gPiA+ID4gPiArCXVpbnQ2NF90ICpyZWdfdGhyZWFkX2lkOw0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKwlmb3IgKGkgPSAwLCByZWdfdGhyZWFkX2lkID0gUlRFX1FTQlJf VEhSSURfQVJSQVlfRUxNKHYsDQo+IDApOw0KPiA+ID4gPiA+ID4gKwkJaSA8IHYtPm51bV9lbGVt czsNCj4gPiA+ID4gPiA+ICsJCWkrKywgcmVnX3RocmVhZF9pZCsrKSB7DQo+ID4gPiA+ID4gPiAr CQkvKiBMb2FkIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgdGhyZWFkIGJpdCBtYXANCj4gYmVmb3Jl DQo+ID4gPiA+ID4gPiArCQkgKiBsb2FkaW5nIHRoZSByZWFkZXIgdGhyZWFkIHF1aWVzY2VudCBz dGF0ZQ0KPiBjb3VudGVycy4NCj4gPiA+ID4gPiA+ICsJCSAqLw0KPiA+ID4gPiA+ID4gKwkJYm1h cCA9IF9fYXRvbWljX2xvYWRfbihyZWdfdGhyZWFkX2lkLA0KPiA+ID4gPiA+IF9fQVRPTUlDX0FD UVVJUkUpOw0KPiA+ID4gPiA+ID4gKwkJaWQgPSBpIDw8IFJURV9RU0JSX1RIUklEX0lOREVYX1NI SUZUOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJd2hpbGUgKGJtYXApIHsNCj4gPiA+ ID4gPiA+ICsJCQlqID0gX19idWlsdGluX2N0emwoYm1hcCk7DQo+ID4gPiA+ID4gPiArCQkJUkNV X0RQX0xPRyhERUJVRywNCj4gPiA+ID4gPiA+ICsJCQkJIiVzOiBjaGVjazogdG9rZW4gPSAlbHUs IHdhaXQgPSAlZCwNCj4gQml0IE1hcA0KPiA+ID4gPiA+ID0gMHglbHgsIFRocmVhZCBJRCA9ICVk IiwNCj4gPiA+ID4gPiA+ICsJCQkJX19mdW5jX18sIHQsIHdhaXQsIGJtYXAsIGlkICsgaik7DQo+ ID4gPiA+ID4gPiArCQkJYyA9IF9fYXRvbWljX2xvYWRfbigNCj4gPiA+ID4gPiA+ICsJCQkJCSZ2 LT5xc2JyX2NudFtpZCArIGpdLmNudCwNCj4gPiA+ID4gPiA+ICsJCQkJCV9fQVRPTUlDX0FDUVVJ UkUpOw0KPiA+ID4gPiA+ID4gKwkJCVJDVV9EUF9MT0coREVCVUcsDQo+ID4gPiA+ID4gPiArCQkJ CSIlczogc3RhdHVzOiB0b2tlbiA9ICVsdSwgd2FpdCA9ICVkLA0KPiBUaHJlYWQNCj4gPiA+ID4g PiBRUyBjbnQgPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiA+ID4gPiA+ICsJCQkJX19mdW5j X18sIHQsIHdhaXQsIGMsIGlkK2opOw0KPiA+ID4gPiA+ID4gKwkJCS8qIENvdW50ZXIgaXMgbm90 IGNoZWNrZWQgZm9yIHdyYXAtYXJvdW5kDQo+ID4gPiA+ID4gY29uZGl0aW9uDQo+ID4gPiA+ID4g PiArCQkJICogYXMgaXQgaXMgYSA2NGIgY291bnRlci4NCj4gPiA+ID4gPiA+ICsJCQkgKi8NCj4g PiA+ID4gPiA+ICsJCQlpZiAodW5saWtlbHkoYyAhPQ0KPiBSVEVfUVNCUl9DTlRfVEhSX09GRkxJ TkUgJiYgYw0KPiA+ID4gPiA+IDwgdCkpIHsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoaXMgYXNz dW1lcyB0aGF0IGEgNjQtYml0IGNvdW50ZXIgd29uJ3Qgb3ZlcmZsb3csIHdoaWNoIGlzDQo+ID4g PiA+ID4gY2xvc2UgZW5vdWdoIHRvIHRydWUgZ2l2ZW4gY3VycmVudCBDUFUgY2xvY2sgZnJlcXVl bmNpZXMuICA7LSkNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwkJCQkvKiBUaGlzIHRocmVhZCBp cyBub3QgaW4gcXVpZXNjZW50DQo+IHN0YXRlICovDQo+ID4gPiA+ID4gPiArCQkJCWlmICghd2Fp dCkNCj4gPiA+ID4gPiA+ICsJCQkJCXJldHVybiAwOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ID4gKwkJCQlydGVfcGF1c2UoKTsNCj4gPiA+ID4gPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgbWln aHQgaGF2ZQ0KPiB1bnJlZ2lzdGVyZWQuDQo+ID4gPiA+ID4gPiArCQkJCSAqIFJlLXJlYWQgdGhl IGJpdG1hcC4NCj4gPiA+ID4gPiA+ICsJCQkJICovDQo+ID4gPiA+ID4gPiArCQkJCWJtYXAgPQ0K PiBfX2F0b21pY19sb2FkX24ocmVnX3RocmVhZF9pZCwNCj4gPiA+ID4gPiA+ICsJCQkJCQlfX0FU T01JQ19BQ1FVSVJFKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJCQkJY29udGludWU7 DQo+ID4gPiA+ID4gPiArCQkJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJCWJtYXAg Jj0gfigxVUwgPDwgaik7DQo+ID4gPiA+ID4gPiArCQl9DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJcmV0dXJuIDE7DQo+ID4gPiA+ID4gPiArfQ0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qIENoZWNrIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRl ciBmb3IgYWxsIHRocmVhZHMsDQo+ID4gPiA+ID4gPiArYXNzdW1pbmcgdGhhdA0KPiA+ID4gPiA+ ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJlZ2lzdGVyZWQuDQo+ID4gPiA+ID4gPiArICov DQo+ID4gPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50IF9fcmN1X3FzYnJf Y2hlY2tfYWxsKHN0cnVjdA0KPiA+ID4gPiA+ID4gK3J0ZV9yY3VfcXNiciAqdiwgdWludDY0X3Qg dCwgYm9vbA0KPiA+ID4gPiA+ID4gK3dhaXQpDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBEb2VzIGNo ZWNraW5nIHRoZSBiaXRtYXAgcmVhbGx5IHRha2UgbG9uZyBlbm91Z2ggdG8gbWFrZSB0aGlzDQo+ ID4gPiA+ID4gd29ydGh3aGlsZSBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uPyAgSSB3b3VsZCB0aGlu ayB0aGF0IHRoZQ0KPiA+ID4gPiA+IGJpdG1hcC1jaGVja2luZyB0aW1lIHdvdWxkIGJlIGxvc3Qg aW4gdGhlIG5vaXNlIG9mIGNhY2hlIG1pc3Nlcw0KPiA+ID4gPiA+IGZyb20NCj4gPiA+IHRoZSAt PmNudCBsb2Fkcy4NCj4gPiA+ID4NCj4gPiA+ID4gSXQgYXZvaWRzIGFjY2Vzc2luZyBvbmUgY2Fj aGUgbGluZS4gSSB0aGluayB0aGlzIGlzIHdoZXJlIHRoZQ0KPiA+ID4gPiBzYXZpbmdzIGFyZQ0K PiA+ID4gKG1heSBiZSBpbiB0aGVvcnkpLiBUaGlzIGlzIHRoZSBtb3N0IHByb2JhYmxlIHVzZSBj YXNlLg0KPiA+ID4gPiBPbiB0aGUgb3RoZXIgaGFuZCwgX19yY3VfcXNicl9jaGVja19zZWxlY3Rp dmUoKSB3aWxsIHJlc3VsdCBpbg0KPiA+ID4gPiBzYXZpbmdzDQo+ID4gPiAoZGVwZW5kaW5nIG9u IGhvdyBtYW55IHRocmVhZHMgYXJlIGN1cnJlbnRseSByZWdpc3RlcmVkKSBieSBhdm9pZGluZw0K PiA+ID4gYWNjZXNzaW5nIHVud2FudGVkIGNvdW50ZXJzLg0KPiA+ID4NCj4gPiA+IERvIHlvdSBy ZWFsbHkgZXhwZWN0IHRvIGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbnkga2luZCBvZiBm YXN0cGF0aD8NCj4gPg0KPiA+IFllcy4gRm9yIHNvbWUgb2YgdGhlIGxpYnJhcmllcyAocnRlX2hh c2gpLCB0aGUgd3JpdGVyIGlzIG9uIHRoZSBmYXN0IHBhdGguDQo+ID4NCj4gPiA+DQo+ID4gPiA+ ID4gU3VyZSwgaWYgeW91IGludm9rZSBfX3JjdV9xc2JyX2NoZWNrX3NlbGVjdGl2ZSgpIGluIGEg dGlnaHQgbG9vcA0KPiA+ID4gPiA+IGluIHRoZSBhYnNlbmNlIG9mIHJlYWRlcnMsIHlvdSBtaWdo dCBzZWUgX19yY3VfcXNicl9jaGVja19hbGwoKQ0KPiA+ID4gPiA+IGJlaW5nIGEgYml0IGZhc3Rl ci4gIEJ1dCBpcyB0aGF0IHJlYWxseSB3aGF0IERQREsgZG9lcz8NCj4gPiA+ID4gSSBzZWUgaW1w cm92ZW1lbnRzIGluIHRoZSBzeW50aGV0aWMgdGVzdCBjYXNlIChzaW1pbGFyIHRvIHRoZSBvbmUN Cj4gPiA+ID4geW91DQo+ID4gPiBoYXZlIGRlc2NyaWJlZCwgYXJvdW5kIDI3JSkuIEhvd2V2ZXIs IGluIHRoZSBtb3JlIHByYWN0aWNhbCB0ZXN0DQo+ID4gPiBjYXNlcyBJIGRvIG5vdCBzZWUgYW55 IGRpZmZlcmVuY2UuDQo+ID4gPg0KPiA+ID4gSWYgdGhlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50 IG9ubHkgb2NjdXJzIGluIGEgc3ludGhldGljIHRlc3QgY2FzZSwNCj4gPiA+IGRvZXMgaXQgcmVh bGx5IG1ha2Ugc2Vuc2UgdG8gb3B0aW1pemUgZm9yIGl0Pw0KPiA+IEkgaGFkIHRvIGZpeCBmZXcg aXNzdWVzIGluIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IGNhc2VzIGFuZCBhZGRlZCBtb3JlIHRvDQo+ IGRvIHRoZSBjb21wYXJpc29uLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiB2NS4NCj4gPiBUaGVyZSBh cmUgNCBwZXJmb3JtYW5jZSB0ZXN0cyBpbnZvbHZpbmcgdGhpcyBBUEkuDQo+ID4gMSkgMSBXcml0 ZXIsICdOJyByZWFkZXJzDQo+ID4gICAgICBXcml0ZXI6IHFzYnJfc3RhcnQsIHFzYnJfY2hlY2so d2FpdCA9IHRydWUpDQo+ID4gICAgICBSZWFkZXJzOiBxc2JyX3F1aWVzY2VudA0KPiA+IDIpICdO JyB3cml0ZXJzDQo+ID4gICAgICBXcml0ZXJzOiBxc2JyX3N0YXJ0LCBxc2JyX2NoZWNrKHdhaXQg PT0gZmFsc2UpDQo+ID4gMykgMSBXcml0ZXIsICdOJyByZWFkZXJzICh0aGlzIHRlc3QgdXNlcyB0 aGUgbG9jay1mcmVlIHJ0ZV9oYXNoIGRhdGENCj4gc3RydWN0dXJlKQ0KPiA+ICAgICAgV3JpdGVy OiBoYXNoX2RlbCwgcXNicl9zdGFydCwgcXNicl9jaGVjayh3YWl0ID0gdHJ1ZSksIHZhbGlkYXRl IHRoYXQNCj4gdGhlIHJlYWRlciB3YXMgYWJsZSB0byBjb21wbGV0ZSBpdHMgd29yayBzdWNjZXNz ZnVsbHkNCj4gPiAgICAgIFJlYWRlcnM6IHRocmVhZF9vbmxpbmUsIGhhc2hfbG9va3VwLCBhY2Nl c3MgdGhlIHBvaW50ZXIgLSBkbyBzb21lDQo+ID4gd29yayBvbiBpdCwgcXNicl9xdWllc2NlbnQs IHRocmVhZF9vZmZsaW5lDQo+ID4gNCkgU2FtZSBhcyB0ZXN0IDMpIGJ1dCBxc2JyX2NoZWNrICh3 YWl0ID09IGZhbHNlKQ0KPiA+DQo+ID4gVGhlcmUgYXJlIDIgc2V0cyBvZiB0aGVzZSB0ZXN0cy4N Cj4gPiBhKSBRUyB2YXJpYWJsZSBpcyBjcmVhdGVkIHdpdGggbnVtYmVyIG9mIHRocmVhZHMgc2Ft ZSBhcyBudW1iZXIgb2YNCj4gPiByZWFkZXJzIC0gdGhpcyB3aWxsIGV4ZXJjaXNlIF9fcmN1X3Fz YnJfY2hlY2tfYWxsDQo+ID4gYikgUVMgdmFyaWFibGUgaXMgY3JlYXRlZCB3aXRoIDEyOCB0aHJl YWRzLCBudW1iZXIgb2YgcmVnaXN0ZXJlZA0KPiA+IHRocmVhZHMgaXMgc2FtZSBhcyBpbiBhKSAt IHRoaXMgd2lsbCBleGVyY2lzZQ0KPiA+IF9fcmN1X3FzYnJfY2hlY2tfc2VsZWN0aXZlDQo+ID4N Cj4gPiBGb2xsb3dpbmcgYXJlIHRoZSByZXN1bHRzIG9uIHg4NiAoRTUtMjY2MCB2NCBAIDIuMDBH SHopIGNvbXBhcmluZyBmcm9tDQo+ID4gYSkgdG8gYikgKG9uIHg4NiBpbiBteSBzZXR1cCwgdGhl IHJlc3VsdHMgYXJlIG5vdCB2ZXJ5IHN0YWJsZSBiZXR3ZWVuDQo+ID4gcnVucykNCj4gPiAxKSAy NSUNCj4gPiAyKSAtMyUNCj4gPiAzKSAtMC40JQ0KPiA+IDQpIDEuMzglDQo+ID4NCj4gPiBGb2xs b3dpbmcgYXJlIHRoZSByZXN1bHRzIG9uIGFuIEFybSBzeXN0ZW0gY29tcGFyaW5nIGZyb20gYSkg dG8gYikNCj4gPiAocmVzdWx0cyBhcmUgbm90IHByZXR0eSBzdGFibGUgYmV0d2VlbiBydW5zKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eDQpDb3JyZWN0aW9uLCBvbiB0aGUgQXJtIHN5 c3RlbSwgdGhlIHJlc3VsdHMgKmFyZSogc3RhYmxlIChjb3B5LXBhc3RlIGVycm9yKQ0KDQo+ID4g MSkgLTMuNDUlDQo+ID4gMikgMCUNCj4gPiAzKSAtMC4wMyUNCj4gPiA0KSAtMC4wNCUNCj4gPg0K PiA+IEtvbnN0YW50aW4sIGlzIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdHMgb24geW91ciBz ZXR1cCBhbmQgbG9vayBhdCB0aGUNCj4gcmVzdWx0cz8NCj4gDQo+IEkgZGlkIHJ1biBWNSBvbiBt eSBib3ggKFNLWCAyLjEgR0h6KSB3aXRoIDE3IGxjb3JlcyAoMSBwaHlzaWNhbCBjb3JlIHBlcg0K PiB0aHJlYWQpLg0KPiBEaWRuJ3Qgbm90aWNlIGFueSBzaWdpbmlmY2F0biBmbHVjdHVhdGlvbnMg YmV0d2VlbiBydW5zLCBvdXRwdXQgYmVsb3cuDQo+IA0KPiA+cmN1X3FzYnJfcGVyZl9hdXRvdGVz RVNDWzBLdA0KPiBOdW1iZXIgb2YgY29yZXMgcHJvdmlkZWQgPSAxNw0KPiBQZXJmIHRlc3Qgd2l0 aCBhbGwgcmVhZGVyIHRocmVhZHMgcmVnaXN0ZXJlZA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4gUGVyZiBUZXN0OiAxNiBSZWFkZXJzLzEgV3Jp dGVyKCd3YWl0JyBpbiBxc2JyX2NoZWNrID09IHRydWUpIFRvdGFsIFJDVQ0KPiB1cGRhdGVzID0g NjU3MDcyMzI4OTkgQ3ljbGVzIHBlciAxMDAwIHVwZGF0ZXM6IDE4NDgyIFRvdGFsIFJDVSBjaGVj a3MgPQ0KPiAyMDAwMDAwMCBDeWNsZXMgcGVyIDEwMDAgY2hlY2tzOiAzNzk0OTkxDQo+IA0KPiBQ ZXJmIFRlc3Q6IDE3IFJlYWRlcnMNCj4gVG90YWwgUkNVIHVwZGF0ZXMgPSAxNzAwMDAwMDAwDQo+ IEN5Y2xlcyBwZXIgMTAwMCB1cGRhdGVzOiAyMTI4DQo+IA0KPiBQZXJmIHRlc3Q6IDE3IFdyaXRl cnMgKCd3YWl0JyBpbiBxc2JyX2NoZWNrID09IGZhbHNlKSBUb3RhbCBSQ1UgY2hlY2tzID0NCj4g MzQwMDAwMDAwIEN5Y2xlcyBwZXIgMTAwMCBjaGVja3M6IDEwMDMwDQo+IA0KPiBQZXJmIHRlc3Q6 IDEgd3JpdGVyLCAxNyByZWFkZXJzLCAxIFFTQlIgdmFyaWFibGUsIDEgUVNCUiBRdWVyeSwgQmxv Y2tpbmcNCj4gUVNCUiBDaGVjayBGb2xsb3dpbmcgbnVtYmVycyBpbmNsdWRlIGNhbGxzIHRvIHJ0 ZV9oYXNoIGZ1bmN0aW9ucyBDeWNsZXMNCj4gcGVyIDEgdXBkYXRlKG9ubGluZS91cGRhdGUvb2Zm bGluZSk6IDE5ODQ2OTYgQ3ljbGVzIHBlciAxIGNoZWNrKHN0YXJ0LA0KPiBjaGVjayk6IDI2MTkw MDINCj4gDQo+IFBlcmYgdGVzdDogMSB3cml0ZXIsIDE3IHJlYWRlcnMsIDEgUVNCUiB2YXJpYWJs ZSwgMSBRU0JSIFF1ZXJ5LCBOb24tDQo+IEJsb2NraW5nIFFTQlIgY2hlY2sgRm9sbG93aW5nIG51 bWJlcnMgaW5jbHVkZSBjYWxscyB0byBydGVfaGFzaCBmdW5jdGlvbnMNCj4gQ3ljbGVzIHBlciAx IHVwZGF0ZShvbmxpbmUvdXBkYXRlL29mZmxpbmUpOiAyMDI4MDMwIEN5Y2xlcyBwZXIgMQ0KPiBj aGVjayhzdGFydCwgY2hlY2spOiAyODc2NjY3DQo+IA0KPiBQZXJmIHRlc3Qgd2l0aCBzb21lIG9m IHJlYWRlciB0aHJlYWRzIHJlZ2lzdGVyZWQNCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiBQZXJmIFRlc3Q6IDE2IFJlYWRlcnMvMSBXcml0 ZXIoJ3dhaXQnIGluIHFzYnJfY2hlY2sgPT0gdHJ1ZSkgVG90YWwgUkNVDQo+IHVwZGF0ZXMgPSA2 ODg1MDA3MzA1NSBDeWNsZXMgcGVyIDEwMDAgdXBkYXRlczogMjU0OTAgVG90YWwgUkNVIGNoZWNr cyA9DQo+IDIwMDAwMDAwIEN5Y2xlcyBwZXIgMTAwMCBjaGVja3M6IDU0ODQ0MDMNCj4gDQo+IFBl cmYgVGVzdDogMTcgUmVhZGVycw0KPiBUb3RhbCBSQ1UgdXBkYXRlcyA9IDE3MDAwMDAwMDANCj4g Q3ljbGVzIHBlciAxMDAwIHVwZGF0ZXM6IDIxMjcNCj4gDQo+IFBlcmYgdGVzdDogMTcgV3JpdGVy cyAoJ3dhaXQnIGluIHFzYnJfY2hlY2sgPT0gZmFsc2UpIFRvdGFsIFJDVSBjaGVja3MgPQ0KPiAz NDAwMDAwMDAgQ3ljbGVzIHBlciAxMDAwIGNoZWNrczogMTAwMzQNCj4gDQo+IFBlcmYgdGVzdDog MSB3cml0ZXIsIDE3IHJlYWRlcnMsIDEgUVNCUiB2YXJpYWJsZSwgMSBRU0JSIFF1ZXJ5LCBCbG9j a2luZw0KPiBRU0JSIENoZWNrIEZvbGxvd2luZyBudW1iZXJzIGluY2x1ZGUgY2FsbHMgdG8gcnRl X2hhc2ggZnVuY3Rpb25zIEN5Y2xlcw0KPiBwZXIgMSB1cGRhdGUob25saW5lL3VwZGF0ZS9vZmZs aW5lKTogMzYwNDQ4OSBDeWNsZXMgcGVyIDEgY2hlY2soc3RhcnQsDQo+IGNoZWNrKTogNzA3NzM3 Mg0KPiANCj4gUGVyZiB0ZXN0OiAxIHdyaXRlciwgMTcgcmVhZGVycywgMSBRU0JSIHZhcmlhYmxl LCAxIFFTQlIgUXVlcnksIE5vbi0NCj4gQmxvY2tpbmcgUVNCUiBjaGVjayBGb2xsb3dpbmcgbnVt YmVycyBpbmNsdWRlIGNhbGxzIHRvIHJ0ZV9oYXNoIGZ1bmN0aW9ucw0KPiBDeWNsZXMgcGVyIDEg dXBkYXRlKG9ubGluZS91cGRhdGUvb2ZmbGluZSk6IDM5MzY4MzEgQ3ljbGVzIHBlciAxDQo+IGNo ZWNrKHN0YXJ0LCBjaGVjayk6IDcyNjI3MzgNCj4gDQo+IA0KPiBUZXN0IE9LDQpUaGFua3MgZm9y IHJ1bm5pbmcgdGhlIHRlc3QuIEZyb20gdGhlIG51bWJlcnMsIHRoZSBjb21wYXJpc29uIGlzIGFz IGZvbGxvd3M6DQoxKSAtNDQlDQoyKSAwLjAzJQ0KMykgLTE3MCUNCjQpIC0xNTIlDQoNClRyZW5k IGlzIHRoZSBzYW1lIGJldHdlZW4geDg2IGFuZCBBcm0uIEhvd2V2ZXIsIHg4NiBoYXMgZHJhc3Rp YyBpbXByb3ZlbWVudCB3aXRoIF9fcmN1X3FzYnJfY2hlY2tfYWxsIGZ1bmN0aW9uLg0KDQo+IA0K PiBLb25zdGFudGluDQoNCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 9EB75A00E6 for ; Mon, 15 Apr 2019 21:46:32 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6AED01B3B8; Mon, 15 Apr 2019 21:46:31 +0200 (CEST) Received: from EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50076.outbound.protection.outlook.com [40.107.5.76]) by dpdk.org (Postfix) with ESMTP id 59CAE1B3B5 for ; Mon, 15 Apr 2019 21:46:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kQJqvlfC4FD6tbZfn7Tl5AtfGKDoG/VSh8ZsDvKQVn4=; b=J6IxYuU/0tqvuPhOHv4v6r4O6nofJMx+BG4q9uMFrzRF31pTQ/0a8GogydYWpKA9+aOdG9tD2VgdI+2bcSkHTujiQcWsjgAXPt7skeDWO6nggPRnpj8kc6PHPi3OnW8pXw26hbwuWUjkPG4qAgnSFsuo2DthCqA3NrjVBLrZ4u8= Received: from VE1PR08MB5149.eurprd08.prod.outlook.com (20.179.30.152) by VE1PR08MB4638.eurprd08.prod.outlook.com (10.255.27.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1792.17; Mon, 15 Apr 2019 19:46:28 +0000 Received: from VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177]) by VE1PR08MB5149.eurprd08.prod.outlook.com ([fe80::e0ae:ecad:ec5:8177%2]) with mapi id 15.20.1792.018; Mon, 15 Apr 2019 19:46:28 +0000 From: Honnappa Nagarahalli To: "Ananyev, Konstantin" , "paulmck@linux.ibm.com" CC: "stephen@networkplumber.org" , "Kovacevic, Marko" , "dev@dpdk.org" , "Gavin Hu (Arm Technology China)" , Dharmik Thakkar , Malvika Gupta , Honnappa Nagarahalli , nd , nd Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism Thread-Index: AQHU78lDsy4W0sThdUi8p6MItiPVFqY2RtWAgADPY4CAANKj8IAFjoGAgAAsN+A= Date: Mon, 15 Apr 2019 19:46:28 +0000 Message-ID: References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-2-honnappa.nagarahalli@arm.com> <20190410181432.GO14111@linux.ibm.com> <20190411152613.GZ14111@linux.ibm.com> <2601191342CEEE43887BDE71AB9772580148A9800A@irsmsx105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB9772580148A9800A@irsmsx105.ger.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Honnappa.Nagarahalli@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 73b1de4f-d9a9-4917-89d8-08d6c1db0d6d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600140)(711020)(4605104)(4618075)(2017052603328)(7193020); SRVR:VE1PR08MB4638; x-ms-traffictypediagnostic: VE1PR08MB4638: nodisclaimer: True x-microsoft-antispam-prvs: x-forefront-prvs: 000800954F x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39860400002)(136003)(376002)(346002)(396003)(366004)(189003)(199004)(71190400001)(14454004)(105586002)(2501003)(8936002)(106356001)(8676002)(71200400001)(81166006)(97736004)(68736007)(81156014)(93886005)(52536014)(33656002)(3846002)(5660300002)(6246003)(6116002)(186003)(11346002)(446003)(4326008)(476003)(229853002)(55016002)(53936002)(305945005)(53946003)(7736002)(2906002)(74316002)(102836004)(6436002)(316002)(6506007)(66066001)(256004)(14444005)(478600001)(110136005)(54906003)(72206003)(30864003)(26005)(25786009)(76176011)(486006)(7696005)(99286004)(9686003)(86362001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:VE1PR08MB4638; H:VE1PR08MB5149.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: zIOS2MDrUdYCEV/ZgQxVtHb5FOSaTF2TH6OFpp6pPOJQ4BzHrdRCb9WkbtyQOmG+ZcGl5Ce/LIhvz8SR6yXZ6jlNz2uxP+5rJmMazmwt5z32s9CrX5CcRUMTU5MAW4F+4M8RaEUgLgtABX98woHJ1CepmF/IYSXFbrm/es8EV+G0KQaggJQhlqAYvZb7lH7gWAQCgBf4IFhctzIyYmqS8R5/Hwt/uqsnqBORKCKURP3TwtSIYVIhyMKkvgIn+jp8zHeFibeQjpBTz4cv54tObNp0w9pnl/VoQ/rRFKULmNegQGrD2w4BwNvGCauYQoQ4T5fr2aReacqStvP16y/TWtETvimR/Izh0PeqIHvN8hQpTpDgizoMOc1sukVnHw8Mmd/lJHGmToE/txJlX5E+Wld161tuDXpCSse+vId+TVM= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 73b1de4f-d9a9-4917-89d8-08d6c1db0d6d X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Apr 2019 19:46:28.5404 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB4638 Subject: Re: [dpdk-dev] [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism 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" Message-ID: <20190415194628.XgA_8n35Fx5pIka2ZpkkV7s9RJsNK463h7DpW9NCYZg@z> PiANCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIFdlZCwgQXByIDEwLCAyMDE5IGF0IDA2OjIwOjA0 QU0gLTA1MDAsIEhvbm5hcHBhIE5hZ2FyYWhhbGxpDQo+ID4gPiB3cm90ZToNCj4gPiA+ID4gPiA+ IEFkZCBSQ1UgbGlicmFyeSBzdXBwb3J0aW5nIHF1aWVzY2VudCBzdGF0ZSBiYXNlZCBtZW1vcnkN Cj4gPiA+ID4gPiA+IHJlY2xhbWF0aW9uDQo+ID4gPiA+ID4gbWV0aG9kLg0KPiA+ID4gPiA+ID4g VGhpcyBsaWJyYXJ5IGhlbHBzIGlkZW50aWZ5IHRoZSBxdWllc2NlbnQgc3RhdGUgb2YgdGhlIHJl YWRlcg0KPiA+ID4gPiA+ID4gdGhyZWFkcyBzbyB0aGF0IHRoZSB3cml0ZXJzIGNhbiBmcmVlIHRo ZSBtZW1vcnkgYXNzb2NpYXRlZA0KPiA+ID4gPiA+ID4gd2l0aCB0aGUgbG9jayBsZXNzIGRhdGEg c3RydWN0dXJlcy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEkgZG9uJ3Qgc2VlIGFueSBzaWduIG9m IHJlYWQtc2lkZSBtYXJrZXJzIChyY3VfcmVhZF9sb2NrKCkgYW5kDQo+ID4gPiA+ID4gcmN1X3Jl YWRfdW5sb2NrKCkgaW4gdGhlIExpbnV4IGtlcm5lbCwgdXNlcnNwYWNlIFJDVSwgZXRjLikuDQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiBZZXMsIHN0cmljdGx5IHNwZWFraW5nLCB0aGVzZSBhcmUgbm90 IG5lZWRlZCBmb3IgUVNCUiB0bw0KPiA+ID4gPiA+IG9wZXJhdGUsIGJ1dCB0aGV5DQo+ID4gPiA+ IFRoZXNlIEFQSXMgd291bGQgYmUgZW1wdHkgZm9yIFFTQlIuDQo+ID4gPiA+DQo+ID4gPiA+ID4g bWFrZSBpdCB3YXkgZWFzaWVyIHRvIG1haW50YWluIGFuZCBkZWJ1ZyBjb2RlIHVzaW5nIFJDVS4g IEZvcg0KPiA+ID4gPiA+IGV4YW1wbGUsIGdpdmVuIHRoZSByZWFkLXNpZGUgbWFya2VycywgeW91 IGNhbiBjaGVjayBmb3IgZXJyb3JzDQo+ID4gPiA+ID4gbGlrZSBoYXZpbmcgYSBjYWxsIHRvDQo+ ID4gPiA+ID4gcnRlX3JjdV9xc2JyX3F1aWVzY2VudCgpIGluIHRoZSBtaWRkbGUgb2YgYSByZWFk ZXIgcXVpdGUgZWFzaWx5Lg0KPiA+ID4gPiA+IFdpdGhvdXQgdGhvc2UgcmVhZC1zaWRlIG1hcmtl cnMsIGxpZmUgY2FuIGJlIHF1aXRlIGhhcmQgYW5kIHlvdQ0KPiA+ID4gPiA+IHdpbGwgcmVhbGx5 IGhhdGUgeW91cnNlbGYgZm9yIGZhaWxpbmcgdG8gaGF2ZSBwcm92aWRlZCB0aGVtLg0KPiA+ID4g Pg0KPiA+ID4gPiBXYW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3Rvb2QgdGhpcywgZG8geW91IG1l YW4gdGhlIGFwcGxpY2F0aW9uDQo+ID4gPiB3b3VsZCBtYXJrIGJlZm9yZSBhbmQgYWZ0ZXIgYWNj ZXNzaW5nIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmUgb24NCj4gPiA+IHRoZSByZWFkZXIgc2lk ZT8NCj4gPiA+ID4NCj4gPiA+ID4gcnRlX3JjdV9xc2JyX2xvY2soKQ0KPiA+ID4gPiA8YmVnaW4g YWNjZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4gLi4uDQo+ID4gPiA+IC4uLg0KPiA+ID4gPiA8 ZW5kIGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQo+ID4gPiA+IHJ0ZV9yY3VfcXNicl91 bmxvY2soKQ0KPiA+ID4NCj4gPiA+IFllcywgdGhhdCBpcyB0aGUgaWRlYS4NCj4gPiA+DQo+ID4g PiA+IElmIHNvbWVvbmUgaXMgZGVidWdnaW5nIHRoaXMgY29kZSwgdGhleSBoYXZlIHRvIG1ha2Ug c3VyZSB0aGF0DQo+ID4gPiA+IHRoZXJlIGlzDQo+ID4gPiBhbiB1bmxvY2sgZm9yIGV2ZXJ5IGxv Y2sgYW5kIHRoZXJlIGlzIG5vIGNhbGwgdG8NCj4gPiA+IHJ0ZV9yY3VfcXNicl9xdWllc2NlbnQg aW4gYmV0d2Vlbi4NCj4gPiA+ID4gSXQgc291bmRzIGdvb2QgdG8gbWUuIE9idmlvdXNseSwgdGhl eSB3aWxsIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwNCj4gPiA+ID4gY3ljbGVzDQo+ID4gPiBhcyB3 ZWxsLg0KPiA+ID4gPiBQbGVhc2UgbGV0IG1lIGtub3cgaWYgbXkgdW5kZXJzdGFuZGluZyBpcyBj b3JyZWN0Lg0KPiA+ID4NCj4gPiA+IFllcy4gIEFuZCBpbiBzb21lIHNvcnQgb2YgZGVidWcgbW9k ZSwgeW91IGNvdWxkIGNhcHR1cmUgdGhlIGNvdW50ZXINCj4gPiA+IGF0DQo+ID4gPiBydGVfcmN1 X3FzYnJfbG9jaygpIHRpbWUgYW5kIGNoZWNrIGl0IGF0IHJ0ZV9yY3VfcXNicl91bmxvY2soKSB0 aW1lLg0KPiA+ID4gSWYgdGhlIGNvdW50ZXIgaGFzIGFkdmFuY2VkIHRvbyBmYXIgKG1vcmUgdGhh biBvbmUsIGlmIEkgYW0gbm90IHRvbw0KPiA+ID4gY29uZnVzZWQpIHRoZXJlIGlzIGEgYnVnLiAg QWxzbyBpbiBkZWJ1ZyBtb2RlLCB5b3UgY291bGQgaGF2ZQ0KPiA+ID4gcnRlX3JjdV9xc2JyX2xv Y2soKSBpbmNyZW1lbnQgYSBwZXItdGhyZWFkIGNvdW50ZXIgYW5kDQo+IHJ0ZV9yY3VfcXNicl91 bmxvY2soKSBkZWNyZW1lbnQgaXQuDQo+ID4gPiBJZiB0aGUgY291bnRlciBpcyBub24temVybyBh dCBhIHF1aWVzY2VudCBzdGF0ZSwgdGhlcmUgaXMgYSBidWcuDQo+ID4gPiBBbmQgc28gb24uDQo+ ID4gPg0KPiA+IEFkZGVkIHRoaXMgaW4gVjUNCj4gPg0KPiA+IDxzbmlwPg0KPiA+DQo+ID4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gPiArLyogR2V0IHRoZSBtZW1vcnkgc2l6ZSBvZiBRU0JSIHZhcmlh YmxlICovIHNpemVfdA0KPiA+ID4gPiA+ID4gK19fcnRlX2V4cGVyaW1lbnRhbCBydGVfcmN1X3Fz YnJfZ2V0X21lbXNpemUodWludDMyX3QNCj4gPiA+IG1heF90aHJlYWRzKSB7DQo+ID4gPiA+ID4g PiArCXNpemVfdCBzejsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJaWYgKG1heF90aHJl YWRzID09IDApIHsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJjdV9sb2df dHlwZSwNCj4gPiA+ID4gPiA+ICsJCQkiJXMoKTogSW52YWxpZCBtYXhfdGhyZWFkcyAldVxuIiwN Cj4gPiA+ID4gPiA+ICsJCQlfX2Z1bmNfXywgbWF4X3RocmVhZHMpOw0KPiA+ID4gPiA+ID4gKwkJ cnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJcmV0dXJu IDE7DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJc3ogPSBz aXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicik7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAr CS8qIEFkZCB0aGUgc2l6ZSBvZiBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheSAqLw0KPiA+ ID4gPiA+ID4gKwlzeiArPSBzaXplb2Yoc3RydWN0IHJ0ZV9yY3VfcXNicl9jbnQpICogbWF4X3Ro cmVhZHM7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCS8qIEFkZCB0aGUgc2l6ZSBvZiB0 aGUgcmVnaXN0ZXJlZCB0aHJlYWQgSUQgYml0bWFwIGFycmF5ICovDQo+ID4gPiA+ID4gPiArCXN6 ICs9IFJURV9RU0JSX1RIUklEX0FSUkFZX1NJWkUobWF4X3RocmVhZHMpOw0KPiA+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ID4gKwlyZXR1cm4gUlRFX0FMSUdOKHN6LCBSVEVfQ0FDSEVfTElORV9TSVpF KTsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEdpdmVuIHRoYXQgeW91IGFsaWduIGhlcmUsIHNob3Vs ZCB5b3UgYWxzbyBhbGlnbiBpbiB0aGUgZWFybGllcg0KPiA+ID4gPiA+IHN0ZXBzIGluIHRoZSBj b21wdXRhdGlvbiBvZiBzej8NCj4gPiA+ID4NCj4gPiA+ID4gQWdyZWUuIEkgd2lsbCByZW1vdmUg dGhlIGFsaWduIGhlcmUgYW5kIGtlZXAgdGhlIGVhcmxpZXIgb25lIGFzDQo+ID4gPiA+IHRoZSBp bnRlbnQNCj4gPiA+IGlzIHRvIGFsaWduIHRoZSB0aHJlYWQgSUQgYXJyYXkuDQo+ID4gPg0KPiA+ ID4gU291bmRzIGdvb2QhDQo+ID4gQWRkZWQgdGhpcyBpbiBWNQ0KPiA+DQo+ID4gPg0KPiA+ID4g PiA+ID4gK30NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBJbml0aWFsaXplIGEgcXVp ZXNjZW50IHN0YXRlIHZhcmlhYmxlICovIGludA0KPiA+ID4gPiA+ID4gK19fcnRlX2V4cGVyaW1l bnRhbCBydGVfcmN1X3FzYnJfaW5pdChzdHJ1Y3QgcnRlX3JjdV9xc2JyICp2LA0KPiA+ID4gdWlu dDMyX3QgbWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gPiA+ICsJc2l6ZV90IHN6Ow0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gPiArCQlydGVf bG9nKFJURV9MT0dfRVJSLCByY3VfbG9nX3R5cGUsDQo+ID4gPiA+ID4gPiArCQkJIiVzKCk6IElu dmFsaWQgaW5wdXQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7DQo+ID4gPiA+ID4gPiArCQlydGVf ZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gMTsN Cj4gPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlzeiA9IHJ0ZV9y Y3VfcXNicl9nZXRfbWVtc2l6ZShtYXhfdGhyZWFkcyk7DQo+ID4gPiA+ID4gPiArCWlmIChzeiA9 PSAxKQ0KPiA+ID4gPiA+ID4gKwkJcmV0dXJuIDE7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4g PiArCS8qIFNldCBhbGwgdGhlIHRocmVhZHMgdG8gb2ZmbGluZSAqLw0KPiA+ID4gPiA+ID4gKwlt ZW1zZXQodiwgMCwgc3opOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gV2UgY2FsY3VsYXRlIHN6IGhl cmUsIGJ1dCBpdCBsb29rcyBsaWtlIHRoZSBjYWxsZXIgbXVzdCBhbHNvDQo+ID4gPiA+ID4gY2Fs Y3VsYXRlIGl0IGluIG9yZGVyIHRvIGNvcnJlY3RseSBhbGxvY2F0ZSB0aGUgbWVtb3J5DQo+ID4g PiA+ID4gcmVmZXJlbmNlZCBieSB0aGUgInYiIGFyZ3VtZW50IHRvIHRoaXMgZnVuY3Rpb24sIHdp dGggYmFkIHRoaW5ncw0KPiA+ID4gPiA+IGhhcHBlbmluZyBpZiB0aGUgdHdvIGNhbGN1bGF0aW9u cyBnZXQgZGlmZmVyZW50IHJlc3VsdHMuICBTaG91bGQNCj4gPiA+ID4gPiAidiIgaW5zdGVhZCBi ZSBhbGxvY2F0ZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gdG8gYXZvaWQgdGhpcyBzb3J0IG9mDQo+ IHByb2JsZW0/DQo+ID4gPiA+DQo+ID4gPiA+IEVhcmxpZXIgdmVyc2lvbiBhbGxvY2F0ZWQgdGhl IG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4NCj4gPiA+ID4gSG93ZXZlciwgaXQgd2FzDQo+ ID4gPiBkZWNpZGVkIHRvIGdvIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gYXMgaXQg cHJvdmlkZXMNCj4gPiA+IGZsZXhpYmlsaXR5IGZvciB0aGUgYXBwbGljYXRpb24gdG8gbWFuYWdl IHRoZSBtZW1vcnkgYXMgaXQgc2VlcyBmaXQuDQo+ID4gPiBGb3IgZXg6IGl0IGNvdWxkIGFsbG9j YXRlIHRoaXMgYXMgcGFydCBvZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhDQo+ID4gPiBzaW5nbGUg YWxsb2NhdGlvbi4gVGhpcyBhbHNvIGZhbGxzIGlubGluZSB3aXRoIHNpbWlsYXIgYXBwcm9hY2gg dGFrZW4gaW4NCj4gb3RoZXIgbGlicmFyaWVzLg0KPiA+ID4NCj4gPiA+IFNvIHRoZSBhbGxvY2F0 b3IgQVBJcyB2YXJ5IHRvbyBtdWNoIHRvIGFsbG93IGEgcG9pbnRlciB0byB0aGUNCj4gPiA+IGRl c2lyZWQgYWxsb2NhdG9yIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZCBpbj8gIE9yIGRvIHlvdSBhbHNv IHdhbnQgdG8NCj4gPiA+IGFsbG93IHN0YXRpYyBhbGxvY2F0aW9uPyAgSWYgdGhlIGxhdHRlciwg d291bGQgYSBERUZJTkVfUlRFX1JDVV9RU0JSKCkNCj4gYmUgb2YgdXNlPw0KPiA+ID4NCj4gPiBU aGlzIGlzIGRvbmUgdG8gYWxsb3cgZm9yIGFsbG9jYXRpb24gb2YgbWVtb3J5IGZvciBRUyB2YXJp YWJsZSBhcyBwYXJ0DQo+ID4gb2YgYSBhbm90aGVyIGJpZ2dlciBkYXRhIHN0cnVjdHVyZS4gVGhp cyB3aWxsIGhlbHAgaW4gbm90IGZyYWdtZW50aW5nIHRoZQ0KPiBtZW1vcnkuIEZvciBleDoNCj4g Pg0KPiA+IHN0cnVjdCB4eXogew0KPiA+ICAgICBydGVfcmluZyAqcmluZzsNCj4gPiAgICAgcnRl X3JjdV9xc2JyICp2Ow0KPiA+ICAgICBhYmMgKnQ7DQo+ID4gfTsNCj4gPiBzdHJ1Y3QgeHl6IGM7 DQo+ID4NCj4gPiBNZW1vcnkgZm9yIHRoZSBhYm92ZSBzdHJ1Y3R1cmUgY2FuIGJlIGFsbG9jYXRl ZCBpbiBvbmUgY2h1bmsgYnkNCj4gY2FsY3VsYXRpbmcgdGhlIHNpemUgcmVxdWlyZWQuDQo+ID4N Cj4gPiBJbiBzb21lIHVzZSBjYXNlcyBzdGF0aWMgYWxsb2NhdGlvbiBtaWdodCBiZSBlbm91Z2gg YXMgJ21heF90aHJlYWRzJw0KPiA+IG1pZ2h0IGJlIGEgY29tcGlsZSB0aW1lIGNvbnN0YW50LiBJ IGFtIG5vdCBzdXJlIG9uIGhvdyB0byBzdXBwb3J0IGJvdGgNCj4gZHluYW1pYyBhbmQgc3RhdGlj ICdtYXhfdGhyZWFkcycuDQo+IA0KPiBTYW1lIHRob3VnaHQgaGVyZS0gIHdvdWxkIGJlIGdvb2Qg dG8gaGF2ZSBhIHN0YXRpYyBpbml0aWFsaXplcg0KPiAoREVGSU5FX1JURV9SQ1VfUVNCUiksIGJ1 dCB0aGF0IG1lYW5zIG5ldyBjb21waWxlIHRpbWUgbGltaXQNCj4gKCdtYXhfdGhyZWFkcycpIC0g dGhpbmcgdGhhdCB3ZSB0cnkgdG8gYXZvaWQuDQo+IA0KPiA+DQo+ID4gPiA+ID4gPiArCXYtPm1h eF90aHJlYWRzID0gbWF4X3RocmVhZHM7DQo+ID4gPiA+ID4gPiArCXYtPm51bV9lbGVtcyA9IFJU RV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFkcywNCj4gPiA+ID4gPiA+ICsJCQlSVEVfUVNCUl9U SFJJRF9BUlJBWV9FTE1fU0laRSkgLw0KPiA+ID4gPiA+ID4gKwkJCVJURV9RU0JSX1RIUklEX0FS UkFZX0VMTV9TSVpFOw0KPiA+ID4gPiA+ID4gKwl2LT50b2tlbiA9IFJURV9RU0JSX0NOVF9JTklU Ow0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICt9 DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyogUmVnaXN0ZXIgYSByZWFkZXIgdGhyZWFk IHRvIHJlcG9ydCBpdHMgcXVpZXNjZW50IHN0YXRlDQo+ID4gPiA+ID4gPiArICogb24gYSBRUyB2 YXJpYWJsZS4NCj4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICtpbnQgX19ydGVfZXhwZXJp bWVudGFsDQo+ID4gPiA+ID4gPiArcnRlX3JjdV9xc2JyX3RocmVhZF9yZWdpc3RlcihzdHJ1Y3Qg cnRlX3JjdV9xc2JyICp2LCB1bnNpZ25lZA0KPiA+ID4gPiA+ID4gK2ludA0KPiA+ID4gPiA+ID4g K3RocmVhZF9pZCkgew0KPiA+ID4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaSwgaWQsIHN1Y2Nlc3M7 DQo+ID4gPiA+ID4gPiArCXVpbnQ2NF90IG9sZF9ibWFwLCBuZXdfYm1hcDsNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsJaWYgKHYgPT0gTlVMTCB8fCB0aHJlYWRfaWQgPj0gdi0+bWF4X3Ro cmVhZHMpIHsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9sb2coUlRFX0xPR19FUlIsIHJjdV9sb2dfdHlw ZSwNCj4gPiA+ID4gPiA+ICsJCQkiJXMoKTogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9f ZnVuY19fKTsNCj4gPiA+ID4gPiA+ICsJCXJ0ZV9lcnJubyA9IEVJTlZBTDsNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4gPiA+ID4gKwl9DQo+ID4gPiA+ID4g PiArDQo+ID4gPiA+ID4gPiArCWlkID0gdGhyZWFkX2lkICYgUlRFX1FTQlJfVEhSSURfTUFTSzsN Cj4gPiA+ID4gPiA+ICsJaSA9IHRocmVhZF9pZCA+PiBSVEVfUVNCUl9USFJJRF9JTkRFWF9TSElG VDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJLyogTWFrZSBzdXJlIHRoYXQgdGhlIGNv dW50ZXIgZm9yIHJlZ2lzdGVyZWQgdGhyZWFkcyBkb2VzDQo+IG5vdA0KPiA+ID4gPiA+ID4gKwkg KiBnbyBvdXQgb2Ygc3luYy4gSGVuY2UsIGFkZGl0aW9uYWwgY2hlY2tzIGFyZSByZXF1aXJlZC4N Cj4gPiA+ID4gPiA+ICsJICovDQo+ID4gPiA+ID4gPiArCS8qIENoZWNrIGlmIHRoZSB0aHJlYWQg aXMgYWxyZWFkeSByZWdpc3RlcmVkICovDQo+ID4gPiA+ID4gPiArCW9sZF9ibWFwID0NCj4gX19h dG9taWNfbG9hZF9uKFJURV9RU0JSX1RIUklEX0FSUkFZX0VMTSh2LCBpKSwNCj4gPiA+ID4gPiA+ ICsJCQkJCV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiA+ID4gKwlpZiAob2xkX2JtYXAgJiAx VUwgPDwgaWQpDQo+ID4gPiA+ID4gPiArCQlyZXR1cm4gMDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiA+ICsJZG8gew0KPiA+ID4gPiA+ID4gKwkJbmV3X2JtYXAgPSBvbGRfYm1hcCB8ICgxVUwg PDwgaWQpOw0KPiA+ID4gPiA+ID4gKwkJc3VjY2VzcyA9IF9fYXRvbWljX2NvbXBhcmVfZXhjaGFu Z2UoDQo+ID4gPiA+ID4gPiArDQo+IAlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE0odiwgaSksDQo+ ID4gPiA+ID4gPiArCQkJCQkmb2xkX2JtYXAsICZuZXdfYm1hcCwgMCwNCj4gPiA+ID4gPiA+ICsJ CQkJCV9fQVRPTUlDX1JFTEVBU0UsDQo+ID4gPiA+ID4gX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4g PiA+ID4gPiArDQo+ID4gPiA+ID4gPiArCQlpZiAoc3VjY2VzcykNCj4gPiA+ID4gPiA+ICsJCQlf X2F0b21pY19mZXRjaF9hZGQoJnYtPm51bV90aHJlYWRzLA0KPiA+ID4gPiA+ID4gKwkJCQkJCTEs DQo+IF9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ID4gPiA+ID4gKwkJZWxzZSBpZiAob2xkX2JtYXAg JiAoMVVMIDw8IGlkKSkNCj4gPiA+ID4gPiA+ICsJCQkvKiBTb21lb25lIGVsc2UgcmVnaXN0ZXJl ZCB0aGlzIHRocmVhZC4NCj4gPiA+ID4gPiA+ICsJCQkgKiBDb3VudGVyIHNob3VsZCBub3QgYmUg aW5jcmVtZW50ZWQuDQo+ID4gPiA+ID4gPiArCQkJICovDQo+ID4gPiA+ID4gPiArCQkJcmV0dXJu IDA7DQo+ID4gPiA+ID4gPiArCX0gd2hpbGUgKHN1Y2Nlc3MgPT0gMCk7DQo+ID4gPiA+ID4NCj4g PiA+ID4gPiBUaGlzIHdvdWxkIGJlIHNpbXBsZXIgaWYgdGhyZWFkcyB3ZXJlIHJlcXVpcmVkIHRv IHJlZ2lzdGVyDQo+IHRoZW1zZWx2ZXMuDQo+ID4gPiA+ID4gTWF5YmUgeW91IGhhdmUgdXNlIGNh c2VzIHJlcXVpcmluZyByZWdpc3RyYXRpb24gb2Ygb3RoZXINCj4gPiA+ID4gPiB0aHJlYWRzLCBi dXQgdGhpcyBjYXBhYmlsaXR5IGlzIGFkZGluZyBzaWduaWZpY2FudCBjb21wbGV4aXR5LA0KPiA+ ID4gPiA+IHNvIGl0IG1pZ2h0IGJlIHdvcnRoIHNvbWUgdGhvdWdodC4NCj4gPiA+ID4gPg0KPiA+ ID4gPiBJdCB3YXMgc2ltcGxlIGVhcmxpZXIgKF9fYXRvbWljX2ZldGNoX29yKS4gVGhlIGNvbXBs ZXhpdHkgaXMgYWRkZWQNCj4gPiA+ID4gYXMNCj4gPiA+ICdudW1fdGhyZWFkcycgc2hvdWxkIG5v dCBnbyBvdXQgb2Ygc3luYy4NCj4gPiA+DQo+ID4gPiBIbW1tLi4uDQo+ID4gPg0KPiA+ID4gU28g dGhyZWFkcyBhcmUgYWxsb3dlZCB0byByZWdpc3RlciBvdGhlciB0aHJlYWRzPyAgT3IgaXMgdGhl cmUgc29tZQ0KPiA+ID4gb3RoZXIgcmVhc29uIHRoYXQgY29uY3VycmVudCByZWdpc3RyYXRpb24g aXMgcmVxdWlyZWQ/DQo+ID4gPg0KPiA+IFllcywgY29udHJvbCBwbGFuZSB0aHJlYWRzIGNhbiBy ZWdpc3RlciB0aGUgZmFzdCBwYXRoIHRocmVhZHMuIFRob3VnaCwNCj4gPiBJIGFtIG5vdCBzdXJl IGhvdyB1c2VmdWwgaXQgaXMuIEkgZGlkIG5vdCB3YW50IHRvIGFkZCB0aGUgcmVzdHJpY3Rpb24u IEkNCj4gZXhwZWN0IHRoYXQgcmVhZGVyIHRocmVhZHMgd2lsbCByZWdpc3RlciB0aGVtc2VsdmVz LiBUaGUgcmVhZGVyIHRocmVhZHMNCj4gcmVxdWlyZSBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbiBh cyB0aGV5IGFsbCB3aWxsIGJlIHJ1bm5pbmcgaW4gcGFyYWxsZWwuDQo+ID4gSWYgdGhlIHJlcXVp cmVtZW50IG9mIGtlZXBpbmcgdHJhY2sgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzIHJlZ2lzdGVy ZWQNCj4gY3VycmVudGx5IGdvZXMgYXdheSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgc2lt cGxlLg0KPiA+DQo+ID4gPHNuaXA+DQo+ID4NCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0KPiA+ID4gPiA+ID4gYi9saWIvbGlicnRlX3JjdS9y dGVfcmN1X3FzYnIuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+ID4gPiA+ID4gMDAw MDAwMDAwLi5mZjY5NmFlYWINCj4gPiA+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gPiA+ ICsrKyBiL2xpYi9saWJydGVfcmN1L3J0ZV9yY3VfcXNici5oDQo+ID4gPiA+ID4gPiBAQCAtMCww ICsxLDU1NCBAQA0KPiA+ID4gPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt My1DbGF1c2UNCj4gPiA+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggQXJtIExpbWl0ZWQg ICovDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArI2lmbmRlZiBfUlRFX1JDVV9RU0JSX0hf DQo+ID4gPiA+ID4gPiArI2RlZmluZSBfUlRFX1JDVV9RU0JSX0hfDQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiArICogQGZpbGUNCj4gPiA+ID4gPiA+ICsgKiBS VEUgUXVpZXNjZW50IFN0YXRlIEJhc2VkIFJlY2xhbWF0aW9uIChRU0JSKQ0KPiA+ID4gPiA+ID4g KyAqDQo+ID4gPiA+ID4gPiArICogUXVpZXNjZW50IFN0YXRlIChRUykgaXMgYW55IHBvaW50IGlu IHRoZSB0aHJlYWQgZXhlY3V0aW9uDQo+ID4gPiA+ID4gPiArICogd2hlcmUgdGhlIHRocmVhZCBk b2VzIG5vdCBob2xkIGEgcmVmZXJlbmNlIHRvIGEgZGF0YQ0KPiA+ID4gPiA+ID4gK3N0cnVjdHVy ZQ0KPiA+ID4gPiA+ID4gKyAqIGluIHNoYXJlZCBtZW1vcnkuIFdoaWxlIHVzaW5nIGxvY2stbGVz cyBkYXRhIHN0cnVjdHVyZXMsDQo+ID4gPiA+ID4gPiArdGhlIHdyaXRlcg0KPiA+ID4gPiA+ID4g KyAqIGNhbiBzYWZlbHkgZnJlZSBtZW1vcnkgb25jZSBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhh dmUNCj4gPiA+ID4gPiA+ICtlbnRlcmVkDQo+ID4gPiA+ID4gPiArICogcXVpZXNjZW50IHN0YXRl Lg0KPiA+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4gPiArICogVGhpcyBsaWJyYXJ5IHByb3ZpZGVz IHRoZSBhYmlsaXR5IGZvciB0aGUgcmVhZGVycyB0bw0KPiA+ID4gPiA+ID4gK3JlcG9ydCBxdWll c2NlbnQNCj4gPiA+ID4gPiA+ICsgKiBzdGF0ZSBhbmQgZm9yIHRoZSB3cml0ZXJzIHRvIGlkZW50 aWZ5IHdoZW4gYWxsIHRoZSByZWFkZXJzDQo+ID4gPiA+ID4gPiAraGF2ZQ0KPiA+ID4gPiA+ID4g KyAqIGVudGVyZWQgcXVpZXNjZW50IHN0YXRlLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gPiA+ID4gK2V4dGVy biAiQyIgew0KPiA+ID4gPiA+ID4gKyNlbmRpZg0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4g KyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4g PiA+ID4gPiA+ICsjaW5jbHVkZSA8ZXJybm8uaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRl X2NvbW1vbi5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxydGVfbWVtb3J5Lmg+DQo+ID4gPiA+ ID4gPiArI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPg0KPiA+ID4gPiA+ID4gKyNpbmNsdWRlIDxydGVf ZGVidWcuaD4NCj4gPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX2F0b21pYy5oPg0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gK2V4dGVybiBpbnQgcmN1X2xvZ190eXBlOw0KPiA+ID4gPiA+ID4g Kw0KPiA+ID4gPiA+ID4gKyNpZiBSVEVfTE9HX0RQX0xFVkVMID49IFJURV9MT0dfREVCVUcgI2Rl ZmluZQ0KPiA+ID4gUkNVX0RQX0xPRyhsZXZlbCwNCj4gPiA+ID4gPiBmbXQsDQo+ID4gPiA+ID4g PiArYXJncy4uLikgXA0KPiA+ID4gPiA+ID4gKwlydGVfbG9nKFJURV9MT0dfICMjIGxldmVsLCBy Y3VfbG9nX3R5cGUsIFwNCj4gPiA+ID4gPiA+ICsJCSIlcygpOiAiIGZtdCAiXG4iLCBfX2Z1bmNf XywgIyMgYXJncykgI2Vsc2UgI2RlZmluZQ0KPiA+ID4gPiA+ID4gK1JDVV9EUF9MT0cobGV2ZWws IGZtdCwgYXJncy4uLikgI2VuZGlmDQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyogUmVn aXN0ZXJlZCB0aHJlYWQgSURzIGFyZSBzdG9yZWQgYXMgYSBiaXRtYXAgb2YgNjRiDQo+ID4gPiA+ ID4gPiArZWxlbWVudA0KPiA+ID4gYXJyYXkuDQo+ID4gPiA+ID4gPiArICogR2l2ZW4gdGhyZWFk IGlkIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBpbmRleCBpbnRvIHRoZQ0KPiA+ID4gPiA+ID4g K2FycmF5IGFuZA0KPiA+ID4gPiA+ID4gKyAqIHRoZSBpZCB3aXRoaW4gdGhlIGFycmF5IGVsZW1l bnQuDQo+ID4gPiA+ID4gPiArICovDQo+ID4gPiA+ID4gPiArI2RlZmluZSBSVEVfUVNCUl9USFJJ RF9BUlJBWV9FTE1fU0laRSAoc2l6ZW9mKHVpbnQ2NF90KSAqIDgpDQo+ID4gPiA+ID4gI2RlZmlu ZQ0KPiA+ID4gPiA+ID4gK1JURV9RU0JSX1RIUklEX0FSUkFZX1NJWkUobWF4X3RocmVhZHMpIFwN Cj4gPiA+ID4gPiA+ICsJUlRFX0FMSUdOKFJURV9BTElHTl9NVUxfQ0VJTChtYXhfdGhyZWFkcywg XA0KPiA+ID4gPiA+ID4gKwkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJWkUpID4+IDMsDQo+ ID4gPiA+ID4gUlRFX0NBQ0hFX0xJTkVfU0laRSkgI2RlZmluZQ0KPiA+ID4gPiA+ID4gK1JURV9R U0JSX1RIUklEX0FSUkFZX0VMTSh2LCBpKSAoKHVpbnQ2NF90ICopIFwNCj4gPiA+ID4gPiA+ICsJ KChzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCAqKSh2ICsgMSkgKyB2LT5tYXhfdGhyZWFkcykgKyBp KQ0KPiA+ID4gPiA+ID4gKyNkZWZpbmUgUlRFX1FTQlJfVEhSSURfSU5ERVhfU0hJRlQgNiAjZGVm aW5lDQo+ID4gPiBSVEVfUVNCUl9USFJJRF9NQVNLDQo+ID4gPiA+ID4gPiArMHgzZg0KPiA+ID4g PiA+ICNkZWZpbmUNCj4gPiA+ID4gPiA+ICtSVEVfUVNCUl9USFJJRF9JTlZBTElEIDB4ZmZmZmZm ZmYNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBXb3JrZXIgdGhyZWFkIGNvdW50ZXIg Ki8NCj4gPiA+ID4gPiA+ICtzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCB7DQo+ID4gPiA+ID4gPiAr CXVpbnQ2NF90IGNudDsNCj4gPiA+ID4gPiA+ICsJLyoqPCBRdWllc2NlbnQgc3RhdGUgY291bnRl ci4gVmFsdWUgMCBpbmRpY2F0ZXMgdGhlIHRocmVhZA0KPiA+ID4gPiA+ID4gK2lzIG9mZmxpbmUg Ki8gfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKyNk ZWZpbmUgUlRFX1FTQlJfQ05UX1RIUl9PRkZMSU5FIDAgI2RlZmluZQ0KPiA+ID4gUlRFX1FTQlJf Q05UX0lOSVQgMQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qIFJURSBRdWllc2NlbnQg U3RhdGUgdmFyaWFibGUgc3RydWN0dXJlLg0KPiA+ID4gPiA+ID4gKyAqIFRoaXMgc3RydWN0dXJl IGhhcyB0d28gZWxlbWVudHMgdGhhdCB2YXJ5IGluIHNpemUgYmFzZWQgb24NCj4gPiA+ID4gPiA+ ICt0aGUNCj4gPiA+ID4gPiA+ICsgKiAnbWF4X3RocmVhZHMnIHBhcmFtZXRlci4NCj4gPiA+ID4g PiA+ICsgKiAxKSBRdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheQ0KPiA+ID4gPiA+ID4gKyAq IDIpIFJlZ2lzdGVyIHRocmVhZCBJRCBhcnJheSAgKi8gc3RydWN0IHJ0ZV9yY3VfcXNiciB7DQo+ ID4gPiA+ID4gPiArCXVpbnQ2NF90IHRva2VuIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gPiA+ ID4gPiArCS8qKjwgQ291bnRlciB0byBhbGxvdyBmb3IgbXVsdGlwbGUgY29uY3VycmVudCBxdWll c2NlbnQNCj4gPiA+ID4gPiA+ICtzdGF0ZSBxdWVyaWVzICovDQo+ID4gPiA+ID4gPiArDQo+ID4g PiA+ID4gPiArCXVpbnQzMl90IG51bV9lbGVtcyBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4g PiA+ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGhyZWFkIElEIGFycmF5ICov DQo+ID4gPiA+ID4gPiArCXVpbnQzMl90IG51bV90aHJlYWRzOw0KPiA+ID4gPiA+ID4gKwkvKio8 IE51bWJlciBvZiB0aHJlYWRzIGN1cnJlbnRseSB1c2luZyB0aGlzIFFTIHZhcmlhYmxlICovDQo+ ID4gPiA+ID4gPiArCXVpbnQzMl90IG1heF90aHJlYWRzOw0KPiA+ID4gPiA+ID4gKwkvKio8IE1h eGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdXNpbmcgdGhpcyBRUyB2YXJpYWJsZSAqLw0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCBxc2JyX2NudFsw XSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiA+ID4gKwkvKio8IFF1aWVzY2VudCBzdGF0 ZSBjb3VudGVyIGFycmF5IG9mICdtYXhfdGhyZWFkcycNCj4gZWxlbWVudHMNCj4gPiA+ID4gPiA+ ICsqLw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkvKio8IFJlZ2lzdGVyZWQgdGhyZWFk IElEcyBhcmUgc3RvcmVkIGluIGEgYml0bWFwIGFycmF5LA0KPiA+ID4gPiA+ID4gKwkgKiAgIGFm dGVyIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheS4NCj4gPiA+ID4gPiA+ICsJICov DQo+ID4gPiA+ID4gPiArfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+ID4gPiA+ID4gKw0KPiA+ DQo+ID4gPHNuaXA+DQo+ID4NCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBDaGVjayB0 aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgZm9yIHJlZ2lzdGVyZWQgdGhyZWFkcw0KPiA+ID4g PiA+ID4gK29ubHksIGFzc3VtaW5nDQo+ID4gPiA+ID4gPiArICogdGhhdCBub3QgYWxsIHRocmVh ZHMgaGF2ZSByZWdpc3RlcmVkLg0KPiA+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ID4gK3N0YXRp YyBfX3J0ZV9hbHdheXNfaW5saW5lIGludA0KPiA+ID4gPiA+ID4gK19fcmN1X3FzYnJfY2hlY2tf c2VsZWN0aXZlKHN0cnVjdCBydGVfcmN1X3FzYnIgKnYsIHVpbnQ2NF90DQo+ID4gPiA+ID4gPiAr dCwgYm9vbA0KPiA+ID4gPiA+ID4gK3dhaXQpIHsNCj4gPiA+ID4gPiA+ICsJdWludDMyX3QgaSwg aiwgaWQ7DQo+ID4gPiA+ID4gPiArCXVpbnQ2NF90IGJtYXA7DQo+ID4gPiA+ID4gPiArCXVpbnQ2 NF90IGM7DQo+ID4gPiA+ID4gPiArCXVpbnQ2NF90ICpyZWdfdGhyZWFkX2lkOw0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKwlmb3IgKGkgPSAwLCByZWdfdGhyZWFkX2lkID0gUlRFX1FTQlJf VEhSSURfQVJSQVlfRUxNKHYsDQo+IDApOw0KPiA+ID4gPiA+ID4gKwkJaSA8IHYtPm51bV9lbGVt czsNCj4gPiA+ID4gPiA+ICsJCWkrKywgcmVnX3RocmVhZF9pZCsrKSB7DQo+ID4gPiA+ID4gPiAr CQkvKiBMb2FkIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgdGhyZWFkIGJpdCBtYXANCj4gYmVmb3Jl DQo+ID4gPiA+ID4gPiArCQkgKiBsb2FkaW5nIHRoZSByZWFkZXIgdGhyZWFkIHF1aWVzY2VudCBz dGF0ZQ0KPiBjb3VudGVycy4NCj4gPiA+ID4gPiA+ICsJCSAqLw0KPiA+ID4gPiA+ID4gKwkJYm1h cCA9IF9fYXRvbWljX2xvYWRfbihyZWdfdGhyZWFkX2lkLA0KPiA+ID4gPiA+IF9fQVRPTUlDX0FD UVVJUkUpOw0KPiA+ID4gPiA+ID4gKwkJaWQgPSBpIDw8IFJURV9RU0JSX1RIUklEX0lOREVYX1NI SUZUOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJd2hpbGUgKGJtYXApIHsNCj4gPiA+ ID4gPiA+ICsJCQlqID0gX19idWlsdGluX2N0emwoYm1hcCk7DQo+ID4gPiA+ID4gPiArCQkJUkNV X0RQX0xPRyhERUJVRywNCj4gPiA+ID4gPiA+ICsJCQkJIiVzOiBjaGVjazogdG9rZW4gPSAlbHUs IHdhaXQgPSAlZCwNCj4gQml0IE1hcA0KPiA+ID4gPiA+ID0gMHglbHgsIFRocmVhZCBJRCA9ICVk IiwNCj4gPiA+ID4gPiA+ICsJCQkJX19mdW5jX18sIHQsIHdhaXQsIGJtYXAsIGlkICsgaik7DQo+ ID4gPiA+ID4gPiArCQkJYyA9IF9fYXRvbWljX2xvYWRfbigNCj4gPiA+ID4gPiA+ICsJCQkJCSZ2 LT5xc2JyX2NudFtpZCArIGpdLmNudCwNCj4gPiA+ID4gPiA+ICsJCQkJCV9fQVRPTUlDX0FDUVVJ UkUpOw0KPiA+ID4gPiA+ID4gKwkJCVJDVV9EUF9MT0coREVCVUcsDQo+ID4gPiA+ID4gPiArCQkJ CSIlczogc3RhdHVzOiB0b2tlbiA9ICVsdSwgd2FpdCA9ICVkLA0KPiBUaHJlYWQNCj4gPiA+ID4g PiBRUyBjbnQgPSAlbHUsIFRocmVhZCBJRCA9ICVkIiwNCj4gPiA+ID4gPiA+ICsJCQkJX19mdW5j X18sIHQsIHdhaXQsIGMsIGlkK2opOw0KPiA+ID4gPiA+ID4gKwkJCS8qIENvdW50ZXIgaXMgbm90 IGNoZWNrZWQgZm9yIHdyYXAtYXJvdW5kDQo+ID4gPiA+ID4gY29uZGl0aW9uDQo+ID4gPiA+ID4g PiArCQkJICogYXMgaXQgaXMgYSA2NGIgY291bnRlci4NCj4gPiA+ID4gPiA+ICsJCQkgKi8NCj4g PiA+ID4gPiA+ICsJCQlpZiAodW5saWtlbHkoYyAhPQ0KPiBSVEVfUVNCUl9DTlRfVEhSX09GRkxJ TkUgJiYgYw0KPiA+ID4gPiA+IDwgdCkpIHsNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFRoaXMgYXNz dW1lcyB0aGF0IGEgNjQtYml0IGNvdW50ZXIgd29uJ3Qgb3ZlcmZsb3csIHdoaWNoIGlzDQo+ID4g PiA+ID4gY2xvc2UgZW5vdWdoIHRvIHRydWUgZ2l2ZW4gY3VycmVudCBDUFUgY2xvY2sgZnJlcXVl bmNpZXMuICA7LSkNCj4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gKwkJCQkvKiBUaGlzIHRocmVhZCBp cyBub3QgaW4gcXVpZXNjZW50DQo+IHN0YXRlICovDQo+ID4gPiA+ID4gPiArCQkJCWlmICghd2Fp dCkNCj4gPiA+ID4gPiA+ICsJCQkJCXJldHVybiAwOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ ID4gKwkJCQlydGVfcGF1c2UoKTsNCj4gPiA+ID4gPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgbWln aHQgaGF2ZQ0KPiB1bnJlZ2lzdGVyZWQuDQo+ID4gPiA+ID4gPiArCQkJCSAqIFJlLXJlYWQgdGhl IGJpdG1hcC4NCj4gPiA+ID4gPiA+ICsJCQkJICovDQo+ID4gPiA+ID4gPiArCQkJCWJtYXAgPQ0K PiBfX2F0b21pY19sb2FkX24ocmVnX3RocmVhZF9pZCwNCj4gPiA+ID4gPiA+ICsJCQkJCQlfX0FU T01JQ19BQ1FVSVJFKTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJCQkJY29udGludWU7 DQo+ID4gPiA+ID4gPiArCQkJfQ0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKwkJCWJtYXAg Jj0gfigxVUwgPDwgaik7DQo+ID4gPiA+ID4gPiArCQl9DQo+ID4gPiA+ID4gPiArCX0NCj4gPiA+ ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsJcmV0dXJuIDE7DQo+ID4gPiA+ID4gPiArfQ0KPiA+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qIENoZWNrIHRoZSBxdWllc2NlbnQgc3RhdGUgY291bnRl ciBmb3IgYWxsIHRocmVhZHMsDQo+ID4gPiA+ID4gPiArYXNzdW1pbmcgdGhhdA0KPiA+ID4gPiA+ ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJlZ2lzdGVyZWQuDQo+ID4gPiA+ID4gPiArICov DQo+ID4gPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgaW50IF9fcmN1X3FzYnJf Y2hlY2tfYWxsKHN0cnVjdA0KPiA+ID4gPiA+ID4gK3J0ZV9yY3VfcXNiciAqdiwgdWludDY0X3Qg dCwgYm9vbA0KPiA+ID4gPiA+ID4gK3dhaXQpDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBEb2VzIGNo ZWNraW5nIHRoZSBiaXRtYXAgcmVhbGx5IHRha2UgbG9uZyBlbm91Z2ggdG8gbWFrZSB0aGlzDQo+ ID4gPiA+ID4gd29ydGh3aGlsZSBhcyBhIHNlcGFyYXRlIGZ1bmN0aW9uPyAgSSB3b3VsZCB0aGlu ayB0aGF0IHRoZQ0KPiA+ID4gPiA+IGJpdG1hcC1jaGVja2luZyB0aW1lIHdvdWxkIGJlIGxvc3Qg aW4gdGhlIG5vaXNlIG9mIGNhY2hlIG1pc3Nlcw0KPiA+ID4gPiA+IGZyb20NCj4gPiA+IHRoZSAt PmNudCBsb2Fkcy4NCj4gPiA+ID4NCj4gPiA+ID4gSXQgYXZvaWRzIGFjY2Vzc2luZyBvbmUgY2Fj aGUgbGluZS4gSSB0aGluayB0aGlzIGlzIHdoZXJlIHRoZQ0KPiA+ID4gPiBzYXZpbmdzIGFyZQ0K PiA+ID4gKG1heSBiZSBpbiB0aGVvcnkpLiBUaGlzIGlzIHRoZSBtb3N0IHByb2JhYmxlIHVzZSBj YXNlLg0KPiA+ID4gPiBPbiB0aGUgb3RoZXIgaGFuZCwgX19yY3VfcXNicl9jaGVja19zZWxlY3Rp dmUoKSB3aWxsIHJlc3VsdCBpbg0KPiA+ID4gPiBzYXZpbmdzDQo+ID4gPiAoZGVwZW5kaW5nIG9u IGhvdyBtYW55IHRocmVhZHMgYXJlIGN1cnJlbnRseSByZWdpc3RlcmVkKSBieSBhdm9pZGluZw0K PiA+ID4gYWNjZXNzaW5nIHVud2FudGVkIGNvdW50ZXJzLg0KPiA+ID4NCj4gPiA+IERvIHlvdSBy ZWFsbHkgZXhwZWN0IHRvIGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbnkga2luZCBvZiBm YXN0cGF0aD8NCj4gPg0KPiA+IFllcy4gRm9yIHNvbWUgb2YgdGhlIGxpYnJhcmllcyAocnRlX2hh c2gpLCB0aGUgd3JpdGVyIGlzIG9uIHRoZSBmYXN0IHBhdGguDQo+ID4NCj4gPiA+DQo+ID4gPiA+ ID4gU3VyZSwgaWYgeW91IGludm9rZSBfX3JjdV9xc2JyX2NoZWNrX3NlbGVjdGl2ZSgpIGluIGEg dGlnaHQgbG9vcA0KPiA+ID4gPiA+IGluIHRoZSBhYnNlbmNlIG9mIHJlYWRlcnMsIHlvdSBtaWdo dCBzZWUgX19yY3VfcXNicl9jaGVja19hbGwoKQ0KPiA+ID4gPiA+IGJlaW5nIGEgYml0IGZhc3Rl ci4gIEJ1dCBpcyB0aGF0IHJlYWxseSB3aGF0IERQREsgZG9lcz8NCj4gPiA+ID4gSSBzZWUgaW1w cm92ZW1lbnRzIGluIHRoZSBzeW50aGV0aWMgdGVzdCBjYXNlIChzaW1pbGFyIHRvIHRoZSBvbmUN Cj4gPiA+ID4geW91DQo+ID4gPiBoYXZlIGRlc2NyaWJlZCwgYXJvdW5kIDI3JSkuIEhvd2V2ZXIs IGluIHRoZSBtb3JlIHByYWN0aWNhbCB0ZXN0DQo+ID4gPiBjYXNlcyBJIGRvIG5vdCBzZWUgYW55 IGRpZmZlcmVuY2UuDQo+ID4gPg0KPiA+ID4gSWYgdGhlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50 IG9ubHkgb2NjdXJzIGluIGEgc3ludGhldGljIHRlc3QgY2FzZSwNCj4gPiA+IGRvZXMgaXQgcmVh bGx5IG1ha2Ugc2Vuc2UgdG8gb3B0aW1pemUgZm9yIGl0Pw0KPiA+IEkgaGFkIHRvIGZpeCBmZXcg aXNzdWVzIGluIHRoZSBwZXJmb3JtYW5jZSB0ZXN0IGNhc2VzIGFuZCBhZGRlZCBtb3JlIHRvDQo+ IGRvIHRoZSBjb21wYXJpc29uLiBUaGVzZSBjaGFuZ2VzIGFyZSBpbiB2NS4NCj4gPiBUaGVyZSBh cmUgNCBwZXJmb3JtYW5jZSB0ZXN0cyBpbnZvbHZpbmcgdGhpcyBBUEkuDQo+ID4gMSkgMSBXcml0 ZXIsICdOJyByZWFkZXJzDQo+ID4gICAgICBXcml0ZXI6IHFzYnJfc3RhcnQsIHFzYnJfY2hlY2so d2FpdCA9IHRydWUpDQo+ID4gICAgICBSZWFkZXJzOiBxc2JyX3F1aWVzY2VudA0KPiA+IDIpICdO JyB3cml0ZXJzDQo+ID4gICAgICBXcml0ZXJzOiBxc2JyX3N0YXJ0LCBxc2JyX2NoZWNrKHdhaXQg PT0gZmFsc2UpDQo+ID4gMykgMSBXcml0ZXIsICdOJyByZWFkZXJzICh0aGlzIHRlc3QgdXNlcyB0 aGUgbG9jay1mcmVlIHJ0ZV9oYXNoIGRhdGENCj4gc3RydWN0dXJlKQ0KPiA+ICAgICAgV3JpdGVy OiBoYXNoX2RlbCwgcXNicl9zdGFydCwgcXNicl9jaGVjayh3YWl0ID0gdHJ1ZSksIHZhbGlkYXRl IHRoYXQNCj4gdGhlIHJlYWRlciB3YXMgYWJsZSB0byBjb21wbGV0ZSBpdHMgd29yayBzdWNjZXNz ZnVsbHkNCj4gPiAgICAgIFJlYWRlcnM6IHRocmVhZF9vbmxpbmUsIGhhc2hfbG9va3VwLCBhY2Nl c3MgdGhlIHBvaW50ZXIgLSBkbyBzb21lDQo+ID4gd29yayBvbiBpdCwgcXNicl9xdWllc2NlbnQs IHRocmVhZF9vZmZsaW5lDQo+ID4gNCkgU2FtZSBhcyB0ZXN0IDMpIGJ1dCBxc2JyX2NoZWNrICh3 YWl0ID09IGZhbHNlKQ0KPiA+DQo+ID4gVGhlcmUgYXJlIDIgc2V0cyBvZiB0aGVzZSB0ZXN0cy4N Cj4gPiBhKSBRUyB2YXJpYWJsZSBpcyBjcmVhdGVkIHdpdGggbnVtYmVyIG9mIHRocmVhZHMgc2Ft ZSBhcyBudW1iZXIgb2YNCj4gPiByZWFkZXJzIC0gdGhpcyB3aWxsIGV4ZXJjaXNlIF9fcmN1X3Fz YnJfY2hlY2tfYWxsDQo+ID4gYikgUVMgdmFyaWFibGUgaXMgY3JlYXRlZCB3aXRoIDEyOCB0aHJl YWRzLCBudW1iZXIgb2YgcmVnaXN0ZXJlZA0KPiA+IHRocmVhZHMgaXMgc2FtZSBhcyBpbiBhKSAt IHRoaXMgd2lsbCBleGVyY2lzZQ0KPiA+IF9fcmN1X3FzYnJfY2hlY2tfc2VsZWN0aXZlDQo+ID4N Cj4gPiBGb2xsb3dpbmcgYXJlIHRoZSByZXN1bHRzIG9uIHg4NiAoRTUtMjY2MCB2NCBAIDIuMDBH SHopIGNvbXBhcmluZyBmcm9tDQo+ID4gYSkgdG8gYikgKG9uIHg4NiBpbiBteSBzZXR1cCwgdGhl IHJlc3VsdHMgYXJlIG5vdCB2ZXJ5IHN0YWJsZSBiZXR3ZWVuDQo+ID4gcnVucykNCj4gPiAxKSAy NSUNCj4gPiAyKSAtMyUNCj4gPiAzKSAtMC40JQ0KPiA+IDQpIDEuMzglDQo+ID4NCj4gPiBGb2xs b3dpbmcgYXJlIHRoZSByZXN1bHRzIG9uIGFuIEFybSBzeXN0ZW0gY29tcGFyaW5nIGZyb20gYSkg dG8gYikNCj4gPiAocmVzdWx0cyBhcmUgbm90IHByZXR0eSBzdGFibGUgYmV0d2VlbiBydW5zKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eDQpDb3JyZWN0aW9uLCBvbiB0aGUgQXJtIHN5 c3RlbSwgdGhlIHJlc3VsdHMgKmFyZSogc3RhYmxlIChjb3B5LXBhc3RlIGVycm9yKQ0KDQo+ID4g MSkgLTMuNDUlDQo+ID4gMikgMCUNCj4gPiAzKSAtMC4wMyUNCj4gPiA0KSAtMC4wNCUNCj4gPg0K PiA+IEtvbnN0YW50aW4sIGlzIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdHMgb24geW91ciBz ZXR1cCBhbmQgbG9vayBhdCB0aGUNCj4gcmVzdWx0cz8NCj4gDQo+IEkgZGlkIHJ1biBWNSBvbiBt eSBib3ggKFNLWCAyLjEgR0h6KSB3aXRoIDE3IGxjb3JlcyAoMSBwaHlzaWNhbCBjb3JlIHBlcg0K PiB0aHJlYWQpLg0KPiBEaWRuJ3Qgbm90aWNlIGFueSBzaWdpbmlmY2F0biBmbHVjdHVhdGlvbnMg YmV0d2VlbiBydW5zLCBvdXRwdXQgYmVsb3cuDQo+IA0KPiA+cmN1X3FzYnJfcGVyZl9hdXRvdGVz RVNDWzBLdA0KPiBOdW1iZXIgb2YgY29yZXMgcHJvdmlkZWQgPSAxNw0KPiBQZXJmIHRlc3Qgd2l0 aCBhbGwgcmVhZGVyIHRocmVhZHMgcmVnaXN0ZXJlZA0KPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiANCj4gUGVyZiBUZXN0OiAxNiBSZWFkZXJzLzEgV3Jp dGVyKCd3YWl0JyBpbiBxc2JyX2NoZWNrID09IHRydWUpIFRvdGFsIFJDVQ0KPiB1cGRhdGVzID0g NjU3MDcyMzI4OTkgQ3ljbGVzIHBlciAxMDAwIHVwZGF0ZXM6IDE4NDgyIFRvdGFsIFJDVSBjaGVj a3MgPQ0KPiAyMDAwMDAwMCBDeWNsZXMgcGVyIDEwMDAgY2hlY2tzOiAzNzk0OTkxDQo+IA0KPiBQ ZXJmIFRlc3Q6IDE3IFJlYWRlcnMNCj4gVG90YWwgUkNVIHVwZGF0ZXMgPSAxNzAwMDAwMDAwDQo+ IEN5Y2xlcyBwZXIgMTAwMCB1cGRhdGVzOiAyMTI4DQo+IA0KPiBQZXJmIHRlc3Q6IDE3IFdyaXRl cnMgKCd3YWl0JyBpbiBxc2JyX2NoZWNrID09IGZhbHNlKSBUb3RhbCBSQ1UgY2hlY2tzID0NCj4g MzQwMDAwMDAwIEN5Y2xlcyBwZXIgMTAwMCBjaGVja3M6IDEwMDMwDQo+IA0KPiBQZXJmIHRlc3Q6 IDEgd3JpdGVyLCAxNyByZWFkZXJzLCAxIFFTQlIgdmFyaWFibGUsIDEgUVNCUiBRdWVyeSwgQmxv Y2tpbmcNCj4gUVNCUiBDaGVjayBGb2xsb3dpbmcgbnVtYmVycyBpbmNsdWRlIGNhbGxzIHRvIHJ0 ZV9oYXNoIGZ1bmN0aW9ucyBDeWNsZXMNCj4gcGVyIDEgdXBkYXRlKG9ubGluZS91cGRhdGUvb2Zm bGluZSk6IDE5ODQ2OTYgQ3ljbGVzIHBlciAxIGNoZWNrKHN0YXJ0LA0KPiBjaGVjayk6IDI2MTkw MDINCj4gDQo+IFBlcmYgdGVzdDogMSB3cml0ZXIsIDE3IHJlYWRlcnMsIDEgUVNCUiB2YXJpYWJs ZSwgMSBRU0JSIFF1ZXJ5LCBOb24tDQo+IEJsb2NraW5nIFFTQlIgY2hlY2sgRm9sbG93aW5nIG51 bWJlcnMgaW5jbHVkZSBjYWxscyB0byBydGVfaGFzaCBmdW5jdGlvbnMNCj4gQ3ljbGVzIHBlciAx IHVwZGF0ZShvbmxpbmUvdXBkYXRlL29mZmxpbmUpOiAyMDI4MDMwIEN5Y2xlcyBwZXIgMQ0KPiBj aGVjayhzdGFydCwgY2hlY2spOiAyODc2NjY3DQo+IA0KPiBQZXJmIHRlc3Qgd2l0aCBzb21lIG9m IHJlYWRlciB0aHJlYWRzIHJlZ2lzdGVyZWQNCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+IA0KPiBQZXJmIFRlc3Q6IDE2IFJlYWRlcnMvMSBXcml0 ZXIoJ3dhaXQnIGluIHFzYnJfY2hlY2sgPT0gdHJ1ZSkgVG90YWwgUkNVDQo+IHVwZGF0ZXMgPSA2 ODg1MDA3MzA1NSBDeWNsZXMgcGVyIDEwMDAgdXBkYXRlczogMjU0OTAgVG90YWwgUkNVIGNoZWNr cyA9DQo+IDIwMDAwMDAwIEN5Y2xlcyBwZXIgMTAwMCBjaGVja3M6IDU0ODQ0MDMNCj4gDQo+IFBl cmYgVGVzdDogMTcgUmVhZGVycw0KPiBUb3RhbCBSQ1UgdXBkYXRlcyA9IDE3MDAwMDAwMDANCj4g Q3ljbGVzIHBlciAxMDAwIHVwZGF0ZXM6IDIxMjcNCj4gDQo+IFBlcmYgdGVzdDogMTcgV3JpdGVy cyAoJ3dhaXQnIGluIHFzYnJfY2hlY2sgPT0gZmFsc2UpIFRvdGFsIFJDVSBjaGVja3MgPQ0KPiAz NDAwMDAwMDAgQ3ljbGVzIHBlciAxMDAwIGNoZWNrczogMTAwMzQNCj4gDQo+IFBlcmYgdGVzdDog MSB3cml0ZXIsIDE3IHJlYWRlcnMsIDEgUVNCUiB2YXJpYWJsZSwgMSBRU0JSIFF1ZXJ5LCBCbG9j a2luZw0KPiBRU0JSIENoZWNrIEZvbGxvd2luZyBudW1iZXJzIGluY2x1ZGUgY2FsbHMgdG8gcnRl X2hhc2ggZnVuY3Rpb25zIEN5Y2xlcw0KPiBwZXIgMSB1cGRhdGUob25saW5lL3VwZGF0ZS9vZmZs aW5lKTogMzYwNDQ4OSBDeWNsZXMgcGVyIDEgY2hlY2soc3RhcnQsDQo+IGNoZWNrKTogNzA3NzM3 Mg0KPiANCj4gUGVyZiB0ZXN0OiAxIHdyaXRlciwgMTcgcmVhZGVycywgMSBRU0JSIHZhcmlhYmxl LCAxIFFTQlIgUXVlcnksIE5vbi0NCj4gQmxvY2tpbmcgUVNCUiBjaGVjayBGb2xsb3dpbmcgbnVt YmVycyBpbmNsdWRlIGNhbGxzIHRvIHJ0ZV9oYXNoIGZ1bmN0aW9ucw0KPiBDeWNsZXMgcGVyIDEg dXBkYXRlKG9ubGluZS91cGRhdGUvb2ZmbGluZSk6IDM5MzY4MzEgQ3ljbGVzIHBlciAxDQo+IGNo ZWNrKHN0YXJ0LCBjaGVjayk6IDcyNjI3MzgNCj4gDQo+IA0KPiBUZXN0IE9LDQpUaGFua3MgZm9y IHJ1bm5pbmcgdGhlIHRlc3QuIEZyb20gdGhlIG51bWJlcnMsIHRoZSBjb21wYXJpc29uIGlzIGFz IGZvbGxvd3M6DQoxKSAtNDQlDQoyKSAwLjAzJQ0KMykgLTE3MCUNCjQpIC0xNTIlDQoNClRyZW5k IGlzIHRoZSBzYW1lIGJldHdlZW4geDg2IGFuZCBBcm0uIEhvd2V2ZXIsIHg4NiBoYXMgZHJhc3Rp YyBpbXByb3ZlbWVudCB3aXRoIF9fcmN1X3FzYnJfY2hlY2tfYWxsIGZ1bmN0aW9uLg0KDQo+IA0K PiBLb25zdGFudGluDQoNCg==