ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRhcmdldCBiL01ha2VmaWxlLnRhcmdldAppbmRleCBiNWNkZTVkLi44ZWFhOGRkIDEwMDY0NAotLS0gYS9NYWtlZmlsZS50YXJnZXQKKysrIGIvTWFrZWZpbGUudGFyZ2V0CkBAIC0zODMsNyArMzgzLDcgQEAKIGVuZGlmCiBpZmVxICgkKFRBUkdFVF9BUkNIKSwgbWlwcykKIFZMX09CSlMrPSBtaXBzX3I0ay5vIG1pcHNfbWFsdGEubyBtaXBzX3RpbWVyLm8gbWlwc19pbnQubyBkbWEubyB2Z2EubyBzZXJpYWwubyBpODI1NC5vIGk4MjU5Lm8KLVZMX09CSlMrPSBpZGUubyBndDY0eHh4Lm8gcGNrYmQubyBwczIubyBmZGMubyBtYzE0NjgxOHJ0Yy5vIHVzYi11aGNpLm8gYWNwaS5vCitWTF9PQkpTKz0gaWRlLm8gZ3Q2NHh4eC5vIHBja2JkLm8gcHMyLm8gZmRjLm8gbWMxNDY4MThydGMubyB1c2ItdWhjaS5vIGFjcGkubyBkczEyMjV5Lm8KIFZMX09CSlMrPSBwaWl4X3BjaS5vIHBhcmFsbGVsLm8gbWl4ZW5nLm8gY2lycnVzX3ZnYS5vICQoU09VTkRfSFcpICQoQVVESU9EUlYpCiBERUZJTkVTICs9IC1ESEFTX0FVRElPCiBlbmRpZgpkaWZmIC0tZ2l0IGEvaHcvZHMxMjI1eS5jIGIvaHcvZHMxMjI1eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDY2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9ody9kczEyMjV5LmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qDQorICogUUVNVSBOVlJBTSBlbXVsYXRpb24gZm9yIERTMTIyNVkgY2hpcA0KKyAqIA0KKyAqIENvcHlyaWdodCAoYykgMjAwNyBIZXJ26SBQb3Vzc2luZWF1DQorICogDQorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0KKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKyAqDQorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCisgKg0KKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwNCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTg0KKyAqIFRIRSBTT0ZUV0FSRS4NCisgKi8NCisNCisjaW5jbHVkZSAidmwuaCINCisNCit0eXBlZGVmIGVudW0NCit7DQorICAgIG5vbmUgPSAwLA0KKyAgICByZWFkbW9kZSwNCisgICAgd3JpdGVtb2RlLA0KK30gbnZyYW1fb3Blbl9tb2RlOw0KKw0KK3N0cnVjdCBkczEyMjV5X3QNCit7DQorICAgIHRhcmdldF91bG9uZyBtZW1fYmFzZTsNCisgICAgdWludDMyX3QgY2FwYWNpdHk7DQorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOw0KKyAgICBRRU1VRmlsZSAqZmlsZTsNCisgICAgbnZyYW1fb3Blbl9tb2RlIG9wZW5fbW9kZTsNCit9Ow0KKw0KK3N0YXRpYyBpbnQgZHMxMjI1eV9zZXRfdG9fbW9kZShkczEyMjV5X3QgKk5WUkFNLCBudnJhbV9vcGVuX21vZGUgbW9kZSwgY29uc3QgY2hhciAqZmlsZW1vZGUpDQorew0KKyAgICBpZiAoTlZSQU0tPm9wZW5fbW9kZSAhPSBtb2RlKQ0KKyAgICB7DQorICAgICAgICBpZiAoTlZSQU0tPmZpbGUpDQorICAgICAgICAgICAgcWVtdV9mY2xvc2UoTlZSQU0tPmZpbGUpOw0KKyAgICAgICAgTlZSQU0tPmZpbGUgPSBxZW11X2ZvcGVuKE5WUkFNLT5maWxlbmFtZSwgZmlsZW1vZGUpOw0KKyAgICAgICAgTlZSQU0tPm9wZW5fbW9kZSA9IG1vZGU7DQorICAgIH0NCisgICAgcmV0dXJuIChOVlJBTS0+ZmlsZSAhPSBOVUxMKTsNCit9DQorDQorc3RhdGljIHVpbnQzMl90IG52cmFtX3JlYWRiICh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyKQ0KK3sNCisgICAgZHMxMjI1eV90ICpOVlJBTSA9IG9wYXF1ZTsNCisgICAgaW50NjRfdCBwb3M7DQorDQorICAgIHBvcyA9IGFkZHIgLSBOVlJBTS0+bWVtX2Jhc2U7DQorICAgIGlmIChhZGRyID49IE5WUkFNLT5jYXBhY2l0eSkNCisgICAgICAgIGFkZHIgLT0gTlZSQU0tPmNhcGFjaXR5Ow0KKw0KKyAgICBpZiAoIWRzMTIyNXlfc2V0X3RvX21vZGUoTlZSQU0sIHJlYWRtb2RlLCAicmIiKSkNCisgICAgICAgIHJldHVybiAwOw0KKyAgICBxZW11X2ZzZWVrKE5WUkFNLT5maWxlLCBwb3MsIFNFRUtfU0VUKTsNCisgICAgcmV0dXJuICh1aW50MzJfdClxZW11X2dldF9ieXRlKE5WUkFNLT5maWxlKTsNCit9DQorDQorc3RhdGljIHZvaWQgbnZyYW1fd3JpdGViICh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWx1ZSkNCit7DQorICAgIGRzMTIyNXlfdCAqTlZSQU0gPSBvcGFxdWU7DQorICAgIGludDY0X3QgcG9zOw0KKw0KKyAgICBwb3MgPSBhZGRyIC0gTlZSQU0tPm1lbV9iYXNlOw0KKyAgICBpZiAoZHMxMjI1eV9zZXRfdG9fbW9kZShOVlJBTSwgd3JpdGVtb2RlLCAid2IiKSkNCisgICAgew0KKyAgICAgICAgcWVtdV9mc2VlayhOVlJBTS0+ZmlsZSwgcG9zLCBTRUVLX1NFVCk7DQorICAgICAgICBxZW11X3B1dF9ieXRlKE5WUkFNLT5maWxlLCAoaW50KXZhbHVlKTsNCisgICAgfQ0KK30NCisNCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKm52cmFtX3JlYWRbXSA9IHsNCisgICAgJm52cmFtX3JlYWRiLA0KKyAgICBOVUxMLA0KKyAgICBOVUxMLA0KK307DQorDQorc3RhdGljIENQVVdyaXRlTWVtb3J5RnVuYyAqbnZyYW1fd3JpdGVbXSA9IHsNCisgICAgJm52cmFtX3dyaXRlYiwNCisgICAgTlVMTCwNCisgICAgTlVMTCwNCit9Ow0KKw0KK3N0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmMgKm52cmFtX25vbmVbXSA9IHsNCisgICAgTlVMTCwNCisgICAgTlVMTCwNCisgICAgTlVMTCwNCit9Ow0KKw0KKy8qIEluaXRpYWxpc2F0aW9uIHJvdXRpbmUgKi8NCitkczEyMjV5X3QgKmRzMTIyNXlfaW5pdCh0YXJnZXRfdWxvbmcgbWVtX2Jhc2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQ0KK3sNCisgICAgZHMxMjI1eV90ICpzOw0KKyAgICBpbnQgbWVtX2luZGV4MSwgbWVtX2luZGV4MjsNCisNCisgICAgcyA9IHFlbXVfbWFsbG9jeihzaXplb2YoZHMxMjI1eV90KSk7DQorICAgIGlmICghcykNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICBzLT5tZW1fYmFzZSA9IG1lbV9iYXNlOw0KKyAgICBzLT5jYXBhY2l0eSA9IDB4MjAwMDsgLyogRml4ZWQgZm9yIGRzMTIyNXkgY2hpcDogOEsgKi8NCisgICAgcy0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsNCisNCisgICAgLyogUmVhZC93cml0ZSBtZW1vcnkgKi8NCisgICAgbWVtX2luZGV4MSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnkoMCwgbnZyYW1fcmVhZCwgbnZyYW1fd3JpdGUsIHMpOw0KKyAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KG1lbV9iYXNlLCBzLT5jYXBhY2l0eSwgbWVtX2luZGV4MSk7DQorICAgIC8qIFJlYWQtb25seSBtZW1vcnkgKi8NCisgICAgbWVtX2luZGV4MiA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnkoMCwgbnZyYW1fcmVhZCwgbnZyYW1fbm9uZSwgcyk7DQorICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9tZW1vcnkobWVtX2Jhc2UgKyBzLT5jYXBhY2l0eSwgcy0+Y2FwYWNpdHksIG1lbV9pbmRleDIpOw0KKyAgICByZXR1cm4gczsNCit9DQpkaWZmIC0tZ2l0IGEvaHcvbWlwc19yNGsuYyBiL2h3L21pcHNfcjRrLmMKaW5kZXggNjNhZDM2Ny4uYjYwNTRmZCAxMDA2NDQKLS0tIGEvaHcvbWlwc19yNGsuYworKysgYi9ody9taXBzX3I0ay5jCkBAIC0yMTUsNiArMjE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGJzX3RhYmxlWzIgKiBpXSwgYnNfdGFibGVbMiAqIGkgKyAxXSk7CiAKICAgICBrYmRfaW5pdCgpOworICAgIGRzMTIyNXlfaW5pdCgweDkwMDAsICJudnJhbSIpOwogfQogCiBRRU1VTWFjaGluZSBtaXBzX21hY2hpbmUgPSB7CmRpZmYgLS1naXQgYS92bC5oIGIvdmwuaAppbmRleCBjNmQzMDVjLi5hZTUwMWUyIDEwMDY0NAotLS0gYS92bC5oCisrKyBiL3ZsLmgKQEAgLTk0MSw2ICs5NDEsMTAgQEAKIGludCBjZHJvbV9yZWFkX3RvYyhpbnQgbmJfc2VjdG9ycywgdWludDhfdCAqYnVmLCBpbnQgbXNmLCBpbnQgc3RhcnRfdHJhY2spOwogaW50IGNkcm9tX3JlYWRfdG9jX3JhdyhpbnQgbmJfc2VjdG9ycywgdWludDhfdCAqYnVmLCBpbnQgbXNmLCBpbnQgc2Vzc2lvbl9udW0pOwogCisvKiBkczEyMjV5LmMgKi8KK3R5cGVkZWYgc3RydWN0IGRzMTIyNXlfdCBkczEyMjV5X3Q7CitkczEyMjV5X3QgKmRzMTIyNXlfaW5pdCh0YXJnZXRfdWxvbmcgbWVtX2Jhc2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKwogLyogZXMxMzcwLmMgKi8KIGludCBlczEzNzBfaW5pdCAoUENJQnVzICpidXMsIEF1ZGlvU3RhdGUgKnMpOwogCg==