SVNPLTIwMjItSlAggsyOwJGVgsWCt4KqgUEweDFlIIKqIHNoaWZ0IIK+gsaCooLBgsSC3YK9guiB
QQ0KDQolIC4vcnVieSAtdmUgJ3AgIlx4MWUiLmVuY29kZSgiZXVjLWpwIiwgImlzby0yMDIyLWpw
IiknDQpydWJ5IDEuOS4wICgyMDA4LTA4LTA3IHJldmlzaW9uIDE4NDE2KSBbaTY4Ni1saW51eF0N
Ci1lOjE6aW4gYGVuY29kZSc6IHNoaWZ0IGlzIG5vdCBzdXBwb3J0ZWQgKFJ1bnRpbWVFcnJvcikN
CiAgICAgICAgZnJvbSAtZToxOmluIGA8bWFpbj4nDQoNCjppbnZhbGlkPT46cmVwbGFjZSwgOnVu
ZGVmPT46cmVwbGFjZSCCzJe8lfuC8I53kuiCtYLEguCX4YpPgqqPb4K9guiBQQ0KDQolIC4vcnVi
eSAtZSAncCAiXGUoWCIuZW5jb2RlKCJFVUMtSlAiLCAiSVNPLTIwMjItSlAiLCA6aW52YWxpZD0+
OnJlcGxhY2UsIDp1bmRlZj0+OnJlcGxhY2UpJw0KLWU6MTppbiBgZW5jb2RlJzogdGhpcyBtb2Rl
IGlzIG5vdCBzdXBwb3J0ZWQgKEVTQyAoIFgpIChSdW50aW1lRXJyb3IpDQogICAgICAgIGZyb20g
LWU6MTppbiBgPG1haW4+Jw0KDQqDR4OJgVuDgYNig1qBW4NXgskgTlVMIIKqk/yCwYK9guiBQQ0K
DQolIC4vcnVieSAtZSAncCAiXGUiLmVuY29kZSgiRVVDLUpQIiwgIklTTy0yMDIyLUpQIiknfCYg
Y2F0IC12IA0KLWU6MTppbiBgZW5jb2RlJzogdGhpcyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgKEVT
QyBeQCkgKFJ1bnRpbWVFcnJvcikNCiAgICAgICAgZnJvbSAtZToxOmluIGA8bWFpbj4nDQoNCi0x
IGJ5dGVzIGxlZnQggsaCooKkifaCtYKig4GDYoNagVuDV4Kqj2+CvYLogUENCg0KJSAuL3J1Ynkg
LWUgJ3AgIlxlJChEYSIuZW5jb2RlKCJFVUMtSlAiLCAiSVNPLTIwMjItSlAiKScgDQotZToxOmlu
IGBlbmNvZGUnOiBub3QgZnVsbHkgY29udmVydGVkLCAtMSBieXRlcyBsZWZ0IChBcmd1bWVudEVy
cm9yKQ0KICAgICAgICBmcm9tIC1lOjE6aW4gYDxtYWluPicNCg0KgreC6YLMgsWBQY3sguiCyIKo
grWCxIjIibqCzILmgqSCyYK3gumCzILNgseCpILFgrWC5YKkgqmBQg0KDQpJbmRleDogZW5jL3Ry
YW5zL2lzbzIwMjIuZXJiLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBlbmMvdHJhbnMvaXNvMjAyMi5lcmIu
YwkocmV2aXNpb24gMCkNCisrKyBlbmMvdHJhbnMvaXNvMjAyMi5lcmIuYwkocmV2aXNpb24gMCkN
CkBAIC0wLDAgKzEsMTQyIEBADQorI2luY2x1ZGUgInRyYW5zY29kZV9kYXRhLmgiDQorDQorPCUN
CisgIG1hcCA9IHt9DQorICBtYXBbIjFiMjg0MiJdID0gOmZ1bmNfc28gICAgICAgIyBkZXNpZ25h
dGUgVVMtQVNDSUkgdG8gRzAuICAgICAgICAgICAgICJFU0MgKCBCIg0KKyAgbWFwWyIxYjI4NGEi
XSA9IDpmdW5jX3NvICAgICAgICMgZGVzaWduYXRlIEpJUyBYIDAyMDEgbGF0aW4gdG8gRzAuICAg
ICAiRVNDICggSiINCisgIG1hcFsiMWIyNDQwIl0gPSA6ZnVuY19zbyAgICAgICAjIGRlc2lnbmF0
ZSBKSVMgWCAwMjA4IDE5NzggdG8gRzAuICAgICAgIkVTQyAkIEAiDQorICBtYXBbIjFiMjQ0MiJd
ID0gOmZ1bmNfc28gICAgICAgIyBkZXNpZ25hdGUgSklTIFggMDIwOCAxOTgzIHRvIEcwLiAgICAg
ICJFU0MgJCBCIg0KKyAgbWFwWyJ7MDAtMGQsMTAtMWEsMWMtN2Z9Il0gPSA6ZnVuY19zaQ0KKw0K
KyAgbWFwX2ppc3gwMjA4X3Jlc3QgPSB7fQ0KKyAgbWFwX2ppc3gwMjA4X3Jlc3RbInsyMS03ZX0i
XSA9IDpmdW5jX3NvDQorJT4NCisNCis8JT0gdHJhbnNjb2RlX2dlbmVyYXRlX25vZGUoQWN0aW9u
TWFwLnBhcnNlKG1hcCksICJpc28yMDIyanBfdG9fZXVjanAiLCBbXSkgJT4NCis8JT0gdHJhbnNj
b2RlX2dlbmVyYXRlX25vZGUoQWN0aW9uTWFwLnBhcnNlKG1hcF9qaXN4MDIwOF9yZXN0KSwgImlz
bzIwMjJqcF90b19ldWNqcF9qaXN4MDIwOF9yZXN0IiwgW10pICU+DQorDQorc3RhdGljIFZBTFVF
DQorZnVuX3NpX2lzbzIwMjJqcF90b19ldWNqcChyYl90cmFuc2NvZGluZyogdCwgY29uc3QgdW5z
aWduZWQgY2hhciogcywgc2l6ZV90IGwpDQorew0KKyAgICBpZiAodC0+c3RhdGVmdWxbMF0gPT0g
MCkNCisgICAgICAgIHJldHVybiAoVkFMVUUpTk9NQVA7DQorICAgIGVsc2UgaWYgKDB4MjEgPD0g
c1swXSAmJiBzWzBdIDw9IDB4N2UpDQorICAgICAgICByZXR1cm4gKFZBTFVFKSZpc28yMDIyanBf
dG9fZXVjanBfamlzeDAyMDhfcmVzdDsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIChWQUxV
RSlJTlZBTElEOw0KK30NCisNCitzdGF0aWMgaW50DQorZnVuX3NvX2lzbzIwMjJqcF90b19ldWNq
cChyYl90cmFuc2NvZGluZyogdCwgY29uc3QgdW5zaWduZWQgY2hhciogcywgc2l6ZV90IGwsIHVu
c2lnbmVkIGNoYXIqIG8pDQorew0KKyAgICBpZiAoc1swXSA9PSAweDFiKSB7DQorICAgICAgICBp
ZiAoc1sxXSA9PSAnKCcpIHsNCisgICAgICAgICAgICBzd2l0Y2ggKHNbbC0xXSkgew0KKyAgICAg
ICAgICAgICAgY2FzZSAnQic6DQorICAgICAgICAgICAgICBjYXNlICdKJzoNCisgICAgICAgICAg
ICAgICAgdC0+c3RhdGVmdWxbMF0gPSAwOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAg
ICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICBlbHNlIHsNCisgICAgICAgICAgICBzd2l0
Y2ggKHNbbC0xXSkgew0KKyAgICAgICAgICAgICAgY2FzZSAnQCc6DQorICAgICAgICAgICAgICBj
YXNlICdCJzoNCisgICAgICAgICAgICAgICAgdC0+c3RhdGVmdWxbMF0gPSAxOw0KKyAgICAgICAg
ICAgICAgICBicmVhazsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICByZXR1
cm4gMDsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisgICAgICAgIG9bMF0gPSBzWzBdIHwgMHg4MDsN
CisgICAgICAgIG9bMV0gPSBzWzFdIHwgMHg4MDsNCisgICAgICAgIHJldHVybiAyOw0KKyAgICB9
DQorfQ0KKw0KK3N0YXRpYyBjb25zdCByYl90cmFuc2NvZGVyDQorcmJfSVNPXzIwMjJfSlBfdG9f
RVVDX0pQID0gew0KKyAgICAiSVNPLTIwMjItSlAiLCAiRVVDLUpQIiwgJmlzbzIwMjJqcF90b19l
dWNqcCwgMywgMCwNCisgICAgTlVMTCwgZnVuX3NpX2lzbzIwMjJqcF90b19ldWNqcCwgTlVMTCwg
ZnVuX3NvX2lzbzIwMjJqcF90b19ldWNqcA0KK307DQorDQorPCUNCisgIG1hcF9ldWNqcCA9IHsN
CisgICAgInswZSwwZiwxYn0iID0+IDp1bmRlZiwNCisgICAgInswMC0wZCwxMC0xYSwxYy03Zn0i
ID0+IDpmdW5jX3NvLA0KKyAgICAie2ExLWZlfXthMS1mZX0iID0+IDpmdW5jX3NvLA0KKyAgICAi
OGV7YTEtZmV9IiA9PiA6dW5kZWYsDQorICAgICI4ZnthMS1mZX17YTEtZmV9IiA9PiA6dW5kZWYs
DQorICB9DQorJT4NCisNCis8JT0gdHJhbnNjb2RlX2dlbmVyYXRlX25vZGUoQWN0aW9uTWFwLnBh
cnNlKG1hcF9ldWNqcCksICJldWNqcF90b19pc28yMDIyanAiLCBbXSkgJT4NCisNCitzdGF0aWMg
aW50DQorZnVuX3NvX2V1Y2pwX3RvX2lzbzIwMjJqcChyYl90cmFuc2NvZGluZyAqdCwgY29uc3Qg
dW5zaWduZWQgY2hhciAqcywgc2l6ZV90IGwsIHVuc2lnbmVkIGNoYXIgKm8pDQorew0KKyAgICB1
bnNpZ25lZCBjaGFyICpvdXRwdXQwID0gbzsNCisNCisgICAgaWYgKHQtPnN0YXRlZnVsWzBdID09
IDApIHsNCisgICAgICAgIHQtPnN0YXRlZnVsWzBdID0gMTsgLyogaW5pdGlhbGl6ZWQgZmxhZyAq
Lw0KKyAgICAgICAgdC0+c3RhdGVmdWxbMV0gPSAxOyAvKiBBU0NJSSBtb2RlICovDQorICAgIH0N
CisNCisgICAgaWYgKGwgIT0gdC0+c3RhdGVmdWxbMV0pIHsNCisgICAgICAgIGlmIChsID09IDEp
IHsNCisgICAgICAgICAgICAqbysrID0gMHgxYjsNCisgICAgICAgICAgICAqbysrID0gJygnOw0K
KyAgICAgICAgICAgICpvKysgPSAnQic7DQorICAgICAgICAgICAgdC0+c3RhdGVmdWxbMV0gPSAx
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgKm8rKyA9IDB4MWI7
DQorICAgICAgICAgICAgKm8rKyA9ICckJzsNCisgICAgICAgICAgICAqbysrID0gJ0InOw0KKyAg
ICAgICAgICAgIHQtPnN0YXRlZnVsWzFdID0gMjsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAg
ICBpZiAobCA9PSAxKSB7DQorICAgICAgICAqbysrID0gc1swXSAmIDB4N2Y7DQorICAgIH0NCisg
ICAgZWxzZSB7DQorICAgICAgICAqbysrID0gc1swXSAmIDB4N2Y7DQorICAgICAgICAqbysrID0g
c1sxXSAmIDB4N2Y7DQorICAgIH0NCisNCisgICAgcmV0dXJuIG8gLSBvdXRwdXQwOw0KK30NCisN
CitzdGF0aWMgaW50DQorZmluaXNoX2V1Y2pwX3RvX2lzbzIwMjJqcChyYl90cmFuc2NvZGluZyAq
dCwgdW5zaWduZWQgY2hhciAqbykNCit7DQorICAgIHVuc2lnbmVkIGNoYXIgKm91dHB1dDAgPSBv
Ow0KKw0KKyAgICBpZiAodC0+c3RhdGVmdWxbMF0gPT0gMCkNCisgICAgICAgIHJldHVybiAwOw0K
Kw0KKyAgICBpZiAodC0+c3RhdGVmdWxbMV0gIT0gMSkgew0KKyAgICAgICAgKm8rKyA9IDB4MWI7
DQorICAgICAgICAqbysrID0gJygnOw0KKyAgICAgICAgKm8rKyA9ICdCJzsNCisgICAgICAgIHQt
PnN0YXRlZnVsWzFdID0gMTsNCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbyAtIG91dHB1dDA7DQor
fQ0KKw0KK3N0YXRpYyBjb25zdCByYl90cmFuc2NvZGVyDQorcmJfRVVDX0pQX3RvX0lTT18yMDIy
X0pQID0gew0KKyAgICAiRVVDLUpQIiwgIklTTy0yMDIyLUpQIiwgJmV1Y2pwX3RvX2lzbzIwMjJq
cCwgNSwgMCwNCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgZnVuX3NvX2V1Y2pwX3RvX2lzbzIwMjJq
cCwgZmluaXNoX2V1Y2pwX3RvX2lzbzIwMjJqcA0KK307DQorDQordm9pZA0KK0luaXRfaXNvMjAy
Mih2b2lkKQ0KK3sNCisgICAgcmJfcmVnaXN0ZXJfdHJhbnNjb2RlcigmcmJfSVNPXzIwMjJfSlBf
dG9fRVVDX0pQKTsNCisgICAgcmJfcmVnaXN0ZXJfdHJhbnNjb2RlcigmcmJfRVVDX0pQX3RvX0lT
T18yMDIyX0pQKTsNCit9DQorDQpJbmRleDogZW5jL3RyYW5zL2phcGFuZXNlLmVyYi5jDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gZW5jL3RyYW5zL2phcGFuZXNlLmVyYi5jCShyZXZpc2lvbiAxODQxNykNCisr
KyBlbmMvdHJhbnMvamFwYW5lc2UuZXJiLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xNywyMzUgKzE3
LDggQEANCiA8JT0gdHJhbnNjb2RlX3RibGdlbiAiVVRGLTgiLCAiRVVDLUpQIiwgW1siezAwLTdm
fSIsIDpub21hcF0sICpVQ1NfVE9fRVVDSlBfVEJMXSAlPg0KIDwlPSB0cmFuc2NvZGVfdGJsZ2Vu
ICJVVEYtOCIsICJDUDUxOTMyIiwgW1siezAwLTdmfSIsIDpub21hcF0sICpVQ1NfVE9fRVVDSlBf
VEJMXSAlPg0KIA0KLSNkZWZpbmUgSVNPXzIwMjJfRU5DT0RJTkcoZXNjc2VxLCBieXRlKSAoKGVz
Y3NlcTw8OCl8Ynl0ZSkNCi1lbnVtIElTT18yMDIyX0VTQ1NFUSB7DQotICAgIElTT18yMDIyX0Na
RCAgID0gJyEnLA0KLSAgICBJU09fMjAyMl9DMUQgICA9ICciJywNCi0gICAgSVNPXzIwMjJfR1pE
NCAgPSAnKCcsDQotICAgIElTT18yMDIyX0cxRDQgID0gJyknLA0KLSAgICBJU09fMjAyMl9HMkQ0
ICA9ICcqJywNCi0gICAgSVNPXzIwMjJfRzNENCAgPSAnKycsDQotICAgIElTT18yMDIyX0cxRDYg
ID0gJy0nLA0KLSAgICBJU09fMjAyMl9HMkQ2ICA9ICcuJywNCi0gICAgSVNPXzIwMjJfRzNENiAg
PSAnLycsDQotICAgIElTT18yMDIyX0daRE00ID0gSVNPXzIwMjJfRU5DT0RJTkcoJyQnLCcoJyks
DQotICAgIElTT18yMDIyX0cxRE00ID0gSVNPXzIwMjJfRU5DT0RJTkcoJyQnLCcpJyksDQotICAg
IElTT18yMDIyX0cyRE00ID0gSVNPXzIwMjJfRU5DT0RJTkcoJyQnLCcqJyksDQotICAgIElTT18y
MDIyX0czRE00ID0gSVNPXzIwMjJfRU5DT0RJTkcoJyQnLCcrJyksDQotICAgIElTT18yMDIyX0cx
RE02ID0gSVNPXzIwMjJfRU5DT0RJTkcoJyQnLCctJyksDQotICAgIElTT18yMDIyX0cyRE02ID0g
SVNPXzIwMjJfRU5DT0RJTkcoJyQnLCcuJyksDQotICAgIElTT18yMDIyX0czRE02ID0gSVNPXzIw
MjJfRU5DT0RJTkcoJyQnLCcvJyksDQotICAgIElTT18yMDIyX0RPQ1MgID0gSVNPXzIwMjJfRU5D
T0RJTkcoJyUnLCdJJyksDQotICAgIElTT18yMDIyX0lSUiAgID0gJyYnDQotfTsNCi0NCi0NCi0j
ZGVmaW5lIElTT18yMDIyX0daX0FTQ0lJICAgICAgICAgICAgICAgICAgICAgICBJU09fMjAyMl9F
TkNPRElORyhJU09fMjAyMl9HWkQ0LCAnQicpDQotI2RlZmluZSBJU09fMjAyMl9HWl9KSVNfWF8w
MjAxX0thdGFrYW5hICAgICAgICAgSVNPXzIwMjJfRU5DT0RJTkcoSVNPXzIwMjJfR1pENCwgJ0kn
KQ0KLSNkZWZpbmUgSVNPXzIwMjJfR1pfSklTX1hfMDIwMV9Sb21hbiAgICAgICAgICAgIElTT18y
MDIyX0VOQ09ESU5HKElTT18yMDIyX0daRDQsICdKJykNCi0jZGVmaW5lIElTT18yMDIyX0daX0pJ
U19DXzYyMjZfMTk3OCAgICAgICAgICAgICBJU09fMjAyMl9FTkNPRElORyhJU09fMjAyMl9HWkRN
NCwnQCcpDQotI2RlZmluZSBJU09fMjAyMl9HWl9KSVNfWF8wMjA4XzE5ODMgICAgICAgICAgICAg
SVNPXzIwMjJfRU5DT0RJTkcoSVNPXzIwMjJfR1pETTQsJ0InKQ0KLSNkZWZpbmUgSVNPXzIwMjJf
R1pfSklTX1hfMDIxMl8xOTkwICAgICAgICAgICAgIElTT18yMDIyX0VOQ09ESU5HKElTT18yMDIy
X0daRE00LCdEJykNCi0jZGVmaW5lIElTT18yMDIyX0daX0pJU19YXzAyMTNfMjAwMF8xICAgICAg
ICAgICBJU09fMjAyMl9FTkNPRElORyhJU09fMjAyMl9HWkRNNCwnTycpDQotI2RlZmluZSBJU09f
MjAyMl9HWl9KSVNfWF8wMjEzXzIwMDBfMiAgICAgICAgICAgSVNPXzIwMjJfRU5DT0RJTkcoSVNP
XzIwMjJfR1pETTQsJ1AnKQ0KLSNkZWZpbmUgSVNPXzIwMjJfR1pfSklTX1hfMDIxM18yMDA0XzEg
ICAgICAgICAgIElTT18yMDIyX0VOQ09ESU5HKElTT18yMDIyX0daRE00LCdRJykNCi0NCi0jZGVm
aW5lIFVOU1VQUE9SVEVEX01PREUgVFJBTlNDT0RFX0VSUk9SDQotDQotc3RhdGljIGludA0KLWdl
dF9pc29fMjAyMl9tb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbl9wb3MpDQotew0KLSAgICBp
bnQgbmV3X21vZGU7DQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluX3AgPSAqaW5fcG9zOw0K
LSAgICBzd2l0Y2ggKCppbl9wKyspIHsNCi0gICAgICBjYXNlICcoJzoNCi0Jc3dpdGNoICgqaW5f
cCsrKSB7DQotCSAgY2FzZSAnQic6IGNhc2UgJ0knOiBjYXNlICdKJzoNCi0JICAgIG5ld19tb2Rl
ID0gSVNPXzIwMjJfRU5DT0RJTkcoSVNPXzIwMjJfR1pENCwgKihpbl9wLTEpKTsNCi0JICAgIGJy
ZWFrOw0KLQkgIGRlZmF1bHQ6DQotCSAgICByYl9yYWlzZShVTlNVUFBPUlRFRF9NT0RFLCAidGhp
cyBtb2RlIGlzIG5vdCBzdXBwb3J0ZWQgKEVTQyAoICVjKSIsICooaW5fcC0xKSk7DQotCSAgICBi
cmVhazsNCi0JfQ0KLQlicmVhazsNCi0gICAgICBjYXNlICckJzoNCi0Jc3dpdGNoICgqaW5fcCsr
KSB7DQotCSAgY2FzZSAnQCc6IGNhc2UgJ0EnOiBjYXNlICdCJzoNCi0JICAgIG5ld19tb2RlID0g
SVNPXzIwMjJfRU5DT0RJTkcoSVNPXzIwMjJfR1pETTQsICooaW5fcC0xKSk7DQotCSAgICBicmVh
azsNCi0JICBjYXNlICcoJzoNCi0JICAgIHN3aXRjaCAoKmluX3ArKykgew0KLQkgICAgICBjYXNl
ICdEJzogY2FzZSAnTyc6IGNhc2UgJ1AnOiBjYXNlICdRJzoNCi0JCW5ld19tb2RlID0gSVNPXzIw
MjJfRU5DT0RJTkcoSVNPXzIwMjJfR1pETTQsICooaW5fcC0xKSk7DQotCQlicmVhazsNCi0JICAg
ICAgZGVmYXVsdDoNCi0JCXJiX3JhaXNlKFVOU1VQUE9SVEVEX01PREUsICJ0aGlzIG1vZGUgaXMg
bm90IHN1cHBvcnRlZCAoRVNDICQgKCAlYykiLCAqKGluX3AtMSkpOw0KLQkJYnJlYWs7DQotCSAg
ICB9DQotCSAgICBicmVhazsNCi0JICBkZWZhdWx0Og0KLQkgICAgcmJfcmFpc2UoVU5TVVBQT1JU
RURfTU9ERSwgInRoaXMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIChFU0MgJCAlYykiLCAqKGluX3At
MSkpOw0KLQkgICAgYnJlYWs7DQotCX0NCi0JYnJlYWs7DQotICAgICAgZGVmYXVsdDoNCi0JcmJf
cmFpc2UoVU5TVVBQT1JURURfTU9ERSwgInRoaXMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkIChFU0Mg
JWMpIiwgKihpbl9wLTEpKTsNCi0JYnJlYWs7DQotICAgIH0NCi0gICAgKmluX3BvcyA9IGluX3A7
DQotICAgIHJldHVybiBuZXdfbW9kZTsNCi19DQotDQotc3RhdGljIHZvaWQNCi1mcm9tX2lzb18y
MDIyX2pwX3RyYW5zY29kZXJfcHJlcHJvY2Vzc29yKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbl9w
b3MsIHVuc2lnbmVkIGNoYXIgKipvdXRfcG9zLA0KLQkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KmluX3N0b3AsIHVuc2lnbmVkIGNoYXIgKm91dF9zdG9wLA0KLQkJCQkJIHJiX3RyYW5zY29kaW5n
ICpteV90cmFuc2NvZGluZykNCi17DQotICAgIGNvbnN0IHJiX3RyYW5zY29kZXIgKm15X3RyYW5z
Y29kZXIgPSBteV90cmFuc2NvZGluZy0+dHJhbnNjb2RlcjsNCi0gICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqaW5fcCA9ICppbl9wb3M7DQotICAgIHVuc2lnbmVkIGNoYXIgKm91dF9wID0gKm91dF9w
b3M7DQotICAgIGludCBjdXJfbW9kZSA9IElTT18yMDIyX0daX0FTQ0lJOw0KLSAgICB1bnNpZ25l
ZCBjaGFyIGMxOw0KLSAgICB1bnNpZ25lZCBjaGFyICpvdXRfcyA9IG91dF9zdG9wIC0gbXlfdHJh
bnNjb2Rlci0+bWF4X291dHB1dCArIDE7DQotICAgIHdoaWxlIChpbl9wIDwgaW5fc3RvcCkgew0K
LQlpZiAob3V0X3AgPj0gb3V0X3MpIHsNCi0JICAgIGludCBsZW4gPSAob3V0X3AgLSAqb3V0X3Bv
cyk7DQotCSAgICBpbnQgbmV3X2xlbiA9IChsZW4gKyBteV90cmFuc2NvZGVyLT5tYXhfb3V0cHV0
KSAqIDI7DQotCSAgICAqb3V0X3BvcyA9ICgqbXlfdHJhbnNjb2RpbmctPmZsdXNoX2Z1bmMpKG15
X3RyYW5zY29kaW5nLCBsZW4sIG5ld19sZW4pOw0KLQkgICAgb3V0X3AgPSAqb3V0X3BvcyArIGxl
bjsNCi0JICAgIG91dF9zID0gKm91dF9wb3MgKyBuZXdfbGVuIC0gbXlfdHJhbnNjb2Rlci0+bWF4
X291dHB1dDsNCi0JfQ0KLQljMSA9ICppbl9wKys7DQotCWlmIChjMSA9PSAweDFCKSB7DQotCSAg
ICBjdXJfbW9kZSA9IGdldF9pc29fMjAyMl9tb2RlKCZpbl9wKTsNCi0JfQ0KLQllbHNlIGlmIChj
MSA9PSAweDFFIHx8IGMxID09IDB4MUYpIHsNCi0JICAgIC8qIFNISUZUICovDQotCSAgICByYl9y
YWlzZShVTlNVUFBPUlRFRF9NT0RFLCAic2hpZnQgaXMgbm90IHN1cHBvcnRlZCIpOw0KLQl9DQot
CWVsc2UgaWYgKGMxID49IDB4ODApIHsNCi0JICAgIHJiX3JhaXNlKFRSQU5TQ09ERV9FUlJPUiwg
ImludmFsaWQgYnl0ZSBzZXF1ZW5jZSIpOw0KLQl9DQotCWVsc2Ugew0KLQkgICAgc3dpdGNoIChj
dXJfbW9kZSkgew0KLQkgICAgICBjYXNlIElTT18yMDIyX0daX0FTQ0lJOg0KLQkgICAgICBjYXNl
IElTT18yMDIyX0daX0pJU19YXzAyMDFfUm9tYW46DQotCQkqb3V0X3ArKyA9IGMxOw0KLQkJYnJl
YWs7DQotCSAgICAgIGNhc2UgSVNPXzIwMjJfR1pfSklTX1hfMDIwMV9LYXRha2FuYToNCi0JCSpv
dXRfcCsrID0gMHg4RTsNCi0JCSpvdXRfcCsrID0gYzEgfCAweDgwOw0KLQkJYnJlYWs7DQotCSAg
ICAgIGNhc2UgSVNPXzIwMjJfR1pfSklTX1hfMDIxMl8xOTkwOg0KLQkJKm91dF9wKysgPSAweDhG
Ow0KLQkgICAgICBjYXNlIElTT18yMDIyX0daX0pJU19DXzYyMjZfMTk3ODoNCi0JICAgICAgY2Fz
ZSBJU09fMjAyMl9HWl9KSVNfWF8wMjA4XzE5ODM6DQotCQkqb3V0X3ArKyA9IGMxIHwgMHg4MDsN
Ci0JCSpvdXRfcCsrID0gKmluX3ArKyB8IDB4ODA7DQotCQlicmVhazsNCi0JICAgIH0NCi0JfQ0K
LSAgICB9DQotICAgIC8qIGNsZWFudXAgKi8NCi0gICAgKmluX3BvcyAgPSBpbl9wOw0KLSAgICAq
b3V0X3BvcyA9IG91dF9wOw0KLX0NCi0NCi1zdGF0aWMgaW50DQotc2VsZWN0X2lzb18yMDIyX21v
ZGUodW5zaWduZWQgY2hhciAqKm91dF9wb3MsIGludCBuZXdfbW9kZSkNCi17DQotICAgIHVuc2ln
bmVkIGNoYXIgKm91dF9wID0gKm91dF9wb3M7DQotICAgICpvdXRfcCsrID0gJ1x4MWInOw0KLSAg
ICBzd2l0Y2ggKG5ld19tb2RlPj44KSB7DQotICAgICAgY2FzZSBJU09fMjAyMl9HWkQ0Og0KLQkq
b3V0X3ArKyA9IG5ld19tb2RlID4+IDg7DQotCSpvdXRfcCsrID0gbmV3X21vZGUgJiAweDdGOw0K
LQlicmVhazsNCi0gICAgICBjYXNlIElTT18yMDIyX0daRE00Og0KLQkqb3V0X3ArKyA9IG5ld19t
b2RlID4+IDE2Ow0KLQlpZiAoKG5ld19tb2RlICYgMHg3RikgIT0gJ0AnICYmDQotCSAgICAobmV3
X21vZGUgJiAweDdGKSAhPSAnQScgJiYNCi0JICAgIChuZXdfbW9kZSAmIDB4N0YpICE9ICdCJykN
Ci0Jew0KLQkgICAgKm91dF9wKysgPSAobmV3X21vZGU+PjgpICYgMHg3RjsNCi0JfQ0KLQkqb3V0
X3ArKyA9IG5ld19tb2RlICYgMHg3RjsNCi0JYnJlYWs7DQotICAgICAgZGVmYXVsdDoNCi0JcmJf
cmFpc2UoVU5TVVBQT1JURURfTU9ERSwgInRoaXMgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLiIpOw0K
LQlicmVhazsNCi0gICAgfQ0KLSAgICAqb3V0X3BvcyA9IG91dF9wOw0KLSAgICByZXR1cm4gbmV3
X21vZGU7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkDQotdG9faXNvXzIwMjJfanBfdHJhbnNjb2Rlcl9w
b3N0cHJvY2Vzc29yKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbl9wb3MsIHVuc2lnbmVkIGNoYXIg
KipvdXRfcG9zLA0KLQkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW5fc3RvcCwgdW5zaWduZWQg
Y2hhciAqb3V0X3N0b3AsDQotCQkJCQlyYl90cmFuc2NvZGluZyAqbXlfdHJhbnNjb2RpbmcpDQot
ew0KLSAgICBjb25zdCByYl90cmFuc2NvZGVyICpteV90cmFuc2NvZGVyID0gbXlfdHJhbnNjb2Rp
bmctPnRyYW5zY29kZXI7DQotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluX3AgPSAqaW5fcG9z
Ow0KLSAgICB1bnNpZ25lZCBjaGFyICpvdXRfcCA9ICpvdXRfcG9zOw0KLSAgICBpbnQgY3VyX21v
ZGUgPSBJU09fMjAyMl9HWl9BU0NJSSwgbmV3X21vZGUgPSAwOw0KLSAgICB1bnNpZ25lZCBjaGFy
IG5leHRfYnl0ZTsNCi0gICAgdW5zaWduZWQgY2hhciAqb3V0X3MgPSBvdXRfc3RvcCAtIG15X3Ry
YW5zY29kZXItPm1heF9vdXRwdXQgKyAxOw0KLSAgICB3aGlsZSAoaW5fcCA8IGluX3N0b3ApIHsN
Ci0JaWYgKG91dF9wID49IG91dF9zKSB7DQotCSAgICBpbnQgbGVuID0gKG91dF9wIC0gKm91dF9w
b3MpOw0KLQkgICAgaW50IG5ld19sZW4gPSAobGVuICsgbXlfdHJhbnNjb2Rlci0+bWF4X291dHB1
dCkgKiAyOw0KLQkgICAgKm91dF9wb3MgPSAoKm15X3RyYW5zY29kaW5nLT5mbHVzaF9mdW5jKSht
eV90cmFuc2NvZGluZywgbGVuLCBuZXdfbGVuKTsNCi0JICAgIG91dF9wID0gKm91dF9wb3MgKyBs
ZW47DQotCSAgICBvdXRfcyA9ICpvdXRfcG9zICsgbmV3X2xlbiAtIG15X3RyYW5zY29kZXItPm1h
eF9vdXRwdXQ7DQotCX0NCi0JbmV4dF9ieXRlID0gKmluX3ArKzsNCi0JaWYgKG5leHRfYnl0ZSA8
IDB4ODApIHsNCi0JICAgIG5ld19tb2RlID0gSVNPXzIwMjJfR1pfQVNDSUk7DQotCX0NCi0JZWxz
ZSBpZiAobmV4dF9ieXRlID09IDB4OEUpIHsNCi0JICAgIG5ld19tb2RlID0gSVNPXzIwMjJfR1pf
SklTX1hfMDIwMV9LYXRha2FuYTsNCi0JICAgIG5leHRfYnl0ZSA9ICppbl9wKys7DQotCX0NCi0J
ZWxzZSBpZiAobmV4dF9ieXRlID09IDB4OEYpIHsNCi0JICAgIG5ld19tb2RlID0gSVNPXzIwMjJf
R1pfSklTX1hfMDIxMl8xOTkwOw0KLQkgICAgbmV4dF9ieXRlID0gKmluX3ArKzsNCi0JfQ0KLQll
bHNlIHsNCi0JICAgIG5ld19tb2RlID0gSVNPXzIwMjJfR1pfSklTX1hfMDIwOF8xOTgzOw0KLQl9
DQotCWlmIChjdXJfbW9kZSAhPSBuZXdfbW9kZSkNCi0JICAgIGN1cl9tb2RlID0gc2VsZWN0X2lz
b18yMDIyX21vZGUoJm91dF9wLCBuZXdfbW9kZSk7DQotCWlmIChjdXJfbW9kZSA8IDB4RkZGRikg
ew0KLQkgICAgKm91dF9wKysgPSBuZXh0X2J5dGUgJiAweDdGOw0KLQl9DQotCWVsc2Ugew0KLQkg
ICAgKm91dF9wKysgPSBuZXh0X2J5dGUgJiAweDdGOw0KLQkgICAgKm91dF9wKysgPSAqaW5fcCsr
ICYgMHg3RjsNCi0JfQ0KLSAgICB9DQotICAgIGlmIChjdXJfbW9kZSAhPSBJU09fMjAyMl9HWl9B
U0NJSSkNCi0JY3VyX21vZGUgPSBzZWxlY3RfaXNvXzIwMjJfbW9kZSgmb3V0X3AsIElTT18yMDIy
X0daX0FTQ0lJKTsNCi0gICAgLyogY2xlYW51cCAqLw0KLSAgICAqaW5fcG9zICA9IGluX3A7DQot
ICAgICpvdXRfcG9zID0gb3V0X3A7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCByYl90cmFuc2NvZGVy
DQotcmJfZnJvbV9JU09fMjAyMl9KUCA9IHsNCi0gICAgIklTTy0yMDIyLUpQIiwgIlVURi04Iiwg
JmZyb21fRVVDX0pQLCA4LCAwLA0KLSAgICAmZnJvbV9pc29fMjAyMl9qcF90cmFuc2NvZGVyX3By
ZXByb2Nlc3NvciwgTlVMTCwNCi19Ow0KLQ0KLXN0YXRpYyBjb25zdCByYl90cmFuc2NvZGVyDQot
cmJfdG9fSVNPXzIwMjJfSlAgPSB7DQotICAgICJVVEYtOCIsICJJU08tMjAyMi1KUCIsICZ0b19F
VUNfSlAsIDgsIDEsDQotICAgIE5VTEwsICZ0b19pc29fMjAyMl9qcF90cmFuc2NvZGVyX3Bvc3Rw
cm9jZXNzb3IsDQotfTsNCi0NCiB2b2lkDQogSW5pdF9qYXBhbmVzZSh2b2lkKQ0KIHsNCiA8JT0g
dHJhbnNjb2RlX3JlZ2lzdGVyX2NvZGUgJT4NCi0gICAgcmJfcmVnaXN0ZXJfdHJhbnNjb2Rlcigm
cmJfZnJvbV9JU09fMjAyMl9KUCk7DQotICAgIHJiX3JlZ2lzdGVyX3RyYW5zY29kZXIoJnJiX3Rv
X0lTT18yMDIyX0pQKTsNCiB9DQpJbmRleDogZW5jL3RyYW5zL3V0Zl8xNl8zMi5lcmIuYw0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIGVuYy90cmFucy91dGZfMTZfMzIuZXJiLmMJKHJldmlzaW9uIDE4NDE3KQ0K
KysrIGVuYy90cmFucy91dGZfMTZfMzIuZXJiLmMJKHdvcmtpbmcgY29weSkNCkBAIC0xLDcgKzEs
NyBAQA0KICNpbmNsdWRlICJ0cmFuc2NvZGVfZGF0YS5oIg0KIA0KIHN0YXRpYyBpbnQNCi1mdW5f
c29fZnJvbV91dGZfMTZiZShjb25zdCB1bnNpZ25lZCBjaGFyKiBzLCB1bnNpZ25lZCBjaGFyKiBv
KQ0KK2Z1bl9zb19mcm9tX3V0Zl8xNmJlKHJiX3RyYW5zY29kaW5nKiB0LCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBzLCBzaXplX3QgbCwgdW5zaWduZWQgY2hhciogbykNCiB7DQogICAgIGlmICghc1sw
XSAmJiBzWzFdPDB4ODApIHsNCiAgICAgICAgIG9bMF0gPSBzWzFdOw0KQEAgLTI5LDcgKzI5LDcg
QEAgZnVuX3NvX2Zyb21fdXRmXzE2YmUoY29uc3QgdW5zaWduZWQgY2hhcg0KIH0NCiANCiBzdGF0
aWMgaW50DQotZnVuX3NvX3RvX3V0Zl8xNmJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIHMsIHVuc2ln
bmVkIGNoYXIqIG8pDQorZnVuX3NvX3RvX3V0Zl8xNmJlKHJiX3RyYW5zY29kaW5nKiB0LCBjb25z
dCB1bnNpZ25lZCBjaGFyKiBzLCBzaXplX3QgbCwgdW5zaWduZWQgY2hhciogbykNCiB7DQogICAg
IGlmICghKHNbMF0mMHg4MCkpIHsNCiAgICAgICAgIG9bMF0gPSAweDAwOw0KQEAgLTU3LDcgKzU3
LDcgQEAgZnVuX3NvX3RvX3V0Zl8xNmJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIA0KIH0NCiANCiBz
dGF0aWMgaW50DQotZnVuX3NvX2Zyb21fdXRmXzE2bGUoY29uc3QgdW5zaWduZWQgY2hhciogcywg
dW5zaWduZWQgY2hhciogbykNCitmdW5fc29fZnJvbV91dGZfMTZsZShyYl90cmFuc2NvZGluZyog
dCwgY29uc3QgdW5zaWduZWQgY2hhciogcywgc2l6ZV90IGwsIHVuc2lnbmVkIGNoYXIqIG8pDQog
ew0KICAgICBpZiAoIXNbMV0gJiYgc1swXTwweDgwKSB7DQogICAgICAgICBvWzBdID0gc1swXTsN
CkBAIC04NSw3ICs4NSw3IEBAIGZ1bl9zb19mcm9tX3V0Zl8xNmxlKGNvbnN0IHVuc2lnbmVkIGNo
YXINCiB9DQogDQogc3RhdGljIGludA0KLWZ1bl9zb190b191dGZfMTZsZShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBzLCB1bnNpZ25lZCBjaGFyKiBvKQ0KK2Z1bl9zb190b191dGZfMTZsZShyYl90cmFu
c2NvZGluZyogdCwgY29uc3QgdW5zaWduZWQgY2hhciogcywgc2l6ZV90IGwsIHVuc2lnbmVkIGNo
YXIqIG8pDQogew0KICAgICBpZiAoIShzWzBdJjB4ODApKSB7DQogICAgICAgICBvWzFdID0gMHgw
MDsNCkBAIC0xMTMsNyArMTEzLDcgQEAgZnVuX3NvX3RvX3V0Zl8xNmxlKGNvbnN0IHVuc2lnbmVk
IGNoYXIqIA0KIH0NCiANCiBzdGF0aWMgaW50DQotZnVuX3NvX2Zyb21fdXRmXzMyYmUoY29uc3Qg
dW5zaWduZWQgY2hhciogcywgdW5zaWduZWQgY2hhciogbykNCitmdW5fc29fZnJvbV91dGZfMzJi
ZShyYl90cmFuc2NvZGluZyogdCwgY29uc3QgdW5zaWduZWQgY2hhciogcywgc2l6ZV90IGwsIHVu
c2lnbmVkIGNoYXIqIG8pDQogew0KICAgICBpZiAoIXNbMV0pIHsNCiAgICAgICAgIGlmIChzWzJd
PT0wICYmIHNbM108MHg4MCkgew0KQEAgLTE0Miw3ICsxNDIsNyBAQCBmdW5fc29fZnJvbV91dGZf
MzJiZShjb25zdCB1bnNpZ25lZCBjaGFyDQogfQ0KIA0KIHN0YXRpYyBpbnQNCi1mdW5fc29fdG9f
dXRmXzMyYmUoY29uc3QgdW5zaWduZWQgY2hhciogcywgdW5zaWduZWQgY2hhciogbykNCitmdW5f
c29fdG9fdXRmXzMyYmUocmJfdHJhbnNjb2RpbmcqIHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHMs
IHNpemVfdCBsLCB1bnNpZ25lZCBjaGFyKiBvKQ0KIHsNCiAgICAgb1swXSA9IDA7DQogICAgIGlm
ICghKHNbMF0mMHg4MCkpIHsNCkBAIC0xNjgsMTMgKzE2OCwxMyBAQCBmdW5fc29fdG9fdXRmXzMy
YmUoY29uc3QgdW5zaWduZWQgY2hhciogDQogfQ0KIA0KIHN0YXRpYyBpbnQNCi1mdW5fc29fZnJv
bV91dGZfMzJsZShjb25zdCB1bnNpZ25lZCBjaGFyKiBzLCB1bnNpZ25lZCBjaGFyKiBvKQ0KK2Z1
bl9zb19mcm9tX3V0Zl8zMmxlKHJiX3RyYW5zY29kaW5nKiB0LCBjb25zdCB1bnNpZ25lZCBjaGFy
KiBzLCBzaXplX3QgbCwgdW5zaWduZWQgY2hhciogbykNCiB7DQogICAgIHJldHVybiAxOw0KIH0N
CiANCiBzdGF0aWMgaW50DQotZnVuX3NvX3RvX3V0Zl8zMmxlKGNvbnN0IHVuc2lnbmVkIGNoYXIq
IHMsIHVuc2lnbmVkIGNoYXIqIG8pDQorZnVuX3NvX3RvX3V0Zl8zMmxlKHJiX3RyYW5zY29kaW5n
KiB0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzLCBzaXplX3QgbCwgdW5zaWduZWQgY2hhciogbykN
CiB7DQogICAgIHJldHVybiA0Ow0KIH0NCkBAIC0xOTEsNyArMTkxLDcgQEAgZnVuX3NvX3RvX3V0
Zl8zMmxlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIA0KIHN0YXRpYyBjb25zdCByYl90cmFuc2NvZGVy
DQogcmJfZnJvbV9VVEZfMTZCRSA9IHsNCiAgICAgIlVURi0xNkJFIiwgIlVURi04IiwgJmZyb21f
VVRGXzE2QkUsIDQsIDAsDQotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICZmdW5f
c29fZnJvbV91dGZfMTZiZQ0KKyAgICBOVUxMLCBOVUxMLCBOVUxMLCAmZnVuX3NvX2Zyb21fdXRm
XzE2YmUNCiB9Ow0KIA0KIDwlPQ0KQEAgLTIxNyw3ICsyMTcsNyBAQCByYl9mcm9tX1VURl8xNkJF
ID0gew0KIHN0YXRpYyBjb25zdCByYl90cmFuc2NvZGVyDQogcmJfdG9fVVRGXzE2QkUgPSB7DQog
ICAgICJVVEYtOCIsICJVVEYtMTZCRSIsICZ0b19VVEZfMTZCRSwgNCwgMSwNCi0gICAgTlVMTCwg
TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJmZ1bl9zb190b191dGZfMTZiZQ0KKyAgICBOVUxMLCBO
VUxMLCBOVUxMLCAmZnVuX3NvX3RvX3V0Zl8xNmJlDQogfTsNCiANCiA8JT0NCkBAIC0yMzIsMTMg
KzIzMiwxMyBAQCByYl90b19VVEZfMTZCRSA9IHsNCiBzdGF0aWMgY29uc3QgcmJfdHJhbnNjb2Rl
cg0KIHJiX2Zyb21fVVRGXzE2TEUgPSB7DQogICAgICJVVEYtMTZMRSIsICJVVEYtOCIsICZmcm9t
X1VURl8xNkxFLCA0LCAwLA0KLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmZnVu
X3NvX2Zyb21fdXRmXzE2bGUNCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgJmZ1bl9zb19mcm9tX3V0
Zl8xNmxlDQogfTsNCiANCiBzdGF0aWMgY29uc3QgcmJfdHJhbnNjb2Rlcg0KIHJiX3RvX1VURl8x
NkxFID0gew0KICAgICAiVVRGLTgiLCAiVVRGLTE2TEUiLCAmdG9fVVRGXzE2QkUsIDQsIDEsDQot
ICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICZmdW5fc29fdG9fdXRmXzE2bGUNCisg
ICAgTlVMTCwgTlVMTCwgTlVMTCwgJmZ1bl9zb190b191dGZfMTZsZQ0KIH07DQogDQogPCU9DQpA
QCAtMjU0LDEzICsyNTQsMTMgQEAgcmJfdG9fVVRGXzE2TEUgPSB7DQogc3RhdGljIGNvbnN0IHJi
X3RyYW5zY29kZXINCiByYl9mcm9tX1VURl8zMkJFID0gew0KICAgICAiVVRGLTMyQkUiLCAiVVRG
LTgiLCAmZnJvbV9VVEZfMzJCRSwgNCwgMCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwg
TlVMTCwgJmZ1bl9zb19mcm9tX3V0Zl8zMmJlDQorICAgIE5VTEwsIE5VTEwsIE5VTEwsICZmdW5f
c29fZnJvbV91dGZfMzJiZQ0KIH07DQogDQogc3RhdGljIGNvbnN0IHJiX3RyYW5zY29kZXINCiBy
Yl90b19VVEZfMzJCRSA9IHsNCiAgICAgIlVURi04IiwgIlVURi0zMkJFIiwgJnRvX1VURl8xNkJF
LCA0LCAxLA0KLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAmZnVuX3NvX3RvX3V0
Zl8zMmJlDQorICAgIE5VTEwsIE5VTEwsIE5VTEwsICZmdW5fc29fdG9fdXRmXzMyYmUNCiB9Ow0K
IA0KIDwlPQ0KQEAgLTI3NiwxMyArMjc2LDEzIEBAIHJiX3RvX1VURl8zMkJFID0gew0KIHN0YXRp
YyBjb25zdCByYl90cmFuc2NvZGVyDQogcmJfZnJvbV9VVEZfMzJMRSA9IHsNCiAgICAgIlVURi0z
MkxFIiwgIlVURi04IiwgJmZyb21fVVRGXzMyTEUsIDQsIDAsDQotICAgIE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsIE5VTEwsICZmdW5fc29fZnJvbV91dGZfMzJsZQ0KKyAgICBOVUxMLCBOVUxMLCBO
VUxMLCAmZnVuX3NvX2Zyb21fdXRmXzMybGUNCiB9Ow0KIA0KIHN0YXRpYyBjb25zdCByYl90cmFu
c2NvZGVyDQogcmJfdG9fVVRGXzMyTEUgPSB7DQogICAgICJVVEYtOCIsICJVVEYtMzJMRSIsICZ0
b19VVEZfMTZCRSwgNCwgMSwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgJmZ1
bl9zb190b191dGZfMzJsZQ0KKyAgICBOVUxMLCBOVUxMLCBOVUxMLCAmZnVuX3NvX3RvX3V0Zl8z
MmxlDQogfTsNCiANCiB2b2lkDQpJbmRleDogdHJhbnNjb2RlX2RhdGEuaA0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K
LS0tIHRyYW5zY29kZV9kYXRhLmgJKHJldmlzaW9uIDE4NDE3KQ0KKysrIHRyYW5zY29kZV9kYXRh
LmgJKHdvcmtpbmcgY29weSkNCkBAIC02Myw2ICs2Myw4IEBAIHR5cGVkZWYgc3RydWN0IHJiX3Ry
YW5zY29kaW5nIHsNCiAgICAgVkFMVUUgcnVieV9zdHJpbmdfZGVzdDsgLyogdGhlIFN0cmluZyB1
c2VkIGFzIHRoZSBjb252ZXJzaW9uIGRlc3RpbmF0aW9uLA0KIAkJCSAgICAgICBvciBOVUxMIGlm
IHNvbWV0aGluZyBlbHNlIGlzIGJlaW5nIGNvbnZlcnRlZCAqLw0KICAgICB1bnNpZ25lZCBjaGFy
ICooKmZsdXNoX2Z1bmMpKHN0cnVjdCByYl90cmFuc2NvZGluZyosIGludCwgaW50KTsNCisNCisg
ICAgdW5zaWduZWQgY2hhciBzdGF0ZWZ1bFsyNTZdOyAvKiBvcGFxdWUgZGF0YSBmb3Igc3RhdGVm
dWwgZW5jb2RpbmcgKi8NCiB9IHJiX3RyYW5zY29kaW5nOw0KIA0KIC8qIHN0YXRpYyBzdHJ1Y3R1
cmUsIG9uZSBwZXIgc3VwcG9ydGVkIGVuY29kaW5nIHBhaXIgKi8NCkBAIC03MiwxMiArNzQsMTEg
QEAgdHlwZWRlZiBzdHJ1Y3QgcmJfdHJhbnNjb2RlciB7DQogICAgIGNvbnN0IEJZVEVfTE9PS1VQ
ICpjb252X3RyZWVfc3RhcnQ7DQogICAgIGludCBtYXhfb3V0cHV0Ow0KICAgICBpbnQgZnJvbV91
dGY4Ow0KLSAgICB2b2lkICgqcHJlcHJvY2Vzc29yKShjb25zdCB1bnNpZ25lZCBjaGFyKiosIHVu
c2lnbmVkIGNoYXIqKiwgY29uc3QgdW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGNoYXIqLCBzdHJ1
Y3QgcmJfdHJhbnNjb2RpbmcgKik7DQotICAgIHZvaWQgKCpwb3N0cHJvY2Vzc29yKShjb25zdCB1
bnNpZ25lZCBjaGFyKiosIHVuc2lnbmVkIGNoYXIqKiwgY29uc3QgdW5zaWduZWQgY2hhciosIHVu
c2lnbmVkIGNoYXIqLCBzdHJ1Y3QgcmJfdHJhbnNjb2RpbmcgKik7DQotICAgIFZBTFVFICgqZnVu
Y19paSkoVkFMVUUpOyAvKiBpbmZvICAtPiBpbmZvICAgKi8NCi0gICAgVkFMVUUgKCpmdW5jX3Np
KShjb25zdCB1bnNpZ25lZCBjaGFyICopOyAvKiBzdGFydCAtPiBpbmZvICAgKi8NCi0gICAgaW50
ICgqZnVuY19pbykoVkFMVUUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsgLyogaW5mbyAgLT4gb3V0
cHV0ICovDQotICAgIGludCAoKmZ1bmNfc28pKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25l
ZCBjaGFyKik7IC8qIHN0YXJ0IC0+IG91dHB1dCAqLw0KKyAgICBWQUxVRSAoKmZ1bmNfaWkpKHJi
X3RyYW5zY29kaW5nKiwgVkFMVUUpOyAvKiBpbmZvICAtPiBpbmZvICAgKi8NCisgICAgVkFMVUUg
KCpmdW5jX3NpKShyYl90cmFuc2NvZGluZyosIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBzaXplX3Qp
OyAvKiBzdGFydCAtPiBpbmZvICAgKi8NCisgICAgaW50ICgqZnVuY19pbykocmJfdHJhbnNjb2Rp
bmcqLCBWQUxVRSwgY29uc3QgdW5zaWduZWQgY2hhciopOyAvKiBpbmZvICAtPiBvdXRwdXQgKi8N
CisgICAgaW50ICgqZnVuY19zbykocmJfdHJhbnNjb2RpbmcqLCBjb25zdCB1bnNpZ25lZCBjaGFy
Kiwgc2l6ZV90LCB1bnNpZ25lZCBjaGFyKik7IC8qIHN0YXJ0IC0+IG91dHB1dCAqLw0KKyAgICBp
bnQgKCpmaW5pc2hfZnVuYykocmJfdHJhbnNjb2RpbmcqLCB1bnNpZ25lZCBjaGFyKik7IC8qIC0+
IG91dHB1dCAqLw0KIH0gcmJfdHJhbnNjb2RlcjsNCiANCiB2b2lkIHJiX2RlY2xhcmVfdHJhbnNj
b2Rlcihjb25zdCBjaGFyICplbmMxLCBjb25zdCBjaGFyICplbmMyLCBjb25zdCBjaGFyICpsaWIp
Ow0KSW5kZXg6IHRvb2wvdHJhbnNjb2RlLXRibGdlbi5yYg0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHRvb2wv
dHJhbnNjb2RlLXRibGdlbi5yYgkocmV2aXNpb24gMTg0MTcpDQorKysgdG9vbC90cmFuc2NvZGUt
dGJsZ2VuLnJiCSh3b3JraW5nIGNvcHkpDQpAQCAtMjM0LDYgKzIzNCwxMiBAQCBjbGFzcyBBY3Rp
b25NYXANCiAgICAgICAiVU5ERUYiDQogICAgIHdoZW4gOmludmFsaWQNCiAgICAgICAiSU5WQUxJ
RCINCisgICAgd2hlbiA6ZnVuY19paQ0KKyAgICAgICJGVU5paSINCisgICAgd2hlbiA6ZnVuY19z
aQ0KKyAgICAgICJGVU5zaSINCisgICAgd2hlbiA6ZnVuY19pbw0KKyAgICAgICJGVU5pbyINCiAg
ICAgd2hlbiA6ZnVuY19zbw0KICAgICAgICJGVU5zbyINCiAgICAgd2hlbiAvXEEoWzAtOWEtZl1b
MC05YS1mXSlcei9pDQpJbmRleDogdGVzdC9ydWJ5L3Rlc3RfdHJhbnNjb2RlLnJiDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gdGVzdC9ydWJ5L3Rlc3RfdHJhbnNjb2RlLnJiCShyZXZpc2lvbiAxODQxNykNCisr
KyB0ZXN0L3J1YnkvdGVzdF90cmFuc2NvZGUucmIJKHdvcmtpbmcgY29weSkNCkBAIC0zMjEsMTIg
KzMyMSwxMyBAQCBjbGFzcyBUZXN0VHJhbnNjb2RlIDwgVGVzdDo6VW5pdDo6VGVzdENhDQogICAg
IGFzc2VydF9yYWlzZShSdW50aW1lRXJyb3IpIHsgIlx4MWIoQSIuZW5jb2RlKCJ1dGYtOCIsICJp
c28tMjAyMi1qcCIpIH0NCiAgICAgYXNzZXJ0X3JhaXNlKFJ1bnRpbWVFcnJvcikgeyAiXHgxYiQo
QSIuZW5jb2RlKCJ1dGYtOCIsICJpc28tMjAyMi1qcCIpIH0NCiAgICAgYXNzZXJ0X3JhaXNlKFJ1
bnRpbWVFcnJvcikgeyAiXHgxYiRDIi5lbmNvZGUoInV0Zi04IiwgImlzby0yMDIyLWpwIikgfQ0K
LSAgICBhc3NlcnRfcmFpc2UoUnVudGltZUVycm9yKSB7ICJceDFlIi5lbmNvZGUoInV0Zi04Iiwg
Imlzby0yMDIyLWpwIikgfQ0KKyAgICBhc3NlcnRfcmFpc2UoUnVudGltZUVycm9yKSB7ICJceDBl
Ii5lbmNvZGUoInV0Zi04IiwgImlzby0yMDIyLWpwIikgfQ0KICAgICBhc3NlcnRfcmFpc2UoUnVu
dGltZUVycm9yKSB7ICJceDgwIi5lbmNvZGUoInV0Zi04IiwgImlzby0yMDIyLWpwIikgfQ0KICAg
ICBhc3NlcnRfcmFpc2UoUnVudGltZUVycm9yKSB7ICJceDFiJChEZCFceDFiKEIiLmVuY29kZSgi
dXRmLTgiLCAiaXNvLTIwMjItanAiKSB9DQogICAgIGFzc2VydF9yYWlzZShSdW50aW1lRXJyb3Ip
IHsgIlx1OTI5OSIuZW5jb2RlKCJpc28tMjAyMi1qcCIpIH0NCi0gICAgI0BAQEAgVE9ETzogdGhl
IG5leHQgdGVzdCBzaG91bGQgYWN0dWFsbHkgZmFpbCwgYmVjYXVzZSBpc28tMjAyMi1qcCBkb2Vz
IG5vdCBpbmNsdWRlIGhhbGYtd2lkdGgga2FuYQ0KLSAgICBjaGVja19ib3RoX3dheXMoIlx1ZmY3
MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NSIsICJceDFiKEkxMjM0NVx4MWIoQiIsICJpc28tMjAy
Mi1qcCIpICMgSklTIFggMDIwMSCnqKmqqw0KKyAgICBhc3NlcnRfcmFpc2UoUnVudGltZUVycm9y
KSB7ICJcdTkyOTkiLmVuY29kZSgiaXNvLTIwMjItanAiKSB9DQorICAgIGFzc2VydF9yYWlzZShS
dW50aW1lRXJyb3IpIHsgIlx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NSIuZW5jb2RlKCJp
c28tMjAyMi1qcCIpIH0NCisgICAgYXNzZXJ0X3JhaXNlKFJ1bnRpbWVFcnJvcikgeyAiXHgxYihJ
MTIzNDVceDFiKEIiLmVuY29kZSgidXRmLTgiLCAiaXNvLTIwMjItanAiKSB9DQogICBlbmQNCiAg
IA0KICAgZGVmIHRlc3RfaXNvXzIwMjJfanBfMQ0KSW5kZXg6IHRyYW5zY29kZS5jDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gdHJhbnNjb2RlLmMJKHJldmlzaW9uIDE4NDE3KQ0KKysrIHRyYW5zY29kZS5jCSh3
b3JraW5nIGNvcHkpDQpAQCAtMjUsNTMgKzI1LDc4IEBAIHN0YXRpYyBWQUxVRSBzeW1faW52YWxp
ZCwgc3ltX3VuZGVmLCBzeW0NCiAgKiAgRGlzcGF0Y2ggZGF0YSBhbmQgbG9naWMNCiAgKi8NCiAN
Ci1zdGF0aWMgc3RfdGFibGUgKnRyYW5zY29kZXJfdGFibGUsICp0cmFuc2NvZGVyX2xpYl90YWJs
ZTsNCit0eXBlZGVmIHN0cnVjdCB7DQorICAgIGNvbnN0IGNoYXIgKmZyb207DQorICAgIGNvbnN0
IGNoYXIgKnRvOw0KKyAgICBjb25zdCBjaGFyICpsaWI7IC8qIG1heWJlIG51bGwuICBpdCBtZWFu
cyB0aGF0IGRvbid0IGxvYWQgdGhlIGxpYnJhcnkuICovDQorICAgIGNvbnN0IHJiX3RyYW5zY29k
ZXIgKnRyYW5zY29kZXI7DQorfSB0cmFuc2NvZGVyX2VudHJ5X3Q7DQogDQotI2RlZmluZSBUUkFO
U0NPREVSX0lOVEVSTkFMX1NFUEFSQVRPUiAnXHQnDQorc3RhdGljIHN0X3RhYmxlICp0cmFuc2Nv
ZGVyX3RhYmxlOw0KIA0KLXN0YXRpYyBjaGFyICoNCi10cmFuc2NvZGVyX2tleShjb25zdCBjaGFy
ICpmcm9tX2UsIGNvbnN0IGNoYXIgKnRvX2UpDQorc3RhdGljIHRyYW5zY29kZXJfZW50cnlfdCAq
DQorbWFrZV90cmFuc2NvZGVyX2VudHJ5KGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRv
KQ0KIHsNCi0gICAgaW50IHRvX2xlbiA9IHN0cmxlbih0b19lKTsNCi0gICAgaW50IGZyb21fbGVu
ID0gc3RybGVuKGZyb21fZSk7DQotICAgIGNoYXIgKmNvbnN0IGtleSA9IHhtYWxsb2ModG9fbGVu
ICsgZnJvbV9sZW4gKyAyKTsNCisgICAgc3RfZGF0YV90IHZhbDsNCisgICAgc3RfdGFibGUgKnRh
YmxlMjsNCiANCi0gICAgbWVtY3B5KGtleSwgdG9fZSwgdG9fbGVuKTsNCi0gICAgbWVtY3B5KGtl
eSArIHRvX2xlbiArIDEsIGZyb21fZSwgZnJvbV9sZW4gKyAxKTsNCi0gICAga2V5W3RvX2xlbl0g
PSBUUkFOU0NPREVSX0lOVEVSTkFMX1NFUEFSQVRPUjsNCi0gICAgcmV0dXJuIGtleTsNCisgICAg
aWYgKCFzdF9sb29rdXAodHJhbnNjb2Rlcl90YWJsZSwgKHN0X2RhdGFfdClmcm9tLCAmdmFsKSkg
ew0KKyAgICAgICAgdmFsID0gKHN0X2RhdGFfdClzdF9pbml0X3N0cmNhc2V0YWJsZSgpOw0KKyAg
ICAgICAgc3RfYWRkX2RpcmVjdCh0cmFuc2NvZGVyX3RhYmxlLCAoc3RfZGF0YV90KWZyb20sIHZh
bCk7DQorICAgIH0NCisgICAgdGFibGUyID0gKHN0X3RhYmxlICopdmFsOw0KKyAgICBpZiAoIXN0
X2xvb2t1cCh0YWJsZTIsIChzdF9kYXRhX3QpdG8sICZ2YWwpKSB7DQorICAgICAgICB0cmFuc2Nv
ZGVyX2VudHJ5X3QgKmVudHJ5ID0gQUxMT0ModHJhbnNjb2Rlcl9lbnRyeV90KTsNCisgICAgICAg
IGVudHJ5LT5mcm9tID0gZnJvbTsNCisgICAgICAgIGVudHJ5LT50byA9IHRvOw0KKyAgICAgICAg
ZW50cnktPmxpYiA9IE5VTEw7DQorICAgICAgICBlbnRyeS0+dHJhbnNjb2RlciA9IE5VTEw7DQor
ICAgICAgICB2YWwgPSAoc3RfZGF0YV90KWVudHJ5Ow0KKyAgICAgICAgc3RfYWRkX2RpcmVjdCh0
YWJsZTIsIChzdF9kYXRhX3QpdG8sIHZhbCk7DQorICAgIH0NCisgICAgcmV0dXJuICh0cmFuc2Nv
ZGVyX2VudHJ5X3QgKil2YWw7DQorfQ0KKw0KK3N0YXRpYyB0cmFuc2NvZGVyX2VudHJ5X3QgKg0K
K2dldF90cmFuc2NvZGVyX2VudHJ5KGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvKQ0K
K3sNCisgICAgc3RfZGF0YV90IHZhbDsNCisgICAgc3RfdGFibGUgKnRhYmxlMjsNCisNCisgICAg
aWYgKCFzdF9sb29rdXAodHJhbnNjb2Rlcl90YWJsZSwgKHN0X2RhdGFfdClmcm9tLCAmdmFsKSkg
ew0KKyAgICAgICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisgICAgdGFibGUyID0gKHN0X3RhYmxl
ICopdmFsOw0KKyAgICBpZiAoIXN0X2xvb2t1cCh0YWJsZTIsIChzdF9kYXRhX3QpdG8sICZ2YWwp
KSB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKyAgICByZXR1cm4gKHRyYW5zY29k
ZXJfZW50cnlfdCAqKXZhbDsNCiB9DQogDQogdm9pZA0KIHJiX3JlZ2lzdGVyX3RyYW5zY29kZXIo
Y29uc3QgcmJfdHJhbnNjb2RlciAqdHIpDQogew0KLSAgICBzdF9kYXRhX3QgaywgdmFsID0gMDsN
CiAgICAgY29uc3QgY2hhciAqY29uc3QgZnJvbV9lID0gdHItPmZyb21fZW5jb2Rpbmc7DQogICAg
IGNvbnN0IGNoYXIgKmNvbnN0IHRvX2UgPSB0ci0+dG9fZW5jb2Rpbmc7DQotICAgIGNoYXIgKmNv
bnN0IGtleSA9IHRyYW5zY29kZXJfa2V5KGZyb21fZSwgdG9fZSk7DQogDQotICAgIGlmIChzdF9s
b29rdXAodHJhbnNjb2Rlcl90YWJsZSwgKHN0X2RhdGFfdClrZXksICZ2YWwpKSB7DQotCXhmcmVl
KGtleSk7DQorICAgIHRyYW5zY29kZXJfZW50cnlfdCAqZW50cnk7DQorDQorICAgIGVudHJ5ID0g
bWFrZV90cmFuc2NvZGVyX2VudHJ5KGZyb21fZSwgdG9fZSk7DQorICAgIGlmIChlbnRyeS0+dHJh
bnNjb2Rlcikgew0KIAlyYl9yYWlzZShyYl9lQXJnRXJyb3IsICJ0cmFuc2NvZGVyIGZyb20gJXMg
dG8gJXMgaGFzIGJlZW4gYWxyZWFkeSByZWdpc3RlcmVkIiwNCiAJCSBmcm9tX2UsIHRvX2UpOw0K
ICAgICB9DQotICAgIGsgPSAoc3RfZGF0YV90KWtleTsNCi0gICAgaWYgKHN0X2RlbGV0ZSh0cmFu
c2NvZGVyX2xpYl90YWJsZSwgJmssICZ2YWwpKSB7DQotCXhmcmVlKChjaGFyICopayk7DQotICAg
IH0NCi0gICAgc3RfaW5zZXJ0KHRyYW5zY29kZXJfdGFibGUsIChzdF9kYXRhX3Qpa2V5LCAoc3Rf
ZGF0YV90KXRyKTsNCisNCisgICAgZW50cnktPnRyYW5zY29kZXIgPSB0cjsNCiB9DQogDQogc3Rh
dGljIHZvaWQNCiBkZWNsYXJlX3RyYW5zY29kZXIoY29uc3QgY2hhciAqdG8sIGNvbnN0IGNoYXIg
KmZyb20sIGNvbnN0IGNoYXIgKmxpYikNCiB7DQotICAgIGNvbnN0IGNoYXIgKmNvbnN0IGtleSA9
IHRyYW5zY29kZXJfa2V5KHRvLCBmcm9tKTsNCi0gICAgc3RfZGF0YV90IGsgPSAoc3RfZGF0YV90
KWtleSwgdmFsOw0KKyAgICB0cmFuc2NvZGVyX2VudHJ5X3QgKmVudHJ5Ow0KIA0KLSAgICBpZiAo
c3RfZGVsZXRlKHRyYW5zY29kZXJfbGliX3RhYmxlLCAmaywgJnZhbCkpIHsNCi0JeGZyZWUoKGNo
YXIgKilrKTsNCi0gICAgfQ0KLSAgICBzdF9pbnNlcnQodHJhbnNjb2Rlcl9saWJfdGFibGUsIChz
dF9kYXRhX3Qpa2V5LCAoc3RfZGF0YV90KWxpYik7DQorICAgIGVudHJ5ID0gbWFrZV90cmFuc2Nv
ZGVyX2VudHJ5KGZyb20sIHRvKTsNCisgICAgZW50cnktPmxpYiA9IGxpYjsNCiB9DQogDQogI2Rl
ZmluZSBNQVhfVFJBTlNDT0RFUl9MSUJOQU1FX0xFTiA2NA0KQEAgLTkwLDM4ICsxMTUsMTY2IEBA
IHJiX2RlY2xhcmVfdHJhbnNjb2Rlcihjb25zdCBjaGFyICplbmMxLCANCiANCiAjZGVmaW5lIGVu
Y29kaW5nX2VxdWFsKGVuYzEsIGVuYzIpIChTVFJDQVNFQ01QKGVuYzEsIGVuYzIpID09IDApDQog
DQordHlwZWRlZiBzdHJ1Y3Qgc2VhcmNoX3BhdGhfcXVldWVfdGFnIHsNCisgICAgc3RydWN0IHNl
YXJjaF9wYXRoX3F1ZXVlX3RhZyAqbmV4dDsNCisgICAgY29uc3QgY2hhciAqZW5jOw0KK30gc2Vh
cmNoX3BhdGhfcXVldWVfdDsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICAgIHN0X3RhYmxlICp2
aXNpdGVkOw0KKyAgICBzZWFyY2hfcGF0aF9xdWV1ZV90ICpxdWV1ZTsNCisgICAgc2VhcmNoX3Bh
dGhfcXVldWVfdCAqKnF1ZXVlX2xhc3RfcHRyOw0KKyAgICBjb25zdCBjaGFyICpiYXNlX2VuYzsN
Cit9IHNlYXJjaF9wYXRoX2Jmc190Ow0KKw0KK3N0YXRpYyBpbnQNCit0cmFuc2NvZGVfc2VhcmNo
X3BhdGhfaShzdF9kYXRhX3Qga2V5LCBzdF9kYXRhX3QgdmFsLCBzdF9kYXRhX3QgYXJnKQ0KK3sN
CisgICAgY29uc3QgY2hhciAqdG8gPSAoY29uc3QgY2hhciAqKWtleTsNCisgICAgc2VhcmNoX3Bh
dGhfYmZzX3QgKmJmcyA9IChzZWFyY2hfcGF0aF9iZnNfdCAqKWFyZzsNCisgICAgc2VhcmNoX3Bh
dGhfcXVldWVfdCAqcTsNCisNCisgICAgaWYgKHN0X2xvb2t1cChiZnMtPnZpc2l0ZWQsIChzdF9k
YXRhX3QpdG8sICZ2YWwpKSB7DQorICAgICAgICByZXR1cm4gU1RfQ09OVElOVUU7DQorICAgIH0N
CisNCisgICAgcSA9IEFMTE9DKHNlYXJjaF9wYXRoX3F1ZXVlX3QpOw0KKyAgICBxLT5lbmMgPSB0
bzsNCisgICAgcS0+bmV4dCA9IE5VTEw7DQorICAgICpiZnMtPnF1ZXVlX2xhc3RfcHRyID0gcTsN
CisgICAgYmZzLT5xdWV1ZV9sYXN0X3B0ciA9ICZxLT5uZXh0Ow0KKw0KKyAgICBzdF9hZGRfZGly
ZWN0KGJmcy0+dmlzaXRlZCwgKHN0X2RhdGFfdCl0bywgKHN0X2RhdGFfdCliZnMtPmJhc2VfZW5j
KTsNCisgICAgcmV0dXJuIFNUX0NPTlRJTlVFOw0KK30NCisNCitzdGF0aWMgaW50DQordHJhbnNj
b2RlX3NlYXJjaF9wYXRoKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLA0KKyAgICB2
b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCBpbnQgZGVw
dGgsIHZvaWQgKmFyZyksDQorICAgIHZvaWQgKmFyZykNCit7DQorICAgIHNlYXJjaF9wYXRoX2Jm
c190IGJmczsNCisgICAgc2VhcmNoX3BhdGhfcXVldWVfdCAqcTsNCisgICAgc3RfZGF0YV90IHZh
bDsNCisgICAgc3RfdGFibGUgKnRhYmxlMjsNCisgICAgaW50IGZvdW5kOw0KKw0KKyAgICBxID0g
QUxMT0Moc2VhcmNoX3BhdGhfcXVldWVfdCk7DQorICAgIHEtPmVuYyA9IGZyb207DQorICAgIHEt
Pm5leHQgPSBOVUxMOw0KKyAgICBiZnMucXVldWVfbGFzdF9wdHIgPSAmcS0+bmV4dDsNCisgICAg
YmZzLnF1ZXVlID0gcTsNCisNCisgICAgYmZzLnZpc2l0ZWQgPSBzdF9pbml0X3N0cmNhc2V0YWJs
ZSgpOw0KKyAgICBzdF9hZGRfZGlyZWN0KGJmcy52aXNpdGVkLCAoc3RfZGF0YV90KWZyb20sIChz
dF9kYXRhX3QpTlVMTCk7DQorDQorICAgIHdoaWxlIChiZnMucXVldWUpIHsNCisgICAgICAgIHEg
PSBiZnMucXVldWU7DQorICAgICAgICBiZnMucXVldWUgPSBxLT5uZXh0Ow0KKyAgICAgICAgaWYg
KCFiZnMucXVldWUpDQorICAgICAgICAgICAgYmZzLnF1ZXVlX2xhc3RfcHRyID0gJmJmcy5xdWV1
ZTsNCisNCisgICAgICAgIGlmICghc3RfbG9va3VwKHRyYW5zY29kZXJfdGFibGUsIChzdF9kYXRh
X3QpcS0+ZW5jLCAmdmFsKSkgew0KKyAgICAgICAgICAgIHhmcmVlKHEpOw0KKyAgICAgICAgICAg
IGNvbnRpbnVlOw0KKyAgICAgICAgfQ0KKyAgICAgICAgdGFibGUyID0gKHN0X3RhYmxlICopdmFs
Ow0KKw0KKyAgICAgICAgaWYgKHN0X2xvb2t1cCh0YWJsZTIsIChzdF9kYXRhX3QpdG8sICZ2YWwp
KSB7DQorICAgICAgICAgICAgc3RfYWRkX2RpcmVjdChiZnMudmlzaXRlZCwgKHN0X2RhdGFfdCl0
bywgKHN0X2RhdGFfdClxLT5lbmMpOw0KKyAgICAgICAgICAgIHhmcmVlKHEpOw0KKyAgICAgICAg
ICAgIGZvdW5kID0gMTsNCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7DQorICAgICAgICB9DQor
DQorICAgICAgICBiZnMuYmFzZV9lbmMgPSBxLT5lbmM7DQorICAgICAgICBzdF9mb3JlYWNoKHRh
YmxlMiwgdHJhbnNjb2RlX3NlYXJjaF9wYXRoX2ksIChzdF9kYXRhX3QpJmJmcyk7DQorICAgICAg
ICBiZnMuYmFzZV9lbmMgPSBOVUxMOw0KKw0KKyAgICAgICAgeGZyZWUocSk7DQorICAgIH0NCisg
ICAgZm91bmQgPSAwOw0KKw0KK2NsZWFudXA6DQorICAgIHdoaWxlIChiZnMucXVldWUpIHsNCisg
ICAgICAgIHEgPSBiZnMucXVldWU7DQorICAgICAgICBiZnMucXVldWUgPSBxLT5uZXh0Ow0KKyAg
ICAgICAgeGZyZWUocSk7DQorICAgIH0NCisNCisgICAgaWYgKGZvdW5kKSB7DQorICAgICAgICBj
b25zdCBjaGFyICplbmMgPSB0bzsNCisgICAgICAgIGludCBkZXB0aCA9IDA7DQorICAgICAgICB3
aGlsZSAoMSkgew0KKyAgICAgICAgICAgIHN0X2xvb2t1cChiZnMudmlzaXRlZCwgKHN0X2RhdGFf
dCllbmMsICZ2YWwpOw0KKyAgICAgICAgICAgIGlmICghdmFsKQ0KKyAgICAgICAgICAgICAgICBi
cmVhazsNCisgICAgICAgICAgICBkZXB0aCsrOw0KKyAgICAgICAgICAgIGVuYyA9IChjb25zdCBj
aGFyICopdmFsOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZW5jID0gdG87DQorICAgICAgICB3aGls
ZSAoMSkgew0KKyAgICAgICAgICAgIHN0X2xvb2t1cChiZnMudmlzaXRlZCwgKHN0X2RhdGFfdCll
bmMsICZ2YWwpOw0KKyAgICAgICAgICAgIGlmICghdmFsKQ0KKyAgICAgICAgICAgICAgICBicmVh
azsNCisgICAgICAgICAgICBjYWxsYmFjaygoY29uc3QgY2hhciAqKXZhbCwgZW5jLCAtLWRlcHRo
LCBhcmcpOw0KKyAgICAgICAgICAgIGVuYyA9IChjb25zdCBjaGFyICopdmFsOw0KKyAgICAgICAg
fQ0KKyAgICB9DQorDQorICAgIHN0X2ZyZWVfdGFibGUoYmZzLnZpc2l0ZWQpOw0KKw0KKyAgICBy
ZXR1cm4gZm91bmQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQordHJhbnNjb2RlX2Rpc3BhdGNoX2Ni
KGNvbnN0IGNoYXIgKmZyb20sIGNvbnN0IGNoYXIgKnRvLCBpbnQgZGVwdGgsIHZvaWQgKmFyZykN
Cit7DQorICAgIGNvbnN0IHJiX3RyYW5zY29kZXIgKipmaXJzdF90cmFuc2NvZGVyX3B0ciA9IChj
b25zdCByYl90cmFuc2NvZGVyICoqKWFyZzsNCisNCisgICAgdHJhbnNjb2Rlcl9lbnRyeV90ICpl
bnRyeTsNCisNCisgICAgaWYgKCEqZmlyc3RfdHJhbnNjb2Rlcl9wdHIpDQorICAgICAgICByZXR1
cm47DQorDQorICAgIGVudHJ5ID0gZ2V0X3RyYW5zY29kZXJfZW50cnkoZnJvbSwgdG8pOw0KKyAg
ICBpZiAoIWVudHJ5KQ0KKyAgICAgICAgZ290byBmYWlsZWQ7DQorDQorICAgIGlmICghZW50cnkt
PnRyYW5zY29kZXIgJiYgZW50cnktPmxpYikgew0KKyAgICAgICAgY29uc3QgY2hhciAqbGliID0g
ZW50cnktPmxpYjsNCisgICAgICAgIGludCBsZW4gPSBzdHJsZW4obGliKTsNCisgICAgICAgIGNo
YXIgcGF0aFtzaXplb2YodHJhbnNjb2Rlcl9saWJfcHJlZml4KSArIE1BWF9UUkFOU0NPREVSX0xJ
Qk5BTUVfTEVOXTsNCisNCisgICAgICAgIGVudHJ5LT5saWIgPSBOVUxMOw0KKw0KKyAgICAgICAg
aWYgKGxlbiA+IE1BWF9UUkFOU0NPREVSX0xJQk5BTUVfTEVOKSBnb3RvIGZhaWxlZDsNCisgICAg
ICAgIG1lbWNweShwYXRoLCB0cmFuc2NvZGVyX2xpYl9wcmVmaXgsIHNpemVvZih0cmFuc2NvZGVy
X2xpYl9wcmVmaXgpIC0gMSk7DQorICAgICAgICBtZW1jcHkocGF0aCArIHNpemVvZih0cmFuc2Nv
ZGVyX2xpYl9wcmVmaXgpIC0gMSwgbGliLCBsZW4gKyAxKTsNCisgICAgICAgIGlmICghcmJfcmVx
dWlyZShwYXRoKSkgZ290byBmYWlsZWQ7DQorICAgIH0NCisgICAgaWYgKCFlbnRyeS0+dHJhbnNj
b2RlcikNCisgICAgICAgIGdvdG8gZmFpbGVkOw0KKw0KKyAgICBpZiAoZGVwdGggPT0gMCkNCisg
ICAgICAgICpmaXJzdF90cmFuc2NvZGVyX3B0ciA9IGVudHJ5LT50cmFuc2NvZGVyOw0KKw0KKyAg
ICByZXR1cm47DQorDQorZmFpbGVkOg0KKyAgICAqZmlyc3RfdHJhbnNjb2Rlcl9wdHIgPSBOVUxM
Ow0KKyAgICByZXR1cm47DQorfQ0KKw0KIHN0YXRpYyBjb25zdCByYl90cmFuc2NvZGVyICoNCiB0
cmFuc2NvZGVfZGlzcGF0Y2goY29uc3QgY2hhciAqZnJvbV9lbmNvZGluZywgY29uc3QgY2hhciAq
dG9fZW5jb2RpbmcpDQogew0KLSAgICBjaGFyICpjb25zdCBrZXkgPSB0cmFuc2NvZGVyX2tleShm
cm9tX2VuY29kaW5nLCB0b19lbmNvZGluZyk7DQotICAgIHN0X2RhdGFfdCBrLCB2YWwgPSAwOw0K
KyAgICBjb25zdCByYl90cmFuc2NvZGVyICpmaXJzdF90cmFuc2NvZGVyID0gKHJiX3RyYW5zY29k
ZXIgKikxOw0KIA0KLSAgICB3aGlsZSAoIXN0X2xvb2t1cCh0cmFuc2NvZGVyX3RhYmxlLCAoayA9
IChzdF9kYXRhX3Qpa2V5KSwgJnZhbCkgJiYNCi0JICAgc3RfZGVsZXRlKHRyYW5zY29kZXJfbGli
X3RhYmxlLCAmaywgJnZhbCkpIHsNCi0JY29uc3QgY2hhciAqY29uc3QgbGliID0gKGNvbnN0IGNo
YXIgKil2YWw7DQotCWludCBsZW4gPSBzdHJsZW4obGliKTsNCi0JY2hhciBwYXRoW3NpemVvZih0
cmFuc2NvZGVyX2xpYl9wcmVmaXgpICsgTUFYX1RSQU5TQ09ERVJfTElCTkFNRV9MRU5dOw0KLQ0K
LQl4ZnJlZSgoY2hhciAqKWspOw0KLQlpZiAobGVuID4gTUFYX1RSQU5TQ09ERVJfTElCTkFNRV9M
RU4pIHJldHVybiBOVUxMOw0KLQltZW1jcHkocGF0aCwgdHJhbnNjb2Rlcl9saWJfcHJlZml4LCBz
aXplb2YodHJhbnNjb2Rlcl9saWJfcHJlZml4KSAtIDEpOw0KLQltZW1jcHkocGF0aCArIHNpemVv
Zih0cmFuc2NvZGVyX2xpYl9wcmVmaXgpIC0gMSwgbGliLCBsZW4gKyAxKTsNCi0JaWYgKCFyYl9y
ZXF1aXJlKHBhdGgpKSByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXZhbCkgew0KLQlp
ZiAoIXN0X2xvb2t1cCh0cmFuc2NvZGVyX3RhYmxlLCAoc3RfZGF0YV90KWtleSwgJnZhbCkpIHsN
Ci0JICAgIHhmcmVlKGtleSk7DQotCSAgICAvKiBtdWx0aXN0ZXAgbG9naWMsIHZpYSBVVEYtOCAq
Lw0KLQkgICAgaWYgKCFlbmNvZGluZ19lcXVhbChmcm9tX2VuY29kaW5nLCAiVVRGLTgiKSAmJg0K
LQkJIWVuY29kaW5nX2VxdWFsKHRvX2VuY29kaW5nLCAiVVRGLTgiKSAmJg0KLQkJdHJhbnNjb2Rl
X2Rpc3BhdGNoKCJVVEYtOCIsIHRvX2VuY29kaW5nKSkgeyAgLyogY2hlY2sgdGhhdCB3ZSBoYXZl
IGEgc2Vjb25kIHN0ZXAgKi8NCi0JCXJldHVybiB0cmFuc2NvZGVfZGlzcGF0Y2goZnJvbV9lbmNv
ZGluZywgIlVURi04Iik7IC8qIHJldHVybiBmaXJzdCBzdGVwICovDQotCSAgICB9DQotCSAgICBy
ZXR1cm4gTlVMTDsNCi0JfQ0KKyAgICBpZiAodHJhbnNjb2RlX3NlYXJjaF9wYXRoKGZyb21fZW5j
b2RpbmcsIHRvX2VuY29kaW5nLCB0cmFuc2NvZGVfZGlzcGF0Y2hfY2IsICh2b2lkICopJmZpcnN0
X3RyYW5zY29kZXIpKSB7DQorICAgICAgICByZXR1cm4gZmlyc3RfdHJhbnNjb2RlcjsNCiAgICAg
fQ0KLSAgICB4ZnJlZShrZXkpOw0KLSAgICByZXR1cm4gKHJiX3RyYW5zY29kZXIgKil2YWw7DQor
ICAgIHJldHVybiBOVUxMOw0KIH0NCiANCiBzdGF0aWMgdm9pZA0KQEAgLTI0NSwxNyArMzk4LDE3
IEBAIHRyYW5zY29kZV9sb29wKGNvbnN0IHVuc2lnbmVkIGNoYXIgKippbl8NCiAJICAgICpvdXRf
cCsrID0gZ2V0QlQzKG5leHRfaW5mbyk7DQogCSAgICBjb250aW51ZTsNCiAJICBjYXNlIEZVTmlp
Og0KLQkgICAgbmV4dF9pbmZvID0gKFZBTFVFKSgqbXlfdHJhbnNjb2Rlci0+ZnVuY19paSkobmV4
dF9pbmZvKTsNCisJICAgIG5leHRfaW5mbyA9IChWQUxVRSkoKm15X3RyYW5zY29kZXItPmZ1bmNf
aWkpKG15X3RyYW5zY29kaW5nLCBuZXh0X2luZm8pOw0KIAkgICAgZ290byBmb2xsb3dfaW5mbzsN
CiAJICBjYXNlIEZVTnNpOg0KLQkgICAgbmV4dF9pbmZvID0gKFZBTFVFKSgqbXlfdHJhbnNjb2Rl
ci0+ZnVuY19zaSkoY2hhcl9zdGFydCk7DQorCSAgICBuZXh0X2luZm8gPSAoVkFMVUUpKCpteV90
cmFuc2NvZGVyLT5mdW5jX3NpKShteV90cmFuc2NvZGluZywgY2hhcl9zdGFydCwgKHNpemVfdCko
aW5fcC1jaGFyX3N0YXJ0KSk7DQogCSAgICBnb3RvIGZvbGxvd19pbmZvOw0KIAkgICAgYnJlYWs7
DQogCSAgY2FzZSBGVU5pbzoNCi0JICAgIG91dF9wICs9IChWQUxVRSkoKm15X3RyYW5zY29kZXIt
PmZ1bmNfaW8pKG5leHRfaW5mbywgb3V0X3ApOw0KKwkgICAgb3V0X3AgKz0gKFZBTFVFKSgqbXlf
dHJhbnNjb2Rlci0+ZnVuY19pbykobXlfdHJhbnNjb2RpbmcsIG5leHRfaW5mbywgb3V0X3ApOw0K
IAkgICAgYnJlYWs7DQogCSAgY2FzZSBGVU5zbzoNCi0JICAgIG91dF9wICs9IChWQUxVRSkoKm15
X3RyYW5zY29kZXItPmZ1bmNfc28pKGNoYXJfc3RhcnQsIG91dF9wKTsNCisJICAgIG91dF9wICs9
IChWQUxVRSkoKm15X3RyYW5zY29kZXItPmZ1bmNfc28pKG15X3RyYW5zY29kaW5nLCBjaGFyX3N0
YXJ0LCAoc2l6ZV90KShpbl9wLWNoYXJfc3RhcnQpLCBvdXRfcCk7DQogCSAgICBicmVhazsNCiAJ
ICBjYXNlIElOVkFMSUQ6DQogCSAgICBnb3RvIGludmFsaWQ7DQpAQCAtMjkwLDYgKzQ0MywxNiBA
QCB0cmFuc2NvZGVfbG9vcChjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5fDQogCWNvbnRpbnVlOw0K
ICAgICB9DQogICAgIC8qIGNsZWFudXAgKi8NCisgICAgaWYgKG15X3RyYW5zY29kZXItPmZpbmlz
aF9mdW5jKSB7DQorCWlmIChvdXRfcCA+PSBvdXRfcykgew0KKwkgICAgaW50IGxlbiA9IChvdXRf
cCAtICpvdXRfcG9zKTsNCisJICAgIGludCBuZXdfbGVuID0gKGxlbiArIG15X3RyYW5zY29kZXIt
Pm1heF9vdXRwdXQpICogMjsNCisJICAgICpvdXRfcG9zID0gKCpteV90cmFuc2NvZGluZy0+Zmx1
c2hfZnVuYykobXlfdHJhbnNjb2RpbmcsIGxlbiwgbmV3X2xlbik7DQorCSAgICBvdXRfcCA9ICpv
dXRfcG9zICsgbGVuOw0KKwkgICAgb3V0X3MgPSAqb3V0X3BvcyArIG5ld19sZW4gLSBteV90cmFu
c2NvZGVyLT5tYXhfb3V0cHV0Ow0KKwl9DQorICAgICAgICBvdXRfcCArPSBteV90cmFuc2NvZGVy
LT5maW5pc2hfZnVuYyhteV90cmFuc2NvZGluZywgb3V0X3ApOw0KKyAgICB9DQogICAgICppbl9w
b3MgID0gaW5fcDsNCiAgICAgKm91dF9wb3MgPSBvdXRfcDsNCiB9DQpAQCAtNDAxLDIxICs1NjQs
OCBAQCBzdHJfdHJhbnNjb2RlKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMDQogCX0NCiANCiAJ
bXlfdHJhbnNjb2RpbmcudHJhbnNjb2RlciA9IG15X3RyYW5zY29kZXI7DQorICAgICAgICBtZW1z
ZXQobXlfdHJhbnNjb2Rpbmcuc3RhdGVmdWwsIDAsIHNpemVvZihteV90cmFuc2NvZGluZy5zdGF0
ZWZ1bCkpOw0KIA0KLQlpZiAobXlfdHJhbnNjb2Rlci0+cHJlcHJvY2Vzc29yKSB7DQotCSAgICBm
cm9tcCA9IHNwID0gKHVuc2lnbmVkIGNoYXIgKilSU1RSSU5HX1BUUihzdHIpOw0KLQkgICAgc2xl
biA9IFJTVFJJTkdfTEVOKHN0cik7DQotCSAgICBibGVuID0gc2xlbiArIDMwOyAvKiBsZW4gKyBt
YXJnaW4gKi8NCi0JICAgIGRlc3QgPSByYl9zdHJfdG1wX25ldyhibGVuKTsNCi0JICAgIGJwID0g
KHVuc2lnbmVkIGNoYXIgKilSU1RSSU5HX1BUUihkZXN0KTsNCi0JICAgIG15X3RyYW5zY29kaW5n
LnJ1Ynlfc3RyaW5nX2Rlc3QgPSBkZXN0Ow0KLQkgICAgKCpteV90cmFuc2NvZGVyLT5wcmVwcm9j
ZXNzb3IpKCZmcm9tcCwgJmJwLCAoc3Arc2xlbiksIChicCtibGVuKSwgJm15X3RyYW5zY29kaW5n
KTsNCi0JICAgIGlmIChmcm9tcCAhPSBzcCtzbGVuKSB7DQotCQlyYl9yYWlzZShyYl9lQXJnRXJy
b3IsICJub3QgZnVsbHkgY29udmVydGVkLCAlIlBSSWRQVFJESUZGIiBieXRlcyBsZWZ0Iiwgc3Ar
c2xlbi1mcm9tcCk7DQotCSAgICB9DQotCSAgICByYl9zdHJfc2V0X2xlbihkZXN0LCAoY2hhciAq
KWJwIC0gUlNUUklOR19QVFIoZGVzdCkpOw0KLQkgICAgc3RyID0gZGVzdDsNCi0JfQ0KIAlmcm9t
cCA9IHNwID0gKHVuc2lnbmVkIGNoYXIgKilSU1RSSU5HX1BUUihzdHIpOw0KIAlzbGVuID0gUlNU
UklOR19MRU4oc3RyKTsNCiAJYmxlbiA9IHNsZW4gKyAzMDsgLyogbGVuICsgbWFyZ2luICovDQpA
QCAtNDMxLDIxICs1ODEsNiBAQCBzdHJfdHJhbnNjb2RlKGludCBhcmdjLCBWQUxVRSAqYXJndiwg
VkFMDQogCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopUlNUUklOR19QVFIoZGVzdCk7DQogCSpicCA9
ICdcMCc7DQogCXJiX3N0cl9zZXRfbGVuKGRlc3QsIGJwIC0gYnVmKTsNCi0JaWYgKG15X3RyYW5z
Y29kZXItPnBvc3Rwcm9jZXNzb3IpIHsNCi0JICAgIHN0ciA9IGRlc3Q7DQotCSAgICBmcm9tcCA9
IHNwID0gKHVuc2lnbmVkIGNoYXIgKilSU1RSSU5HX1BUUihzdHIpOw0KLQkgICAgc2xlbiA9IFJT
VFJJTkdfTEVOKHN0cik7DQotCSAgICBibGVuID0gc2xlbiArIDMwOyAvKiBsZW4gKyBtYXJnaW4g
Ki8NCi0JICAgIGRlc3QgPSByYl9zdHJfdG1wX25ldyhibGVuKTsNCi0JICAgIGJwID0gKHVuc2ln
bmVkIGNoYXIgKilSU1RSSU5HX1BUUihkZXN0KTsNCi0JICAgIG15X3RyYW5zY29kaW5nLnJ1Ynlf
c3RyaW5nX2Rlc3QgPSBkZXN0Ow0KLQkgICAgKCpteV90cmFuc2NvZGVyLT5wb3N0cHJvY2Vzc29y
KSgmZnJvbXAsICZicCwgKHNwK3NsZW4pLCAoYnArYmxlbiksICZteV90cmFuc2NvZGluZyk7DQot
CSAgICBpZiAoZnJvbXAgIT0gc3Arc2xlbikgew0KLQkJcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAi
bm90IGZ1bGx5IGNvbnZlcnRlZCwgJSJQUklkUFRSRElGRiIgYnl0ZXMgbGVmdCIsIHNwK3NsZW4t
ZnJvbXApOw0KLQkgICAgfQ0KLQkgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKilSU1RSSU5HX1BU
UihkZXN0KTsNCi0JICAgIHJiX3N0cl9zZXRfbGVuKGRlc3QsIGJwIC0gYnVmKTsNCi0JfQ0KIA0K
IAlpZiAoZW5jb2RpbmdfZXF1YWwobXlfdHJhbnNjb2Rlci0+dG9fZW5jb2RpbmcsIHRvX2UpKSB7
DQogCSAgICBmaW5hbF9lbmNvZGluZyA9IDE7DQpAQCAtNTQxLDcgKzY3Niw2IEBAIHZvaWQNCiBJ
bml0X3RyYW5zY29kZSh2b2lkKQ0KIHsNCiAgICAgdHJhbnNjb2Rlcl90YWJsZSA9IHN0X2luaXRf
c3RyY2FzZXRhYmxlKCk7DQotICAgIHRyYW5zY29kZXJfbGliX3RhYmxlID0gc3RfaW5pdF9zdHJj
YXNldGFibGUoKTsNCiANCiAgICAgc3ltX2ludmFsaWQgPSBJRDJTWU0ocmJfaW50ZXJuKCJpbnZh
bGlkIikpOw0KICAgICBzeW1fdW5kZWYgPSBJRDJTWU0ocmJfaW50ZXJuKCJ1bmRlZiIpKTsNCi0t
IA0KW5NjkoYgk05dW4K9gsiCqSCCoIKrguddW1RhbmFrYSBBa2lyYV0NCg==