opensm: bug in trap report for MC create(66) and delete(67) traps
PATCH 1/1 opensm: bug in trap report for MC create(66) and delete(67) traps
In this case the GID in the data details is the MGID and not the source gid. So the SM gid should be taken as the source gid. There was also an error in comparing the subnet prefix and guid due to host/network order mismatch.
--- opensm/opensm/osm_inform.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-)
opensm/opensm/osm_inform.c +9 -10
@@ -460,18 +460,16 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, } } -/* Check if there is a pkey match. o13-17.1.1 */ -/* Check if the issuer of the trap is the SM. If it is, then the gid +/* In case of GID IN(64) or GID OUT(65) traps the source gid comparison should be done on the trap source (saved as the gid in the data details field). -If the issuer gid is not the SM - then it is the guid of the trap -source */ -if ((cl_ntoh64 (p_ntc->issuer_gid.unicast.prefix) == - p_subn->opt.subnet_prefix) - && (cl_ntoh64 (p_ntc->issuer_gid.unicast.interface_id) == - p_subn->sm_port_guid)) -/* The issuer is the SM then this is trap 64-67 - compare the gid -with the gid saved on the data details */ +In all other cases the issuer gis is the trap source. +This is also the case for MC CREATE(66) and MC DELETE(67) where the +data details gid is MGID */ +if (p_ntc->g_or_v.generic.trap_num ==64 || + p_ntc->g_or_v.generic.trap_num ==65 ) +/* The issuer of these traps is the SM so source_gid +is the gid saved on the data details */ source_gid = p_ntc->data_details.ntc_64_67.gid;else source_gid = p_ntc->issuer_gid;
@@ -495,6 +493,7 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, goto Exit; } +/* Check if there is a pkey match. o13-17.1.1 */ if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) {OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" );/* According to o13-17.1.2 - If this informInfo does not have
Signature · 6 lines
1.5.5 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi Eli,
Quoted 3 lines · Eli Dorfman (Voltaire)
In this case the GID in the data details is the MGID and not the source gid. So the SM gid should be taken as the source gid.
There the source port is detected in order P_Key matching check between source and trap destination port.
So in case of 66,67 trap you will just check P_Key match between trap destination port and SM port, which is likely useless due to fact of already working SA communication between both.
What should be really checked in this case is a good question. At least I cannot find some explicit explanations in the spec.
I would guess that the needed check is that trap destination port has MC group's P_Key (as present in MCMember Record) value.
Thoughts?
Quoted 2 lines
There was also an error in comparing the subnet prefix and guid due to host/network order mismatch.
Agree about this.
Quoted 22 lines
--- opensm/opensm/osm_inform.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-)opensm/opensm/osm_inform.c +1
-5@@ -460,18 +460,16 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, } } -/* Check if there is a pkey match. o13-17.1.1 */ -/* Check if the issuer of the trap is the SM. If it is, then the gid +/* In case of GID IN(64) or GID OUT(65) traps the source gid comparison should be done on the trap source (saved as the gid in the data details field). -If the issuer gid is not the SM - then it is the guid of the trap -source */ - if ((cl_ntoh64(p_ntc->issuer_gid.unicast.prefix) ==
opensm/opensm/osm_inform.c static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, · line 470
Quoted 10 lines
opensm/opensm/osm_inform.c +5
-5- p_subn->opt.subnet_prefix) - && (cl_ntoh64 (p_ntc->issuer_gid.unicast.interface_id) == - p_subn->sm_port_guid)) -/* The issuer is the SM then this is trap 64-67 - compare the gid -with the gid saved on the data details */ +In all other cases the issuer gis is the trap source. +This is also the case for MC CREATE(66) and MC DELETE(67) where the +data details gid is MGID */ +if (p_ntc->g_or_v.generic.trap_num ==64 || + p_ntc->g_or_v.generic.trap_num ==65 )
ib_mad_notice_attr_t.g_or_v.generic.trap_num is encoded in network byte order.
Sasha
Quoted 16 lines
opensm/opensm/osm_inform.c +3
-0+/* The issuer of these traps is the SM so source_gid +is the gid saved on the data details */ source_gid = p_ntc->data_details.ntc_64_67.gid; else source_gid = p_ntc->issuer_gid;@@ -495,6 +493,7 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, goto Exit; } +/* Check if there is a pkey match. o13-17.1.1 */ if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) {OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" );/* According to o13-17.1.2 - If this informInfo does not have Signature · 1 line
1.5.5
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 1/1 opensm: bug in trap report for MC create(66) and delete(67) traps
Subject: [PATCH] Wrong handling of MC create and delete traps
For these traps the GID in the data details is the MGID and not the source port gid.
So the SM should check that subscriber port has the pkey of the MC group. There was also an error in comparing the subnet prefix and guid due to host/network order mismatch.
--- opensm/opensm/osm_inform.c | 151 ++++++++++++++++++++++++++++--------------- 1 files changed, 98 insertions(+), 53 deletions(-)
opensm/opensm/osm_inform.c +98 -53
@@ -341,6 +341,103 @@ Exit:return status; } +static int is_access_permitted (osm_infr_t *p_infr_rec, +osm_infr_match_ctxt_t *p_infr_match ) +{ +cl_list_t *p_infr_to_remove_list = p_infr_match->p_remove_infr_list; +ib_inform_info_t *p_ii = &(p_infr_rec->inform_record.inform_info); +ib_mad_notice_attr_t *p_ntc = p_infr_match->p_ntc; +uint16_t trap_num =cl_ntoh16 (p_ntc->g_or_v.generic.trap_num); +osm_subn_t *p_subn = p_infr_rec->sa->p_subn; +osm_log_t *p_log = p_infr_rec->sa->p_log; +char gid_str[INET6_ADDRSTRLEN ]; +osm_mgrp_t *p_mgrp; +ib_gid_t source_gid; +osm_port_t *p_src_port; +osm_port_t *p_dest_port; + +/* In case of GID_IN(64) or GID_OUT(65) traps the source gid +comparison should be done on the trap source (saved as the gid in the +data details field). +For traps MC_CREATE(66) or MC_DELETE(67) the data details gid is +the MGID. We need to check whether subscriber has the pky of +the MC group. +In all other cases the issuer gis is the trap source. +*/ +if (trap_num >=64 && trap_num <=67 ) +/* The issuer of these traps is the SM so source_gid +is the gid saved on the data details */ + source_gid = p_ntc->data_details.ntc_64_67.gid; +else + source_gid = p_ntc->issuer_gid; + + p_dest_port = +cl_ptr_vector_get (&p_subn->port_lid_tbl, +cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); +if (!p_dest_port) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find destination port with LID:%u\n" , +cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); + goto Exit; + } + +switch (trap_num) { +case 66 : +case 67 : + p_mgrp =osm_get_mgrp_by_mgid (p_subn, &source_gid); +if (!p_mgrp) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find MGID %s\n" , +inet_ntop (AF_INET6 , source_gid.raw, gid_str,sizeof gid_str)); + goto Exit; + } + +if (!osm_physp_has_pkey (p_log, + p_mgrp->mcmember_rec.pkey, + p_dest_port->p_physp)) { +OSM_LOG (p_log,OSM_LOG_INFO , +"MGID %s and port GUID:0x%016" PRIx64" do not share same pkey\n" , +inet_ntop (AF_INET6 , source_gid.raw, gid_str,sizeof gid_str), +cl_ntoh64 (p_dest_port->guid)); + goto Exit; + } +break ; + +default : + p_src_port = +osm_get_port_by_guid (p_subn, source_gid.unicast.interface_id); +if (!p_src_port) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find source port with GUID:0x%016" PRIx64"\n" , +cl_ntoh64 (source_gid.unicast.interface_id)); + goto Exit; + } + + +/* Check if there is a pkey match. o13-17.1.1 */ +if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) { +OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" ); +/* According to o13-17.1.2 - If this informInfo does not have +lid_range_begin of 0xFFFF, then this informInfo request +should be removed from database */ +if (p_ii->lid_range_begin !=0xFFFF ) { +OSM_LOG (p_log,OSM_LOG_VERBOSE , +"Pkey mismatch on lid_range_begin != 0xFFFF. " +"Need to remove this informInfo from db\n" ); +/* add the informInfo record to the remove_infr list */ +cl_list_insert_tail (p_infr_to_remove_list, p_infr_rec); + } + goto Exit; + } +break ; + } + +return 1 ; +Exit: +return 0 ; +} + +/********************************************************************** * This routine compares a given Notice and a ListItem of InformInfo type. * PREREQUISITE:
@@ -351,15 +448,10 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, {osm_infr_match_ctxt_t *p_infr_match = (osm_infr_match_ctxt_t *) context;ib_mad_notice_attr_t *p_ntc = p_infr_match->p_ntc; -cl_list_t *p_infr_to_remove_list = p_infr_match->p_remove_infr_list;osm_infr_t *p_infr_rec = (osm_infr_t *) p_list_item;ib_inform_info_t *p_ii = &(p_infr_rec->inform_record.inform_info);cl_status_t status =CL_NOT_FOUND ;osm_log_t *p_log = p_infr_rec->sa->p_log; -osm_subn_t *p_subn = p_infr_rec->sa->p_subn; -ib_gid_t source_gid; -osm_port_t *p_src_port; -osm_port_t *p_dest_port;OSM_LOG_ENTER (p_log);
@@ -460,55 +552,8 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, } } -/* Check if there is a pkey match. o13-17.1.1 */ -/* Check if the issuer of the trap is the SM. If it is, then the gid -comparison should be done on the trap source (saved as the gid in the -data details field). -If the issuer gid is not the SM - then it is the guid of the trap -source */ -if ((cl_ntoh64 (p_ntc->issuer_gid.unicast.prefix) == - p_subn->opt.subnet_prefix) - && (cl_ntoh64 (p_ntc->issuer_gid.unicast.interface_id) == - p_subn->sm_port_guid)) -/* The issuer is the SM then this is trap 64-67 - compare the gid -with the gid saved on the data details */ - source_gid = p_ntc->data_details.ntc_64_67.gid; -else - source_gid = p_ntc->issuer_gid; - - p_src_port = -osm_get_port_by_guid (p_subn, source_gid.unicast.interface_id); -if (!p_src_port) { -OSM_LOG (p_log,OSM_LOG_INFO , -"Cannot find source port with GUID:0x%016" PRIx64"\n" , -cl_ntoh64 (source_gid.unicast.interface_id)); +if (!is_access_permitted (p_infr_rec, p_infr_match)) goto Exit; - } - - p_dest_port = -cl_ptr_vector_get (&p_subn->port_lid_tbl, -cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); -if (!p_dest_port) { -OSM_LOG (p_log,OSM_LOG_INFO , -"Cannot find destination port with LID:%u\n" , -cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); - goto Exit; - } - -if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) { -OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" ); -/* According to o13-17.1.2 - If this informInfo does not have -lid_range_begin of 0xFFFF, then this informInfo request -should be removed from database */ -if (p_ii->lid_range_begin !=0xFFFF ) { -OSM_LOG (p_log,OSM_LOG_VERBOSE , -"Pkey mismatch on lid_range_begin != 0xFFFF. " -"Need to remove this informInfo from db\n" ); -/* add the informInfo record to the remove_infr list */ -cl_list_insert_tail (p_infr_to_remove_list, p_infr_rec); - } - goto Exit; - }/* send the report to the address provided in the inform record */ OSM_LOG (p_log,OSM_LOG_DEBUG ,"MATCH! Sending Report...\n" );
Signature · 10 lines
1.5.5 There is still a problem with GID OUT trap that is not sent since source port was already removed. Patch will follow. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
T24gVGh1LCBGZWIgNCwgMjAxMCBhdCAxMjo0MyBQTSwgRWxpIERvcmZtYW4gKFZvbHRhaXJlKQo8 ZG9yZm1hbi5lbGlAZ21haWwuY29tPiB3cm90ZToKPgo+IFN1YmplY3Q6IFtQQVRDSF0gV3Jvbmcg aGFuZGxpbmcgb2YgTUMgY3JlYXRlIGFuZCBkZWxldGUgdHJhcHMKPgo+IEZvciB0aGVzZSB0cmFw cyB0aGUgR0lEIGluIHRoZSBkYXRhIGRldGFpbHMgaXMgdGhlIE1HSUQgYW5kCj4gbm90IHRoZSBz b3VyY2UgcG9ydCBnaWQuCj4gU28gdGhlIFNNIHNob3VsZCBjaGVjayB0aGF0IHN1YnNjcmliZXIg cG9ydCBoYXMgdGhlIHBrZXkgb2YgdGhlIE1DIGdyb3VwLgo+IFRoZXJlIHdhcyBhbHNvIGFuIGVy cm9yIGluIGNvbXBhcmluZyB0aGUgc3VibmV0IHByZWZpeCBhbmQgZ3VpZCBkdWUgdG8KPiBob3N0 L25ldHdvcmsgb3JkZXIgbWlzbWF0Y2guCj4KPiBTaWduZWQtb2ZmLWJ5OiBFbGkgRG9yZm1hbiA8 ZWxpZEB2b2x0YWlyZS5jb20+Cj4gLS0tCj4gwqBvcGVuc20vb3BlbnNtL29zbV9pbmZvcm0uYyB8 IMKgMTUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPiDCoDEg ZmlsZXMgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCj4KPiBkaWZm IC0tZ2l0IGEvb3BlbnNtL29wZW5zbS9vc21faW5mb3JtLmMgYi9vcGVuc20vb3BlbnNtL29zbV9p bmZvcm0uYwo+IGluZGV4IDgxMDgyMTMuLmFlNGZlNzEgMTAwNjQ0Cj4gLS0tIGEvb3BlbnNtL29w ZW5zbS9vc21faW5mb3JtLmMKPiArKysgYi9vcGVuc20vb3BlbnNtL29zbV9pbmZvcm0uYwo+IEBA IC0zNDEsNiArMzQxLDEwMyBAQCBFeGl0Ogo+IMKgIMKgIMKgIMKgcmV0dXJuIHN0YXR1czsKPiDC oH0KPgo+ICtzdGF0aWMgaW50IGlzX2FjY2Vzc19wZXJtaXR0ZWQoIG9zbV9pbmZyX3QgKnBfaW5m cl9yZWMsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBv c21faW5mcl9tYXRjaF9jdHh0X3QgKnBfaW5mcl9tYXRjaCApCj4gK3sKPiArIMKgIMKgIMKgIGNs X2xpc3RfdCAqcF9pbmZyX3RvX3JlbW92ZV9saXN0ID0gcF9pbmZyX21hdGNoLT5wX3JlbW92ZV9p bmZyX2xpc3Q7Cj4gKyDCoCDCoCDCoCBpYl9pbmZvcm1faW5mb190ICpwX2lpID0gJihwX2luZnJf cmVjLT5pbmZvcm1fcmVjb3JkLmluZm9ybV9pbmZvKTsKPiArIMKgIMKgIMKgIGliX21hZF9ub3Rp Y2VfYXR0cl90ICpwX250YyA9IHBfaW5mcl9tYXRjaC0+cF9udGM7Cj4gKyDCoCDCoCDCoCB1aW50 MTZfdCB0cmFwX251bSA9IGNsX250b2gxNihwX250Yy0+Z19vcl92LmdlbmVyaWMudHJhcF9udW0p Owo+ICsgwqAgwqAgwqAgb3NtX3N1Ym5fdCAqcF9zdWJuID0gcF9pbmZyX3JlYy0+c2EtPnBfc3Vi bjsKPiArIMKgIMKgIMKgIG9zbV9sb2dfdCAqcF9sb2cgPSBwX2luZnJfcmVjLT5zYS0+cF9sb2c7 Cj4gKyDCoCDCoCDCoCBjaGFyIGdpZF9zdHJbSU5FVDZfQUREUlNUUkxFTl07Cj4gKyDCoCDCoCDC oCBvc21fbWdycF90ICpwX21ncnA7Cj4gKyDCoCDCoCDCoCBpYl9naWRfdCBzb3VyY2VfZ2lkOwo+ ICsgwqAgwqAgwqAgb3NtX3BvcnRfdCAqcF9zcmNfcG9ydDsKPiArIMKgIMKgIMKgIG9zbV9wb3J0 X3QgKnBfZGVzdF9wb3J0Owo+ICsKPiArIMKgIMKgIMKgIC8qIEluIGNhc2Ugb2YgR0lEX0lOKDY0 KSBvciBHSURfT1VUKDY1KSB0cmFwcyB0aGUgc291cmNlIGdpZAo+ICsgwqAgwqAgwqAgwqAgwqBj b21wYXJpc29uIHNob3VsZCBiZSBkb25lIG9uIHRoZSB0cmFwIHNvdXJjZSAoc2F2ZWQgYXMgdGhl IGdpZCBpbiB0aGUKPiArIMKgIMKgIMKgIMKgIMKgZGF0YSBkZXRhaWxzIGZpZWxkKS4KPiArIMKg IMKgIMKgIMKgIMKgRm9yIHRyYXBzIE1DX0NSRUFURSg2Nikgb3IgTUNfREVMRVRFKDY3KSB0aGUg ZGF0YSBkZXRhaWxzIGdpZCBpcwo+ICsgwqAgwqAgwqAgwqAgwqB0aGUgTUdJRC4gV2UgbmVlZCB0 byBjaGVjayB3aGV0aGVyIHN1YnNjcmliZXIgaGFzIHRoZSBwa3kgb2YKCgogICAgICAgICAgICAg ICAgICAgdHlwbyAgXl5eXgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtleQoKCj4gKyDC oCDCoCDCoCDCoCDCoHRoZSBNQyBncm91cC4KClNob3VsZG4ndCB0aGlzIGJlIHRoZSBzdWJzY3Jp YmVyIGhhcyBhIGNvbXBhdGlibGUgcGtleSB3aXRoIE1DIGdyb3VwID8KVGhlIE1DIGdyb3VwIGhh cyBhIGZ1bGwgbWVtYmVyIFBLZXkgYW5kIHRoZSBtZW1iZXJzIGNhbiBiZSBmdWxsIG9yCmxpbWl0 ZWQuCgo+ICsgwqAgwqAgwqAgwqAgwqBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIGlzc3VlciBnaXMg aXMgdGhlIHRyYXAgc291cmNlLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0eXBvICBeXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdpZAoKLS0gSGFsCgo+ICsgwqAgwqAgwqAgKi8KPiArIMKgIMKg IMKgIGlmICh0cmFwX251bSA+PSA2NCAmJiB0cmFwX251bSA8PSA2NyApCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCAvKiBUaGUgaXNzdWVyIG9mIHRoZXNlIHRyYXBzIGlzIHRoZSBTTSBzbyBzb3Vy Y2VfZ2lkCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlzIHRoZSBnaWQgc2F2ZWQgb24g dGhlIGRhdGEgZGV0YWlscyAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc291cmNlX2dpZCA9 IHBfbnRjLT5kYXRhX2RldGFpbHMubnRjXzY0XzY3LmdpZDsKPiArIMKgIMKgIMKgIGVsc2UKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNvdXJjZV9naWQgPSBwX250Yy0+aXNzdWVyX2dpZDsKPiAr Cj4gKyDCoCDCoCDCoCBwX2Rlc3RfcG9ydCA9Cj4gKyDCoCDCoCDCoCDCoCDCoCBjbF9wdHJfdmVj dG9yX2dldCgmcF9zdWJuLT5wb3J0X2xpZF90YmwsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oMTYocF9pbmZyX3JlYy0+cmVwb3J0X2FkZHIuZGVz dF9saWQpKTsKPiArIMKgIMKgIMKgIGlmICghcF9kZXN0X3BvcnQpIHsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfSU5GTywKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgICJDYW5ub3QgZmluZCBkZXN0aW5hdGlvbiBwb3J0IHdpdGggTElE OiV1XG4iLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDE2KHBf aW5mcl9yZWMtPnJlcG9ydF9hZGRyLmRlc3RfbGlkKSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBnb3RvIEV4aXQ7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgc3dpdGNoICh0cmFw X251bSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2FzZSA2NjoKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGNhc2UgNjc6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBw X21ncnAgPSBvc21fZ2V0X21ncnBfYnlfbWdpZChwX3N1Ym4sICZzb3VyY2VfZ2lkKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghcF9tZ3JwKSB7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01f TE9HX0lORk8sCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQgTUdJRCAlc1xuIiwKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGluZXRfbnRvcChBRl9J TkVUNiwgc291cmNlX2dpZC5yYXcsIGdpZF9zdHIsIHNpemVvZiBnaWRfc3RyKSk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFvc21fcGh5c3BfaGFzX3BrZXkocF9sb2csCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBwX21ncnAtPm1jbWVtYmVyX3JlYy5wa2V5LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcF9kZXN0 X3BvcnQtPnBfcGh5c3ApKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0lORk8sCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiTUdJRCAlcyBhbmQg cG9ydCBHVUlEOjB4JTAxNiIgUFJJeDY0ICIgZG8gbm90IHNoYXJlIHNhbWUgcGtleVxuIiwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGluZXRfbnRvcChBRl9JTkVUNiwgc291cmNlX2dpZC5yYXcsIGdpZF9zdHIsIHNpemVvZiBnaWRf c3RyKSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGNsX250b2g2NChwX2Rlc3RfcG9ydC0+Z3VpZCkpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0Owo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgYnJlYWs7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVmYXVsdDoKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBfc3JjX3BvcnQgPQo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgb3NtX2dldF9wb3J0X2J5X2d1aWQocF9zdWJu LCBzb3VyY2VfZ2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lkKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmICghcF9zcmNfcG9ydCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgIkNhbm5vdCBmaW5kIHNvdXJjZSBwb3J0IHdpdGggR1VJRDoweCUwMTYiIFBSSXg2NCAiXG4i LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgY2xfbnRvaDY0KHNvdXJjZV9naWQudW5pY2FzdC5pbnRlcmZhY2VfaWQpKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArCj4gKwo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSBwa2V5IG1hdGNo LiBvMTMtMTcuMS4xICovCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAo b3NtX3BvcnRfc2hhcmVfcGtleShwX2xvZywgcF9zcmNfcG9ydCwgcF9kZXN0X3BvcnQpID09IEZB TFNFKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBP U01fTE9HKHBfbG9nLCBPU01fTE9HX0RFQlVHLCAiTWlzbWF0Y2ggYnkgUGtleVxuIik7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBBY2NvcmRpbmcg dG8gbzEzLTE3LjEuMiAtIElmIHRoaXMgaW5mb3JtSW5mbyBkb2VzIG5vdCBoYXZlCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxpZF9yYW5nZV9i ZWdpbiBvZiAweEZGRkYsIHRoZW4gdGhpcyBpbmZvcm1JbmZvIHJlcXVlc3QKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2hvdWxkIGJlIHJlbW92 ZWQgZnJvbSBkYXRhYmFzZSAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgaWYgKHBfaWktPmxpZF9yYW5nZV9iZWdpbiAhPSAweEZGRkYpIHsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9T TV9MT0cocF9sb2csIE9TTV9MT0dfVkVSQk9TRSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJQa2V5IG1pc21h dGNoIG9uIGxpZF9yYW5nZV9iZWdpbiAhPSAweEZGRkYuICIKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJOZWVk IHRvIHJlbW92ZSB0aGlzIGluZm9ybUluZm8gZnJvbSBkYlxuIik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBhZGQgdGhlIGlu Zm9ybUluZm8gcmVjb3JkIHRvIHRoZSByZW1vdmVfaW5mciBsaXN0ICovCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9saXN0X2lu c2VydF90YWlsKHBfaW5mcl90b19yZW1vdmVfbGlzdCwgcF9pbmZyX3JlYyk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBicmVhazsKPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gMTsKPiAr RXhpdDoKPiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsKPiDCoC8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCj4gwqAqIFRoaXMgcm91dGluZSBjb21wYXJlcyBhIGdpdmVuIE5vdGljZSBhbmQgYSBMaXN0 SXRlbSBvZiBJbmZvcm1JbmZvIHR5cGUuCj4gwqAqIFBSRVJFUVVJU0lURToKPiBAQCAtMzUxLDE1 ICs0NDgsMTAgQEAgc3RhdGljIHZvaWQgbWF0Y2hfbm90aWNlX3RvX2luZl9yZWMoSU4gY2xfbGlz dF9pdGVtX3QgKiBwX2xpc3RfaXRlbSwKPiDCoHsKPiDCoCDCoCDCoCDCoG9zbV9pbmZyX21hdGNo X2N0eHRfdCAqcF9pbmZyX21hdGNoID0gKG9zbV9pbmZyX21hdGNoX2N0eHRfdCAqKSBjb250ZXh0 Owo+IMKgIMKgIMKgIMKgaWJfbWFkX25vdGljZV9hdHRyX3QgKnBfbnRjID0gcF9pbmZyX21hdGNo LT5wX250YzsKPiAtIMKgIMKgIMKgIGNsX2xpc3RfdCAqcF9pbmZyX3RvX3JlbW92ZV9saXN0ID0g cF9pbmZyX21hdGNoLT5wX3JlbW92ZV9pbmZyX2xpc3Q7Cj4gwqAgwqAgwqAgwqBvc21faW5mcl90 ICpwX2luZnJfcmVjID0gKG9zbV9pbmZyX3QgKikgcF9saXN0X2l0ZW07Cj4gwqAgwqAgwqAgwqBp Yl9pbmZvcm1faW5mb190ICpwX2lpID0gJihwX2luZnJfcmVjLT5pbmZvcm1fcmVjb3JkLmluZm9y bV9pbmZvKTsKPiDCoCDCoCDCoCDCoGNsX3N0YXR1c190IHN0YXR1cyA9IENMX05PVF9GT1VORDsK PiDCoCDCoCDCoCDCoG9zbV9sb2dfdCAqcF9sb2cgPSBwX2luZnJfcmVjLT5zYS0+cF9sb2c7Cj4g LSDCoCDCoCDCoCBvc21fc3Vibl90ICpwX3N1Ym4gPSBwX2luZnJfcmVjLT5zYS0+cF9zdWJuOwo+ IC0gwqAgwqAgwqAgaWJfZ2lkX3Qgc291cmNlX2dpZDsKPiAtIMKgIMKgIMKgIG9zbV9wb3J0X3Qg KnBfc3JjX3BvcnQ7Cj4gLSDCoCDCoCDCoCBvc21fcG9ydF90ICpwX2Rlc3RfcG9ydDsKPgo+IMKg IMKgIMKgIMKgT1NNX0xPR19FTlRFUihwX2xvZyk7Cj4KPiBAQCAtNDYwLDU1ICs1NTIsOCBAQCBz dGF0aWMgdm9pZCBtYXRjaF9ub3RpY2VfdG9faW5mX3JlYyhJTiBjbF9saXN0X2l0ZW1fdCAqIHBf bGlzdF9pdGVtLAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+IMKgIMKgIMKgIMKgfQo+Cj4g LSDCoCDCoCDCoCAvKiBDaGVjayBpZiB0aGVyZSBpcyBhIHBrZXkgbWF0Y2guIG8xMy0xNy4xLjEg Ki8KPiAtIMKgIMKgIMKgIC8qIENoZWNrIGlmIHRoZSBpc3N1ZXIgb2YgdGhlIHRyYXAgaXMgdGhl IFNNLiBJZiBpdCBpcywgdGhlbiB0aGUgZ2lkCj4gLSDCoCDCoCDCoCDCoCDCoGNvbXBhcmlzb24g c2hvdWxkIGJlIGRvbmUgb24gdGhlIHRyYXAgc291cmNlIChzYXZlZCBhcyB0aGUgZ2lkIGluIHRo ZQo+IC0gwqAgwqAgwqAgwqAgwqBkYXRhIGRldGFpbHMgZmllbGQpLgo+IC0gwqAgwqAgwqAgwqAg wqBJZiB0aGUgaXNzdWVyIGdpZCBpcyBub3QgdGhlIFNNIC0gdGhlbiBpdCBpcyB0aGUgZ3VpZCBv ZiB0aGUgdHJhcAo+IC0gwqAgwqAgwqAgwqAgwqBzb3VyY2UgKi8KPiAtIMKgIMKgIMKgIGlmICgo Y2xfbnRvaDY0KHBfbnRjLT5pc3N1ZXJfZ2lkLnVuaWNhc3QucHJlZml4KSA9PQo+IC0gwqAgwqAg wqAgwqAgwqAgwqBwX3N1Ym4tPm9wdC5zdWJuZXRfcHJlZml4KQo+IC0gwqAgwqAgwqAgwqAgwqAg JiYgKGNsX250b2g2NChwX250Yy0+aXNzdWVyX2dpZC51bmljYXN0LmludGVyZmFjZV9pZCkgPT0K PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBfc3Vibi0+c21fcG9ydF9ndWlkKSkKPiAtIMKgIMKg IMKgIMKgIMKgIMKgIMKgIC8qIFRoZSBpc3N1ZXIgaXMgdGhlIFNNIHRoZW4gdGhpcyBpcyB0cmFw IDY0LTY3IC0gY29tcGFyZSB0aGUgZ2lkCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHdp dGggdGhlIGdpZCBzYXZlZCBvbiB0aGUgZGF0YSBkZXRhaWxzICovCj4gLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMtPmRhdGFfZGV0YWlscy5udGNfNjRfNjcuZ2lkOwo+ IC0gwqAgwqAgwqAgZWxzZQo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgc291cmNlX2dpZCA9IHBf bnRjLT5pc3N1ZXJfZ2lkOwo+IC0KPiAtIMKgIMKgIMKgIHBfc3JjX3BvcnQgPQo+IC0gwqAgwqAg wqAgwqAgwqAgb3NtX2dldF9wb3J0X2J5X2d1aWQocF9zdWJuLCBzb3VyY2VfZ2lkLnVuaWNhc3Qu aW50ZXJmYWNlX2lkKTsKPiAtIMKgIMKgIMKgIGlmICghcF9zcmNfcG9ydCkgewo+IC0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+IC0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5kIHNvdXJjZSBwb3J0IHdpdGggR1VJ RDoweCUwMTYiIFBSSXg2NCAiXG4iLAo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgY2xfbnRvaDY0KHNvdXJjZV9naWQudW5pY2FzdC5pbnRlcmZhY2VfaWQpKTsKPiArIMKgIMKg IMKgIGlmICghaXNfYWNjZXNzX3Blcm1pdHRlZChwX2luZnJfcmVjLCBwX2luZnJfbWF0Y2gpKQo+ IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZ290byBFeGl0Owo+IC0gwqAgwqAgwqAgfQo+IC0KPiAt IMKgIMKgIMKgIHBfZGVzdF9wb3J0ID0KPiAtIMKgIMKgIMKgIMKgIMKgIGNsX3B0cl92ZWN0b3Jf Z2V0KCZwX3N1Ym4tPnBvcnRfbGlkX3RibCwKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0X2xp ZCkpOwo+IC0gwqAgwqAgwqAgaWYgKCFwX2Rlc3RfcG9ydCkgewo+IC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5kIGRlc3RpbmF0aW9uIHBvcnQgd2l0aCBMSUQ6JXVc biIsCj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oMTYocF9pbmZy X3JlYy0+cmVwb3J0X2FkZHIuZGVzdF9saWQpKTsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdv dG8gRXhpdDsKPiAtIMKgIMKgIMKgIH0KPiAtCj4gLSDCoCDCoCDCoCBpZiAob3NtX3BvcnRfc2hh cmVfcGtleShwX2xvZywgcF9zcmNfcG9ydCwgcF9kZXN0X3BvcnQpID09IEZBTFNFKSB7Cj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0RFQlVHLCAiTWlzbWF0 Y2ggYnkgUGtleVxuIik7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBBY2NvcmRpbmcgdG8g bzEzLTE3LjEuMiAtIElmIHRoaXMgaW5mb3JtSW5mbyBkb2VzIG5vdCBoYXZlCj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGxpZF9yYW5nZV9iZWdpbiBvZiAweEZGRkYsIHRoZW4gdGhpcyBp bmZvcm1JbmZvIHJlcXVlc3QKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2hvdWxkIGJl IHJlbW92ZWQgZnJvbSBkYXRhYmFzZSAqLwo+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHBf aWktPmxpZF9yYW5nZV9iZWdpbiAhPSAweEZGRkYpIHsKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfVkVSQk9TRSwKPiAtIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJQa2V5IG1pc21hdGNoIG9uIGxp ZF9yYW5nZV9iZWdpbiAhPSAweEZGRkYuICIKPiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgICJOZWVkIHRvIHJlbW92ZSB0aGlzIGluZm9ybUluZm8gZnJvbSBk YlxuIik7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBhZGQgdGhlIGlu Zm9ybUluZm8gcmVjb3JkIHRvIHRoZSByZW1vdmVfaW5mciBsaXN0ICovCj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9saXN0X2luc2VydF90YWlsKHBfaW5mcl90b19yZW1v dmVfbGlzdCwgcF9pbmZyX3JlYyk7Cj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4gLSDCoCDCoCDCoCB9Cj4KPiDCoCDCoCDCoCDC oC8qIHNlbmQgdGhlIHJlcG9ydCB0byB0aGUgYWRkcmVzcyBwcm92aWRlZCBpbiB0aGUgaW5mb3Jt IHJlY29yZCAqLwo+IMKgIMKgIMKgIMKgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19ERUJVRywgIk1B VENIISBTZW5kaW5nIFJlcG9ydC4uLlxuIik7Cj4gLS0KPiAxLjUuNQo+Cj4gVGhlcmUgaXMgc3Rp bGwgYSBwcm9ibGVtIHdpdGggR0lEIE9VVCB0cmFwIHRoYXQgaXMgbm90IHNlbnQgc2luY2Ugc291 cmNlIHBvcnQKPiB3YXMgYWxyZWFkeSByZW1vdmVkLgo+IFBhdGNoIHdpbGwgZm9sbG93Lgo+Cj4g LS0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJz Y3JpYmUgbGludXgtcmRtYSIgaW4KPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21v QHZnZXIua2VybmVsLm9yZwo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgwqBodHRwOi8vdmdlci5r ZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKPgo=
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): f0e08f231002041252s4c2f9c66jaa43d25bb3c75cbc-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
T24gVGh1LCBGZWIgNCwgMjAxMCBhdCAxMDo1MiBQTSwgSGFsIFJvc2Vuc3RvY2sKPGhhbC5yb3Nl bnN0b2NrQGdtYWlsLmNvbT4gd3JvdGU6Cj4gT24gVGh1LCBGZWIgNCwgMjAxMCBhdCAxMjo0MyBQ TSwgRWxpIERvcmZtYW4gKFZvbHRhaXJlKQo+IDxkb3JmbWFuLmVsaUBnbWFpbC5jb20+IHdyb3Rl Ogo+Pgo+PiBTdWJqZWN0OiBbUEFUQ0hdIFdyb25nIGhhbmRsaW5nIG9mIE1DIGNyZWF0ZSBhbmQg ZGVsZXRlIHRyYXBzCj4+Cj4+IEZvciB0aGVzZSB0cmFwcyB0aGUgR0lEIGluIHRoZSBkYXRhIGRl dGFpbHMgaXMgdGhlIE1HSUQgYW5kCj4+IG5vdCB0aGUgc291cmNlIHBvcnQgZ2lkLgo+PiBTbyB0 aGUgU00gc2hvdWxkIGNoZWNrIHRoYXQgc3Vic2NyaWJlciBwb3J0IGhhcyB0aGUgcGtleSBvZiB0 aGUgTUMgZ3JvdXAuCj4+IFRoZXJlIHdhcyBhbHNvIGFuIGVycm9yIGluIGNvbXBhcmluZyB0aGUg c3VibmV0IHByZWZpeCBhbmQgZ3VpZCBkdWUgdG8KPj4gaG9zdC9uZXR3b3JrIG9yZGVyIG1pc21h dGNoLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBFbGkgRG9yZm1hbiA8ZWxpZEB2b2x0YWlyZS5jb20+ Cj4+IC0tLQo+PiDCoG9wZW5zbS9vcGVuc20vb3NtX2luZm9ybS5jIHwgwqAxNTEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQo+PiDCoDEgZmlsZXMgY2hhbmdlZCwg OTggaW5zZXJ0aW9ucygrKSwgNTMgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9vcGVu c20vb3BlbnNtL29zbV9pbmZvcm0uYyBiL29wZW5zbS9vcGVuc20vb3NtX2luZm9ybS5jCj4+IGlu ZGV4IDgxMDgyMTMuLmFlNGZlNzEgMTAwNjQ0Cj4+IC0tLSBhL29wZW5zbS9vcGVuc20vb3NtX2lu Zm9ybS5jCj4+ICsrKyBiL29wZW5zbS9vcGVuc20vb3NtX2luZm9ybS5jCj4+IEBAIC0zNDEsNiAr MzQxLDEwMyBAQCBFeGl0Ogo+PiDCoCDCoCDCoCDCoHJldHVybiBzdGF0dXM7Cj4+IMKgfQo+Pgo+ PiArc3RhdGljIGludCBpc19hY2Nlc3NfcGVybWl0dGVkKCBvc21faW5mcl90ICpwX2luZnJfcmVj LAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9zbV9p bmZyX21hdGNoX2N0eHRfdCAqcF9pbmZyX21hdGNoICkKPj4gK3sKPj4gKyDCoCDCoCDCoCBjbF9s aXN0X3QgKnBfaW5mcl90b19yZW1vdmVfbGlzdCA9IHBfaW5mcl9tYXRjaC0+cF9yZW1vdmVfaW5m cl9saXN0Owo+PiArIMKgIMKgIMKgIGliX2luZm9ybV9pbmZvX3QgKnBfaWkgPSAmKHBfaW5mcl9y ZWMtPmluZm9ybV9yZWNvcmQuaW5mb3JtX2luZm8pOwo+PiArIMKgIMKgIMKgIGliX21hZF9ub3Rp Y2VfYXR0cl90ICpwX250YyA9IHBfaW5mcl9tYXRjaC0+cF9udGM7Cj4+ICsgwqAgwqAgwqAgdWlu dDE2X3QgdHJhcF9udW0gPSBjbF9udG9oMTYocF9udGMtPmdfb3Jfdi5nZW5lcmljLnRyYXBfbnVt KTsKPj4gKyDCoCDCoCDCoCBvc21fc3Vibl90ICpwX3N1Ym4gPSBwX2luZnJfcmVjLT5zYS0+cF9z dWJuOwo+PiArIMKgIMKgIMKgIG9zbV9sb2dfdCAqcF9sb2cgPSBwX2luZnJfcmVjLT5zYS0+cF9s b2c7Cj4+ICsgwqAgwqAgwqAgY2hhciBnaWRfc3RyW0lORVQ2X0FERFJTVFJMRU5dOwo+PiArIMKg IMKgIMKgIG9zbV9tZ3JwX3QgKnBfbWdycDsKPj4gKyDCoCDCoCDCoCBpYl9naWRfdCBzb3VyY2Vf Z2lkOwo+PiArIMKgIMKgIMKgIG9zbV9wb3J0X3QgKnBfc3JjX3BvcnQ7Cj4+ICsgwqAgwqAgwqAg b3NtX3BvcnRfdCAqcF9kZXN0X3BvcnQ7Cj4+ICsKPj4gKyDCoCDCoCDCoCAvKiBJbiBjYXNlIG9m IEdJRF9JTig2NCkgb3IgR0lEX09VVCg2NSkgdHJhcHMgdGhlIHNvdXJjZSBnaWQKPj4gKyDCoCDC oCDCoCDCoCDCoGNvbXBhcmlzb24gc2hvdWxkIGJlIGRvbmUgb24gdGhlIHRyYXAgc291cmNlIChz YXZlZCBhcyB0aGUgZ2lkIGluIHRoZQo+PiArIMKgIMKgIMKgIMKgIMKgZGF0YSBkZXRhaWxzIGZp ZWxkKS4KPj4gKyDCoCDCoCDCoCDCoCDCoEZvciB0cmFwcyBNQ19DUkVBVEUoNjYpIG9yIE1DX0RF TEVURSg2NykgdGhlIGRhdGEgZGV0YWlscyBnaWQgaXMKPj4gKyDCoCDCoCDCoCDCoCDCoHRoZSBN R0lELiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgc3Vic2NyaWJlciBoYXMgdGhlIHBreSBvZgo+ Cj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0eXBvIMKgXl5eXgo+Cj4gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcGtleQo+Cj4KPj4gKyDCoCDCoCDCoCDCoCDC oHRoZSBNQyBncm91cC4KPgo+IFNob3VsZG4ndCB0aGlzIGJlIHRoZSBzdWJzY3JpYmVyIGhhcyBh IGNvbXBhdGlibGUgcGtleSB3aXRoIE1DIGdyb3VwID8KPiBUaGUgTUMgZ3JvdXAgaGFzIGEgZnVs bCBtZW1iZXIgUEtleSBhbmQgdGhlIG1lbWJlcnMgY2FuIGJlIGZ1bGwgb3IKPiBsaW1pdGVkLgoK SSBhY2NlcHQgdGhlIGNvcnJlY3Rpb24uClNhc2hhLCBjYW4geW91IHBsZWFzZSBjaGFuZ2UgdGhp cyBpbiB0aGUgY29tbWl0IChvbmx5IGlmIHRoZXJlIGFyZSBub3QKb3RoZXIgcmVtYXJrcykuCgpC VFcsIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHJlZmVyZW5jZSBpbiB0aGUgSUIgc3BlYyBmb3IgTUMg Z3JvdXAKY3JlYXRlL2RlbGV0ZSB0cmFwIChhdCBsZWFzdCBJIGRpZG4ndCBmaW5kIGl0KS4KCj4K Pj4gKyDCoCDCoCDCoCDCoCDCoEluIGFsbCBvdGhlciBjYXNlcyB0aGUgaXNzdWVyIGdpcyBpcyB0 aGUgdHJhcCBzb3VyY2UuCj4KPiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0eXBvIMKgXl5eCj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgZ2lkCj4KCmFuZCB0aGlzIHR5cG8gb2YgY291cnNlLgoKVGhhbmtzLApFbGkK PiAtLSBIYWwKPgo+PiArIMKgIMKgIMKgICovCj4+ICsgwqAgwqAgwqAgaWYgKHRyYXBfbnVtID49 IDY0ICYmIHRyYXBfbnVtIDw9IDY3ICkKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBUaGUg aXNzdWVyIG9mIHRoZXNlIHRyYXBzIGlzIHRoZSBTTSBzbyBzb3VyY2VfZ2lkCj4+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBpcyB0aGUgZ2lkIHNhdmVkIG9uIHRoZSBkYXRhIGRldGFpbHMg Ki8KPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMtPmRhdGFfZGV0 YWlscy5udGNfNjRfNjcuZ2lkOwo+PiArIMKgIMKgIMKgIGVsc2UKPj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMtPmlzc3Vlcl9naWQ7Cj4+ICsKPj4gKyDCoCDCoCDC oCBwX2Rlc3RfcG9ydCA9Cj4+ICsgwqAgwqAgwqAgwqAgwqAgY2xfcHRyX3ZlY3Rvcl9nZXQoJnBf c3Vibi0+cG9ydF9saWRfdGJsLAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0X2xpZCkpOwo+ PiArIMKgIMKgIMKgIGlmICghcF9kZXN0X3BvcnQpIHsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0lORk8sCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5kIGRlc3RpbmF0aW9uIHBvcnQgd2l0aCBMSUQ6JXVcbiIs Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDE2KHBfaW5mcl9y ZWMtPnJlcG9ydF9hZGRyLmRlc3RfbGlkKSk7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290 byBFeGl0Owo+PiArIMKgIMKgIMKgIH0KPj4gKwo+PiArIMKgIMKgIMKgIHN3aXRjaCAodHJhcF9u dW0pIHsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDY2Ogo+PiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGNhc2UgNjc6Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg cF9tZ3JwID0gb3NtX2dldF9tZ3JwX2J5X21naWQocF9zdWJuLCAmc291cmNlX2dpZCk7Cj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwX21ncnApIHsKPj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBP U01fTE9HX0lORk8sCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5kIE1HSUQgJXNcbiIsCj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW5ldF9udG9w KEFGX0lORVQ2LCBzb3VyY2VfZ2lkLnJhdywgZ2lkX3N0ciwgc2l6ZW9mIGdpZF9zdHIpKTsKPj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7 Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+PiArCj4+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFvc21fcGh5c3BfaGFzX3BrZXkocF9sb2cs Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcF9tZ3JwLT5tY21lbWJlcl9yZWMucGtleSwKPj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwX2Rlc3RfcG9ydC0+cF9waHlzcCkpIHsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0lORk8sCj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg Ik1HSUQgJXMgYW5kIHBvcnQgR1VJRDoweCUwMTYiIFBSSXg2NCAiIGRvIG5vdCBzaGFyZSBzYW1l IHBrZXlcbiIsCj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaW5ldF9udG9wKEFGX0lORVQ2LCBzb3VyY2VfZ2lkLnJhdywgZ2lkX3N0 ciwgc2l6ZW9mIGdpZF9zdHIpLAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2g2NChwX2Rlc3RfcG9ydC0+Z3VpZCkpOwo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhp dDsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4+ICsKPj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBkZWZhdWx0Ogo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBfc3Jj X3BvcnQgPQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9zbV9n ZXRfcG9ydF9ieV9ndWlkKHBfc3Vibiwgc291cmNlX2dpZC51bmljYXN0LmludGVyZmFjZV9pZCk7 Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwX3NyY19wb3J0KSB7 Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xP RyhwX2xvZywgT1NNX0xPR19JTkZPLAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJDYW5ub3QgZmluZCBzb3VyY2UgcG9ydCB3aXRo IEdVSUQ6MHglMDE2IiBQUkl4NjQgIlxuIiwKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oNjQoc291cmNlX2dpZC51bmlj YXN0LmludGVyZmFjZV9pZCkpOwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCB9Cj4+ICsKPj4gKwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8q IENoZWNrIGlmIHRoZXJlIGlzIGEgcGtleSBtYXRjaC4gbzEzLTE3LjEuMSAqLwo+PiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChvc21fcG9ydF9zaGFyZV9wa2V5KHBfbG9n LCBwX3NyY19wb3J0LCBwX2Rlc3RfcG9ydCkgPT0gRkFMU0UpIHsKPj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0RF QlVHLCAiTWlzbWF0Y2ggYnkgUGtleVxuIik7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogQWNjb3JkaW5nIHRvIG8xMy0xNy4xLjIgLSBJZiB0aGlz IGluZm9ybUluZm8gZG9lcyBub3QgaGF2ZQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbGlkX3JhbmdlX2JlZ2luIG9mIDB4RkZGRiwgdGhlbiB0 aGlzIGluZm9ybUluZm8gcmVxdWVzdAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSBkYXRhYmFzZSAqLwo+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChwX2lp LT5saWRfcmFuZ2VfYmVnaW4gIT0gMHhGRkZGKSB7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xP R19WRVJCT1NFLAo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJQa2V5IG1pc21hdGNoIG9uIGxpZF9yYW5nZV9i ZWdpbiAhPSAweEZGRkYuICIKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiTmVlZCB0byByZW1vdmUgdGhpcyBp bmZvcm1JbmZvIGZyb20gZGJcbiIpOwo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIGFkZCB0aGUgaW5mb3JtSW5mbyByZWNvcmQg dG8gdGhlIHJlbW92ZV9pbmZyIGxpc3QgKi8KPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9saXN0X2luc2VydF90YWlsKHBfaW5m cl90b19yZW1vdmVfbGlzdCwgcF9pbmZyX3JlYyk7Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB9Cj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7 Cj4+ICsgwqAgwqAgwqAgfQo+PiArCj4+ICsgwqAgwqAgwqAgcmV0dXJuIDE7Cj4+ICtFeGl0Ogo+ PiArIMKgIMKgIMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICsKPj4gwqAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kgo+PiDCoCogVGhpcyByb3V0aW5lIGNvbXBhcmVzIGEgZ2l2ZW4gTm90aWNlIGFuZCBhIExpc3RJ dGVtIG9mIEluZm9ybUluZm8gdHlwZS4KPj4gwqAqIFBSRVJFUVVJU0lURToKPj4gQEAgLTM1MSwx NSArNDQ4LDEwIEBAIHN0YXRpYyB2b2lkIG1hdGNoX25vdGljZV90b19pbmZfcmVjKElOIGNsX2xp c3RfaXRlbV90ICogcF9saXN0X2l0ZW0sCj4+IMKgewo+PiDCoCDCoCDCoCDCoG9zbV9pbmZyX21h dGNoX2N0eHRfdCAqcF9pbmZyX21hdGNoID0gKG9zbV9pbmZyX21hdGNoX2N0eHRfdCAqKSBjb250 ZXh0Owo+PiDCoCDCoCDCoCDCoGliX21hZF9ub3RpY2VfYXR0cl90ICpwX250YyA9IHBfaW5mcl9t YXRjaC0+cF9udGM7Cj4+IC0gwqAgwqAgwqAgY2xfbGlzdF90ICpwX2luZnJfdG9fcmVtb3ZlX2xp c3QgPSBwX2luZnJfbWF0Y2gtPnBfcmVtb3ZlX2luZnJfbGlzdDsKPj4gwqAgwqAgwqAgwqBvc21f aW5mcl90ICpwX2luZnJfcmVjID0gKG9zbV9pbmZyX3QgKikgcF9saXN0X2l0ZW07Cj4+IMKgIMKg IMKgIMKgaWJfaW5mb3JtX2luZm9fdCAqcF9paSA9ICYocF9pbmZyX3JlYy0+aW5mb3JtX3JlY29y ZC5pbmZvcm1faW5mbyk7Cj4+IMKgIMKgIMKgIMKgY2xfc3RhdHVzX3Qgc3RhdHVzID0gQ0xfTk9U X0ZPVU5EOwo+PiDCoCDCoCDCoCDCoG9zbV9sb2dfdCAqcF9sb2cgPSBwX2luZnJfcmVjLT5zYS0+ cF9sb2c7Cj4+IC0gwqAgwqAgwqAgb3NtX3N1Ym5fdCAqcF9zdWJuID0gcF9pbmZyX3JlYy0+c2Et PnBfc3VibjsKPj4gLSDCoCDCoCDCoCBpYl9naWRfdCBzb3VyY2VfZ2lkOwo+PiAtIMKgIMKgIMKg IG9zbV9wb3J0X3QgKnBfc3JjX3BvcnQ7Cj4+IC0gwqAgwqAgwqAgb3NtX3BvcnRfdCAqcF9kZXN0 X3BvcnQ7Cj4+Cj4+IMKgIMKgIMKgIMKgT1NNX0xPR19FTlRFUihwX2xvZyk7Cj4+Cj4+IEBAIC00 NjAsNTUgKzU1Miw4IEBAIHN0YXRpYyB2b2lkIG1hdGNoX25vdGljZV90b19pbmZfcmVjKElOIGNs X2xpc3RfaXRlbV90ICogcF9saXN0X2l0ZW0sCj4+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfQo+ PiDCoCDCoCDCoCDCoH0KPj4KPj4gLSDCoCDCoCDCoCAvKiBDaGVjayBpZiB0aGVyZSBpcyBhIHBr ZXkgbWF0Y2guIG8xMy0xNy4xLjEgKi8KPj4gLSDCoCDCoCDCoCAvKiBDaGVjayBpZiB0aGUgaXNz dWVyIG9mIHRoZSB0cmFwIGlzIHRoZSBTTS4gSWYgaXQgaXMsIHRoZW4gdGhlIGdpZAo+PiAtIMKg IMKgIMKgIMKgIMKgY29tcGFyaXNvbiBzaG91bGQgYmUgZG9uZSBvbiB0aGUgdHJhcCBzb3VyY2Ug KHNhdmVkIGFzIHRoZSBnaWQgaW4gdGhlCj4+IC0gwqAgwqAgwqAgwqAgwqBkYXRhIGRldGFpbHMg ZmllbGQpLgo+PiAtIMKgIMKgIMKgIMKgIMKgSWYgdGhlIGlzc3VlciBnaWQgaXMgbm90IHRoZSBT TSAtIHRoZW4gaXQgaXMgdGhlIGd1aWQgb2YgdGhlIHRyYXAKPj4gLSDCoCDCoCDCoCDCoCDCoHNv dXJjZSAqLwo+PiAtIMKgIMKgIMKgIGlmICgoY2xfbnRvaDY0KHBfbnRjLT5pc3N1ZXJfZ2lkLnVu aWNhc3QucHJlZml4KSA9PQo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgcF9zdWJuLT5vcHQuc3VibmV0 X3ByZWZpeCkKPj4gLSDCoCDCoCDCoCDCoCDCoCAmJiAoY2xfbnRvaDY0KHBfbnRjLT5pc3N1ZXJf Z2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lkKSA9PQo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBf c3Vibi0+c21fcG9ydF9ndWlkKSkKPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBUaGUgaXNz dWVyIGlzIHRoZSBTTSB0aGVuIHRoaXMgaXMgdHJhcCA2NC02NyAtIGNvbXBhcmUgdGhlIGdpZAo+ PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgd2l0aCB0aGUgZ2lkIHNhdmVkIG9uIHRoZSBk YXRhIGRldGFpbHMgKi8KPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9u dGMtPmRhdGFfZGV0YWlscy5udGNfNjRfNjcuZ2lkOwo+PiAtIMKgIMKgIMKgIGVsc2UKPj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMtPmlzc3Vlcl9naWQ7Cj4+IC0K Pj4gLSDCoCDCoCDCoCBwX3NyY19wb3J0ID0KPj4gLSDCoCDCoCDCoCDCoCDCoCBvc21fZ2V0X3Bv cnRfYnlfZ3VpZChwX3N1Ym4sIHNvdXJjZV9naWQudW5pY2FzdC5pbnRlcmZhY2VfaWQpOwo+PiAt IMKgIMKgIMKgIGlmICghcF9zcmNfcG9ydCkgewo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9T TV9MT0cocF9sb2csIE9TTV9MT0dfSU5GTywKPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCAiQ2Fubm90IGZpbmQgc291cmNlIHBvcnQgd2l0aCBHVUlEOjB4JTAxNiIgUFJJeDY0 ICJcbiIsCj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDY0KHNv dXJjZV9naWQudW5pY2FzdC5pbnRlcmZhY2VfaWQpKTsKPj4gKyDCoCDCoCDCoCBpZiAoIWlzX2Fj Y2Vzc19wZXJtaXR0ZWQocF9pbmZyX3JlYywgcF9pbmZyX21hdGNoKSkKPj4gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqBnb3RvIEV4aXQ7Cj4+IC0gwqAgwqAgwqAgfQo+PiAtCj4+IC0gwqAgwqAgwqAg cF9kZXN0X3BvcnQgPQo+PiAtIMKgIMKgIMKgIMKgIMKgIGNsX3B0cl92ZWN0b3JfZ2V0KCZwX3N1 Ym4tPnBvcnRfbGlkX3RibCwKPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBjbF9udG9oMTYocF9pbmZyX3JlYy0+cmVwb3J0X2FkZHIuZGVzdF9saWQpKTsKPj4g LSDCoCDCoCDCoCBpZiAoIXBfZGVzdF9wb3J0KSB7Cj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg T1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgICJDYW5ub3QgZmluZCBkZXN0aW5hdGlvbiBwb3J0IHdpdGggTElEOiV1XG4iLAo+ PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVj LT5yZXBvcnRfYWRkci5kZXN0X2xpZCkpOwo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8g RXhpdDsKPj4gLSDCoCDCoCDCoCB9Cj4+IC0KPj4gLSDCoCDCoCDCoCBpZiAob3NtX3BvcnRfc2hh cmVfcGtleShwX2xvZywgcF9zcmNfcG9ydCwgcF9kZXN0X3BvcnQpID09IEZBTFNFKSB7Cj4+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19ERUJVRywgIk1pc21h dGNoIGJ5IFBrZXlcbiIpOwo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIEFjY29yZGluZyB0 byBvMTMtMTcuMS4yIC0gSWYgdGhpcyBpbmZvcm1JbmZvIGRvZXMgbm90IGhhdmUKPj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxpZF9yYW5nZV9iZWdpbiBvZiAweEZGRkYsIHRoZW4gdGhp cyBpbmZvcm1JbmZvIHJlcXVlc3QKPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNob3Vs ZCBiZSByZW1vdmVkIGZyb20gZGF0YWJhc2UgKi8KPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBp ZiAocF9paS0+bGlkX3JhbmdlX2JlZ2luICE9IDB4RkZGRikgewo+PiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfVkVSQk9TRSwKPj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiUGtleSBtaXNtYXRj aCBvbiBsaWRfcmFuZ2VfYmVnaW4gIT0gMHhGRkZGLiAiCj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIk5lZWQgdG8gcmVtb3ZlIHRoaXMgaW5mb3JtSW5m byBmcm9tIGRiXG4iKTsKPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBh ZGQgdGhlIGluZm9ybUluZm8gcmVjb3JkIHRvIHRoZSByZW1vdmVfaW5mciBsaXN0ICovCj4+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbGlzdF9pbnNlcnRfdGFpbChwX2lu ZnJfdG9fcmVtb3ZlX2xpc3QsIHBfaW5mcl9yZWMpOwo+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IH0KPj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+IC0gwqAgwqAgwqAgfQo+ Pgo+PiDCoCDCoCDCoCDCoC8qIHNlbmQgdGhlIHJlcG9ydCB0byB0aGUgYWRkcmVzcyBwcm92aWRl ZCBpbiB0aGUgaW5mb3JtIHJlY29yZCAqLwo+PiDCoCDCoCDCoCDCoE9TTV9MT0cocF9sb2csIE9T TV9MT0dfREVCVUcsICJNQVRDSCEgU2VuZGluZyBSZXBvcnQuLi5cbiIpOwo+PiAtLQo+PiAxLjUu NQo+Pgo+PiBUaGVyZSBpcyBzdGlsbCBhIHByb2JsZW0gd2l0aCBHSUQgT1VUIHRyYXAgdGhhdCBp cyBub3Qgc2VudCBzaW5jZSBzb3VyY2UgcG9ydAo+PiB3YXMgYWxyZWFkeSByZW1vdmVkLgo+PiBQ YXRjaCB3aWxsIGZvbGxvdy4KPj4KPj4gLS0KPj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxp c3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXJkbWEiIGluCj4+IHRoZSBib2R5 IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCj4+IE1vcmUgbWFqb3Jk b21vIGluZm8gYXQgwqBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK Pj4KPgo=
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 694d48601002050618s2af59695xa36522c04027d8af-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
T24gRnJpLCBGZWIgNSwgMjAxMCBhdCA5OjE4IEFNLCBFbGkgRG9yZm1hbiA8ZG9yZm1hbi5lbGlA Z21haWwuY29tPiB3cm90ZToKPiBPbiBUaHUsIEZlYiA0LCAyMDEwIGF0IDEwOjUyIFBNLCBIYWwg Um9zZW5zdG9jawo+IDxoYWwucm9zZW5zdG9ja0BnbWFpbC5jb20+IHdyb3RlOgo+PiBPbiBUaHUs IEZlYiA0LCAyMDEwIGF0IDEyOjQzIFBNLCBFbGkgRG9yZm1hbiAoVm9sdGFpcmUpCj4+IDxkb3Jm bWFuLmVsaUBnbWFpbC5jb20+IHdyb3RlOgo+Pj4KPj4+IFN1YmplY3Q6IFtQQVRDSF0gV3Jvbmcg aGFuZGxpbmcgb2YgTUMgY3JlYXRlIGFuZCBkZWxldGUgdHJhcHMKPj4+Cj4+PiBGb3IgdGhlc2Ug dHJhcHMgdGhlIEdJRCBpbiB0aGUgZGF0YSBkZXRhaWxzIGlzIHRoZSBNR0lEIGFuZAo+Pj4gbm90 IHRoZSBzb3VyY2UgcG9ydCBnaWQuCj4+PiBTbyB0aGUgU00gc2hvdWxkIGNoZWNrIHRoYXQgc3Vi c2NyaWJlciBwb3J0IGhhcyB0aGUgcGtleSBvZiB0aGUgTUMgZ3JvdXAuCj4+PiBUaGVyZSB3YXMg YWxzbyBhbiBlcnJvciBpbiBjb21wYXJpbmcgdGhlIHN1Ym5ldCBwcmVmaXggYW5kIGd1aWQgZHVl IHRvCj4+PiBob3N0L25ldHdvcmsgb3JkZXIgbWlzbWF0Y2guCj4+Pgo+Pj4gU2lnbmVkLW9mZi1i eTogRWxpIERvcmZtYW4gPGVsaWRAdm9sdGFpcmUuY29tPgo+Pj4gLS0tCj4+PiDCoG9wZW5zbS9v cGVuc20vb3NtX2luZm9ybS5jIHwgwqAxNTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLQo+Pj4gwqAxIGZpbGVzIGNoYW5nZWQsIDk4IGluc2VydGlvbnMoKyksIDUz IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9vcGVuc20vb3BlbnNtL29zbV9pbmZv cm0uYyBiL29wZW5zbS9vcGVuc20vb3NtX2luZm9ybS5jCj4+PiBpbmRleCA4MTA4MjEzLi5hZTRm ZTcxIDEwMDY0NAo+Pj4gLS0tIGEvb3BlbnNtL29wZW5zbS9vc21faW5mb3JtLmMKPj4+ICsrKyBi L29wZW5zbS9vcGVuc20vb3NtX2luZm9ybS5jCj4+PiBAQCAtMzQxLDYgKzM0MSwxMDMgQEAgRXhp dDoKPj4+IMKgIMKgIMKgIMKgcmV0dXJuIHN0YXR1czsKPj4+IMKgfQo+Pj4KPj4+ICtzdGF0aWMg aW50IGlzX2FjY2Vzc19wZXJtaXR0ZWQoIG9zbV9pbmZyX3QgKnBfaW5mcl9yZWMsCj4+PiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG9zbV9pbmZyX21hdGNo X2N0eHRfdCAqcF9pbmZyX21hdGNoICkKPj4+ICt7Cj4+PiArIMKgIMKgIMKgIGNsX2xpc3RfdCAq cF9pbmZyX3RvX3JlbW92ZV9saXN0ID0gcF9pbmZyX21hdGNoLT5wX3JlbW92ZV9pbmZyX2xpc3Q7 Cj4+PiArIMKgIMKgIMKgIGliX2luZm9ybV9pbmZvX3QgKnBfaWkgPSAmKHBfaW5mcl9yZWMtPmlu Zm9ybV9yZWNvcmQuaW5mb3JtX2luZm8pOwo+Pj4gKyDCoCDCoCDCoCBpYl9tYWRfbm90aWNlX2F0 dHJfdCAqcF9udGMgPSBwX2luZnJfbWF0Y2gtPnBfbnRjOwo+Pj4gKyDCoCDCoCDCoCB1aW50MTZf dCB0cmFwX251bSA9IGNsX250b2gxNihwX250Yy0+Z19vcl92LmdlbmVyaWMudHJhcF9udW0pOwo+ Pj4gKyDCoCDCoCDCoCBvc21fc3Vibl90ICpwX3N1Ym4gPSBwX2luZnJfcmVjLT5zYS0+cF9zdWJu Owo+Pj4gKyDCoCDCoCDCoCBvc21fbG9nX3QgKnBfbG9nID0gcF9pbmZyX3JlYy0+c2EtPnBfbG9n Owo+Pj4gKyDCoCDCoCDCoCBjaGFyIGdpZF9zdHJbSU5FVDZfQUREUlNUUkxFTl07Cj4+PiArIMKg IMKgIMKgIG9zbV9tZ3JwX3QgKnBfbWdycDsKPj4+ICsgwqAgwqAgwqAgaWJfZ2lkX3Qgc291cmNl X2dpZDsKPj4+ICsgwqAgwqAgwqAgb3NtX3BvcnRfdCAqcF9zcmNfcG9ydDsKPj4+ICsgwqAgwqAg wqAgb3NtX3BvcnRfdCAqcF9kZXN0X3BvcnQ7Cj4+PiArCj4+PiArIMKgIMKgIMKgIC8qIEluIGNh c2Ugb2YgR0lEX0lOKDY0KSBvciBHSURfT1VUKDY1KSB0cmFwcyB0aGUgc291cmNlIGdpZAo+Pj4g KyDCoCDCoCDCoCDCoCDCoGNvbXBhcmlzb24gc2hvdWxkIGJlIGRvbmUgb24gdGhlIHRyYXAgc291 cmNlIChzYXZlZCBhcyB0aGUgZ2lkIGluIHRoZQo+Pj4gKyDCoCDCoCDCoCDCoCDCoGRhdGEgZGV0 YWlscyBmaWVsZCkuCj4+PiArIMKgIMKgIMKgIMKgIMKgRm9yIHRyYXBzIE1DX0NSRUFURSg2Nikg b3IgTUNfREVMRVRFKDY3KSB0aGUgZGF0YSBkZXRhaWxzIGdpZCBpcwo+Pj4gKyDCoCDCoCDCoCDC oCDCoHRoZSBNR0lELiBXZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgc3Vic2NyaWJlciBoYXMgdGhl IHBreSBvZgo+Pgo+Pgo+PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0eXBvIMKgXl5eXgo+ Pgo+PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwa2V5Cj4+Cj4+Cj4+ PiArIMKgIMKgIMKgIMKgIMKgdGhlIE1DIGdyb3VwLgo+Pgo+PiBTaG91bGRuJ3QgdGhpcyBiZSB0 aGUgc3Vic2NyaWJlciBoYXMgYSBjb21wYXRpYmxlIHBrZXkgd2l0aCBNQyBncm91cCA/Cj4+IFRo ZSBNQyBncm91cCBoYXMgYSBmdWxsIG1lbWJlciBQS2V5IGFuZCB0aGUgbWVtYmVycyBjYW4gYmUg ZnVsbCBvcgo+PiBsaW1pdGVkLgo+Cj4gSSBhY2NlcHQgdGhlIGNvcnJlY3Rpb24uCgpEb2Vzbid0 IHRoaXMgcmVxdWlyZSBhIGNvZGUgY2hhbmdlIGZvciBoYW5kbGluZyB0cmFwIGNhc2VzIDY2LTY3 ID8KCj4gU2FzaGEsIGNhbiB5b3UgcGxlYXNlIGNoYW5nZSB0aGlzIGluIHRoZSBjb21taXQgKG9u bHkgaWYgdGhlcmUgYXJlIG5vdAo+IG90aGVyIHJlbWFya3MpLgoKSXMgdGhhdCB3aGF0IHlvdSBh cmUgYXNraW5nIFNhc2hhIHRvIGRvIChiZXlvbmQgdGhlIHR5cG9zKSA/Cgo+Cj4gQlRXLCB0aGVy ZSBpcyBubyBleHBsaWNpdCByZWZlcmVuY2UgaW4gdGhlIElCIHNwZWMgZm9yIE1DIGdyb3VwCj4g Y3JlYXRlL2RlbGV0ZSB0cmFwIChhdCBsZWFzdCBJIGRpZG4ndCBmaW5kIGl0KS4KCk5vdCBzdXJl IHdoYXQgeW91IG1lYW4gYnkgdGhpcy4gV2hhdCBkaWRuJ3QgeW91IGZpbmQgPwoKLS0gSGFsCgo+ Cj4+Cj4+PiArIMKgIMKgIMKgIMKgIMKgSW4gYWxsIG90aGVyIGNhc2VzIHRoZSBpc3N1ZXIgZ2lz IGlzIHRoZSB0cmFwIHNvdXJjZS4KPj4KPj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdHlwbyDCoF5eXgo+PiDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBnaWQKPj4KPgo+IGFuZCB0aGlzIHR5cG8gb2YgY291cnNlLgo+ Cj4gVGhhbmtzLAo+IEVsaQo+PiAtLSBIYWwKPj4KPj4+ICsgwqAgwqAgwqAgKi8KPj4+ICsgwqAg wqAgwqAgaWYgKHRyYXBfbnVtID49IDY0ICYmIHRyYXBfbnVtIDw9IDY3ICkKPj4+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgLyogVGhlIGlzc3VlciBvZiB0aGVzZSB0cmFwcyBpcyB0aGUgU00gc28g c291cmNlX2dpZAo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlzIHRoZSBnaWQgc2F2 ZWQgb24gdGhlIGRhdGEgZGV0YWlscyAqLwo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzb3Vy Y2VfZ2lkID0gcF9udGMtPmRhdGFfZGV0YWlscy5udGNfNjRfNjcuZ2lkOwo+Pj4gKyDCoCDCoCDC oCBlbHNlCj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNvdXJjZV9naWQgPSBwX250Yy0+aXNz dWVyX2dpZDsKPj4+ICsKPj4+ICsgwqAgwqAgwqAgcF9kZXN0X3BvcnQgPQo+Pj4gKyDCoCDCoCDC oCDCoCDCoCBjbF9wdHJfdmVjdG9yX2dldCgmcF9zdWJuLT5wb3J0X2xpZF90YmwsCj4+PiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJf cmVjLT5yZXBvcnRfYWRkci5kZXN0X2xpZCkpOwo+Pj4gKyDCoCDCoCDCoCBpZiAoIXBfZGVzdF9w b3J0KSB7Cj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0df SU5GTywKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5k IGRlc3RpbmF0aW9uIHBvcnQgd2l0aCBMSUQ6JXVcbiIsCj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0X2xp ZCkpOwo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+PiArIMKgIMKgIMKg IH0KPj4+ICsKPj4+ICsgwqAgwqAgwqAgc3dpdGNoICh0cmFwX251bSkgewo+Pj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCBjYXNlIDY2Ogo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDY3 Ogo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwX21ncnAgPSBvc21fZ2V0 X21ncnBfYnlfbWdpZChwX3N1Ym4sICZzb3VyY2VfZ2lkKTsKPj4+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwX21ncnApIHsKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+ Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAiQ2Fubm90IGZpbmQgTUdJRCAlc1xuIiwKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW5ldF9udG9wKEFGX0lORVQ2LCBz b3VyY2VfZ2lkLnJhdywgZ2lkX3N0ciwgc2l6ZW9mIGdpZF9zdHIpKTsKPj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0Owo+Pj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4+PiArCj4+PiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGlmICghb3NtX3BoeXNwX2hhc19wa2V5KHBfbG9nLAo+Pj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwX21ncnAtPm1jbWVtYmVyX3JlYy5wa2V5LAo+Pj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBw X2Rlc3RfcG9ydC0+cF9waHlzcCkpIHsKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+Pj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiTUdJ RCAlcyBhbmQgcG9ydCBHVUlEOjB4JTAxNiIgUFJJeDY0ICIgZG8gbm90IHNoYXJlIHNhbWUgcGtl eVxuIiwKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgaW5ldF9udG9wKEFGX0lORVQ2LCBzb3VyY2VfZ2lkLnJhdywgZ2lkX3N0ciwg c2l6ZW9mIGdpZF9zdHIpLAo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oNjQocF9kZXN0X3BvcnQtPmd1aWQpKTsKPj4+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0 Owo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4+PiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+Pj4gKwo+Pj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBkZWZhdWx0Ogo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBw X3NyY19wb3J0ID0KPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg b3NtX2dldF9wb3J0X2J5X2d1aWQocF9zdWJuLCBzb3VyY2VfZ2lkLnVuaWNhc3QuaW50ZXJmYWNl X2lkKTsKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwX3NyY19w b3J0KSB7Cj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IE9TTV9MT0cocF9sb2csIE9TTV9MT0dfSU5GTywKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5kIHNvdXJjZSBw b3J0IHdpdGggR1VJRDoweCUwMTYiIFBSSXg2NCAiXG4iLAo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oNjQoc291cmNl X2dpZC51bmljYXN0LmludGVyZmFjZV9pZCkpOwo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIH0KPj4+ICsKPj4+ICsKPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSBwa2V5IG1hdGNoLiBvMTMtMTcuMS4x ICovCj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChvc21fcG9ydF9z aGFyZV9wa2V5KHBfbG9nLCBwX3NyY19wb3J0LCBwX2Rlc3RfcG9ydCkgPT0gRkFMU0UpIHsKPj4+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhw X2xvZywgT1NNX0xPR19ERUJVRywgIk1pc21hdGNoIGJ5IFBrZXlcbiIpOwo+Pj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBBY2NvcmRpbmcgdG8gbzEz LTE3LjEuMiAtIElmIHRoaXMgaW5mb3JtSW5mbyBkb2VzIG5vdCBoYXZlCj4+PiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbGlkX3JhbmdlX2JlZ2lu IG9mIDB4RkZGRiwgdGhlbiB0aGlzIGluZm9ybUluZm8gcmVxdWVzdAo+Pj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNob3VsZCBiZSByZW1vdmVk IGZyb20gZGF0YWJhc2UgKi8KPj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgaWYgKHBfaWktPmxpZF9yYW5nZV9iZWdpbiAhPSAweEZGRkYpIHsKPj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg T1NNX0xPRyhwX2xvZywgT1NNX0xPR19WRVJCT1NFLAo+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiUGtleSBt aXNtYXRjaCBvbiBsaWRfcmFuZ2VfYmVnaW4gIT0gMHhGRkZGLiAiCj4+PiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg ICJOZWVkIHRvIHJlbW92ZSB0aGlzIGluZm9ybUluZm8gZnJvbSBkYlxuIik7Cj4+PiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIGFk ZCB0aGUgaW5mb3JtSW5mbyByZWNvcmQgdG8gdGhlIHJlbW92ZV9pbmZyIGxpc3QgKi8KPj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg Y2xfbGlzdF9pbnNlcnRfdGFpbChwX2luZnJfdG9fcmVtb3ZlX2xpc3QsIHBfaW5mcl9yZWMpOwo+ Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4+PiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsK Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+Pj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPj4+ICsgwqAgwqAgwqAgfQo+Pj4gKwo+Pj4g KyDCoCDCoCDCoCByZXR1cm4gMTsKPj4+ICtFeGl0Ogo+Pj4gKyDCoCDCoCDCoCByZXR1cm4gMDsK Pj4+ICt9Cj4+PiArCj4+PiArCj4+PiDCoC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4+PiDCoCogVGhpcyByb3V0 aW5lIGNvbXBhcmVzIGEgZ2l2ZW4gTm90aWNlIGFuZCBhIExpc3RJdGVtIG9mIEluZm9ybUluZm8g dHlwZS4KPj4+IMKgKiBQUkVSRVFVSVNJVEU6Cj4+PiBAQCAtMzUxLDE1ICs0NDgsMTAgQEAgc3Rh dGljIHZvaWQgbWF0Y2hfbm90aWNlX3RvX2luZl9yZWMoSU4gY2xfbGlzdF9pdGVtX3QgKiBwX2xp c3RfaXRlbSwKPj4+IMKgewo+Pj4gwqAgwqAgwqAgwqBvc21faW5mcl9tYXRjaF9jdHh0X3QgKnBf aW5mcl9tYXRjaCA9IChvc21faW5mcl9tYXRjaF9jdHh0X3QgKikgY29udGV4dDsKPj4+IMKgIMKg IMKgIMKgaWJfbWFkX25vdGljZV9hdHRyX3QgKnBfbnRjID0gcF9pbmZyX21hdGNoLT5wX250YzsK Pj4+IC0gwqAgwqAgwqAgY2xfbGlzdF90ICpwX2luZnJfdG9fcmVtb3ZlX2xpc3QgPSBwX2luZnJf bWF0Y2gtPnBfcmVtb3ZlX2luZnJfbGlzdDsKPj4+IMKgIMKgIMKgIMKgb3NtX2luZnJfdCAqcF9p bmZyX3JlYyA9IChvc21faW5mcl90ICopIHBfbGlzdF9pdGVtOwo+Pj4gwqAgwqAgwqAgwqBpYl9p bmZvcm1faW5mb190ICpwX2lpID0gJihwX2luZnJfcmVjLT5pbmZvcm1fcmVjb3JkLmluZm9ybV9p bmZvKTsKPj4+IMKgIMKgIMKgIMKgY2xfc3RhdHVzX3Qgc3RhdHVzID0gQ0xfTk9UX0ZPVU5EOwo+ Pj4gwqAgwqAgwqAgwqBvc21fbG9nX3QgKnBfbG9nID0gcF9pbmZyX3JlYy0+c2EtPnBfbG9nOwo+ Pj4gLSDCoCDCoCDCoCBvc21fc3Vibl90ICpwX3N1Ym4gPSBwX2luZnJfcmVjLT5zYS0+cF9zdWJu Owo+Pj4gLSDCoCDCoCDCoCBpYl9naWRfdCBzb3VyY2VfZ2lkOwo+Pj4gLSDCoCDCoCDCoCBvc21f cG9ydF90ICpwX3NyY19wb3J0Owo+Pj4gLSDCoCDCoCDCoCBvc21fcG9ydF90ICpwX2Rlc3RfcG9y dDsKPj4+Cj4+PiDCoCDCoCDCoCDCoE9TTV9MT0dfRU5URVIocF9sb2cpOwo+Pj4KPj4+IEBAIC00 NjAsNTUgKzU1Miw4IEBAIHN0YXRpYyB2b2lkIG1hdGNoX25vdGljZV90b19pbmZfcmVjKElOIGNs X2xpc3RfaXRlbV90ICogcF9saXN0X2l0ZW0sCj4+PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0K Pj4+IMKgIMKgIMKgIMKgfQo+Pj4KPj4+IC0gwqAgwqAgwqAgLyogQ2hlY2sgaWYgdGhlcmUgaXMg YSBwa2V5IG1hdGNoLiBvMTMtMTcuMS4xICovCj4+PiAtIMKgIMKgIMKgIC8qIENoZWNrIGlmIHRo ZSBpc3N1ZXIgb2YgdGhlIHRyYXAgaXMgdGhlIFNNLiBJZiBpdCBpcywgdGhlbiB0aGUgZ2lkCj4+ PiAtIMKgIMKgIMKgIMKgIMKgY29tcGFyaXNvbiBzaG91bGQgYmUgZG9uZSBvbiB0aGUgdHJhcCBz b3VyY2UgKHNhdmVkIGFzIHRoZSBnaWQgaW4gdGhlCj4+PiAtIMKgIMKgIMKgIMKgIMKgZGF0YSBk ZXRhaWxzIGZpZWxkKS4KPj4+IC0gwqAgwqAgwqAgwqAgwqBJZiB0aGUgaXNzdWVyIGdpZCBpcyBu b3QgdGhlIFNNIC0gdGhlbiBpdCBpcyB0aGUgZ3VpZCBvZiB0aGUgdHJhcAo+Pj4gLSDCoCDCoCDC oCDCoCDCoHNvdXJjZSAqLwo+Pj4gLSDCoCDCoCDCoCBpZiAoKGNsX250b2g2NChwX250Yy0+aXNz dWVyX2dpZC51bmljYXN0LnByZWZpeCkgPT0KPj4+IC0gwqAgwqAgwqAgwqAgwqAgwqBwX3N1Ym4t Pm9wdC5zdWJuZXRfcHJlZml4KQo+Pj4gLSDCoCDCoCDCoCDCoCDCoCAmJiAoY2xfbnRvaDY0KHBf bnRjLT5pc3N1ZXJfZ2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lkKSA9PQo+Pj4gLSDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwX3N1Ym4tPnNtX3BvcnRfZ3VpZCkpCj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIC8qIFRoZSBpc3N1ZXIgaXMgdGhlIFNNIHRoZW4gdGhpcyBpcyB0cmFwIDY0LTY3IC0gY29t cGFyZSB0aGUgZ2lkCj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgd2l0aCB0aGUgZ2lk IHNhdmVkIG9uIHRoZSBkYXRhIGRldGFpbHMgKi8KPj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg c291cmNlX2dpZCA9IHBfbnRjLT5kYXRhX2RldGFpbHMubnRjXzY0XzY3LmdpZDsKPj4+IC0gwqAg wqAgwqAgZWxzZQo+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMt Pmlzc3Vlcl9naWQ7Cj4+PiAtCj4+PiAtIMKgIMKgIMKgIHBfc3JjX3BvcnQgPQo+Pj4gLSDCoCDC oCDCoCDCoCDCoCBvc21fZ2V0X3BvcnRfYnlfZ3VpZChwX3N1Ym4sIHNvdXJjZV9naWQudW5pY2Fz dC5pbnRlcmZhY2VfaWQpOwo+Pj4gLSDCoCDCoCDCoCBpZiAoIXBfc3JjX3BvcnQpIHsKPj4+IC0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+Pj4gLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQgc291cmNlIHBvcnQg d2l0aCBHVUlEOjB4JTAxNiIgUFJJeDY0ICJcbiIsCj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGNsX250b2g2NChzb3VyY2VfZ2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lkKSk7 Cj4+PiArIMKgIMKgIMKgIGlmICghaXNfYWNjZXNzX3Blcm1pdHRlZChwX2luZnJfcmVjLCBwX2lu ZnJfbWF0Y2gpKQo+Pj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBnb3RvIEV4aXQ7Cj4+PiAtIMKg IMKgIMKgIH0KPj4+IC0KPj4+IC0gwqAgwqAgwqAgcF9kZXN0X3BvcnQgPQo+Pj4gLSDCoCDCoCDC oCDCoCDCoCBjbF9wdHJfdmVjdG9yX2dldCgmcF9zdWJuLT5wb3J0X2xpZF90YmwsCj4+PiAtIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJf cmVjLT5yZXBvcnRfYWRkci5kZXN0X2xpZCkpOwo+Pj4gLSDCoCDCoCDCoCBpZiAoIXBfZGVzdF9w b3J0KSB7Cj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0df SU5GTywKPj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5k IGRlc3RpbmF0aW9uIHBvcnQgd2l0aCBMSUQ6JXVcbiIsCj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0X2xp ZCkpOwo+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+PiAtIMKgIMKgIMKg IH0KPj4+IC0KPj4+IC0gwqAgwqAgwqAgaWYgKG9zbV9wb3J0X3NoYXJlX3BrZXkocF9sb2csIHBf c3JjX3BvcnQsIHBfZGVzdF9wb3J0KSA9PSBGQUxTRSkgewo+Pj4gLSDCoCDCoCDCoCDCoCDCoCDC oCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0RFQlVHLCAiTWlzbWF0Y2ggYnkgUGtleVxuIik7 Cj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIEFjY29yZGluZyB0byBvMTMtMTcuMS4yIC0g SWYgdGhpcyBpbmZvcm1JbmZvIGRvZXMgbm90IGhhdmUKPj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBsaWRfcmFuZ2VfYmVnaW4gb2YgMHhGRkZGLCB0aGVuIHRoaXMgaW5mb3JtSW5mbyBy ZXF1ZXN0Cj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgc2hvdWxkIGJlIHJlbW92ZWQg ZnJvbSBkYXRhYmFzZSAqLwo+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocF9paS0+bGlk X3JhbmdlX2JlZ2luICE9IDB4RkZGRikgewo+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX1ZFUkJPU0UsCj4+PiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJQa2V5IG1pc21hdGNoIG9uIGxpZF9y YW5nZV9iZWdpbiAhPSAweEZGRkYuICIKPj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgIk5lZWQgdG8gcmVtb3ZlIHRoaXMgaW5mb3JtSW5mbyBmcm9tIGRi XG4iKTsKPj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogYWRkIHRoZSBp bmZvcm1JbmZvIHJlY29yZCB0byB0aGUgcmVtb3ZlX2luZnIgbGlzdCAqLwo+Pj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9saXN0X2luc2VydF90YWlsKHBfaW5mcl90b19y ZW1vdmVfbGlzdCwgcF9pbmZyX3JlYyk7Cj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPj4+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0Owo+Pj4gLSDCoCDCoCDCoCB9Cj4+Pgo+ Pj4gwqAgwqAgwqAgwqAvKiBzZW5kIHRoZSByZXBvcnQgdG8gdGhlIGFkZHJlc3MgcHJvdmlkZWQg aW4gdGhlIGluZm9ybSByZWNvcmQgKi8KPj4+IMKgIMKgIMKgIMKgT1NNX0xPRyhwX2xvZywgT1NN X0xPR19ERUJVRywgIk1BVENIISBTZW5kaW5nIFJlcG9ydC4uLlxuIik7Cj4+PiAtLQo+Pj4gMS41 LjUKPj4+Cj4+PiBUaGVyZSBpcyBzdGlsbCBhIHByb2JsZW0gd2l0aCBHSUQgT1VUIHRyYXAgdGhh dCBpcyBub3Qgc2VudCBzaW5jZSBzb3VyY2UgcG9ydAo+Pj4gd2FzIGFscmVhZHkgcmVtb3ZlZC4K Pj4+IFBhdGNoIHdpbGwgZm9sbG93Lgo+Pj4KPj4+IC0tCj4+PiBUbyB1bnN1YnNjcmliZSBmcm9t IHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtcmRtYSIgaW4KPj4+ IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCj4+PiBN b3JlIG1ham9yZG9tbyBpbmZvIGF0IMKgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8t aW5mby5odG1sCj4+Pgo+Pgo+Cg==
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): f0e08f231002050820j1df2b425ia44203957257a6fb-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Quoted 52 lines · Hal Rosenstock
Quoted 51 lines · Eli Dorfman
Quoted 49 lines · Hal Rosenstock
Quoted 31 lines · Eli Dorfman (Voltaire)
Subject: [PATCH] Wrong handling of MC create and delete traps
For these traps the GID in the data details is the MGID and not the source port gid.
So the SM should check that subscriber port has the pkey of the MC group. There was also an error in comparing the subnet prefix and guid due to host/network order mismatch.--- opensm/opensm/osm_inform.c | 151 ++++++++++++++++++++++++++++--------------- 1 files changed, 98 insertions(+), 53 deletions(-)opensm/opensm/osm_inform.c +10
-0@@ -341,6 +341,103 @@ Exit:return status; } +static int is_access_permitted (osm_infr_t *p_infr_rec, +osm_infr_match_ctxt_t *p_infr_match ) +{ +cl_list_t *p_infr_to_remove_list = p_infr_match->p_remove_infr_list; +ib_inform_info_t *p_ii = &(p_infr_rec->inform_record.inform_info); +ib_mad_notice_attr_t *p_ntc = p_infr_match->p_ntc; +uint16_t trap_num =cl_ntoh16 (p_ntc->g_or_v.generic.trap_num); +osm_subn_t *p_subn = p_infr_rec->sa->p_subn; +osm_log_t *p_log = p_infr_rec->sa->p_log; +char gid_str[INET6_ADDRSTRLEN ];opensm/opensm/osm_inform.c Exit: · line 363
Quoted 10 lines
opensm/opensm/osm_inform.c +10
-0+osm_mgrp_t *p_mgrp; +ib_gid_t source_gid; +osm_port_t *p_src_port; +osm_port_t *p_dest_port; + +/* In case of GID_IN(64) or GID_OUT(65) traps the source gid +comparison should be done on the trap source (saved as the gid in the +data details field). +For traps MC_CREATE(66) or MC_DELETE(67) the data details gid is +the MGID. We need to check whether subscriber has the pky of typo ^^^^ pkey
Quoted 7 lines
Quoted 5 lines
Quoted 4 lines
opensm/opensm/osm_inform.c Exit: · line 364
Quoted 1 line
opensm/opensm/osm_inform.c +1
-0+ the MC group.Shouldn't this be the subscriber has a compatible pkey with MC group ? The MC group has a full member PKey and the members can be full or limited.
I accept the correction.
Doesn't this require a code change for handling trap cases 66-67 ?
I think that you referred to the comment since the code is handling this properly (in my opinion).
Quoted 5 lines
Quoted 3 lines
Sasha, can you please change this in the commit (only if there are not other remarks).
Is that what you are asking Sasha to do (beyond the typos) ?
I asked Sasha to fix only the typo in commit.
Quoted 5 lines
Quoted 3 lines
BTW, there is no explicit reference in the IB spec for MC group create/delete trap (at least I didn't find it).
Not sure what you mean by this. What didn't you find ?
in the spec see o13-17.1.2
Thanks,
Eli
Quoted 171 lines
-- Hal
Quoted 168 lines
Quoted 4 lines
opensm/opensm/osm_inform.c Exit: · line 365
Quoted 1 line
opensm/opensm/osm_inform.c +1
-0+ In all other cases the issuer gis is the trap source.typo ^^^ gidand this typo of course.
Thanks,
EliQuoted 160 lines
-- Hal
Quoted 158 lines
opensm/opensm/osm_inform.c +76
-54+*/ +if (trap_num >=64 && trap_num <=67 ) +/* The issuer of these traps is the SM so source_gid +is the gid saved on the data details */ + source_gid = p_ntc->data_details.ntc_64_67.gid; +else + source_gid = p_ntc->issuer_gid; + + p_dest_port = +cl_ptr_vector_get (&p_subn->port_lid_tbl, +cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); +if (!p_dest_port) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find destination port with LID:%u\n" , +cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); + goto Exit; + } + +switch (trap_num) { +case 66 : +case 67 : + p_mgrp =osm_get_mgrp_by_mgid (p_subn, &source_gid); +if (!p_mgrp) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find MGID %s\n" , +inet_ntop (AF_INET6 , source_gid.raw, gid_str,sizeof gid_str)); + goto Exit; + } + +if (!osm_physp_has_pkey (p_log, + p_mgrp->mcmember_rec.pkey, + p_dest_port->p_physp)) { +OSM_LOG (p_log,OSM_LOG_INFO , +"MGID %s and port GUID:0x%016" PRIx64" do not share same pkey\n" , +inet_ntop (AF_INET6 , source_gid.raw, gid_str,sizeof gid_str), +cl_ntoh64 (p_dest_port->guid)); + goto Exit; + } +break ; + +default : + p_src_port = +osm_get_port_by_guid (p_subn, source_gid.unicast.interface_id); +if (!p_src_port) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find source port with GUID:0x%016" PRIx64"\n" , +cl_ntoh64 (source_gid.unicast.interface_id)); + goto Exit; + } + + +/* Check if there is a pkey match. o13-17.1.1 */ +if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) { +OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" ); +/* According to o13-17.1.2 - If this informInfo does not have +lid_range_begin of 0xFFFF, then this informInfo request +should be removed from database */ +if (p_ii->lid_range_begin !=0xFFFF ) { +OSM_LOG (p_log,OSM_LOG_VERBOSE , +"Pkey mismatch on lid_range_begin != 0xFFFF. " +"Need to remove this informInfo from db\n" ); +/* add the informInfo record to the remove_infr list */ +cl_list_insert_tail (p_infr_to_remove_list, p_infr_rec); + } + goto Exit; + } +break ; + } + +return 1 ; +Exit: +return 0 ; +} + +/********************************************************************** * This routine compares a given Notice and a ListItem of InformInfo type. * PREREQUISITE: @@ -351,15 +448,10 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, {osm_infr_match_ctxt_t *p_infr_match = (osm_infr_match_ctxt_t *) context;ib_mad_notice_attr_t *p_ntc = p_infr_match->p_ntc; -cl_list_t *p_infr_to_remove_list = p_infr_match->p_remove_infr_list;osm_infr_t *p_infr_rec = (osm_infr_t *) p_list_item;ib_inform_info_t *p_ii = &(p_infr_rec->inform_record.inform_info);cl_status_t status =CL_NOT_FOUND ;osm_log_t *p_log = p_infr_rec->sa->p_log; -osm_subn_t *p_subn = p_infr_rec->sa->p_subn; -ib_gid_t source_gid; -osm_port_t *p_src_port; -osm_port_t *p_dest_port;OSM_LOG_ENTER (p_log);@@ -460,55 +552,8 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, } } -/* Check if there is a pkey match. o13-17.1.1 */ -/* Check if the issuer of the trap is the SM. If it is, then the gid -comparison should be done on the trap source (saved as the gid in the -data details field). -If the issuer gid is not the SM - then it is the guid of the trap -source */ -if ((cl_ntoh64 (p_ntc->issuer_gid.unicast.prefix) == - p_subn->opt.subnet_prefix) - && (cl_ntoh64 (p_ntc->issuer_gid.unicast.interface_id) == - p_subn->sm_port_guid)) -/* The issuer is the SM then this is trap 64-67 - compare the gid -with the gid saved on the data details */ - source_gid = p_ntc->data_details.ntc_64_67.gid; -else - source_gid = p_ntc->issuer_gid; - - p_src_port = -osm_get_port_by_guid (p_subn, source_gid.unicast.interface_id); -if (!p_src_port) { -OSM_LOG (p_log,OSM_LOG_INFO , -"Cannot find source port with GUID:0x%016" PRIx64"\n" , -cl_ntoh64 (source_gid.unicast.interface_id)); +if (!is_access_permitted (p_infr_rec, p_infr_match)) goto Exit; - } - - p_dest_port = -cl_ptr_vector_get (&p_subn->port_lid_tbl, -cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); -if (!p_dest_port) { -OSM_LOG (p_log,OSM_LOG_INFO , -"Cannot find destination port with LID:%u\n" , -cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); - goto Exit; - } - -if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) { -OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" ); -/* According to o13-17.1.2 - If this informInfo does not have -lid_range_begin of 0xFFFF, then this informInfo request -should be removed from database */ -if (p_ii->lid_range_begin !=0xFFFF ) { -OSM_LOG (p_log,OSM_LOG_VERBOSE , -"Pkey mismatch on lid_range_begin != 0xFFFF. " -"Need to remove this informInfo from db\n" ); -/* add the informInfo record to the remove_infr list */ -cl_list_insert_tail (p_infr_to_remove_list, p_infr_rec); - } - goto Exit; - }/* send the report to the address provided in the inform record */ OSM_LOG (p_log,OSM_LOG_DEBUG ,"MATCH! Sending Report...\n" ); --1.5.5
There is still a problem with GID OUT trap that is not sent since source port was already removed.
Patch will follow.
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
T24gU3VuLCBGZWIgNywgMjAxMCBhdCA0OjQ3IEFNLCBFbGkgRG9yZm1hbiAoVm9sdGFpcmUpCjxk b3JmbWFuLmVsaUBnbWFpbC5jb20+IHdyb3RlOgo+IEhhbCBSb3NlbnN0b2NrIHdyb3RlOgo+PiBP biBGcmksIEZlYiA1LCAyMDEwIGF0IDk6MTggQU0sIEVsaSBEb3JmbWFuIDxkb3JmbWFuLmVsaUBn bWFpbC5jb20+IHdyb3RlOgo+Pj4gT24gVGh1LCBGZWIgNCwgMjAxMCBhdCAxMDo1MiBQTSwgSGFs IFJvc2Vuc3RvY2sKPj4+IDxoYWwucm9zZW5zdG9ja0BnbWFpbC5jb20+IHdyb3RlOgo+Pj4+IE9u IFRodSwgRmViIDQsIDIwMTAgYXQgMTI6NDMgUE0sIEVsaSBEb3JmbWFuIChWb2x0YWlyZSkKPj4+ PiA8ZG9yZm1hbi5lbGlAZ21haWwuY29tPiB3cm90ZToKPj4+Pj4gU3ViamVjdDogW1BBVENIXSBX cm9uZyBoYW5kbGluZyBvZiBNQyBjcmVhdGUgYW5kIGRlbGV0ZSB0cmFwcwo+Pj4+Pgo+Pj4+PiBG b3IgdGhlc2UgdHJhcHMgdGhlIEdJRCBpbiB0aGUgZGF0YSBkZXRhaWxzIGlzIHRoZSBNR0lEIGFu ZAo+Pj4+PiBub3QgdGhlIHNvdXJjZSBwb3J0IGdpZC4KPj4+Pj4gU28gdGhlIFNNIHNob3VsZCBj aGVjayB0aGF0IHN1YnNjcmliZXIgcG9ydCBoYXMgdGhlIHBrZXkgb2YgdGhlIE1DIGdyb3VwLgo+ Pj4+PiBUaGVyZSB3YXMgYWxzbyBhbiBlcnJvciBpbiBjb21wYXJpbmcgdGhlIHN1Ym5ldCBwcmVm aXggYW5kIGd1aWQgZHVlIHRvCj4+Pj4+IGhvc3QvbmV0d29yayBvcmRlciBtaXNtYXRjaC4KPj4+ Pj4KPj4+Pj4gU2lnbmVkLW9mZi1ieTogRWxpIERvcmZtYW4gPGVsaWRAdm9sdGFpcmUuY29tPgo+ Pj4+PiAtLS0KPj4+Pj4gwqBvcGVuc20vb3BlbnNtL29zbV9pbmZvcm0uYyB8IMKgMTUxICsrKysr KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KPj4+Pj4gwqAxIGZpbGVzIGNo YW5nZWQsIDk4IGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQo+Pj4+Pgo+Pj4+PiBkaWZm IC0tZ2l0IGEvb3BlbnNtL29wZW5zbS9vc21faW5mb3JtLmMgYi9vcGVuc20vb3BlbnNtL29zbV9p bmZvcm0uYwo+Pj4+PiBpbmRleCA4MTA4MjEzLi5hZTRmZTcxIDEwMDY0NAo+Pj4+PiAtLS0gYS9v cGVuc20vb3BlbnNtL29zbV9pbmZvcm0uYwo+Pj4+PiArKysgYi9vcGVuc20vb3BlbnNtL29zbV9p bmZvcm0uYwo+Pj4+PiBAQCAtMzQxLDYgKzM0MSwxMDMgQEAgRXhpdDoKPj4+Pj4gwqAgwqAgwqAg wqByZXR1cm4gc3RhdHVzOwo+Pj4+PiDCoH0KPj4+Pj4KPj4+Pj4gK3N0YXRpYyBpbnQgaXNfYWNj ZXNzX3Blcm1pdHRlZCggb3NtX2luZnJfdCAqcF9pbmZyX3JlYywKPj4+Pj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvc21faW5mcl9tYXRjaF9jdHh0X3Qg KnBfaW5mcl9tYXRjaCApCj4+Pj4+ICt7Cj4+Pj4+ICsgwqAgwqAgwqAgY2xfbGlzdF90ICpwX2lu ZnJfdG9fcmVtb3ZlX2xpc3QgPSBwX2luZnJfbWF0Y2gtPnBfcmVtb3ZlX2luZnJfbGlzdDsKPj4+ Pj4gKyDCoCDCoCDCoCBpYl9pbmZvcm1faW5mb190ICpwX2lpID0gJihwX2luZnJfcmVjLT5pbmZv cm1fcmVjb3JkLmluZm9ybV9pbmZvKTsKPj4+Pj4gKyDCoCDCoCDCoCBpYl9tYWRfbm90aWNlX2F0 dHJfdCAqcF9udGMgPSBwX2luZnJfbWF0Y2gtPnBfbnRjOwo+Pj4+PiArIMKgIMKgIMKgIHVpbnQx Nl90IHRyYXBfbnVtID0gY2xfbnRvaDE2KHBfbnRjLT5nX29yX3YuZ2VuZXJpYy50cmFwX251bSk7 Cj4+Pj4+ICsgwqAgwqAgwqAgb3NtX3N1Ym5fdCAqcF9zdWJuID0gcF9pbmZyX3JlYy0+c2EtPnBf c3VibjsKPj4+Pj4gKyDCoCDCoCDCoCBvc21fbG9nX3QgKnBfbG9nID0gcF9pbmZyX3JlYy0+c2Et PnBfbG9nOwo+Pj4+PiArIMKgIMKgIMKgIGNoYXIgZ2lkX3N0cltJTkVUNl9BRERSU1RSTEVOXTsK Pj4+Pj4gKyDCoCDCoCDCoCBvc21fbWdycF90ICpwX21ncnA7Cj4+Pj4+ICsgwqAgwqAgwqAgaWJf Z2lkX3Qgc291cmNlX2dpZDsKPj4+Pj4gKyDCoCDCoCDCoCBvc21fcG9ydF90ICpwX3NyY19wb3J0 Owo+Pj4+PiArIMKgIMKgIMKgIG9zbV9wb3J0X3QgKnBfZGVzdF9wb3J0Owo+Pj4+PiArCj4+Pj4+ ICsgwqAgwqAgwqAgLyogSW4gY2FzZSBvZiBHSURfSU4oNjQpIG9yIEdJRF9PVVQoNjUpIHRyYXBz IHRoZSBzb3VyY2UgZ2lkCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqBjb21wYXJpc29uIHNob3VsZCBi ZSBkb25lIG9uIHRoZSB0cmFwIHNvdXJjZSAoc2F2ZWQgYXMgdGhlIGdpZCBpbiB0aGUKPj4+Pj4g KyDCoCDCoCDCoCDCoCDCoGRhdGEgZGV0YWlscyBmaWVsZCkuCj4+Pj4+ICsgwqAgwqAgwqAgwqAg wqBGb3IgdHJhcHMgTUNfQ1JFQVRFKDY2KSBvciBNQ19ERUxFVEUoNjcpIHRoZSBkYXRhIGRldGFp bHMgZ2lkIGlzCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqB0aGUgTUdJRC4gV2UgbmVlZCB0byBjaGVj ayB3aGV0aGVyIHN1YnNjcmliZXIgaGFzIHRoZSBwa3kgb2YKPj4+Pgo+Pj4+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHR5cG8gwqBeXl5eCj4+Pj4KPj4+PiDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBwa2V5Cj4+Pj4KPj4+Pgo+Pj4+PiArIMKgIMKgIMKgIMKgIMKg dGhlIE1DIGdyb3VwLgo+Pj4+IFNob3VsZG4ndCB0aGlzIGJlIHRoZSBzdWJzY3JpYmVyIGhhcyBh IGNvbXBhdGlibGUgcGtleSB3aXRoIE1DIGdyb3VwID8KPj4+PiBUaGUgTUMgZ3JvdXAgaGFzIGEg ZnVsbCBtZW1iZXIgUEtleSBhbmQgdGhlIG1lbWJlcnMgY2FuIGJlIGZ1bGwgb3IKPj4+PiBsaW1p dGVkLgo+Pj4gSSBhY2NlcHQgdGhlIGNvcnJlY3Rpb24uCj4+Cj4+IERvZXNuJ3QgdGhpcyByZXF1 aXJlIGEgY29kZSBjaGFuZ2UgZm9yIGhhbmRsaW5nIHRyYXAgY2FzZXMgNjYtNjcgPwo+Cj4gSSB0 aGluayB0aGF0IHlvdSByZWZlcnJlZCB0byB0aGUgY29tbWVudCBzaW5jZSB0aGUgY29kZSBpcyBo YW5kbGluZyB0aGlzIHByb3Blcmx5IChpbiBteSBvcGluaW9uKS4KCkkgd2FzIHJlZmVycmluZyB0 byBib3RoIHRoZSBjb21tZW50IGFuZCB0aGUgY29kZSBzaW5jZSBhIHBvcnQgd2l0aCBhCmNvbXBh dGlibGUgbGltaXRlZCBwa2V5IHNob3VsZCBiZSBhYmxlIHRvIHJlY2VpdmUgdGhlIHJlcG9ydHMg Zm9yIE1DCmdyb3Vwcy4KCj4KPj4KPj4+IFNhc2hhLCBjYW4geW91IHBsZWFzZSBjaGFuZ2UgdGhp cyBpbiB0aGUgY29tbWl0IChvbmx5IGlmIHRoZXJlIGFyZSBub3QKPj4+IG90aGVyIHJlbWFya3Mp Lgo+Pgo+PiBJcyB0aGF0IHdoYXQgeW91IGFyZSBhc2tpbmcgU2FzaGEgdG8gZG8gKGJleW9uZCB0 aGUgdHlwb3MpID8KPgo+IEkgYXNrZWQgU2FzaGEgdG8gZml4IG9ubHkgdGhlIHR5cG8gaW4gY29t bWl0Lgo+Cj4+Cj4+PiBCVFcsIHRoZXJlIGlzIG5vIGV4cGxpY2l0IHJlZmVyZW5jZSBpbiB0aGUg SUIgc3BlYyBmb3IgTUMgZ3JvdXAKPj4+IGNyZWF0ZS9kZWxldGUgdHJhcCAoYXQgbGVhc3QgSSBk aWRuJ3QgZmluZCBpdCkuCj4+Cj4+IE5vdCBzdXJlIHdoYXQgeW91IG1lYW4gYnkgdGhpcy4gV2hh dCBkaWRuJ3QgeW91IGZpbmQgPwo+Cj4gaW4gdGhlIHNwZWMgc2VlIG8xMy0xNy4xLjIKClllcywg dGhlcmUgYXBwZWFyIHRvIGJlIHNvbWUgaG9sZXMgaW4gdGhlIHNwZWMgaW4gdGVybXMgb2YgdGhp cyBhbmQKbWF5YmUgbW9yZSBpbiB0aGlzIGFyZWEgKGV2ZW50IGZvcndhcmRpbmcpIGJ1dCB0aGUg aW50ZW50IHNlZW1zIGNsZWFyLgoKLS0gSGFsCgo+IFRoYW5rcywKPiBFbGkKPj4KPj4gLS0gSGFs Cj4+Cj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqBJbiBhbGwgb3RoZXIgY2FzZXMgdGhlIGlzc3VlciBn aXMgaXMgdGhlIHRyYXAgc291cmNlLgo+Pj4+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHR5cG8gwqBeXl4KPj4+PiDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnaWQKPj4+Pgo+Pj4gYW5kIHRoaXMgdHlwbyBvZiBjb3Vy c2UuCj4+Pgo+Pj4gVGhhbmtzLAo+Pj4gRWxpCj4+Pj4gLS0gSGFsCj4+Pj4KPj4+Pj4gKyDCoCDC oCDCoCAqLwo+Pj4+PiArIMKgIMKgIMKgIGlmICh0cmFwX251bSA+PSA2NCAmJiB0cmFwX251bSA8 PSA2NyApCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogVGhlIGlzc3VlciBvZiB0aGVz ZSB0cmFwcyBpcyB0aGUgU00gc28gc291cmNlX2dpZAo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgaXMgdGhlIGdpZCBzYXZlZCBvbiB0aGUgZGF0YSBkZXRhaWxzICovCj4+Pj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgc291cmNlX2dpZCA9IHBfbnRjLT5kYXRhX2RldGFpbHMubnRj XzY0XzY3LmdpZDsKPj4+Pj4gKyDCoCDCoCDCoCBlbHNlCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgc291cmNlX2dpZCA9IHBfbnRjLT5pc3N1ZXJfZ2lkOwo+Pj4+PiArCj4+Pj4+ICsgwqAg wqAgwqAgcF9kZXN0X3BvcnQgPQo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIGNsX3B0cl92ZWN0b3Jf Z2V0KCZwX3N1Ym4tPnBvcnRfbGlkX3RibCwKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oMTYocF9pbmZyX3JlYy0+cmVwb3J0X2FkZHIuZGVz dF9saWQpKTsKPj4+Pj4gKyDCoCDCoCDCoCBpZiAoIXBfZGVzdF9wb3J0KSB7Cj4+Pj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+Pj4+PiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJDYW5ub3QgZmluZCBkZXN0aW5hdGlvbiBw b3J0IHdpdGggTElEOiV1XG4iLAo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0X2xpZCkpOwo+Pj4+PiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4+Pj4gKyDCoCDCoCDCoCB9Cj4+Pj4+ ICsKPj4+Pj4gKyDCoCDCoCDCoCBzd2l0Y2ggKHRyYXBfbnVtKSB7Cj4+Pj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgY2FzZSA2NjoKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDY3 Ogo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBfbWdycCA9IG9zbV9n ZXRfbWdycF9ieV9tZ2lkKHBfc3VibiwgJnNvdXJjZV9naWQpOwo+Pj4+PiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghcF9tZ3JwKSB7Cj4+Pj4+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19J TkZPLAo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgICJDYW5ub3QgZmluZCBNR0lEICVzXG4iLAo+Pj4+PiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGluZXRfbnRvcChB Rl9JTkVUNiwgc291cmNlX2dpZC5yYXcsIGdpZF9zdHIsIHNpemVvZiBnaWRfc3RyKSk7Cj4+Pj4+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0 Owo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPj4+Pj4gKwo+Pj4+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghb3NtX3BoeXNwX2hhc19w a2V5KHBfbG9nLAo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBfbWdycC0+bWNtZW1iZXJfcmVjLnBrZXks Cj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcF9kZXN0X3BvcnQtPnBfcGh5c3ApKSB7Cj4+Pj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywg T1NNX0xPR19JTkZPLAo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgICJNR0lEICVzIGFuZCBwb3J0IEdVSUQ6MHglMDE2IiBQUkl4 NjQgIiBkbyBub3Qgc2hhcmUgc2FtZSBwa2V5XG4iLAo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGluZXRfbnRvcChBRl9JTkVU Niwgc291cmNlX2dpZC5yYXcsIGdpZF9zdHIsIHNpemVvZiBnaWRfc3RyKSwKPj4+Pj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9u dG9oNjQocF9kZXN0X3BvcnQtPmd1aWQpKTsKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgfQo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGJyZWFrOwo+Pj4+PiArCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVmYXVsdDoK Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwX3NyY19wb3J0ID0KPj4+ Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvc21fZ2V0X3BvcnRf YnlfZ3VpZChwX3N1Ym4sIHNvdXJjZV9naWQudW5pY2FzdC5pbnRlcmZhY2VfaWQpOwo+Pj4+PiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICghcF9zcmNfcG9ydCkgewo+Pj4+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0co cF9sb2csIE9TTV9MT0dfSU5GTywKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQgc291cmNlIHBvcnQgd2l0 aCBHVUlEOjB4JTAxNiIgUFJJeDY0ICJcbiIsCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDY0KHNvdXJjZV9naWQu dW5pY2FzdC5pbnRlcmZhY2VfaWQpKTsKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfQo+Pj4+PiArCj4+Pj4+ICsKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAvKiBDaGVjayBpZiB0aGVyZSBpcyBhIHBrZXkgbWF0Y2guIG8xMy0x Ny4xLjEgKi8KPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAob3Nt X3BvcnRfc2hhcmVfcGtleShwX2xvZywgcF9zcmNfcG9ydCwgcF9kZXN0X3BvcnQpID09IEZBTFNF KSB7Cj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg T1NNX0xPRyhwX2xvZywgT1NNX0xPR19ERUJVRywgIk1pc21hdGNoIGJ5IFBrZXlcbiIpOwo+Pj4+ PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIEFjY29y ZGluZyB0byBvMTMtMTcuMS4yIC0gSWYgdGhpcyBpbmZvcm1JbmZvIGRvZXMgbm90IGhhdmUKPj4+ Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGxp ZF9yYW5nZV9iZWdpbiBvZiAweEZGRkYsIHRoZW4gdGhpcyBpbmZvcm1JbmZvIHJlcXVlc3QKPj4+ Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHNo b3VsZCBiZSByZW1vdmVkIGZyb20gZGF0YWJhc2UgKi8KPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocF9paS0+bGlkX3JhbmdlX2JlZ2luICE9 IDB4RkZGRikgewo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfVkVSQk9TRSwKPj4+Pj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAiUGtleSBtaXNtYXRjaCBvbiBsaWRfcmFuZ2VfYmVnaW4gIT0gMHhGRkZG LiAiCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIk5lZWQgdG8gcmVtb3ZlIHRoaXMgaW5mb3JtSW5mbyBm cm9tIGRiXG4iKTsKPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBhZGQgdGhlIGluZm9ybUluZm8gcmVjb3JkIHRvIHRoZSBy ZW1vdmVfaW5mciBsaXN0ICovCj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbGlzdF9pbnNlcnRfdGFpbChwX2luZnJfdG9f cmVtb3ZlX2xpc3QsIHBfaW5mcl9yZWMpOwo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfQo+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJyZWFrOwo+Pj4+PiArIMKgIMKgIMKgIH0KPj4+Pj4gKwo+Pj4+PiArIMKgIMKgIMKgIHJldHVy biAxOwo+Pj4+PiArRXhpdDoKPj4+Pj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPj4+Pj4gK30KPj4+ Pj4gKwo+Pj4+PiArCj4+Pj4+IMKgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPj4+Pj4gwqAqIFRoaXMgcm91dGlu ZSBjb21wYXJlcyBhIGdpdmVuIE5vdGljZSBhbmQgYSBMaXN0SXRlbSBvZiBJbmZvcm1JbmZvIHR5 cGUuCj4+Pj4+IMKgKiBQUkVSRVFVSVNJVEU6Cj4+Pj4+IEBAIC0zNTEsMTUgKzQ0OCwxMCBAQCBz dGF0aWMgdm9pZCBtYXRjaF9ub3RpY2VfdG9faW5mX3JlYyhJTiBjbF9saXN0X2l0ZW1fdCAqIHBf bGlzdF9pdGVtLAo+Pj4+PiDCoHsKPj4+Pj4gwqAgwqAgwqAgwqBvc21faW5mcl9tYXRjaF9jdHh0 X3QgKnBfaW5mcl9tYXRjaCA9IChvc21faW5mcl9tYXRjaF9jdHh0X3QgKikgY29udGV4dDsKPj4+ Pj4gwqAgwqAgwqAgwqBpYl9tYWRfbm90aWNlX2F0dHJfdCAqcF9udGMgPSBwX2luZnJfbWF0Y2gt PnBfbnRjOwo+Pj4+PiAtIMKgIMKgIMKgIGNsX2xpc3RfdCAqcF9pbmZyX3RvX3JlbW92ZV9saXN0 ID0gcF9pbmZyX21hdGNoLT5wX3JlbW92ZV9pbmZyX2xpc3Q7Cj4+Pj4+IMKgIMKgIMKgIMKgb3Nt X2luZnJfdCAqcF9pbmZyX3JlYyA9IChvc21faW5mcl90ICopIHBfbGlzdF9pdGVtOwo+Pj4+PiDC oCDCoCDCoCDCoGliX2luZm9ybV9pbmZvX3QgKnBfaWkgPSAmKHBfaW5mcl9yZWMtPmluZm9ybV9y ZWNvcmQuaW5mb3JtX2luZm8pOwo+Pj4+PiDCoCDCoCDCoCDCoGNsX3N0YXR1c190IHN0YXR1cyA9 IENMX05PVF9GT1VORDsKPj4+Pj4gwqAgwqAgwqAgwqBvc21fbG9nX3QgKnBfbG9nID0gcF9pbmZy X3JlYy0+c2EtPnBfbG9nOwo+Pj4+PiAtIMKgIMKgIMKgIG9zbV9zdWJuX3QgKnBfc3VibiA9IHBf aW5mcl9yZWMtPnNhLT5wX3N1Ym47Cj4+Pj4+IC0gwqAgwqAgwqAgaWJfZ2lkX3Qgc291cmNlX2dp ZDsKPj4+Pj4gLSDCoCDCoCDCoCBvc21fcG9ydF90ICpwX3NyY19wb3J0Owo+Pj4+PiAtIMKgIMKg IMKgIG9zbV9wb3J0X3QgKnBfZGVzdF9wb3J0Owo+Pj4+Pgo+Pj4+PiDCoCDCoCDCoCDCoE9TTV9M T0dfRU5URVIocF9sb2cpOwo+Pj4+Pgo+Pj4+PiBAQCAtNDYwLDU1ICs1NTIsOCBAQCBzdGF0aWMg dm9pZCBtYXRjaF9ub3RpY2VfdG9faW5mX3JlYyhJTiBjbF9saXN0X2l0ZW1fdCAqIHBfbGlzdF9p dGVtLAo+Pj4+PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoH0KPj4+Pj4gwqAgwqAgwqAgwqB9Cj4+ Pj4+Cj4+Pj4+IC0gwqAgwqAgwqAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYSBwa2V5IG1hdGNoLiBv MTMtMTcuMS4xICovCj4+Pj4+IC0gwqAgwqAgwqAgLyogQ2hlY2sgaWYgdGhlIGlzc3VlciBvZiB0 aGUgdHJhcCBpcyB0aGUgU00uIElmIGl0IGlzLCB0aGVuIHRoZSBnaWQKPj4+Pj4gLSDCoCDCoCDC oCDCoCDCoGNvbXBhcmlzb24gc2hvdWxkIGJlIGRvbmUgb24gdGhlIHRyYXAgc291cmNlIChzYXZl ZCBhcyB0aGUgZ2lkIGluIHRoZQo+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgZGF0YSBkZXRhaWxzIGZp ZWxkKS4KPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoElmIHRoZSBpc3N1ZXIgZ2lkIGlzIG5vdCB0aGUg U00gLSB0aGVuIGl0IGlzIHRoZSBndWlkIG9mIHRoZSB0cmFwCj4+Pj4+IC0gwqAgwqAgwqAgwqAg wqBzb3VyY2UgKi8KPj4+Pj4gLSDCoCDCoCDCoCBpZiAoKGNsX250b2g2NChwX250Yy0+aXNzdWVy X2dpZC51bmljYXN0LnByZWZpeCkgPT0KPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoHBfc3Vibi0+ b3B0LnN1Ym5ldF9wcmVmaXgpCj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgJiYgKGNsX250b2g2NChw X250Yy0+aXNzdWVyX2dpZC51bmljYXN0LmludGVyZmFjZV9pZCkgPT0KPj4+Pj4gLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCBwX3N1Ym4tPnNtX3BvcnRfZ3VpZCkpCj4+Pj4+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgLyogVGhlIGlzc3VlciBpcyB0aGUgU00gdGhlbiB0aGlzIGlzIHRyYXAgNjQtNjcg LSBjb21wYXJlIHRoZSBnaWQKPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHdpdGgg dGhlIGdpZCBzYXZlZCBvbiB0aGUgZGF0YSBkZXRhaWxzICovCj4+Pj4+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgc291cmNlX2dpZCA9IHBfbnRjLT5kYXRhX2RldGFpbHMubnRjXzY0XzY3LmdpZDsK Pj4+Pj4gLSDCoCDCoCDCoCBlbHNlCj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgc291cmNl X2dpZCA9IHBfbnRjLT5pc3N1ZXJfZ2lkOwo+Pj4+PiAtCj4+Pj4+IC0gwqAgwqAgwqAgcF9zcmNf cG9ydCA9Cj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgb3NtX2dldF9wb3J0X2J5X2d1aWQocF9zdWJu LCBzb3VyY2VfZ2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lkKTsKPj4+Pj4gLSDCoCDCoCDCoCBpZiAo IXBfc3JjX3BvcnQpIHsKPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9n LCBPU01fTE9HX0lORk8sCj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg IkNhbm5vdCBmaW5kIHNvdXJjZSBwb3J0IHdpdGggR1VJRDoweCUwMTYiIFBSSXg2NCAiXG4iLAo+ Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2g2NChzb3VyY2Vf Z2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lkKSk7Cj4+Pj4+ICsgwqAgwqAgwqAgaWYgKCFpc19hY2Nl c3NfcGVybWl0dGVkKHBfaW5mcl9yZWMsIHBfaW5mcl9tYXRjaCkpCj4+Pj4+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgZ290byBFeGl0Owo+Pj4+PiAtIMKgIMKgIMKgIH0KPj4+Pj4gLQo+Pj4+PiAt IMKgIMKgIMKgIHBfZGVzdF9wb3J0ID0KPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCBjbF9wdHJfdmVj dG9yX2dldCgmcF9zdWJuLT5wb3J0X2xpZF90YmwsCj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDE2KHBfaW5mcl9yZWMtPnJlcG9ydF9hZGRy LmRlc3RfbGlkKSk7Cj4+Pj4+IC0gwqAgwqAgwqAgaWYgKCFwX2Rlc3RfcG9ydCkgewo+Pj4+PiAt IMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfSU5GTywKPj4+Pj4g LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQgZGVzdGluYXRp b24gcG9ydCB3aXRoIExJRDoldVxuIiwKPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBjbF9udG9oMTYocF9pbmZyX3JlYy0+cmVwb3J0X2FkZHIuZGVzdF9saWQpKTsKPj4+ Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+Pj4+IC0gwqAgwqAgwqAgfQo+ Pj4+PiAtCj4+Pj4+IC0gwqAgwqAgwqAgaWYgKG9zbV9wb3J0X3NoYXJlX3BrZXkocF9sb2csIHBf c3JjX3BvcnQsIHBfZGVzdF9wb3J0KSA9PSBGQUxTRSkgewo+Pj4+PiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfREVCVUcsICJNaXNtYXRjaCBieSBQa2V5XG4i KTsKPj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBBY2NvcmRpbmcgdG8gbzEzLTE3LjEu MiAtIElmIHRoaXMgaW5mb3JtSW5mbyBkb2VzIG5vdCBoYXZlCj4+Pj4+IC0gwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBsaWRfcmFuZ2VfYmVnaW4gb2YgMHhGRkZGLCB0aGVuIHRoaXMgaW5mb3Jt SW5mbyByZXF1ZXN0Cj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzaG91bGQgYmUg cmVtb3ZlZCBmcm9tIGRhdGFiYXNlICovCj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYg KHBfaWktPmxpZF9yYW5nZV9iZWdpbiAhPSAweEZGRkYpIHsKPj4+Pj4gLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX1ZFUkJPU0UsCj4+Pj4+ IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIlBrZXkgbWlz bWF0Y2ggb24gbGlkX3JhbmdlX2JlZ2luICE9IDB4RkZGRi4gIgo+Pj4+PiAtIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJOZWVkIHRvIHJlbW92ZSB0aGlzIGlu Zm9ybUluZm8gZnJvbSBkYlxuIik7Cj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLyogYWRkIHRoZSBpbmZvcm1JbmZvIHJlY29yZCB0byB0aGUgcmVtb3ZlX2luZnIgbGlz dCAqLwo+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX2xpc3RfaW5z ZXJ0X3RhaWwocF9pbmZyX3RvX3JlbW92ZV9saXN0LCBwX2luZnJfcmVjKTsKPj4+Pj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCB9Cj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0 Owo+Pj4+PiAtIMKgIMKgIMKgIH0KPj4+Pj4KPj4+Pj4gwqAgwqAgwqAgwqAvKiBzZW5kIHRoZSBy ZXBvcnQgdG8gdGhlIGFkZHJlc3MgcHJvdmlkZWQgaW4gdGhlIGluZm9ybSByZWNvcmQgKi8KPj4+ Pj4gwqAgwqAgwqAgwqBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0RFQlVHLCAiTUFUQ0ghIFNlbmRp bmcgUmVwb3J0Li4uXG4iKTsKPj4+Pj4gLS0KPj4+Pj4gMS41LjUKPj4+Pj4KPj4+Pj4gVGhlcmUg aXMgc3RpbGwgYSBwcm9ibGVtIHdpdGggR0lEIE9VVCB0cmFwIHRoYXQgaXMgbm90IHNlbnQgc2lu Y2Ugc291cmNlIHBvcnQKPj4+Pj4gd2FzIGFscmVhZHkgcmVtb3ZlZC4KPj4+Pj4gUGF0Y2ggd2ls bCBmb2xsb3cuCj4+Pj4+Cj4+Pj4+IC0tCj4+Pj4+IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBs aXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1yZG1hIiBpbgo+Pj4+PiB0aGUg Ym9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwo+Pj4+PiBNb3Jl IG1ham9yZG9tbyBpbmZvIGF0IMKgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5m by5odG1sCj4+Pj4+Cj4KPgo=
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): f0e08f231002080526k562b2082oa7376c50794c6f75-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org
Quoted 58 lines · Hal Rosenstock
Quoted 56 lines · Eli Dorfman (Voltaire)
Quoted 55 lines · Hal Rosenstock
Quoted 54 lines · Eli Dorfman
Quoted 52 lines · Hal Rosenstock
Quoted 31 lines · Eli Dorfman (Voltaire)
Subject: [PATCH] Wrong handling of MC create and delete traps
For these traps the GID in the data details is the MGID and not the source port gid.
So the SM should check that subscriber port has the pkey of the MC group. There was also an error in comparing the subnet prefix and guid due to host/network order mismatch.--- opensm/opensm/osm_inform.c | 151 ++++++++++++++++++++++++++++--------------- 1 files changed, 98 insertions(+), 53 deletions(-)opensm/opensm/osm_inform.c +10
-0@@ -341,6 +341,103 @@ Exit:return status; } +static int is_access_permitted (osm_infr_t *p_infr_rec, +osm_infr_match_ctxt_t *p_infr_match ) +{ +cl_list_t *p_infr_to_remove_list = p_infr_match->p_remove_infr_list; +ib_inform_info_t *p_ii = &(p_infr_rec->inform_record.inform_info); +ib_mad_notice_attr_t *p_ntc = p_infr_match->p_ntc; +uint16_t trap_num =cl_ntoh16 (p_ntc->g_or_v.generic.trap_num); +osm_subn_t *p_subn = p_infr_rec->sa->p_subn; +osm_log_t *p_log = p_infr_rec->sa->p_log; +char gid_str[INET6_ADDRSTRLEN ];opensm/opensm/osm_inform.c Exit: · line 363
Quoted 10 lines
opensm/opensm/osm_inform.c +10
-0+osm_mgrp_t *p_mgrp; +ib_gid_t source_gid; +osm_port_t *p_src_port; +osm_port_t *p_dest_port; + +/* In case of GID_IN(64) or GID_OUT(65) traps the source gid +comparison should be done on the trap source (saved as the gid in the +data details field). +For traps MC_CREATE(66) or MC_DELETE(67) the data details gid is +the MGID. We need to check whether subscriber has the pky of typo ^^^^ pkeyopensm/opensm/osm_inform.c Exit: · line 364
Quoted 1 line
opensm/opensm/osm_inform.c +1
-0+ the MC group.Shouldn't this be the subscriber has a compatible pkey with MC group ? The MC group has a full member PKey and the members can be full or limited.
Quoted 7 lines
Quoted 3 lines
Quoted 2 lines
Quoted 1 line
I accept the correction.
Doesn't this require a code change for handling trap cases 66-67 ?
I think that you referred to the comment since the code is handling this properly (in my opinion).
I was referring to both the comment and the code since a port with a compatible limited pkey should be able to receive the reports for MC groups.
I agree and I think that the code is handling this case properly. osm_physp_has_pkey() takes the 15 lower MGID pkey bits and checks whether it is the physp pkey table.
Eli
Quoted 8 lines
Quoted 8 lines
Quoted 4 lines
Quoted 3 lines
Sasha, can you please change this in the commit (only if there are not other remarks).
Is that what you are asking Sasha to do (beyond the typos) ?
I asked Sasha to fix only the typo in commit.
Quoted 2 lines
Quoted 2 lines
BTW, there is no explicit reference in the IB spec for MC group create/delete trap (at least I didn't find it).
Quoted 186 lines
Quoted 2 lines
Quoted 1 line
Not sure what you mean by this. What didn't you find ?
in the spec see o13-17.1.2
Yes, there appear to be some holes in the spec in terms of this and maybe more in this area (event forwarding) but the intent seems clear.
-- Hal
Quoted 178 lines
Thanks,
EliQuoted 175 lines
-- Hal
Quoted 173 lines
Quoted 4 lines
opensm/opensm/osm_inform.c Exit: · line 365
Quoted 1 line
opensm/opensm/osm_inform.c +1
-0+ In all other cases the issuer gis is the trap source.typo ^^^ gidand this typo of course.
Thanks,
EliQuoted 165 lines
-- Hal
Quoted 163 lines
opensm/opensm/osm_inform.c +76
-54+*/ +if (trap_num >=64 && trap_num <=67 ) +/* The issuer of these traps is the SM so source_gid +is the gid saved on the data details */ + source_gid = p_ntc->data_details.ntc_64_67.gid; +else + source_gid = p_ntc->issuer_gid; + + p_dest_port = +cl_ptr_vector_get (&p_subn->port_lid_tbl, +cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); +if (!p_dest_port) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find destination port with LID:%u\n" , +cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); + goto Exit; + } + +switch (trap_num) { +case 66 : +case 67 : + p_mgrp =osm_get_mgrp_by_mgid (p_subn, &source_gid); +if (!p_mgrp) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find MGID %s\n" , +inet_ntop (AF_INET6 , source_gid.raw, gid_str,sizeof gid_str)); + goto Exit; + } + +if (!osm_physp_has_pkey (p_log, + p_mgrp->mcmember_rec.pkey, + p_dest_port->p_physp)) { +OSM_LOG (p_log,OSM_LOG_INFO , +"MGID %s and port GUID:0x%016" PRIx64" do not share same pkey\n" , +inet_ntop (AF_INET6 , source_gid.raw, gid_str,sizeof gid_str), +cl_ntoh64 (p_dest_port->guid)); + goto Exit; + } +break ; + +default : + p_src_port = +osm_get_port_by_guid (p_subn, source_gid.unicast.interface_id); +if (!p_src_port) { +OSM_LOG (p_log,OSM_LOG_INFO , +"Cannot find source port with GUID:0x%016" PRIx64"\n" , +cl_ntoh64 (source_gid.unicast.interface_id)); + goto Exit; + } + + +/* Check if there is a pkey match. o13-17.1.1 */ +if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) { +OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" ); +/* According to o13-17.1.2 - If this informInfo does not have +lid_range_begin of 0xFFFF, then this informInfo request +should be removed from database */ +if (p_ii->lid_range_begin !=0xFFFF ) { +OSM_LOG (p_log,OSM_LOG_VERBOSE , +"Pkey mismatch on lid_range_begin != 0xFFFF. " +"Need to remove this informInfo from db\n" ); +/* add the informInfo record to the remove_infr list */ +cl_list_insert_tail (p_infr_to_remove_list, p_infr_rec); + } + goto Exit; + } +break ; + } + +return 1 ; +Exit: +return 0 ; +} + +/********************************************************************** * This routine compares a given Notice and a ListItem of InformInfo type. * PREREQUISITE: @@ -351,15 +448,10 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, {osm_infr_match_ctxt_t *p_infr_match = (osm_infr_match_ctxt_t *) context;ib_mad_notice_attr_t *p_ntc = p_infr_match->p_ntc; -cl_list_t *p_infr_to_remove_list = p_infr_match->p_remove_infr_list;osm_infr_t *p_infr_rec = (osm_infr_t *) p_list_item;ib_inform_info_t *p_ii = &(p_infr_rec->inform_record.inform_info);cl_status_t status =CL_NOT_FOUND ;osm_log_t *p_log = p_infr_rec->sa->p_log; -osm_subn_t *p_subn = p_infr_rec->sa->p_subn; -ib_gid_t source_gid; -osm_port_t *p_src_port; -osm_port_t *p_dest_port;OSM_LOG_ENTER (p_log);@@ -460,55 +552,8 @@ static void match_notice_to_inf_rec(IN cl_list_item_t * p_list_item, } } -/* Check if there is a pkey match. o13-17.1.1 */ -/* Check if the issuer of the trap is the SM. If it is, then the gid -comparison should be done on the trap source (saved as the gid in the -data details field). -If the issuer gid is not the SM - then it is the guid of the trap -source */ -if ((cl_ntoh64 (p_ntc->issuer_gid.unicast.prefix) == - p_subn->opt.subnet_prefix) - && (cl_ntoh64 (p_ntc->issuer_gid.unicast.interface_id) == - p_subn->sm_port_guid)) -/* The issuer is the SM then this is trap 64-67 - compare the gid -with the gid saved on the data details */ - source_gid = p_ntc->data_details.ntc_64_67.gid; -else - source_gid = p_ntc->issuer_gid; - - p_src_port = -osm_get_port_by_guid (p_subn, source_gid.unicast.interface_id); -if (!p_src_port) { -OSM_LOG (p_log,OSM_LOG_INFO , -"Cannot find source port with GUID:0x%016" PRIx64"\n" , -cl_ntoh64 (source_gid.unicast.interface_id)); +if (!is_access_permitted (p_infr_rec, p_infr_match)) goto Exit; - } - - p_dest_port = -cl_ptr_vector_get (&p_subn->port_lid_tbl, -cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); -if (!p_dest_port) { -OSM_LOG (p_log,OSM_LOG_INFO , -"Cannot find destination port with LID:%u\n" , -cl_ntoh16 (p_infr_rec->report_addr.dest_lid)); - goto Exit; - } - -if (osm_port_share_pkey (p_log, p_src_port, p_dest_port) == FALSE) { -OSM_LOG (p_log,OSM_LOG_DEBUG ,"Mismatch by Pkey\n" ); -/* According to o13-17.1.2 - If this informInfo does not have -lid_range_begin of 0xFFFF, then this informInfo request -should be removed from database */ -if (p_ii->lid_range_begin !=0xFFFF ) { -OSM_LOG (p_log,OSM_LOG_VERBOSE , -"Pkey mismatch on lid_range_begin != 0xFFFF. " -"Need to remove this informInfo from db\n" ); -/* add the informInfo record to the remove_infr list */ -cl_list_insert_tail (p_infr_to_remove_list, p_infr_rec); - } - goto Exit; - }/* send the report to the address provided in the inform record */ OSM_LOG (p_log,OSM_LOG_DEBUG ,"MATCH! Sending Report...\n" ); --1.5.5
There is still a problem with GID OUT trap that is not sent since source port was already removed.
Patch will follow.--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
T24gTW9uLCBGZWIgOCwgMjAxMCBhdCAxMTowNSBBTSwgRWxpIERvcmZtYW4gKFZvbHRhaXJlKQo8 ZG9yZm1hbi5lbGlAZ21haWwuY29tPiB3cm90ZToKPiBIYWwgUm9zZW5zdG9jayB3cm90ZToKPj4g T24gU3VuLCBGZWIgNywgMjAxMCBhdCA0OjQ3IEFNLCBFbGkgRG9yZm1hbiAoVm9sdGFpcmUpCj4+ IDxkb3JmbWFuLmVsaUBnbWFpbC5jb20+IHdyb3RlOgo+Pj4gSGFsIFJvc2Vuc3RvY2sgd3JvdGU6 Cj4+Pj4gT24gRnJpLCBGZWIgNSwgMjAxMCBhdCA5OjE4IEFNLCBFbGkgRG9yZm1hbiA8ZG9yZm1h bi5lbGlAZ21haWwuY29tPiB3cm90ZToKPj4+Pj4gT24gVGh1LCBGZWIgNCwgMjAxMCBhdCAxMDo1 MiBQTSwgSGFsIFJvc2Vuc3RvY2sKPj4+Pj4gPGhhbC5yb3NlbnN0b2NrQGdtYWlsLmNvbT4gd3Jv dGU6Cj4+Pj4+PiBPbiBUaHUsIEZlYiA0LCAyMDEwIGF0IDEyOjQzIFBNLCBFbGkgRG9yZm1hbiAo Vm9sdGFpcmUpCj4+Pj4+PiA8ZG9yZm1hbi5lbGlAZ21haWwuY29tPiB3cm90ZToKPj4+Pj4+PiBT dWJqZWN0OiBbUEFUQ0hdIFdyb25nIGhhbmRsaW5nIG9mIE1DIGNyZWF0ZSBhbmQgZGVsZXRlIHRy YXBzCj4+Pj4+Pj4KPj4+Pj4+PiBGb3IgdGhlc2UgdHJhcHMgdGhlIEdJRCBpbiB0aGUgZGF0YSBk ZXRhaWxzIGlzIHRoZSBNR0lEIGFuZAo+Pj4+Pj4+IG5vdCB0aGUgc291cmNlIHBvcnQgZ2lkLgo+ Pj4+Pj4+IFNvIHRoZSBTTSBzaG91bGQgY2hlY2sgdGhhdCBzdWJzY3JpYmVyIHBvcnQgaGFzIHRo ZSBwa2V5IG9mIHRoZSBNQyBncm91cC4KPj4+Pj4+PiBUaGVyZSB3YXMgYWxzbyBhbiBlcnJvciBp biBjb21wYXJpbmcgdGhlIHN1Ym5ldCBwcmVmaXggYW5kIGd1aWQgZHVlIHRvCj4+Pj4+Pj4gaG9z dC9uZXR3b3JrIG9yZGVyIG1pc21hdGNoLgo+Pj4+Pj4+Cj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTog RWxpIERvcmZtYW4gPGVsaWRAdm9sdGFpcmUuY29tPgo+Pj4+Pj4+IC0tLQo+Pj4+Pj4+IMKgb3Bl bnNtL29wZW5zbS9vc21faW5mb3JtLmMgfCDCoDE1MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0tLS0tCj4+Pj4+Pj4gwqAxIGZpbGVzIGNoYW5nZWQsIDk4IGluc2VydGlv bnMoKyksIDUzIGRlbGV0aW9ucygtKQo+Pj4+Pj4+Cj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL29wZW5z bS9vcGVuc20vb3NtX2luZm9ybS5jIGIvb3BlbnNtL29wZW5zbS9vc21faW5mb3JtLmMKPj4+Pj4+ PiBpbmRleCA4MTA4MjEzLi5hZTRmZTcxIDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL29wZW5zbS9vcGVu c20vb3NtX2luZm9ybS5jCj4+Pj4+Pj4gKysrIGIvb3BlbnNtL29wZW5zbS9vc21faW5mb3JtLmMK Pj4+Pj4+PiBAQCAtMzQxLDYgKzM0MSwxMDMgQEAgRXhpdDoKPj4+Pj4+PiDCoCDCoCDCoCDCoHJl dHVybiBzdGF0dXM7Cj4+Pj4+Pj4gwqB9Cj4+Pj4+Pj4KPj4+Pj4+PiArc3RhdGljIGludCBpc19h Y2Nlc3NfcGVybWl0dGVkKCBvc21faW5mcl90ICpwX2luZnJfcmVjLAo+Pj4+Pj4+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgb3NtX2luZnJfbWF0Y2hfY3R4 dF90ICpwX2luZnJfbWF0Y2ggKQo+Pj4+Pj4+ICt7Cj4+Pj4+Pj4gKyDCoCDCoCDCoCBjbF9saXN0 X3QgKnBfaW5mcl90b19yZW1vdmVfbGlzdCA9IHBfaW5mcl9tYXRjaC0+cF9yZW1vdmVfaW5mcl9s aXN0Owo+Pj4+Pj4+ICsgwqAgwqAgwqAgaWJfaW5mb3JtX2luZm9fdCAqcF9paSA9ICYocF9pbmZy X3JlYy0+aW5mb3JtX3JlY29yZC5pbmZvcm1faW5mbyk7Cj4+Pj4+Pj4gKyDCoCDCoCDCoCBpYl9t YWRfbm90aWNlX2F0dHJfdCAqcF9udGMgPSBwX2luZnJfbWF0Y2gtPnBfbnRjOwo+Pj4+Pj4+ICsg wqAgwqAgwqAgdWludDE2X3QgdHJhcF9udW0gPSBjbF9udG9oMTYocF9udGMtPmdfb3Jfdi5nZW5l cmljLnRyYXBfbnVtKTsKPj4+Pj4+PiArIMKgIMKgIMKgIG9zbV9zdWJuX3QgKnBfc3VibiA9IHBf aW5mcl9yZWMtPnNhLT5wX3N1Ym47Cj4+Pj4+Pj4gKyDCoCDCoCDCoCBvc21fbG9nX3QgKnBfbG9n ID0gcF9pbmZyX3JlYy0+c2EtPnBfbG9nOwo+Pj4+Pj4+ICsgwqAgwqAgwqAgY2hhciBnaWRfc3Ry W0lORVQ2X0FERFJTVFJMRU5dOwo+Pj4+Pj4+ICsgwqAgwqAgwqAgb3NtX21ncnBfdCAqcF9tZ3Jw Owo+Pj4+Pj4+ICsgwqAgwqAgwqAgaWJfZ2lkX3Qgc291cmNlX2dpZDsKPj4+Pj4+PiArIMKgIMKg IMKgIG9zbV9wb3J0X3QgKnBfc3JjX3BvcnQ7Cj4+Pj4+Pj4gKyDCoCDCoCDCoCBvc21fcG9ydF90 ICpwX2Rlc3RfcG9ydDsKPj4+Pj4+PiArCj4+Pj4+Pj4gKyDCoCDCoCDCoCAvKiBJbiBjYXNlIG9m IEdJRF9JTig2NCkgb3IgR0lEX09VVCg2NSkgdHJhcHMgdGhlIHNvdXJjZSBnaWQKPj4+Pj4+PiAr IMKgIMKgIMKgIMKgIMKgY29tcGFyaXNvbiBzaG91bGQgYmUgZG9uZSBvbiB0aGUgdHJhcCBzb3Vy Y2UgKHNhdmVkIGFzIHRoZSBnaWQgaW4gdGhlCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoGRhdGEg ZGV0YWlscyBmaWVsZCkuCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoEZvciB0cmFwcyBNQ19DUkVB VEUoNjYpIG9yIE1DX0RFTEVURSg2NykgdGhlIGRhdGEgZGV0YWlscyBnaWQgaXMKPj4+Pj4+PiAr IMKgIMKgIMKgIMKgIMKgdGhlIE1HSUQuIFdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBzdWJzY3Jp YmVyIGhhcyB0aGUgcGt5IG9mCj4+Pj4+PiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0eXBv IMKgXl5eXgo+Pj4+Pj4KPj4+Pj4+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHBrZXkKPj4+Pj4+Cj4+Pj4+Pgo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqB0aGUgTUMgZ3Jv dXAuCj4+Pj4+PiBTaG91bGRuJ3QgdGhpcyBiZSB0aGUgc3Vic2NyaWJlciBoYXMgYSBjb21wYXRp YmxlIHBrZXkgd2l0aCBNQyBncm91cCA/Cj4+Pj4+PiBUaGUgTUMgZ3JvdXAgaGFzIGEgZnVsbCBt ZW1iZXIgUEtleSBhbmQgdGhlIG1lbWJlcnMgY2FuIGJlIGZ1bGwgb3IKPj4+Pj4+IGxpbWl0ZWQu Cj4+Pj4+IEkgYWNjZXB0IHRoZSBjb3JyZWN0aW9uLgo+Pj4+IERvZXNuJ3QgdGhpcyByZXF1aXJl IGEgY29kZSBjaGFuZ2UgZm9yIGhhbmRsaW5nIHRyYXAgY2FzZXMgNjYtNjcgPwo+Pj4gSSB0aGlu ayB0aGF0IHlvdSByZWZlcnJlZCB0byB0aGUgY29tbWVudCBzaW5jZSB0aGUgY29kZSBpcyBoYW5k bGluZyB0aGlzIHByb3Blcmx5IChpbiBteSBvcGluaW9uKS4KPj4KPj4gSSB3YXMgcmVmZXJyaW5n IHRvIGJvdGggdGhlIGNvbW1lbnQgYW5kIHRoZSBjb2RlIHNpbmNlIGEgcG9ydCB3aXRoIGEKPj4g Y29tcGF0aWJsZSBsaW1pdGVkIHBrZXkgc2hvdWxkIGJlIGFibGUgdG8gcmVjZWl2ZSB0aGUgcmVw b3J0cyBmb3IgTUMKPj4gZ3JvdXBzLgo+Cj4gSSBhZ3JlZSBhbmQgSSB0aGluayB0aGF0IHRoZSBj b2RlIGlzIGhhbmRsaW5nIHRoaXMgY2FzZSBwcm9wZXJseS4KPiBvc21fcGh5c3BfaGFzX3BrZXko KSB0YWtlcyB0aGUgMTUgbG93ZXIgTUdJRCBwa2V5IGJpdHMgYW5kIGNoZWNrcyB3aGV0aGVyIGl0 IGlzIHRoZSBwaHlzcCBwa2V5IHRhYmxlLgoKWW91J3JlIHJpZ2h0OyB0aGUgY29kZSBoYW5kbGVz IGl0LiBJIG1pc3NlZCB0aGUgaWJfcGtleV9nZXRfYmFzZSBjYWxsIHRoZXJlLgoKLS0gSGFsCgo+ Cj4gRWxpCj4+Cj4+Pj4+IFNhc2hhLCBjYW4geW91IHBsZWFzZSBjaGFuZ2UgdGhpcyBpbiB0aGUg Y29tbWl0IChvbmx5IGlmIHRoZXJlIGFyZSBub3QKPj4+Pj4gb3RoZXIgcmVtYXJrcykuCj4+Pj4g SXMgdGhhdCB3aGF0IHlvdSBhcmUgYXNraW5nIFNhc2hhIHRvIGRvIChiZXlvbmQgdGhlIHR5cG9z KSA/Cj4+PiBJIGFza2VkIFNhc2hhIHRvIGZpeCBvbmx5IHRoZSB0eXBvIGluIGNvbW1pdC4KPj4+ Cj4+Pj4+IEJUVywgdGhlcmUgaXMgbm8gZXhwbGljaXQgcmVmZXJlbmNlIGluIHRoZSBJQiBzcGVj IGZvciBNQyBncm91cAo+Pj4+PiBjcmVhdGUvZGVsZXRlIHRyYXAgKGF0IGxlYXN0IEkgZGlkbid0 IGZpbmQgaXQpLgo+Pj4+IE5vdCBzdXJlIHdoYXQgeW91IG1lYW4gYnkgdGhpcy4gV2hhdCBkaWRu J3QgeW91IGZpbmQgPwo+Pj4gaW4gdGhlIHNwZWMgc2VlIG8xMy0xNy4xLjIKPj4KPj4gWWVzLCB0 aGVyZSBhcHBlYXIgdG8gYmUgc29tZSBob2xlcyBpbiB0aGUgc3BlYyBpbiB0ZXJtcyBvZiB0aGlz IGFuZAo+PiBtYXliZSBtb3JlIGluIHRoaXMgYXJlYSAoZXZlbnQgZm9yd2FyZGluZykgYnV0IHRo ZSBpbnRlbnQgc2VlbXMgY2xlYXIuCj4+Cj4+IC0tIEhhbAo+Pgo+Pj4gVGhhbmtzLAo+Pj4gRWxp Cj4+Pj4gLS0gSGFsCj4+Pj4KPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgSW4gYWxsIG90aGVyIGNh c2VzIHRoZSBpc3N1ZXIgZ2lzIGlzIHRoZSB0cmFwIHNvdXJjZS4KPj4+Pj4+IMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHR5cG8gwqBeXl4KPj4+Pj4+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdpZAo+Pj4+Pj4KPj4+ Pj4gYW5kIHRoaXMgdHlwbyBvZiBjb3Vyc2UuCj4+Pj4+Cj4+Pj4+IFRoYW5rcywKPj4+Pj4gRWxp Cj4+Pj4+PiAtLSBIYWwKPj4+Pj4+Cj4+Pj4+Pj4gKyDCoCDCoCDCoCAqLwo+Pj4+Pj4+ICsgwqAg wqAgwqAgaWYgKHRyYXBfbnVtID49IDY0ICYmIHRyYXBfbnVtIDw9IDY3ICkKPj4+Pj4+PiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIC8qIFRoZSBpc3N1ZXIgb2YgdGhlc2UgdHJhcHMgaXMgdGhlIFNN IHNvIHNvdXJjZV9naWQKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgaXMgdGhl IGdpZCBzYXZlZCBvbiB0aGUgZGF0YSBkZXRhaWxzICovCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMtPmRhdGFfZGV0YWlscy5udGNfNjRfNjcuZ2lkOwo+ Pj4+Pj4+ICsgwqAgwqAgwqAgZWxzZQo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc291 cmNlX2dpZCA9IHBfbnRjLT5pc3N1ZXJfZ2lkOwo+Pj4+Pj4+ICsKPj4+Pj4+PiArIMKgIMKgIMKg IHBfZGVzdF9wb3J0ID0KPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIGNsX3B0cl92ZWN0b3JfZ2V0 KCZwX3N1Ym4tPnBvcnRfbGlkX3RibCwKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0 X2xpZCkpOwo+Pj4+Pj4+ICsgwqAgwqAgwqAgaWYgKCFwX2Rlc3RfcG9ydCkgewo+Pj4+Pj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xPRyhwX2xvZywgT1NNX0xPR19JTkZPLAo+Pj4+Pj4+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIkNhbm5vdCBmaW5kIGRlc3RpbmF0 aW9uIHBvcnQgd2l0aCBMSUQ6JXVcbiIsCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBjbF9udG9oMTYocF9pbmZyX3JlYy0+cmVwb3J0X2FkZHIuZGVzdF9saWQpKTsK Pj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4+Pj4+PiArIMKgIMKg IMKgIH0KPj4+Pj4+PiArCj4+Pj4+Pj4gKyDCoCDCoCDCoCBzd2l0Y2ggKHRyYXBfbnVtKSB7Cj4+ Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjYXNlIDY2Ogo+Pj4+Pj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgY2FzZSA2NzoKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHBfbWdycCA9IG9zbV9nZXRfbWdycF9ieV9tZ2lkKHBfc3VibiwgJnNvdXJjZV9naWQp Owo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwX21ncnAp IHsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IE9TTV9MT0cocF9sb2csIE9TTV9MT0dfSU5GTywKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICJDYW5ub3QgZmluZCBNR0lE ICVzXG4iLAo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaW5ldF9udG9wKEFGX0lORVQ2LCBzb3VyY2VfZ2lkLnJhdywgZ2lk X3N0ciwgc2l6ZW9mIGdpZF9zdHIpKTsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIH0KPj4+Pj4+PiArCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBpZiAoIW9zbV9waHlzcF9oYXNfcGtleShwX2xvZywKPj4+Pj4+PiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHBfbWdycC0+bWNtZW1iZXJfcmVjLnBrZXksCj4+Pj4+Pj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwX2Rlc3RfcG9ydC0+cF9waHlzcCkpIHsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfSU5GTywK Pj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgICJNR0lEICVzIGFuZCBwb3J0IEdVSUQ6MHglMDE2IiBQUkl4NjQgIiBkbyBub3Qg c2hhcmUgc2FtZSBwa2V5XG4iLAo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW5ldF9udG9wKEFGX0lORVQ2LCBzb3VyY2Vf Z2lkLnJhdywgZ2lkX3N0ciwgc2l6ZW9mIGdpZF9zdHIpLAo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDY0KHBf ZGVzdF9wb3J0LT5ndWlkKSk7Cj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBnb3RvIEV4aXQ7Cj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCB9Cj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBicmVhazsKPj4+Pj4+PiArCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkZWZhdWx0 Ogo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcF9zcmNfcG9ydCA9 Cj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBvc21fZ2V0 X3BvcnRfYnlfZ3VpZChwX3N1Ym4sIHNvdXJjZV9naWQudW5pY2FzdC5pbnRlcmZhY2VfaWQpOwo+ Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFwX3NyY19wb3J0 KSB7Cj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0lORk8sCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQgc291 cmNlIHBvcnQgd2l0aCBHVUlEOjB4JTAxNiIgUFJJeDY0ICJcbiIsCj4+Pj4+Pj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9o NjQoc291cmNlX2dpZC51bmljYXN0LmludGVyZmFjZV9pZCkpOwo+Pj4+Pj4+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0Owo+Pj4+Pj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+Pj4+Pj4+ICsKPj4+Pj4+PiArCj4+ Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBDaGVjayBpZiB0aGVy ZSBpcyBhIHBrZXkgbWF0Y2guIG8xMy0xNy4xLjEgKi8KPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGlmIChvc21fcG9ydF9zaGFyZV9wa2V5KHBfbG9nLCBwX3NyY19w b3J0LCBwX2Rlc3RfcG9ydCkgPT0gRkFMU0UpIHsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfREVCVUcs ICJNaXNtYXRjaCBieSBQa2V5XG4iKTsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIEFjY29yZGluZyB0byBvMTMtMTcuMS4yIC0gSWYgdGhp cyBpbmZvcm1JbmZvIGRvZXMgbm90IGhhdmUKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbGlkX3JhbmdlX2JlZ2luIG9mIDB4RkZGRiwg dGhlbiB0aGlzIGluZm9ybUluZm8gcmVxdWVzdAo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGRh dGFiYXNlICovCj4+Pj4+Pj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAocF9paS0+bGlkX3JhbmdlX2JlZ2luICE9IDB4RkZGRikgewo+Pj4+Pj4+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg T1NNX0xPRyhwX2xvZywgT1NNX0xPR19WRVJCT1NFLAo+Pj4+Pj4+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIlBr ZXkgbWlzbWF0Y2ggb24gbGlkX3JhbmdlX2JlZ2luICE9IDB4RkZGRi4gIgo+Pj4+Pj4+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgIk5lZWQgdG8gcmVtb3ZlIHRoaXMgaW5mb3JtSW5mbyBmcm9tIGRiXG4iKTsKPj4+ Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIC8qIGFkZCB0aGUgaW5mb3JtSW5mbyByZWNvcmQgdG8gdGhlIHJlbW92ZV9pbmZyIGxp c3QgKi8KPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGNsX2xpc3RfaW5zZXJ0X3RhaWwocF9pbmZyX3RvX3JlbW92ZV9saXN0 LCBwX2luZnJfcmVjKTsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIH0KPj4+Pj4+PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJy ZWFrOwo+Pj4+Pj4+ICsgwqAgwqAgwqAgfQo+Pj4+Pj4+ICsKPj4+Pj4+PiArIMKgIMKgIMKgIHJl dHVybiAxOwo+Pj4+Pj4+ICtFeGl0Ogo+Pj4+Pj4+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4+Pj4+ Pj4gK30KPj4+Pj4+PiArCj4+Pj4+Pj4gKwo+Pj4+Pj4+IMKgLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKPj4+Pj4+ PiDCoCogVGhpcyByb3V0aW5lIGNvbXBhcmVzIGEgZ2l2ZW4gTm90aWNlIGFuZCBhIExpc3RJdGVt IG9mIEluZm9ybUluZm8gdHlwZS4KPj4+Pj4+PiDCoCogUFJFUkVRVUlTSVRFOgo+Pj4+Pj4+IEBA IC0zNTEsMTUgKzQ0OCwxMCBAQCBzdGF0aWMgdm9pZCBtYXRjaF9ub3RpY2VfdG9faW5mX3JlYyhJ TiBjbF9saXN0X2l0ZW1fdCAqIHBfbGlzdF9pdGVtLAo+Pj4+Pj4+IMKgewo+Pj4+Pj4+IMKgIMKg IMKgIMKgb3NtX2luZnJfbWF0Y2hfY3R4dF90ICpwX2luZnJfbWF0Y2ggPSAob3NtX2luZnJfbWF0 Y2hfY3R4dF90ICopIGNvbnRleHQ7Cj4+Pj4+Pj4gwqAgwqAgwqAgwqBpYl9tYWRfbm90aWNlX2F0 dHJfdCAqcF9udGMgPSBwX2luZnJfbWF0Y2gtPnBfbnRjOwo+Pj4+Pj4+IC0gwqAgwqAgwqAgY2xf bGlzdF90ICpwX2luZnJfdG9fcmVtb3ZlX2xpc3QgPSBwX2luZnJfbWF0Y2gtPnBfcmVtb3ZlX2lu ZnJfbGlzdDsKPj4+Pj4+PiDCoCDCoCDCoCDCoG9zbV9pbmZyX3QgKnBfaW5mcl9yZWMgPSAob3Nt X2luZnJfdCAqKSBwX2xpc3RfaXRlbTsKPj4+Pj4+PiDCoCDCoCDCoCDCoGliX2luZm9ybV9pbmZv X3QgKnBfaWkgPSAmKHBfaW5mcl9yZWMtPmluZm9ybV9yZWNvcmQuaW5mb3JtX2luZm8pOwo+Pj4+ Pj4+IMKgIMKgIMKgIMKgY2xfc3RhdHVzX3Qgc3RhdHVzID0gQ0xfTk9UX0ZPVU5EOwo+Pj4+Pj4+ IMKgIMKgIMKgIMKgb3NtX2xvZ190ICpwX2xvZyA9IHBfaW5mcl9yZWMtPnNhLT5wX2xvZzsKPj4+ Pj4+PiAtIMKgIMKgIMKgIG9zbV9zdWJuX3QgKnBfc3VibiA9IHBfaW5mcl9yZWMtPnNhLT5wX3N1 Ym47Cj4+Pj4+Pj4gLSDCoCDCoCDCoCBpYl9naWRfdCBzb3VyY2VfZ2lkOwo+Pj4+Pj4+IC0gwqAg wqAgwqAgb3NtX3BvcnRfdCAqcF9zcmNfcG9ydDsKPj4+Pj4+PiAtIMKgIMKgIMKgIG9zbV9wb3J0 X3QgKnBfZGVzdF9wb3J0Owo+Pj4+Pj4+Cj4+Pj4+Pj4gwqAgwqAgwqAgwqBPU01fTE9HX0VOVEVS KHBfbG9nKTsKPj4+Pj4+Pgo+Pj4+Pj4+IEBAIC00NjAsNTUgKzU1Miw4IEBAIHN0YXRpYyB2b2lk IG1hdGNoX25vdGljZV90b19pbmZfcmVjKElOIGNsX2xpc3RfaXRlbV90ICogcF9saXN0X2l0ZW0s Cj4+Pj4+Pj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9Cj4+Pj4+Pj4gwqAgwqAgwqAgwqB9Cj4+ Pj4+Pj4KPj4+Pj4+PiAtIMKgIMKgIMKgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGEgcGtleSBtYXRj aC4gbzEzLTE3LjEuMSAqLwo+Pj4+Pj4+IC0gwqAgwqAgwqAgLyogQ2hlY2sgaWYgdGhlIGlzc3Vl ciBvZiB0aGUgdHJhcCBpcyB0aGUgU00uIElmIGl0IGlzLCB0aGVuIHRoZSBnaWQKPj4+Pj4+PiAt IMKgIMKgIMKgIMKgIMKgY29tcGFyaXNvbiBzaG91bGQgYmUgZG9uZSBvbiB0aGUgdHJhcCBzb3Vy Y2UgKHNhdmVkIGFzIHRoZSBnaWQgaW4gdGhlCj4+Pj4+Pj4gLSDCoCDCoCDCoCDCoCDCoGRhdGEg ZGV0YWlscyBmaWVsZCkuCj4+Pj4+Pj4gLSDCoCDCoCDCoCDCoCDCoElmIHRoZSBpc3N1ZXIgZ2lk IGlzIG5vdCB0aGUgU00gLSB0aGVuIGl0IGlzIHRoZSBndWlkIG9mIHRoZSB0cmFwCj4+Pj4+Pj4g LSDCoCDCoCDCoCDCoCDCoHNvdXJjZSAqLwo+Pj4+Pj4+IC0gwqAgwqAgwqAgaWYgKChjbF9udG9o NjQocF9udGMtPmlzc3Vlcl9naWQudW5pY2FzdC5wcmVmaXgpID09Cj4+Pj4+Pj4gLSDCoCDCoCDC oCDCoCDCoCDCoHBfc3Vibi0+b3B0LnN1Ym5ldF9wcmVmaXgpCj4+Pj4+Pj4gLSDCoCDCoCDCoCDC oCDCoCAmJiAoY2xfbnRvaDY0KHBfbnRjLT5pc3N1ZXJfZ2lkLnVuaWNhc3QuaW50ZXJmYWNlX2lk KSA9PQo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgcF9zdWJuLT5zbV9wb3J0X2d1aWQp KQo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogVGhlIGlzc3VlciBpcyB0aGUgU00g dGhlbiB0aGlzIGlzIHRyYXAgNjQtNjcgLSBjb21wYXJlIHRoZSBnaWQKPj4+Pj4+PiAtIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgd2l0aCB0aGUgZ2lkIHNhdmVkIG9uIHRoZSBkYXRhIGRldGFp bHMgKi8KPj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNvdXJjZV9naWQgPSBwX250Yy0+ ZGF0YV9kZXRhaWxzLm50Y182NF82Ny5naWQ7Cj4+Pj4+Pj4gLSDCoCDCoCDCoCBlbHNlCj4+Pj4+ Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzb3VyY2VfZ2lkID0gcF9udGMtPmlzc3Vlcl9naWQ7 Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0gwqAgwqAgwqAgcF9zcmNfcG9ydCA9Cj4+Pj4+Pj4gLSDCoCDC oCDCoCDCoCDCoCBvc21fZ2V0X3BvcnRfYnlfZ3VpZChwX3N1Ym4sIHNvdXJjZV9naWQudW5pY2Fz dC5pbnRlcmZhY2VfaWQpOwo+Pj4+Pj4+IC0gwqAgwqAgwqAgaWYgKCFwX3NyY19wb3J0KSB7Cj4+ Pj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0lORk8s Cj4+Pj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQg c291cmNlIHBvcnQgd2l0aCBHVUlEOjB4JTAxNiIgUFJJeDY0ICJcbiIsCj4+Pj4+Pj4gLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbF9udG9oNjQoc291cmNlX2dpZC51bmljYXN0 LmludGVyZmFjZV9pZCkpOwo+Pj4+Pj4+ICsgwqAgwqAgwqAgaWYgKCFpc19hY2Nlc3NfcGVybWl0 dGVkKHBfaW5mcl9yZWMsIHBfaW5mcl9tYXRjaCkpCj4+Pj4+Pj4gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBnb3RvIEV4aXQ7Cj4+Pj4+Pj4gLSDCoCDCoCDCoCB9Cj4+Pj4+Pj4gLQo+Pj4+Pj4+IC0g wqAgwqAgwqAgcF9kZXN0X3BvcnQgPQo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgY2xfcHRyX3Zl Y3Rvcl9nZXQoJnBfc3Vibi0+cG9ydF9saWRfdGJsLAo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY2xfbnRvaDE2KHBfaW5mcl9yZWMtPnJlcG9ydF9h ZGRyLmRlc3RfbGlkKSk7Cj4+Pj4+Pj4gLSDCoCDCoCDCoCBpZiAoIXBfZGVzdF9wb3J0KSB7Cj4+ Pj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0lORk8s Cj4+Pj4+Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAiQ2Fubm90IGZpbmQg ZGVzdGluYXRpb24gcG9ydCB3aXRoIExJRDoldVxuIiwKPj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGNsX250b2gxNihwX2luZnJfcmVjLT5yZXBvcnRfYWRkci5kZXN0 X2xpZCkpOwo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBFeGl0Owo+Pj4+Pj4+ IC0gwqAgwqAgwqAgfQo+Pj4+Pj4+IC0KPj4+Pj4+PiAtIMKgIMKgIMKgIGlmIChvc21fcG9ydF9z aGFyZV9wa2V5KHBfbG9nLCBwX3NyY19wb3J0LCBwX2Rlc3RfcG9ydCkgPT0gRkFMU0UpIHsKPj4+ Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIE9TTV9MT0cocF9sb2csIE9TTV9MT0dfREVCVUcs ICJNaXNtYXRjaCBieSBQa2V5XG4iKTsKPj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8q IEFjY29yZGluZyB0byBvMTMtMTcuMS4yIC0gSWYgdGhpcyBpbmZvcm1JbmZvIGRvZXMgbm90IGhh dmUKPj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgbGlkX3JhbmdlX2JlZ2luIG9m IDB4RkZGRiwgdGhlbiB0aGlzIGluZm9ybUluZm8gcmVxdWVzdAo+Pj4+Pj4+IC0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGRhdGFiYXNlICovCj4+Pj4+ Pj4gLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocF9paS0+bGlkX3JhbmdlX2JlZ2luICE9IDB4 RkZGRikgewo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgT1NNX0xP RyhwX2xvZywgT1NNX0xPR19WRVJCT1NFLAo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIlBrZXkgbWlzbWF0Y2ggb24gbGlkX3JhbmdlX2JlZ2lu ICE9IDB4RkZGRi4gIgo+Pj4+Pj4+IC0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgIk5lZWQgdG8gcmVtb3ZlIHRoaXMgaW5mb3JtSW5mbyBmcm9tIGRiXG4iKTsK Pj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIGFkZCB0aGUgaW5m b3JtSW5mbyByZWNvcmQgdG8gdGhlIHJlbW92ZV9pbmZyIGxpc3QgKi8KPj4+Pj4+PiAtIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNsX2xpc3RfaW5zZXJ0X3RhaWwocF9pbmZyX3Rv X3JlbW92ZV9saXN0LCBwX2luZnJfcmVjKTsKPj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKg IH0KPj4+Pj4+PiAtIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gRXhpdDsKPj4+Pj4+PiAtIMKg IMKgIMKgIH0KPj4+Pj4+Pgo+Pj4+Pj4+IMKgIMKgIMKgIMKgLyogc2VuZCB0aGUgcmVwb3J0IHRv IHRoZSBhZGRyZXNzIHByb3ZpZGVkIGluIHRoZSBpbmZvcm0gcmVjb3JkICovCj4+Pj4+Pj4gwqAg wqAgwqAgwqBPU01fTE9HKHBfbG9nLCBPU01fTE9HX0RFQlVHLCAiTUFUQ0ghIFNlbmRpbmcgUmVw b3J0Li4uXG4iKTsKPj4+Pj4+PiAtLQo+Pj4+Pj4+IDEuNS41Cj4+Pj4+Pj4KPj4+Pj4+PiBUaGVy ZSBpcyBzdGlsbCBhIHByb2JsZW0gd2l0aCBHSUQgT1VUIHRyYXAgdGhhdCBpcyBub3Qgc2VudCBz aW5jZSBzb3VyY2UgcG9ydAo+Pj4+Pj4+IHdhcyBhbHJlYWR5IHJlbW92ZWQuCj4+Pj4+Pj4gUGF0 Y2ggd2lsbCBmb2xsb3cuCj4+Pj4+Pj4KPj4+Pj4+PiAtLQo+Pj4+Pj4+IFRvIHVuc3Vic2NyaWJl IGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1yZG1hIiBp bgo+Pj4+Pj4+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwu b3JnCj4+Pj4+Pj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCDCoGh0dHA6Ly92Z2VyLmtlcm5lbC5v cmcvbWFqb3Jkb21vLWluZm8uaHRtbAo+Pj4+Pj4+Cj4+Pgo+Cj4K
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 10 lines · Eli Dorfman (Voltaire)
Subject: [PATCH] Wrong handling of MC create and delete traps
For these traps the GID in the data details is the MGID and not the source port gid.
So the SM should check that subscriber port has the pkey of the MC group. There was also an error in comparing the subnet prefix and guid due to host/network order mismatch.
Rebased and applied. Thanks.
Sasha
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html