From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Anders K. Pedersen | Cohaesio" Subject: [PATCH v4 nf-next] netfilter: nft: introduce routing expression Date: Fri, 28 Oct 2016 05:54:15 +0000 Message-ID: <1477634055.1059.27.camel@cohaesio.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 To: "netfilter-devel@vger.kernel.org" , "pablo@netfilter.org" Return-path: Received: from bender.cohaesio.com ([212.97.128.130]:36795 "EHLO mail.cohaesio.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751795AbcJ1FyX (ORCPT ); Fri, 28 Oct 2016 01:54:23 -0400 Content-Language: en-US Content-ID: Sender: netfilter-devel-owner@vger.kernel.org List-ID: RnJvbTogQW5kZXJzIEsuIFBlZGVyc2VuIDxha3BAY29oYWVzaW8uY29tPg0KDQpJbnRyb2R1Y2Vz IGFuIG5mdGFibGVzIHJ0IGV4cHJlc3Npb24gZm9yIHJvdXRpbmcgcmVsYXRlZCBkYXRhIHdpdGgg c3VwcG9ydA0KZm9yIG5leHRob3AgKGkuZS4gdGhlIGRpcmVjdGx5IGNvbm5lY3RlZCBJUCBhZGRy ZXNzIHRoYXQgYW4gb3V0Z29pbmcgcGFja2V0DQppcyBzZW50IHRvKSwgd2hpY2ggY2FuIGJlIHVz ZWQgZWl0aGVyIGZvciBtYXRjaGluZyBvciBhY2NvdW50aW5nLCBlZy4NCg0KICMgbmZ0IGFkZCBy dWxlIGZpbHRlciBwb3N0cm91dGluZyBcDQoJaXAgZGFkZHIgMTkyLjE2OC4xLjAvMjQgcnQgbmV4 dGhvcCAhPSAxOTIuMTY4LjAuMSBkcm9wDQoNClRoaXMgd2lsbCBkcm9wIGFueSB0cmFmZmljIHRv IDE5Mi4xNjguMS4wLzI0IHRoYXQgaXMgbm90IHJvdXRlZCB2aWENCjE5Mi4xNjguMC4xLg0KDQog IyBuZnQgYWRkIHJ1bGUgZmlsdGVyIHBvc3Ryb3V0aW5nIFwNCglmbG93IHRhYmxlIGFjY3QgeyBy dCBuZXh0aG9wIHRpbWVvdXQgNjAwcyBjb3VudGVyIH0NCiAjIG5mdCBhZGQgcnVsZSBpcDYgZmls dGVyIHBvc3Ryb3V0aW5nIFwNCglmbG93IHRhYmxlIGFjY3QgeyBydCBuZXh0aG9wIHRpbWVvdXQg NjAwcyBjb3VudGVyIH0NCg0KVGhlc2UgcnVsZXMgY291bnQgb3V0Z29pbmcgdHJhZmZpYyBwZXIg bmV4dGhvcC4gTm90ZSB0aGF0IHRoZSB0aW1lb3V0DQpyZWxlYXNlcyBhbiBlbnRyeSBpZiBubyB0 cmFmZmljIGlzIHNlZW4gZm9yIHRoaXMgbmV4dGhvcCB3aXRoaW4gMTAgbWludXRlcy4NCg0KICMg bmZ0IGFkZCBydWxlIGluZXQgZmlsdGVyIHBvc3Ryb3V0aW5nIFwNCglldGhlciB0eXBlIGlwIFwN CglmbG93IHRhYmxlIGFjY3QgeyBydCBuZXh0aG9wIHRpbWVvdXQgNjAwcyBjb3VudGVyIH0NCiAj IG5mdCBhZGQgcnVsZSBpbmV0IGZpbHRlciBwb3N0cm91dGluZyBcDQoJZXRoZXIgdHlwZSBpcDYg XA0KCWZsb3cgdGFibGUgYWNjdCB7IHJ0IG5leHRob3AgdGltZW91dCA2MDBzIGNvdW50ZXIgfQ0K DQpTYW1lIGFzIGFib3ZlLCBidXQgdmlhIHRoZSBpbmV0IGZhbWlseSwgd2hlcmUgdGhlIGV0aGVy IHR5cGUgbXVzdCBiZQ0Kc3BlY2lmaWVkIGV4cGxpY2l0bHkuDQoNCiJydCBjbGFzc2lkIiBpcyBh bHNvIGltcGxlbWVudGVkIGlkZW50aWNhbCB0byAibWV0YSBydGNsYXNzaWQiLCBzaW5jZSBpdA0K aXMgbW9yZSBsb2dpY2FsIHRvIGhhdmUgdGhpcyBtYXRjaCBpbiB0aGUgcm91dGluZyBleHByZXNz aW9uIGdvaW5nIGZvcndhcmQuDQoNClNpZ25lZC1vZmYtYnk6IEFuZGVycyBLLiBQZWRlcnNlbiA8 YWtwQGNvaGFlc2lvLmNvbT4NCi0tLQ0KdjQNCi0gaW1wbGVtZW50IGV2ZXJ5dGhpbmcgZGlyZWN0 bHkgaW4gbmZ0X3J0LmMNCi0gZHJvcCBzZXBhcmF0ZSBuZnRfcnRfaXB2NCwgbmZ0X3J0X2lwdjYs IGFuZCBuZnRfcnRfaW5ldA0KLSBkcm9wIE5GVEFfUlRfRkFNSUxZIGluIGZhdm9yIG9mIHNlcGFy YXRlIE5GVF9SVF9ORVhUSE9QNCBhbmQNCiAgTkZUX1JUX05FWFRIT1A2DQotIGRyb3Agd2Fybmlu ZyB3aGVuIHBrdC0+cGYgZG9lc24ndCBtYXRjaCByZXF1ZXN0ZWQgSVAgZmFtaWx5DQotIGFkanVz dCBuZnQgZXhhbXBsZXMgaW4gZGVzY3JpcHRpb24gdG8gdXBkYXRlZCBzeW50YXgNCnYzDQotIG5m dF9ydF9pbmV0OiBVc2UgaW5pdCBhbmQgZXZhbCBmdW5jdGlvbnMgZnJvbSBuZnRfcnRfaXB2NCBh bmQgbmZ0X3J0X2lwdjYNCnYyDQotIGZpeCBjb21tZW50cyBmb3IgZW51bSBuZnRfcnRfa2V5cw0K LSByZW1vdmUgbmZ0X3J0Kl9zZWxlY3Rfb3BzDQoNCiBpbmNsdWRlL3VhcGkvbGludXgvbmV0Zmls dGVyL25mX3RhYmxlcy5oIHwgIDI3ICsrKysrKw0KIG5ldC9uZXRmaWx0ZXIvS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgfCAgIDYgKysNCiBuZXQvbmV0ZmlsdGVyL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgIHwgICAxICsNCiBuZXQvbmV0ZmlsdGVyL25mdF9ydC5jICAgICAgICAgICAgICAg ICAgIHwgMTUzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiA0IGZpbGVzIGNoYW5n ZWQsIDE4NyBpbnNlcnRpb25zKCspDQoNCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgv bmV0ZmlsdGVyL25mX3RhYmxlcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90 YWJsZXMuaA0KaW5kZXggYTA1NGFkMi4uMTRlNWY2MSAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvdWFw aS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgNCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9u ZXRmaWx0ZXIvbmZfdGFibGVzLmgNCkBAIC03NTksNiArNzU5LDE5IEBAIGVudW0gbmZ0X21ldGFf a2V5cyB7DQogfTsNCiANCiAvKioNCisgKiBlbnVtIG5mdF9ydF9rZXlzIC0gbmZfdGFibGVzIHJv dXRpbmcgZXhwcmVzc2lvbiBrZXlzDQorICoNCisgKiBATkZUX1JUX0NMQVNTSUQ6IHJlYWxtIHZh bHVlIG9mIHBhY2tldCdzIHJvdXRlIChza2ItPmRzdC0+dGNsYXNzaWQpDQorICogQE5GVF9SVF9O RVhUSE9QNDogcm91dGluZyBuZXh0aG9wIGZvciBJUHY0DQorICogQE5GVF9SVF9ORVhUSE9QNjog cm91dGluZyBuZXh0aG9wIGZvciBJUHY2DQorICovDQorZW51bSBuZnRfcnRfa2V5cyB7DQorCU5G VF9SVF9DTEFTU0lELA0KKwlORlRfUlRfTkVYVEhPUDQsDQorCU5GVF9SVF9ORVhUSE9QNiwNCit9 Ow0KKw0KKy8qKg0KICAqIGVudW0gbmZ0X2hhc2hfYXR0cmlidXRlcyAtIG5mX3RhYmxlcyBoYXNo IGV4cHJlc3Npb24gbmV0bGluayBhdHRyaWJ1dGVzDQogICoNCiAgKiBATkZUQV9IQVNIX1NSRUc6 IHNvdXJjZSByZWdpc3RlciAoTkxBX1UzMikNCkBAIC03OTcsNiArODEwLDIwIEBAIGVudW0gbmZ0 X21ldGFfYXR0cmlidXRlcyB7DQogI2RlZmluZSBORlRBX01FVEFfTUFYCQkoX19ORlRBX01FVEFf TUFYIC0gMSkNCiANCiAvKioNCisgKiBlbnVtIG5mdF9ydF9hdHRyaWJ1dGVzIC0gbmZfdGFibGVz IHJvdXRpbmcgZXhwcmVzc2lvbiBuZXRsaW5rIGF0dHJpYnV0ZXMNCisgKg0KKyAqIEBORlRBX1JU X0RSRUc6IGRlc3RpbmF0aW9uIHJlZ2lzdGVyIChOTEFfVTMyKQ0KKyAqIEBORlRBX1JUX0tFWTog cm91dGluZyBkYXRhIGl0ZW0gdG8gbG9hZCAoTkxBX1UzMjogbmZ0X3J0X2tleXMpDQorICovDQor ZW51bSBuZnRfcnRfYXR0cmlidXRlcyB7DQorCU5GVEFfUlRfVU5TUEVDLA0KKwlORlRBX1JUX0RS RUcsDQorCU5GVEFfUlRfS0VZLA0KKwlfX05GVEFfUlRfTUFYDQorfTsNCisjZGVmaW5lIE5GVEFf UlRfTUFYCQkoX19ORlRBX1JUX01BWCAtIDEpDQorDQorLyoqDQogICogZW51bSBuZnRfY3Rfa2V5 cyAtIG5mX3RhYmxlcyBjdCBleHByZXNzaW9uIGtleXMNCiAgKg0KICAqIEBORlRfQ1RfU1RBVEU6 IGNvbm50cmFjayBzdGF0ZSAoYml0bWFzayBvZiBlbnVtIGlwX2Nvbm50cmFja19pbmZvKQ0KZGlm ZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZw0K aW5kZXggOWJjZjg5OS4uYzI0YjU3NiAxMDA2NDQNCi0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZp Zw0KKysrIGIvbmV0L25ldGZpbHRlci9LY29uZmlnDQpAQCAtNDc0LDYgKzQ3NCwxMiBAQCBjb25m aWcgTkZUX01FVEENCiAJICBUaGlzIG9wdGlvbiBhZGRzIHRoZSAibWV0YSIgZXhwcmVzc2lvbiB0 aGF0IHlvdSBjYW4gdXNlIHRvIG1hdGNoIGFuZA0KIAkgIHRvIHNldCBwYWNrZXQgbWV0YWluZm9y bWF0aW9uIHN1Y2ggYXMgdGhlIHBhY2tldCBtYXJrLg0KIA0KK2NvbmZpZyBORlRfUlQNCisJdHJp c3RhdGUgIk5ldGZpbHRlciBuZl90YWJsZXMgcm91dGluZyBtb2R1bGUiDQorCWhlbHANCisJICBU aGlzIG9wdGlvbiBhZGRzIHRoZSAicnQiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0byBt YXRjaA0KKwkgIHBhY2tldCByb3V0aW5nIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIHBhY2tldCBu ZXh0aG9wLg0KKw0KIGNvbmZpZyBORlRfTlVNR0VODQogCXRyaXN0YXRlICJOZXRmaWx0ZXIgbmZf dGFibGVzIG51bWJlciBnZW5lcmF0b3IgbW9kdWxlIg0KIAloZWxwDQpkaWZmIC0tZ2l0IGEvbmV0 L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUNCmluZGV4IDhmYWEz NmMuLjE0MDY2YTQgMTAwNjQ0DQotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlDQorKysgYi9u ZXQvbmV0ZmlsdGVyL01ha2VmaWxlDQpAQCAtODEsNiArODEsNyBAQCBvYmotJChDT05GSUdfTkZf VEFCTEVTX05FVERFVikJKz0gbmZfdGFibGVzX25ldGRldi5vDQogb2JqLSQoQ09ORklHX05GVF9D T01QQVQpCSs9IG5mdF9jb21wYXQubw0KIG9iai0kKENPTkZJR19ORlRfRVhUSERSKQkrPSBuZnRf ZXh0aGRyLm8NCiBvYmotJChDT05GSUdfTkZUX01FVEEpCQkrPSBuZnRfbWV0YS5vDQorb2JqLSQo Q09ORklHX05GVF9SVCkJCSs9IG5mdF9ydC5vDQogb2JqLSQoQ09ORklHX05GVF9OVU1HRU4pCSs9 IG5mdF9udW1nZW4ubw0KIG9iai0kKENPTkZJR19ORlRfQ1QpCQkrPSBuZnRfY3Qubw0KIG9iai0k KENPTkZJR19ORlRfTElNSVQpCQkrPSBuZnRfbGltaXQubw0KZGlmZiAtLWdpdCBhL25ldC9uZXRm aWx0ZXIvbmZ0X3J0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9ydC5jDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMC4uOWU1ZWMxZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvbmV0L25l dGZpbHRlci9uZnRfcnQuYw0KQEAgLTAsMCArMSwxNTMgQEANCisvKg0KKyAqIENvcHlyaWdodCAo YykgMjAxNiBBbmRlcnMgSy4gUGVkZXJzZW4gPGFrcEBjb2hhZXNpby5jb20+DQorICoNCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzDQorICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNp bmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNs dWRlIDxsaW51eC9uZXRsaW5rLmg+DQorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPg0KKyNp bmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg+DQorI2luY2x1ZGUgPG5ldC9kc3Qu aD4NCisjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPg0KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4N CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD4NCisjaW5jbHVkZSA8bmV0L25l dGZpbHRlci9uZl90YWJsZXNfY29yZS5oPg0KKw0KK3N0cnVjdCBuZnRfcnQgew0KKwllbnVtIG5m dF9ydF9rZXlzCWtleTo4Ow0KKwllbnVtIG5mdF9yZWdpc3RlcnMJZHJlZzo4Ow0KK307DQorDQor dm9pZCBuZnRfcnRfZ2V0X2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLA0KKwkJICAg ICBzdHJ1Y3QgbmZ0X3JlZ3MgKnJlZ3MsDQorCQkgICAgIGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5m byAqcGt0KQ0KK3sNCisJY29uc3Qgc3RydWN0IG5mdF9ydCAqcHJpdiA9IG5mdF9leHByX3ByaXYo ZXhwcik7DQorCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IgPSBwa3QtPnNrYjsNCisJdTMyICpk ZXN0ID0gJnJlZ3MtPmRhdGFbcHJpdi0+ZHJlZ107DQorCWNvbnN0IHN0cnVjdCBkc3RfZW50cnkg KmRzdDsNCisNCisJZHN0ID0gc2tiX2RzdChza2IpOw0KKwlpZiAoIWRzdCkNCisJCWdvdG8gZXJy Ow0KKw0KKwlzd2l0Y2ggKHByaXYtPmtleSkgew0KKyNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xB U1NJRA0KKwljYXNlIE5GVF9SVF9DTEFTU0lEOg0KKwkJKmRlc3QgPSBkc3QtPnRjbGFzc2lkOw0K KwkJYnJlYWs7DQorI2VuZGlmDQorCWNhc2UgTkZUX1JUX05FWFRIT1A0Og0KKwkJaWYgKHBrdC0+ cGYgIT0gTkZQUk9UT19JUFY0KQ0KKwkJCWdvdG8gZXJyOw0KKw0KKwkJKmRlc3QgPSBydF9uZXh0 aG9wKChjb25zdCBzdHJ1Y3QgcnRhYmxlICopZHN0LA0KKwkJCQkgICBpcF9oZHIoc2tiKS0+ZGFk ZHIpOw0KKwkJYnJlYWs7DQorCWNhc2UgTkZUX1JUX05FWFRIT1A2Og0KKwkJaWYgKHBrdC0+cGYg IT0gTkZQUk9UT19JUFY2KQ0KKwkJCWdvdG8gZXJyOw0KKw0KKwkJbWVtY3B5KGRlc3QsIHJ0Nl9u ZXh0aG9wKChzdHJ1Y3QgcnQ2X2luZm8gKilkc3QsDQorCQkJCQkgJmlwdjZfaGRyKHNrYiktPmRh ZGRyKSwNCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7DQorCQlicmVhazsNCisJ ZGVmYXVsdDoNCisJCVdBUk5fT04oMSk7DQorCQlnb3RvIGVycjsNCisJfQ0KKwlyZXR1cm47DQor DQorZXJyOg0KKwlyZWdzLT52ZXJkaWN0LmNvZGUgPSBORlRfQlJFQUs7DQorfQ0KKw0KK2NvbnN0 IHN0cnVjdCBubGFfcG9saWN5IG5mdF9ydF9wb2xpY3lbTkZUQV9SVF9NQVggKyAxXSA9IHsNCisJ W05GVEFfUlRfRFJFR10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwNCisJW05GVEFfUlRfS0VZXQkJ PSB7IC50eXBlID0gTkxBX1UzMiB9LA0KK307DQorDQoraW50IG5mdF9ydF9nZXRfaW5pdChjb25z dCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LA0KKwkJICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhw ciwNCisJCSAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgdGJbXSkNCit7DQorCXN0cnVj dCBuZnRfcnQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOw0KKwl1bnNpZ25lZCBpbnQgbGVu Ow0KKw0KKwlpZiAodGJbTkZUQV9SVF9LRVldID09IE5VTEwgfHwNCisJICAgIHRiW05GVEFfUlRf RFJFR10gPT0gTlVMTCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlwcml2LT5rZXkgPSBudG9o bChubGFfZ2V0X2JlMzIodGJbTkZUQV9SVF9LRVldKSk7DQorCXN3aXRjaCAocHJpdi0+a2V5KSB7 DQorI2lmZGVmIENPTkZJR19JUF9ST1VURV9DTEFTU0lEDQorCWNhc2UgTkZUX1JUX0NMQVNTSUQ6 DQorI2VuZGlmDQorCWNhc2UgTkZUX1JUX05FWFRIT1A0Og0KKwkJbGVuID0gc2l6ZW9mKHUzMik7 DQorCQlicmVhazsNCisJY2FzZSBORlRfUlRfTkVYVEhPUDY6DQorCQlsZW4gPSBzaXplb2Yoc3Ry dWN0IGluNl9hZGRyKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIC1FT1BOT1RT VVBQOw0KKwl9DQorDQorCXByaXYtPmRyZWcgPSBuZnRfcGFyc2VfcmVnaXN0ZXIodGJbTkZUQV9S VF9EUkVHXSk7DQorCXJldHVybiBuZnRfdmFsaWRhdGVfcmVnaXN0ZXJfc3RvcmUoY3R4LCBwcml2 LT5kcmVnLCBOVUxMLA0KKwkJCQkJICAgTkZUX0RBVEFfVkFMVUUsIGxlbik7DQorfQ0KKw0KK2lu dCBuZnRfcnRfZ2V0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwNCisJCSAgICBjb25zdCBzdHJ1 Y3QgbmZ0X2V4cHIgKmV4cHIpDQorew0KKwljb25zdCBzdHJ1Y3QgbmZ0X3J0ICpwcml2ID0gbmZ0 X2V4cHJfcHJpdihleHByKTsNCisNCisJaWYgKG5sYV9wdXRfYmUzMihza2IsIE5GVEFfUlRfS0VZ LCBodG9ubChwcml2LT5rZXkpKSkNCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KKwlpZiAobmZ0 X2R1bXBfcmVnaXN0ZXIoc2tiLCBORlRBX1JUX0RSRUcsIHByaXYtPmRyZWcpKQ0KKwkJZ290byBu bGFfcHV0X2ZhaWx1cmU7DQorCXJldHVybiAwOw0KKw0KK25sYV9wdXRfZmFpbHVyZToNCisJcmV0 dXJuIC0xOw0KK30NCisNCitzdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X3J0X3R5cGU7 DQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3J0X2dldF9vcHMgPSB7DQor CS50eXBlCQk9ICZuZnRfcnRfdHlwZSwNCisJLnNpemUJCT0gTkZUX0VYUFJfU0laRShzaXplb2Yo c3RydWN0IG5mdF9ydCkpLA0KKwkuZXZhbAkJPSBuZnRfcnRfZ2V0X2V2YWwsDQorCS5pbml0CQk9 IG5mdF9ydF9nZXRfaW5pdCwNCisJLmR1bXAJCT0gbmZ0X3J0X2dldF9kdW1wLA0KK307DQorDQor c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9ydF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7 DQorCS5uYW1lCQk9ICJydCIsDQorCS5vcHMJCT0gJm5mdF9ydF9nZXRfb3BzLA0KKwkucG9saWN5 CQk9IG5mdF9ydF9wb2xpY3ksDQorCS5tYXhhdHRyCT0gTkZUQV9SVF9NQVgsDQorCS5vd25lcgkJ PSBUSElTX01PRFVMRSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgX19pbml0IG5mdF9ydF9tb2R1bGVf aW5pdCh2b2lkKQ0KK3sNCisJcmV0dXJuIG5mdF9yZWdpc3Rlcl9leHByKCZuZnRfcnRfdHlwZSk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIF9fZXhpdCBuZnRfcnRfbW9kdWxlX2V4aXQodm9pZCkNCit7 DQorCW5mdF91bnJlZ2lzdGVyX2V4cHIoJm5mdF9ydF90eXBlKTsNCit9DQorDQorbW9kdWxlX2lu aXQobmZ0X3J0X21vZHVsZV9pbml0KTsNCittb2R1bGVfZXhpdChuZnRfcnRfbW9kdWxlX2V4aXQp Ow0KKw0KK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCitNT0RVTEVfQVVUSE9SKCJBbmRlcnMgSy4g UGVkZXJzZW4gPGFrcEBjb2hhZXNpby5jb20+Iik7DQorTU9EVUxFX0FMSUFTX05GVF9FWFBSKCJy dCIpOw0K