ZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2xpYmxvZy5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbGlibG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFjYTI2MQotLS0gL2Rldi9udWxsCisrKyBiL21idGsvaW5jbHVkZS9seW5xL2xpYmxvZy5oCkBAIC0wLDAgKzEsMzYgQEAKKyNpZm5kZWYgX19MSUJMT0dfSF9fCisjZGVmaW5lIF9fTElCTE9HX0hfXworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiBlbnVtCit7CisgICAgTE9HX1VOU0VUID0gLTEsCisgICAgTE9HX1ZFUkJPU0UgPSAwLAorICAgIExPR19FUlJPUiwgIAorICAgIExPR19XQVJOSU5HLAorICAgIExPR19JTkZPLAorICAgIExPR19ERUJVRywgIAorICAgIExPR19MRVZFTF9NQVgKK31sb2dfbGV2ZWxfZW51bTsKKwordm9pZCBseW5xX2xvZ19nbG9iYWxfb3V0cHV0KGxvZ19sZXZlbF9lbnVtIExldmVsLGNvbnN0IGNoYXIgKmZvcm1hdCwuLi4pOwordm9pZCBseW5xX2xvZ19jb25maWd1cmF0aW9uX2luaXQoY29uc3QgY2hhciAqbG9nX25hbWUpOworY29uc3QgY2hhciogbHlucV9yZWFkX2xvZ192ZXJzaW9uKCk7CisKKy8vbG9nIGxldmVsIGFwaQoraW50IGx5bnFfc2V0X2xvZ19sZXZlbChjb25zdCBjaGFyICogbW9kdWxlX25hbWUsIGxvZ19sZXZlbF9lbnVtIGxldmVsKTsKK2ludCBseW5xX2dldF9sb2dfbGV2ZWwoY29uc3QgY2hhciAqIG1vZHVsZV9uYW1lLCBsb2dfbGV2ZWxfZW51bSAqbGV2ZWwpOworaW50IGx5bnFfc2V0X3NwZWNpYWxfbG9nX2xldmVsKGNvbnN0IGNoYXIgKiBleGVfbmFtZSwgY29uc3QgY2hhciAqIG1vZHVsZV9uYW1lLCBsb2dfbGV2ZWxfZW51bSBsZXZlbCk7CitpbnQgbHlucV9nZXRfc3BlY2lhbF9sb2dfbGV2ZWwoY29uc3QgY2hhciAqIGV4ZV9uYW1lLCBjb25zdCBjaGFyICogbW9kdWxlX25hbWUsIGxvZ19sZXZlbF9lbnVtICpsZXZlbCk7CitpbnQgbHlucV9ub3RpZnlfcmVjYWxjX2xvZ19sZXZlbChwaWRfdCBwaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8vX19MT0dfSF9fCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9saWJseW5xLWF0LWNvbW1vbi5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbGlibHlucS1hdC1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Y2E4Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbGlibHlucS1hdC1jb21tb24uaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIExJQkxZTlFfQVRfQ09NTU9OX0gKKyNkZWZpbmUgTElCTFlOUV9BVF9DT01NT05fSCAxCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCAoICpseW5xX2F0c3ZjX2luY2IgKSggY29uc3QgY2hhciAqaW5wdXQsY29uc3QgaW50IGxlbmd0aCk7Cit0eXBlZGVmIHZvaWQgKCAqbHlucV9hdHN2Y19vdXRjYiApKGNoYXIgKm91dHB1dCwgaW50IG91dF9tYXhfc2l6ZSwgaW50IG1vZGUpOworbHlucV9hdHN2Y19pbmNiIGx5bnFfcmVnaXN0ZXJfYXRfY29tbW9uKGx5bnFfYXRzdmNfb3V0Y2Igb3V0X2NiKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnEtYWRjLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLWFkYy5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhZjRkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLWFkYy5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgZW51bSBBRENfQ0hBTk5FTF9FTlVNCit7CisgICAgUUFEQ19OT05FID0gMCwKKyAgICBBREMwID0xLAorICAgIEFEQzEgPTIsCisgICAgQURDMiA9MywKKyAgICBRQURDX0VORAorfUFEQ19DSEFOTkVMX0U7CisKK2ludCBxc2VyX2FkY19zaG93KEFEQ19DSEFOTkVMX0UgcWFkYyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xLWdwaW8uaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnEtZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhZjlmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLWdwaW8uaApAQCAtMCwwICsxLDI5IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIE1BWF9HUElPX05VTSAgICAgICAgKDIwMCkKK3N0YXRpYyB2b2lkICp0ZXN0X2dwaW9faGFuZGxlW01BWF9HUElPX05VTV09e05VTEx9OworCitpbnQgbHlucV9ncGlvX2luaXQoaW50IGdwaW8sIGludCBkaXJlY3Rpb24sIGludCB2YWx1ZSwgaW50IHB1bGxzZWwpOworCitpbnQgbHlucV9ncGlvX2RlaW5pdChpbnQgZ3Bpbyk7CisKK2ludCBseW5xX2dwaW9fZGlyZWN0aW9uX3NldChpbnQgZ3BpbywgaW50IGRpcmVjdGlvbik7CisKK2ludCBseW5xX2dwaW9fdmFsdWVfc2V0KGludCBncGlvLCBpbnQgdmFsdWUpOworCitpbnQgbHlucV9ncGlvX3ZhbHVlX2dldChpbnQgZ3Bpbyk7CisKK2ludCBseW5xX2dwaW9fcHVsbHNlbF9zZXQoaW50IGdwaW8sIGludCBwdWxsc2VsKTsKKworaW50IGx5bnFfZ3Bpb19wdWxsc2VsX2dldChpbnQgZ3Bpbyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnEtaXJxLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2ZmQ5ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLWlycS5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworaW50IGxpbmVfZ3Bpb1sxNV09ey0xLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDExOSwxMjgsMTI5LC0xLDEzMSwtMSwxMjV9Oy8vdGhpcyBpcyB0aGUgbGluZSBtYXRjaCBncGlvCisKK3R5cGVkZWYgdm9pZCAoKmlycV9oYW5kbGVyKSh2b2lkKTsKKworaW50IGx5bnFfaXJxX2luc3RhbGwoaW50IGxpbmUsIGlycV9oYW5kbGVyIGlycV9oYW5kbGVyLCBpbnQgdHJpZ190eXBlKTsKKworaW50IGx5bnFfaXJxX3VuaW5zdGFsbChpbnQgbGluZSk7CisKK2ludCBseW5xX2lycV9zZXRfdHlwZShpbnQgbGluZSwgaW50IHRyaWdfdHlwZSk7CisKK2ludCBseW5xX2lycV9nZXRfdHlwZShpbnQgbGluZSk7CisKK2ludCBseW5xX2lycV9zZXRfd2FrZShpbnQgbGluZSwgaW50IGVuKTsKKworaW50IGx5bnFfaXJxX2dldF93YWtlKGludCBsaW5lKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9hdWRpby5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWF1ZGlvLmgKc2ltaWxhcml0eSBpbmRleCA2MSUKcmVuYW1lIGZyb20gbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9hdWRpby5oCnJlbmFtZSB0byBtYnRrL2luY2x1ZGUvbHlucS9seW5xLXFzZXItYXVkaW8uaAppbmRleCA4YmFkOGUyLi45M2U3OGM5IDEwMDc1NQotLS0gYS9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX2F1ZGlvLmgKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWF1ZGlvLmgKQEAgLTEsNDEgKzEsNDAgQEAKLS8qCi0qIHFzZXJfYXVkaW8uaAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKLSogUVNFUiBhdWRpbyBoZWFkZXIgZmlsZS4KKyogQGJyaWVmOiBBZGQgYXVkaW8gYXBpCisqIEBkZXRhaWxzOiAgYWRkIGxpYmx5bnEtcXNlci1hdWRpbyBhcGkKKyogQGF1dGhvcjogICB5dS5kb25nCisqIEBkYXRlOiAgICAgMjAyMy45LjI4CisqIEB2ZXJzaW9uOiAgVjEuMAorKiBAY29weXJpZ2h077yaQ29weXJpZ2h0IChjKSBNb2JpbGVUZWsKICoKLSogQXV0aG9yIDogbGIKLSogRGF0ZSAgIDogMjAyMy8xMS8yMyAxMDo1MjowMQotKi8KLSNpZm5kZWYgX1FTRVJfQVVESU9fSAotI2RlZmluZSBfUVNFUl9BVURJT19ICi0jaW5jbHVkZSAibWJ0a190eXBlLmgiCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExZTlFfUVNFUl9BVURJTworI2RlZmluZSBMWU5RX1FTRVJfQVVESU8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCiB0eXBlZGVmIHZvaWQgKCpfY2Jfb25QbGF5ZXIpKGludCk7CiAKIGludCBxc2VyX0F1ZFBsYXllcl9PcGVuKGNoYXIqIGRldmljZSwgX2NiX29uUGxheWVyIGNiX2Z1bik7Ci0KIGludCBxc2VyX0F1ZFBsYXllcl9QbGF5RnJtRmlsZShpbnQgaGRsLCBjb25zdCBjaGFyICpmZCwgaW50IG9mZnNldCk7Ci0KIGludCBxc2VyX0F1ZFBsYXllcl9QYXVzZShpbnQgaGRsKTsKLQogaW50IHFzZXJfQXVkUGxheWVyX1Jlc3VtZShpbnQgaGRsKTsKLQogdm9pZCBxc2VyX0F1ZFBsYXllcl9TdG9wKGludCBoZGwpOwotCiB2b2lkIHFzZXJfQXVkUGxheWVyX0Nsb3NlKGludCBoZGwpOwogCiBpbnQgcXNlcl9BdWRSZWNvcmRlcl9PcGVuKGNoYXIqIGRldmljZSwgX2NiX29uUGxheWVyIGNiX2Z1bik7Ci0KIGludCBxc2VyX0F1ZFJlY29yZGVyX1N0YXJ0UmVjb3JkKGludCBoZGwsIGNvbnN0IGNoYXIgKmZkLCBpbnQgb2Zmc2V0KTsKLQogaW50IHFzZXJfQXVkUmVjb3JkZXJfUGF1c2Uodm9pZCk7Ci0KIGludCBxc2VyX0F1ZFJlY29yZGVyX1Jlc3VtZSh2b2lkKTsKLQogdm9pZCBxc2VyX0F1ZFJlY29yZGVyX1N0b3Aodm9pZCk7Ci0KIHZvaWQgcXNlcl9BdWRSZWNvcmRlcl9DbG9zZSh2b2lkKTsKIAogdm9pZCBxc2VyX0F1ZGlvX0RlaW5pdCh2b2lkKTsKIAotI2VuZGlmIC8qIF9RU0VSX0FVRElPX0ggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWF1dG9zdXNwZW5kLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLXFzZXItYXV0b3N1c3BlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZWE5YzAxCi0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWF1dG9zdXNwZW5kLmgKQEAgLTAsMCArMSw3MSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBNQVhfTE9DS19OVU0gMTI4CisKKyNkZWZpbmUgRV9SRUFEIC0yCisjZGVmaW5lIEVfV1JJVEUgLTMKKyNkZWZpbmUgRV9UQUJMRV9GVUxMIC00CisjZGVmaW5lIEVfTE9DS19FWElTVCAtNQorI2RlZmluZSBFX0lOUFVUX0VSUk9SIC02CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBFX1FMX0xQTV9GQUxMSU5HID0gMCwgLyogRmFsbGluZywgTWVhbnMgd2FrZXVwaW4gZmFsbGluZyB0byB3YWtldXAgdGhlIG1vZHVsZSwgb3Igd2FrZXVwb3V0IGZhbGxpbmcgdG8gd2FrZXVwIG1jdQorLiAqLworICAgIEVfUUxfTFBNX1JJU0lORyA9IDEsIC8qIFJpc2luZywgTWVhbnMgIHdha2V1cGluIHJpc2luZyB0byB3YWtldXAgdGhlIG1vZHVsZSwgIG9yIHdha2V1cG91dCByaXNpbmcgdG8gd2FrZXVwICBtY3UuIAorKi8KK31xc2VyX2xwbV9lZGdlX3Q7CisKK3R5cGVkZWYgaW50IHFzZXJfbHBtX3Bpbl90OworCisKK3R5cGVkZWYgc3RydWN0eworICAgIHFzZXJfbHBtX3Bpbl90IHdha2V1cGluX3BpbjsKKyAgICBxc2VyX2xwbV9lZGdlX3Qgd2FrZXVwaW5fZWRnZTsKK31xc2VyX2xwbV93YWtldXBpbl9kYXRhX3Q7CisKK3R5cGVkZWYgc3RydWN0eworICAgIHFzZXJfbHBtX3Bpbl90IHdha2V1cG91dF9waW47CisgICAgcXNlcl9scG1fZWRnZV90IHdha2V1cG91dF9lZGdlOworfXFzZXJfbHBtX3dha2V1cG91dF9kYXRhX3Q7CisKKwordHlwZWRlZiB2b2lkICgqcXNlcl9scG1fSGFuZGxlcl90KQorKAorICAgIHFzZXJfbHBtX2VkZ2VfdCBscG1fZWRnZQorKTsKKwordHlwZWRlZiBzdHJ1Y3R7CisgICAgcXNlcl9scG1fd2FrZXVwaW5fZGF0YV90IHdha2V1cGluOworICAgIHFzZXJfbHBtX3dha2V1cG91dF9kYXRhX3Qgd2FrZXVwb3V0OworfXFzZXJfcG1fY2ZnX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjaGFyIGxvY2tfbmFtZVtNQVhfTE9DS19OVU1dWzY0XTsKK30gTE9DS19UQUJMRTsKKworaW50IHJlYWRfbG9ja190YWJsZSh2b2lkKTsKK2ludCBxc2VyX2xwbV9pbml0KHFzZXJfbHBtX0hhbmRsZXJfdCBxc2VyX2xwbV9oYW5kbGVyLCBxc2VyX3BtX2NmZ190ICpxc2VyX2xwbV9jZmcpOworaW50IHFzZXJfbHBtX2RlaW5pdCh2b2lkKTsKK2ludCBxc2VyX2F1dG9zdXNwZW5kX2VuYWJsZShjaGFyIGVuYWJsZSk7CitpbnQgcXNlcl93YWtlbG9ja19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IGxlbik7CitpbnQgcXNlcl93YWtlbG9ja19sb2NrKGludCBmZCk7CitpbnQgcXNlcl93YWtlbG9ja191bmxvY2soaW50IGZkKTsKK2ludCBxc2VyX3dha2Vsb2NrX2Rlc3Ryb3koaW50IGZkKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xLXFzZXItZGF0YS5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jODRhYjIxCi0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWRhdGEuaApAQCAtMCwwICsxLDI3MiBAQAorI2lmbmRlZiBfX0xZTlFfUVNFUl9EQVRBX0hfXworI2RlZmluZSBfX0xZTlFfUVNFUl9EQVRBX0hfXworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK3R5cGVkZWYgZW51bSB7CisJUVNFUl9EQVRBX0NBTExfRVJST1JfTk9ORSA9IDAsCisJUVNFUl9EQVRBX0NBTExfRVJST1JfSU5WQUxJRF9QQVJBTVMsCit9IHFzZXJfZGF0YV9jYWxsX2Vycm9yX2U7CisKK3R5cGVkZWYgZW51bSB7CisJUVNFUl9EQVRBX0NBTExfRElTQ09OTkVDVEVEID0gMCwgICAgICAgICAgICAvKiE8IGNhbGwgaXMgZGlzY29ubmVjdGVkICovCisJUVNFUl9EQVRBX0NBTExfQ09OTkVDVEVELCAgICAgICAgICAgICAgICAgICAvKiE8IGNhbGwgaXMgY29ubmVjdGVkICovCit9IHFzZXJfZGF0YV9jYWxsX3N0YXRlX2U7CisKK3R5cGVkZWYgZW51bSB7CisJUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0ID0gMCwgICAgICAgICAgIC8qITwgSVB2NCBjYWxsLiAqLworCVFTRVJfREFUQV9DQUxMX1RZUEVfSVBWNiwgICAgICAgICAgICAgICAvKiE8IElQdjYgY2FsbC4gKi8KKwlRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjRWNiwgICAgICAgICAgICAgLyohPCBJUHY0IGFuZCBJUHY2IGNhbGwgKE9ubHkgdXNlZCBjYWxsIHN0YXJ0IG9yIHN0b3ApLiAqLworfSBxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZTsKKwordHlwZWRlZiBlbnVtIHsKKwlRU0VSX0FQTl9QRFBfVFlQRV9JUFY0ID0gMCwKKwlRU0VSX0FQTl9QRFBfVFlQRV9QUFAsCisJUVNFUl9BUE5fUERQX1RZUEVfSVBWNiwKKwlRU0VSX0FQTl9QRFBfVFlQRV9JUFY0VjYsCit9IHFzZXJfYXBuX3BkcF90eXBlX2U7CisKK3R5cGVkZWYgZW51bSB7CisJUVNFUl9BUE5fQVVUSF9QUk9UT19ERUZBVUxUID0gMCwKKwlRU0VSX0FQTl9BVVRIX1BST1RPX05PTkUsCisJUVNFUl9BUE5fQVVUSF9QUk9UT19QQVAsCisJUVNFUl9BUE5fQVVUSF9QUk9UT19DSEFQLAorCVFTRVJfQVBOX0FVVEhfUFJPVE9fUEFQX0NIQVAsCit9IHFzZXJfYXBuX2F1dGhfcHJvdG9fZTsKKworI2RlZmluZSBRU0VSX0FQTl9NQVhfTElTVCA4CisjZGVmaW5lIFFTRVJfQVBOX05BTUVfU0laRSAxNTAKKyNkZWZpbmUgUVNFUl9BUE5fVVNFUk5BTUVfU0laRSAxMjcKKyNkZWZpbmUgUVNFUl9BUE5fUEFTU1dPUkRfU0laRSAxMjcKKworc3RydWN0IHY0X2FkZHJlc3Nfc3RhdHVzIHsKKwlzdHJ1Y3QgaW5fYWRkciBpcDsgICAgICAgICAgICAgICAgICAgIC8qITwgUHVibGljIElQdjQgYWRkcmVzcy4gKi8KKwlzdHJ1Y3QgaW5fYWRkciBnYXRld2F5OyAgICAgICAgICAgICAgIC8qITwgUHVibGljIElQdjQgZ2F0ZXdheS4gKi8KKwlzdHJ1Y3QgaW5fYWRkciBwcmlfZG5zOyAgICAgICAgICAgICAgIC8qITwgUHJpbWFyeSBEb21haW4gTmFtZSBTZXJ2aWNlIElQIGFkZHJlc3MuICovCisJc3RydWN0IGluX2FkZHIgc2VjX2RuczsgICAgICAgICAgICAgICAvKiE8IFNlY29uZGFyeSBEb21haW4gTmFtZSBTZXJ2aWNlIElQIGFkZHJlc3MuICovCit9OworCitzdHJ1Y3QgdjZfYWRkcmVzc19zdGF0dXMgeworCXN0cnVjdCBpbjZfYWRkciBpcDsgICAgICAgICAgICAgICAgICAgLyohPCBQdWJsaWMgSVB2NiBhZGRyZXNzLiAqLworCXN0cnVjdCBpbjZfYWRkciBnYXRld2F5OyAgICAgICAgICAgICAgLyohPCBQdWJsaWMgSVB2NiBnYXRld2F5LiAqLworCXN0cnVjdCBpbjZfYWRkciBwcmlfZG5zOyAgICAgICAgICAgICAgLyohPCBQcmltYXJ5IERvbWFpbiBOYW1lIFNlcnZpY2UgSVB2NiBhZGRyZXNzLiAqLworCXN0cnVjdCBpbjZfYWRkciBzZWNfZG5zOyAgICAgICAgICAgICAgLyohPCBTZWNvbmRhcnkgRG9tYWluIE5hbWUgU2VydmljZSBJUHY2IGFkZHJlc3MuICovCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciBwcm9maWxlX2lkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBVTVRTL0NNREEgcHJvZmlsZSBJRC4gKi8KKwljaGFyIG5hbWVbMTZdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEludGVyZmFjZSBOYW1lLiAqLworCXFzZXJfZGF0YV9jYWxsX2lwX2ZhbWlseV9lIGlwX2ZhbWlseTsgICAgICAgICAgICAgLyohPCBJUCB2ZXJzaW9uLiAqLworCXFzZXJfZGF0YV9jYWxsX3N0YXRlX2Ugc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgLyohPCBUaGUgZGlhbCBzdGF0dXMuICovCisJcXNlcl9kYXRhX2NhbGxfZXJyb3JfZSBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRoZSBSZWFzb24gY29kZSBhZnRlciBkYXRhIGNhbGwgZGlzY29ubmVjdGVkLiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHY0X2FkZHJlc3Nfc3RhdHVzIHY0OyAgICAgICAgICAgIC8qITwgSVB2NCBpbmZvcm1hdGlvbi4gKi8KKwkJc3RydWN0IHY2X2FkZHJlc3Nfc3RhdHVzIHY2OyAgICAgICAgICAgIC8qITwgSVB2NiBpbmZvcm1hdGlvbi4gKi8KKwl9OworfSBxc2VyX2RhdGFfY2FsbF9zdGF0ZV9zOworCisvKgorICohPCBDbGllbnQgY2FsbGJhY2sgZnVuY3Rpb24gdXNlZCB0byBwb3N0IGV2ZW50IGluZGljYXRpb25zLgorICovCit0eXBlZGVmIHZvaWQgKCpxc2VyX2RhdGFfY2FsbF9ldnRfY2JfdCkocXNlcl9kYXRhX2NhbGxfc3RhdGVfcyAqc3RhdGUpOworCit0eXBlZGVmIHN0cnVjdCB7CisJY2hhciBwcm9maWxlX2lkeDsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFVNVFMvQ01EQSBwcm9maWxlIElELiAqLworCWJvb2wgcmVjb25uZWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBXaGV0aGVyIHRvIHJlLWRpYWwgYWZ0ZXIgZGlzY29ubmVjdGluZyB0aGUgbmV0d29yay4gKi8KKwlxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZSBpcF9mYW1pbHk7ICAgICAgLyohPCBJUCB2ZXJzaW9uLiAqLworCWNoYXIgY2RtYV91c2VybmFtZVtRU0VSX0FQTl9VU0VSTkFNRV9TSVpFXTsgICAgIC8qITwgVXNlcm5hbWUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLworCWNoYXIgY2RtYV9wYXNzd29yZFtRU0VSX0FQTl9QQVNTV09SRF9TSVpFXTsgICAgIC8qITwgUGFzc3dvcmQgdG8gYmUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLworfSBxc2VyX2RhdGFfY2FsbF9zOworCitzdHJ1Y3QgcGt0X3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nIHBrdHNfdHg7ICAgICAgICAgICAgICAvKiE8IE51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkLiAqLworCXVuc2lnbmVkIGxvbmcgcGt0c19yeDsgICAgICAgICAgICAgIC8qITwgTnVtYmVyIG9mIHBhY2tldHMgcmVjZWl2ZWQuICovCisJbG9uZyBsb25nIGJ5dGVzX3R4OyAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgdHJhbnNtaXR0ZWQuICovCisJbG9uZyBsb25nIGJ5dGVzX3J4OyAgICAgICAgICAgICAgICAgLyohPCBOdW1iZXIgb2YgYnl0ZXMgcmVjZWl2ZWQuICovCisJdW5zaWduZWQgbG9uZyBwa3RzX2Ryb3BwZWRfdHg7ICAgICAgLyohPCBOdW1iZXIgb2YgdHJhbnNtaXQgcGFja2V0cyBkcm9wcGVkLiAqLworCXVuc2lnbmVkIGxvbmcgcGt0c19kcm9wcGVkX3J4OyAgICAgIC8qITwgTnVtYmVyIG9mIHJlY2VpdmUgcGFja2V0cyBkcm9wcGVkLiAqLworfTsKKworc3RydWN0IHY0X2luZm8geworCWNoYXIgbmFtZVsxNl07ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEludGVyZmFjZSBOYW1lLiAqLworCXFzZXJfZGF0YV9jYWxsX3N0YXRlX2Ugc3RhdGU7ICAgICAgICAgICAgIC8qITwgVGhlIGRpYWwgc3RhdHVzLiAqLworCWJvb2wgcmVjb25uZWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHJlLWRpYWwgZmxhZy4gKi8KKwlzdHJ1Y3QgdjRfYWRkcmVzc19zdGF0dXMgYWRkcjsgICAgICAgICAgLyohPCBJUHY0IElQIEFkZHJlc3MgaW5mb3JtYXRpb24uICovCisJc3RydWN0IHBrdF9zdGF0cyBzdGF0czsgICAgICAgICAgICAgICAgIC8qITwgSVB2NCBzdGF0aWNzICovCit9OworCitzdHJ1Y3QgdjZfaW5mbyB7CisJY2hhciBuYW1lWzE2XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSW50ZXJmYWNlIE5hbWUuICovCisJcXNlcl9kYXRhX2NhbGxfc3RhdGVfZSBzdGF0ZTsgICAgICAgICAgICAgLyohPCBUaGUgZGlhbCBzdGF0dXMuICovCisJYm9vbCByZWNvbm5lY3Q7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgcmUtZGlhbCBmbGFnLiAqLworCXN0cnVjdCB2Nl9hZGRyZXNzX3N0YXR1cyBhZGRyOyAgICAgICAgICAvKiE8IElQdjYgSVAgQWRkcmVzcyBpbmZvcm1hdGlvbi4gKi8KKwlzdHJ1Y3QgcGt0X3N0YXRzIHN0YXRzOyAgICAgICAgICAgICAgICAgLyohPCBJUHY2IHN0YXRpY3MgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwljaGFyIHByb2ZpbGVfaWR4OyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVU1UUy9DRE1BIHByb2ZpbGUgSUQuICovCisJcXNlcl9kYXRhX2NhbGxfaXBfZmFtaWx5X2UgaXBfZmFtaWx5OyAgICAgIC8qITwgSVAgdmVyc2lvbi4gKi8KKwlzdHJ1Y3QgdjRfaW5mbyB2NDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVB2NCBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCB2Nl9pbmZvIHY2OyAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUHY2IGluZm9ybWF0aW9uICovCit9IHFzZXJfZGF0YV9jYWxsX2luZm9fczsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgcHJvZmlsZV9pZHg7ICAgICAgICAgICAgICAvKiE8IFVNVFMvQ0RNQSBwcm9maWxlIElELiAqLworCXFzZXJfYXBuX3BkcF90eXBlX2UgcGRwX3R5cGU7ICAgICAgICAgICAgIC8qITwgUGFja2V0IERhdGEgUHJvdG9jb2wgKFBEUCkgdHlwZSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgZGF0YSBwYXlsb2FkCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjaGFuZ2VkIG92ZXIgdGhlIGFpcmxpbmsgd2hlbiB0aGUgcGFja2V0IGRhdGEgc2Vzc2lvbiBpcworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzdGFibGlzaGVkIHdpdGggdGhpcyBwcm9maWxlLiAqLyAKKwlxc2VyX2Fwbl9hdXRoX3Byb3RvX2UgYXV0aF9wcm90bzsgICAgICAgICAvKiE8IEF1dGhlbnRpY2F0aW9uIFByb3RvY29sLiAqLworCWNoYXIgYXBuX25hbWVbUVNFUl9BUE5fTkFNRV9TSVpFXTsgICAgICAgIC8qITwgQSBzdHJpbmcgcGFyYW1ldGVyIHRoYXQgaXMgYSBsb2dpY2FsIG5hbWUgdXNlZCB0byBzZWxlY3QgdGhlIEdHU04KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXh0ZXJuYWwgcGFja2V0IGRhdGEgbmV0d29yay4gKi8gCisJY2hhciB1c2VybmFtZVtRU0VSX0FQTl9VU0VSTkFNRV9TSVpFXTsgICAgLyohPCBVc2VybmFtZSB1c2VkIGR1cmluZyBkYXRhIG5ldHdvcmsgYXV0aGVudGljYXRpb24uICovCisJY2hhciBwYXNzd29yZFtRU0VSX0FQTl9QQVNTV09SRF9TSVpFXTsgICAgLyohPCBQYXNzd29yZCB0byBiZSB1c2VkIGR1cmluZyBkYXRhIG5ldHdvcmsgYXV0aGVudGljYXRpb24uICovCisgICAgY2hhciBhcG5fdHlwZVtRU0VSX0FQTl9OQU1FX1NJWkVdOworfSBxc2VyX2Fwbl9pbmZvX3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlxc2VyX2Fwbl9wZHBfdHlwZV9lIHBkcF90eXBlOyAgICAgICAgICAgICAvKiE8IFBhY2tldCBEYXRhIFByb3RvY29sIChQRFApIHR5cGUgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIGRhdGEgcGF5bG9hZAorCQkJCQkJICBleGNoYW5nZWQgb3ZlciB0aGUgYWlybGluayB3aGVuIHRoZSBwYWNrZXQgZGF0YSBzZXNzaW9uIGlzCisJCQkJCQkgIGVzdGFibGlzaGVkIHdpdGggdGhpcyBwcm9maWxlLiAqLyAKKwlxc2VyX2Fwbl9hdXRoX3Byb3RvX2UgYXV0aF9wcm90bzsgICAgICAgICAvKiE8IEF1dGhlbnRpY2F0aW9uIFByb3RvY29sLiAqLworCWNoYXIgYXBuX25hbWVbUVNFUl9BUE5fTkFNRV9TSVpFXTsgICAgICAgIC8qITwgQSBzdHJpbmcgcGFyYW1ldGVyIHRoYXQgaXMgYSBsb2dpY2FsIG5hbWUgdXNlZCB0byBzZWxlY3QgdGhlIEdHU04KKwkJCQkJCSAgYW5kIGV4dGVybmFsIHBhY2tldCBkYXRhIG5ldHdvcmsuICovIAorCWNoYXIgdXNlcm5hbWVbUVNFUl9BUE5fVVNFUk5BTUVfU0laRV07ICAgIC8qITwgVXNlcm5hbWUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLworCWNoYXIgcGFzc3dvcmRbUVNFUl9BUE5fUEFTU1dPUkRfU0laRV07ICAgIC8qITwgUGFzc3dvcmQgdG8gYmUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLworICAgIGNoYXIgYXBuX3R5cGVbUVNFUl9BUE5fTkFNRV9TSVpFXTsKK30gcXNlcl9hcG5fYWRkX3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgY250OworCXFzZXJfYXBuX2luZm9fcyBhcG5bUVNFUl9BUE5fTUFYX0xJU1RdOworfSBxc2VyX2Fwbl9pbmZvX2xpc3RfczsKKworCisvKioKKyAqIEluaXRpYWxpemF0aW9uIGRhdGEgY2FsbCBtb2R1bGUsIGFuZCBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkLgorICoKKyAqIEBwYXJhbSBbaW5dIGV2dF9jYiAgICAgICAgICAgY2FsbGJhY2sgZnVjbnRpb24KKyAqCisgKiBAcmV0dXJuIAorICogICBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgorICogCisgKi8KK2V4dGVybiBpbnQgcXNlcl9kYXRhX2NhbGxfaW5pdChxc2VyX2RhdGFfY2FsbF9ldnRfY2JfdCBldnRfY2IpOworCisvKioKKyAqIERlc3Ryb3kgZGF0YSBjYWxsIG1vZHVsZSwgYW5kIHVucmVnaXN0ZXIgY2FsbGJhY2sgZnVuY2l0b24KKyAqCisgKiBAcGFyYW0gCisgKiAgIE5vbmUKKyAqCisgKiBAcmV0dXJuIAorICogICBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgorICogCisgKi8KK2V4dGVybiB2b2lkIHFzZXJfZGF0YV9jYWxsX2Rlc3Ryb3kodm9pZCk7CisKKy8qKgorICogU3RhcnRzIGEgZGF0YSBjYWxsLiBJZiBwcm9maWxlIGluZGV4IGlzIHplcm8sIGl0IHdpbGwgY2FsbCBDRE1BIHByb2ZpbGUuCisgKgorICogQHBhcmFtIFtpbl0gZGF0YV9jYWxsICAgICAgICBUaGUgZGF0YSBjYWxsIHBhcmFtZXRlcnMKKyAqIEBwYXJhbSBbb3V0XSBlcnJvciAgICAgICAgICAgRXJyb3IgY29kZSByZXR1cm5lZCBieSBkYXRhIGNhbGwgCisgKgorICogQHJldHVybiAKKyAqICAgT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KKyAqIAorICovCitleHRlcm4gaW50IHFzZXJfZGF0YV9jYWxsX3N0YXJ0KHFzZXJfZGF0YV9jYWxsX3MgKmRhdGFfY2FsbCwgcXNlcl9kYXRhX2NhbGxfZXJyb3JfZSAqZXJyKTsKKworLyoqCisgKiBTdG9wIGEgZGF0YSBjYWxsLgorICoKKyAqIEBwYXJhbSBbaW5dIHByb2ZpbGVfaWR4ICAgICAgVU1UUy9DRE1BIHByb2ZpbGUgSUQKKyAqIEBwYXJhbSBbaW5dIGlwX2ZhbWlseSAgICAgICAgSVAgVmVyc2lvbgorICogQHBhcmFtIFtvdXRdIGVycm9yICAgICAgICAgICBFcnJvciBjb2RlIHJldHVybmVkIGJ5IGRhdGEgY2FsbCAKKyAqCisgKiBAcmV0dXJuIAorICogICBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgorICogCisgKi8KK2V4dGVybiBpbnQgcXNlcl9kYXRhX2NhbGxfc3RvcChjaGFyIHByb2ZpbGVfaWR4LCBxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZSBpcF9mYW1pbHksIHFzZXJfZGF0YV9jYWxsX2Vycm9yX2UgKmVycik7CisKKy8qKgorICogR2V0IGEgZGF0YSBjYWxsIGluZm9ybWF0aW9uLgorICoKKyAqIEBwYXJhbSBbaW5dIHByb2ZpbGVfaWR4ICAgICAgVU1UUy9DRE1BIHByb2ZpbGUgSUQKKyAqIEBwYXJhbSBbaW5dIGlwX2ZhbWlseSAgICAgICAgSVAgVmVyc2lvbgorICogQHBhcmFtIFtvdXRdIGluZm8gICAgICAgICAgICBUaGUgRGF0YSBDYWxsIGluZm9ybWF0aW9uCisgKiBAcGFyYW0gW291dF0gZXJyb3IgICAgICAgICAgIEVycm9yIGNvZGUgcmV0dXJuZWQgYnkgZGF0YSBjYWxsIAorICoKKyAqIEByZXR1cm4gCisgKiAgIE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQuICBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQuCisgKiAKKyAqLworZXh0ZXJuIGludCBxc2VyX2RhdGFfY2FsbF9pbmZvX2dldChjaGFyIHByb2ZpbGVfaWR4LAorCQkJCSBxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZSBpcF9mYW1pbHksCisJCQkJIHFzZXJfZGF0YV9jYWxsX2luZm9fcyAqaW5mbywKKwkJCQkgcXNlcl9kYXRhX2NhbGxfZXJyb3JfZSAqZXJyKTsKKworLyoqCisgKiBDaGFuZ2VzIHRoZSBzZXR0aW5ncyBpbiBhIGNvbmZpZ3VyZWQgcHJvZmlsZS4gCisgKgorICogQHBhcmFtIFtpbl0gYXBuICAgICAgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24uCisgKgorICogQHJldHVybiAKKyAqICAgT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZCwgc3VjaCBhcG4gbm90IGV4aXN0LgorICogCisgKi8KK2V4dGVybiBpbnQgcXNlcl9hcG5fc2V0KHFzZXJfYXBuX2luZm9fcyAqYXBuKTsKKworLyoqCisgKiBSZXRyaWV2ZXMgdGhlIHNldHRpbmdzIGZyb20gYSBjb25maWd1cmVkIHByb2ZpbGUuCisgKgorICogQHBhcmFtIFtpbl0gcHJvZmlsZV9pZHggICAgICAgIFVNVFMvQ0RNQSBwcm9maWxlIElECisgKiBAcGFyYW0gW291dF0gYXBuICAgICAgICAgICAgICAgdGhlIHByb2ZpbGUgaW5mb3JtYXRpb24uCisgKgorICogQHJldHVybiAKKyAqICAgT24gc3VjY2VzcywgMCBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KKyAqIAorICovCitleHRlcm4gaW50IHFzZXJfYXBuX2dldCh1bnNpZ25lZCBjaGFyIHByb2ZpbGVfaWR4LCBxc2VyX2Fwbl9pbmZvX3MgKmFwbik7CisKKy8qKgorICogUmV0cmlldmVzIHRoZSBzZXR0aW5ncyBmcm9tIGEgY29uZmlndXJlZCBwcm9maWxlLgorICoKKyAqIEBwYXJhbSBbaW5dIGFwbiAgICAgICAgICAgICAgIHRoZSBwcm9maWxlIGluZm9ybWF0aW9uLgorICogQHBhcmFtIFtvdXRdIHByb2ZpbGVfaWR4ICAgICAgICBVTVRTL0NETUEgcHJvZmlsZSBJRAorICoKKyAqIEByZXR1cm4gCisgKiAgIE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQuICBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQuCisgKiAKKyAqLworZXh0ZXJuIGludCBxc2VyX2Fwbl9hZGQocXNlcl9hcG5fYWRkX3MgKmFwbiwgdW5zaWduZWQgY2hhciAqcHJvZmlsZV9pZHgpOworCisvKioKKyAqIERlbGV0ZSBhIGNvbmZpZ3VyZWQgcHJvZmlsZS4KKyAqCisgKiBAcGFyYW0gW2luXSBwcm9maWxlX2lkeCAgICAgICAgVU1UUy9DRE1BIHByb2ZpbGUgSUQKKyAqCisgKiBAcmV0dXJuIAorICogICBPbiBzdWNjZXNzLCAwIGlzIHJldHVybmVkLiAgT24gZXJyb3IsIC0xIGlzIHJldHVybmVkLgorICogCisgKi8KK2V4dGVybiBpbnQgcXNlcl9hcG5fZGVsKHVuc2lnbmVkIGNoYXIgcHJvZmlsZV9pZHgpOworCisvKioKKyAqIFJldHJpZXZlcyB0aGUgc2V0dGluZ3MgZnJvbSBhIGNvbmZpZ3VyZWQgcHJvZmlsZSBsaXN0LgorICoKKyAqIEBwYXJhbSBbb3V0XSBhcG5fbGlzdCAgICAgICAgICB0aGUgcHJvZmlsZSBsaXN0IGluZm9ybWF0aW9uLgorICoKKyAqIEByZXR1cm4gCisgKiAgIE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQuICBPbiBlcnJvciwgLTEgaXMgcmV0dXJuZWQuCisgKiAKKyAqLworZXh0ZXJuIGludCBxc2VyX2Fwbl9nZXRfbGlzdChxc2VyX2Fwbl9pbmZvX2xpc3RfcyAqYXBuX2xpc3QpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xLXFzZXItZm90YS5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWZvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNGJlOWFhCi0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucS1xc2VyLWZvdGEuaApAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyogDQorKiBAYnJpZWY6DQorKiBAZGV0YWlsczogIGFkZCBmb3RhIHVwZ3JhZGUgYXBpDQorKiBAYXV0aG9yOiAgIGwueWFuZw0KKyogQGRhdGU6ICAgICAyMDIzLjguMw0KKyogQHZlcnNpb246ICBWMS4wDQorKiBAY29weXJpZ2h077yaQ29weXJpZ2h0IChjKSBNb2JpbGVUZWsgDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisjaWZuZGVmIExZTlFfUVNFUl9GT1RBDQorI2RlZmluZSBMWU5RX1FTRVJfRk9UQSANCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitpbnQgbHlucV9nZXRfdXBncmFkZV9zdGF0dXModm9pZCk7DQoraW50IGx5bnFfZm90YV9zZXRfYWRkcl92YWx1ZShjaGFyICAgICAgICAqdmFsdWUsaW50IHNpemUpOw0KK2ludCBseW5xX2ZvdGFfbnJlc3RhcnQodm9pZCk7DQoraW50IGx5bnFfcm9ja19tYWluKGludCBmaXJzdF9ydW4pOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYNCisNCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xLXFzZXItdm9pY2UuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnEtcXNlci12b2ljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3NDhhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xLXFzZXItdm9pY2UuaApAQCAtMCwwICsxLDEzOSBAQAorLyoqCisgKkBmaWxlICAgICBxc2VyX3ZvaWNlLmgKKyAqQGRhdGUgICAgIDIwMTctMTEtMzAKKyAqQGF1dGhvcgorICpAYnJpZWYKKyAqLworCisKKyNpZm5kZWYgX19MWU5RX1FTRVJfVk9JQ0VfSF9fCisjZGVmaW5lIF9fTFlOUV9RU0VSX1ZPSUNFX0hfXworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSAibWJ0a190eXBlLmgiCisKK3R5cGVkZWYgZW51bQoreworICAgIEVfUVNFUl9WQ0FMTF9FWFRFUk5BTF9TTE9UXzEsCisgICAgRV9RU0VSX1ZDQUxMX0VYVEVSTkFMX1NMT1RfMiwKKyAgICBFX1FTRVJfVkNBTExfRU1CRURERUQsCisgICAgRV9RU0VSX1ZDQUxMX1JFTU9URSwKKyAgICBFX1FTRVJfVkNBTExfSURfTUFYCit9RV9RU0VSX1ZDQUxMX0lEX1Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIEVfUVNFUl9WT0lDRV9DQUxMX1NUQVRFX0lOQ09NSU5HICAgICAgPSAweDAwMDAsIC8qKjwgTVQgaW5jb21pbmc7IENDIHNldHVwLiAqLworICAgIEVfUVNFUl9WT0lDRV9DQUxMX1NUQVRFX0RJQUxJTkcgICAgICAgPSAweDAwMDEsIC8qKjwgRGlhbGluZyBzdGF0ZS4gKi8KKyAgICBFX1FTRVJfVk9JQ0VfQ0FMTF9TVEFURV9BTEVSVElORyAgICAgID0gMHgwMDAyLCAvKio8IE1UIGNhbGwgd2FpdGluZzsgTU8gYWx0ZXJ0aW5nLiAqLworICAgIEVfUVNFUl9WT0lDRV9DQUxMX1NUQVRFX0FDVElWRSAgICAgICAgPSAweDAwMDMsIC8qKjwgQ2FsbCBpcyBhY3RpdmUuICovCisgICAgRV9RU0VSX1ZPSUNFX0NBTExfU1RBVEVfSE9MRElORyAgICAgICA9IDB4MDAwNCwgLyoqPCBDYWxsIGlzIG9uIGhvbGQuICovCisgICAgRV9RU0VSX1ZPSUNFX0NBTExfU1RBVEVfRU5EICAgICAgICAgICA9IDB4MDAwNSwgLyoqPCBDYWxsIGlzIGRpc2Nvbm5lY3RlZC4gKi8KKyAgICBFX1FTRVJfVk9JQ0VfQ0FMTF9TVEFURV9XQUlUSU5HICAgICAgID0gMHgwMDA2LCAvKio8IENhbGwgaXMgd2FpdGluZy4gKi8KK31xc2VyX3ZvaWNlX2NhbGxfc3RhdGVfdDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRV9RU0VSX1ZPSUNFX0NBTExfV0FJVElOR19WT0lDRV9FTkFCTEVEICAgICAgID0gMCwgLyoqPCAgVm9pY2UgY2FsbCB3YWl0aW5nIGVuYWJsZWQuICovCisgICAgRV9RU0VSX1ZPSUNFX0NBTExfV0FJVElOR19ESVNBQkxFRCAgICAgICAgICAgID0gMSwgLyoqPCAgVm9pY2UgY2FsbCB3YWl0aW5nIGRpc2FibGVkLiAqLworfUVfUVNFUl9WT0lDRV9DQUxMX1dBSVRJTkdfU0VSVklDRV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEVfUVNFUl9WT0lDRV9DQUxMX1dBSVRJTkdfU0VSVklDRV9UICAgd2FpdGluZ19zZXJ2aWNlOworfXFzZXJfdm9pY2VfY2FsbF93YWl0aW5nX3NlcnZpY2VfdDsKKwordHlwZWRlZiBxc2VyX3ZvaWNlX2NhbGxfc3RhdGVfdCBFX1FTRVJfVk9JQ0VfQ0FMTF9TVEFURV9UOworCit0eXBlZGVmIHVpbnQzMl90IHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZTsKKworLyogQ2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB2aWEgUVNFUl9Wb2ljZV9DYWxsX0FkZFN0YXRlSGFuZGxlcjsKKyAgIFRoaXMgd2lsbCBiZSBjYWxsZWQgaWYgYW55IHN0YXRlZCBjaGFuZ2VkIG9mIGNhbGxfaWQKKyovCit0eXBlZGVmIHZvaWQgKCpRU0VSX1ZvaWNlQ2FsbF9TdGF0ZUhhbmRsZXJGdW5jX3QpCisoCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgY2FMT0NBTF9DX0lOQ0xVREVTbGxfaWQsCisgICAgY2hhciogICAgICAgICAgICAgICAgICAgcGhvbmVfbnVtLAorICAgIEVfUVNFUl9WT0lDRV9DQUxMX1NUQVRFX1Qgc3RhdGUsCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgKmNvbnRleHRQdHIKKyk7CisKKy8qIEluaXQgdm9pY2UgbW9kdWxlIGFuZCByZXR1cm4gaF92b2ljZSwgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgQVBJcyAqLworaW50IHFzZXJfdm9pY2VfY2FsbF9jbGllbnRfaW5pdCh2b2ljZV9jbGllbnRfaGFuZGxlX3R5cGUgICpwaF92b2ljZSk7CisKKy8qIERlSW5pdCB2b2ljZSBtb2R1bGUgYW5kIHJlbGVhc2UgcmVzb3VyY2VzLCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgbGFzdCAqLworaW50IHFzZXJfdm9pY2VfY2FsbF9jbGllbnRfZGVpbml0KHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZSBoX3ZvaWNlKTsKKworLyogQWRkIGNhbGxiYWNrIGZ1bmN0aW9uLCBpZiBhbnkgY2FsbCBzdGF0ZSBjaGFuZ2VkLCBoYW5kbGVyUHRyIHdpbGwgYmUgY2FsbGVkIHRvIG5vdGlmeSBBcHAgKi8KK2ludCBxc2VyX3ZvaWNlX2NhbGxfYWRkc3RhdGVoYW5kbGVyKHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgICAgICBoX3ZvaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTRVJfVm9pY2VDYWxsX1N0YXRlSGFuZGxlckZ1bmNfdCAgIGhhbmRsZXJQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRQdHIpOworCisvKiBSZW1vdmUgY2FsbGJhY2sgZnVuY3Rpb24sIHdvbid0IHJlY2VpdmUgYW55IG5vdGlmeSBhbnltb3JlICovCitpbnQgcXNlcl92b2ljZV9jYWxsX3JlbW92ZXN0YXRlaGFuZGxlKHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgICBoX3ZvaWNlKTsKKworLyogU3RhcnQgY2FsbCBhbmQgcmV0dXJuIGNhbGxfaWQsIHRoaXMgY2FuIGJlIHVzZWQgaW4gdGhlIGxhdGVyICovCitpbnQgcXNlcl92b2ljZV9jYWxsX3N0YXJ0KHZvaWNlX2NsaWVudF9oYW5kbGVfdHlwZSAgICBoX3ZvaWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgRV9RU0VSX1ZDQUxMX0lEX1QgICAgICAgICAgICAgc2ltSWQsCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVfbnVtYmVyLCAgIC8vLzwgW0lOXSBEZXN0aW5hdGlvbiBpZGVudGlmaWVyIGZvciB0aGUgdm9pY2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAqY2FsbF9pZCk7ICAgICAgIC8vLzwgW09VVF0gY2FsbCBpZAorCisvKiBFbmQgY2FsbCBvZiBjYWxsX2lkLCB3aGljaCByZXR1cm5lZCBieSBRU0VSX1ZvaWNlX0NhbGxfU3RhcnQgb3IgY2FsbGJhY2sgZnVuYyByZWdpc3RlciB2aWEgUVNFUl9Wb2ljZV9DYWxsX0FkZFN0YXRlSGFuZGxlciAqLworaW50IHFzZXJfdm9pY2VfY2FsbF9lbmQoICB2b2ljZV9jbGllbnRfaGFuZGxlX3R5cGUgICAgaF92b2ljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX2lkKTsgICAgICAgIC8vLzwgW0lOXSBjYWxsIGlkLCByZXR1cm4gYnkgUVNFUl9Wb2ljZV9TdGFydAorCisvKiBBbnN3ZXIgdGhlIGNhbGwgb2YgY2FsbF9pZCwgd2hpY2ggcmV0dXJuZWQgYnkgY2FsbGJhY2sgZnVuYyByZWdpc3RlciB2aWEgUVNFUl9Wb2ljZV9DYWxsX0FkZFN0YXRlSGFuZGxlciAqLworaW50IHFzZXJfdm9pY2VfY2FsbF9hbnN3ZXIodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlICAgIGhfdm9pY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfaWQgKTsKKworaW50IHFzZXJfdm9pY2VfY2FsbF9zd2l0Y2hfd2FpdGluZ19vcl9ob2xkaW5nX2FuZF9hY3RpdmUodm9pY2VfY2xpZW50X2hhbmRsZV90eXBlIGhfdm9pY2UpOworCisvL3NldCB2b2ljZSBzcGVlY2ggdm9sdW1lCitpbnQgcXNlcl92b2ljZV9zZXRfc3BlZWNoX3ZvbHVtZShjb25zdCBpbnQgdm9sdW1lKTsKKworLy9HZXQgdm9pY2Ugc3BlZWNoIHZvbHVtZQoraW50IHFzZXJfdm9pY2VfZ2V0X3NwZWVjaF92b2x1bWUoaW50ICp2b2x1bWUpOworCisvL1NldCB2b2ljZSBjYWxsIHdhaXRpbmcKK2ludCBxc2VyX3ZvaWNlX2NhbGxfc2V0d2FpdGluZworKAorICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhfdm9pY2UsCisgICAgcXNlcl92b2ljZV9jYWxsX3dhaXRpbmdfc2VydmljZV90IGVfc2VydmljZQorKTsKKworLy9HZXQgdm9pY2UgY2FsbCB3YWl0aW5nIHN0YXR1cworaW50IHFzZXJfdm9pY2VfY2FsbF9nZXR3YWl0aW5nc3RhdHVzCisoCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaF92b2ljZSwKKyAgICBxc2VyX3ZvaWNlX2NhbGxfd2FpdGluZ19zZXJ2aWNlX3QgKnBlX3NlcnZpY2UKKyk7CisKKworLyoKK1VzYWdlIDEgKHJlZ2lzdGVyIGNhbGxiYWNrIGFuZCB3YWl0IGZvciBuZXcgY2FsbCBpbiwgdGhlbiBhbnN3ZXIpOgorMSwgUVNFUl9Wb2ljZV9DYWxsX0NsaWVudF9Jbml0CisyLCBRU0VSX1ZvaWNlX0NhbGxfQWRkU3RhdGVIYW5kbGVyKHBmX2NiKQorMywgd2FpdCBmb3IgbmV3IGNhbGwgYXJyaXZlLCBwZl9jYiB3aWxsIHBhc3MgdGhlIGNhbGxfaWQgdG8gYXBwLgorNCwgUVNFUl9Wb2ljZV9DYWxsX0Fuc3dlcihjYWxsX2lkKQorNSwgUVNFUl9Wb2ljZV9DYWxsX0VuZAorNiwgUVNFUl9Wb2ljZV9DYWxsX0NsaWVudF9EZWluaXQKKworCitVc2FnZSAyIChjYWxsIG91dCk6CisxLCBRU0VSX1ZvaWNlX0NhbGxfQ2xpZW50X0luaXQKKzIsIFFTRVJfVm9pY2VfQ2FsbF9BZGRTdGF0ZUhhbmRsZXIocGZfY2IpCiszLCBRU0VSX1ZvaWNlX0NhbGxfU3RhcnQKKzQsIFFTRVJfVm9pY2VfQ2FsbF9FbmQKKzUsIFFTRVJfVm9pY2VfQ2FsbF9DbGllbnRfRGVpbml0CisKKworKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIF9fUVNFUl9WT0lDRV9IX18KKwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9hbGFybS5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9hbGFybS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtYnRrL2luY2x1ZGUvcXNlci9xc2VyX2FsYXJtLmgKcmVuYW1lIHRvIG1idGsvaW5jbHVkZS9seW5xL2x5bnFfYWxhcm0uaApkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9hdWRpb19hcGkuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfYXVkaW9fYXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ0YTMyNzguLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9hdWRpb19hcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0qCi0qIERhdGEgOiAyMDIyLzEwLzI3IDE3OjI2OjQ2Ci0qIEF1dGhvciA6IEx1b0ppYW4KLSovCi0jaWZuZGVmIF9MWU5RX0FVRElPX0FQSV9ICi0jZGVmaW5lIF9MWU5RX0FVRElPX0FQSV9ICi0jaWZkZWYgTUJUS19QTEFURk9STV9BU1IxODAzCi0jaW5jbHVkZSAibWJ0a19hdWRpby5oIgotI2VuZGlmCi0KLS8v5pKt5pS+6Z+z6aKR5paH5Lu2Ci1pbnQgbHlucV9tZWRpYV9wbGF5X2F1ZGlvKGNvbnN0IGNoYXIgKnBhdGgpOwotCi0vL+WBnOatouaSreaUvumfs+mikeaWh+S7tgotdm9pZCBseW5xX21lZGlhX3N0b3BfYXVkaW8odm9pZCk7Ci0KLS8v5b2V5Yi26Z+z6aKR5paH5Lu2Ci1pbnQgbHlucV9tZWRpYV9yZWNfYXVkaW8oY29uc3QgY2hhciAqcGF0aCk7Ci0KLS8v5YGc5q2i5b2V5Yi26Z+z6aKR5paH5Lu2Ci12b2lkIGx5bnFfbWVkaWFfcmVjX3N0b3BfYXVkaW8odm9pZCk7Ci0KLS8v6I635Y+W5Yqf5pS+6Z+z6YePCi0vL3ZvbHVtZSAoMH4xMDApCi1pbnQgbHlucV9nZXRfc3BrX3ZvbHVtZShpbnQqIHZvbHVtZSk7Ci0KLS8v6K6+572u5Yqf5pS+6Z+z6YeP44CCCi1pbnQgbHlucV9zZXRfc3BrX3ZvbHVtZShjb25zdCBpbnQgdm9sdW1lKTsKLQotLy/ojrflj5bpuqblhYvpo47pn7Pph48KLWludCBseW5xX2dldF9taWNfdm9sdW1lKGludCogdm9sdW1lKTsKLQotLy/orr7nva7puqblhYvpo47pn7Pph48KLWludCBseW5xX3NldF9taWNfdm9sdW1lKGNvbnN0IGludCB2b2x1bWUpOwotCi0jaWZkZWYgTUJUS19QTEFURk9STV9BU1IxODAzCi1pbnQgbHlucV9hdWRpb191YnVzX2NsaWVudF9pbml0KG1idGtfYXVkaW9fY2xpZW50X2hhbmRsZV90eXBlICpwaF9hdWRpbywgbWJ0a19kdG1mX2NiIGNiKTsKLQotaW50IGx5bnFfYXVkaW9fdWJ1c19jbGllbnRfZGVpbml0KG1idGtfYXVkaW9fY2xpZW50X2hhbmRsZV90eXBlIGhfYXVkaW8pOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfTFlOUV9BVURJT19BUElfSCAqLwotCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2F1dG9zdXNwZW5kLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2F1dG9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWZkMTIxOQotLS0gL2Rldi9udWxsCisrKyBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfYXV0b3N1c3BlbmQuaApAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworc3RydWN0IHRpbWVfaW5mb190Cit7CisgICAgbG9uZyBzbGVlcF9zdGFydF90aW1lOworICAgIGxvbmcgd2FrZXVwX3RpbWU7Cit9OworCitpbnQgbHlucV9hdXRvc2xlZXBfZW5hYmxlKHZvaWQpOworaW50IGx5bnFfYXV0b3NsZWVwX2Rpc2FibGUodm9pZCk7CitpbnQgbHlucV93YWl0X3dha2V1cF9ldmVudChsb25nICpzbGVlcF9zdGFydF90aW1lLCBsb25nICogd2FrZXVwX3RpbWUpOworCisjaWZkZWYgTU9CSUxFVEVLX1RBUkdFVF9QTEFURk9STV9UMTA2CitpbnQgbHlucV9zZXRfbHBtb2RlKGludCBscF9tb2RlKTsKK2ludCByZWxlYXNlX3dha2VfbG9jayhjaGFyICpuYW1lKTsKK2ludCBhY3F1aXJlX3dha2VfbG9jayhpbnQgbG9jaywgY2hhciAqbmFtZSk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfY2FsbC5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9jYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2JiMzk4ZgotLS0gL2Rldi9udWxsCisrKyBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfY2FsbC5oCkBAIC0wLDAgKzEsMTgxIEBACisjaWZuZGVmIExZTlFfQ0FMTF9IDQorI2RlZmluZSBMWU5RX0NBTExfSCAxDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorI2RlZmluZSBMWU5RX1BIT05FX05VTUJFUl9NQVggMzINCisjZGVmaW5lIElOREVYX0lTX05VTUJFUiggYWxwaGFfY2hhciApICAgXA0KKyAgICggKCAoYWxwaGFfY2hhciA+PSAnMCcpICYmIChhbHBoYV9jaGFyIDw9ICc5JykgKSA/IDEgOiAwICkNCisjZGVmaW5lIExZTlFfQ0FMTF9NQVggMw0KKyNkZWZpbmUgTFlOUV9DQUxMX0ZBSUxfVkVORE9SX0NBVVNFIDY0DQorI2RlZmluZSBNQVhfSVBfTEVOR1RIIDEyOA0KKyNkZWZpbmUgTUFYX1ZMQU5fSU5GT19MRU5HVEggMzINCisjZGVmaW5lIE1BWF9TU1JDX0lORk9fTEVOR1RIIDEwICAgLyoyXjMyPTQyOTQ5NjcyOTYsIDEwIGRpZ2l0Ki8NCisNCit0eXBlZGVmIGVudW0gew0KKyAgICBMWU5RX0NBTExfRkFJTF9VTk9CVEFJTkFCTEVfTlVNQkVSID0gMSwNCisgICAgTFlOUV9DQUxMX0ZBSUxfTk9STUFMID0gMTYsDQorICAgIExZTlFfQ0FMTF9GQUlMX0JVU1kgPSAxNywNCisgICAgTFlOUV9DQUxMX0ZBSUxfQ09OR0VTVElPTiA9IDM0LA0KKyAgICBMWU5RX0NBTExfRkFJTF9BQ01fTElNSVRfRVhDRUVERUQgPSA2OCwNCisgICAgTFlOUV9DQUxMX0ZBSUxfQ0FMTF9CQVJSRUQgPSAyNDAsDQorICAgIExZTlFfQ0FMTF9GQUlMX0ZETl9CTE9DS0VEID0gMjQxLA0KKyAgICBMWU5RX0NBTExfRkFJTF9JTVNJX1VOS05PV05fSU5fVkxSID0gMjQyLA0KKyAgICBMWU5RX0NBTExfRkFJTF9JTUVJX05PVF9BQ0NFUFRFRCA9IDI0MywNCisgICAgTFlOUV9DQUxMX0ZBSUxfRElBTF9NT0RJRklFRF9UT19VU1NEID0gMjQ0LCAvKiBTVEsgQ2FsbCBDb250cm9sICovDQorICAgIExZTlFfQ0FMTF9GQUlMX0RJQUxfTU9ESUZJRURfVE9fU1MgPSAyNDUsDQorICAgIExZTlFfQ0FMTF9GQUlMX0RJQUxfTU9ESUZJRURfVE9fRElBTCA9IDI0NiwNCisgICAgTFlOUV9DQUxMX0ZBSUxfQ0RNQV9MT0NLRURfVU5USUxfUE9XRVJfQ1lDTEUgPSAxMDAwLA0KKyAgICBMWU5RX0NBTExfRkFJTF9DRE1BX0RST1AgPSAxMDAxLA0KKyAgICBMWU5RX0NBTExfRkFJTF9DRE1BX0lOVEVSQ0VQVCA9IDEwMDIsDQorICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfUkVPUkRFUiA9IDEwMDMsDQorICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfU09fUkVKRUNUID0gMTAwNCwNCisgICAgTFlOUV9DQUxMX0ZBSUxfQ0RNQV9SRVRSWV9PUkRFUiA9IDEwMDUsDQorICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfQUNDRVNTX0ZBSUxVUkUgPSAxMDA2LA0KKyAgICBMWU5RX0NBTExfRkFJTF9DRE1BX1BSRUVNUFRFRCA9IDEwMDcsDQorICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfTk9UX0VNRVJHRU5DWSA9IDEwMDgsIC8qIEZvciBub24tZW1lcmdlbmN5IG51bWJlciBkaWFsZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbWVyZ2VuY3kgY2FsbGJhY2sgbW9kZSAqLw0KKyAgICBMWU5RX0NBTExfRkFJTF9DRE1BX0FDQ0VTU19CTE9DS0VEID0gMTAwOSwgLyogQ0RNQSBuZXR3b3JrIGFjY2VzcyBwcm9iZXMgYmxvY2tlZCAqLw0KKyAgICBMWU5RX0NBTExfRkFJTF9FUlJPUl9VTlNQRUNJRklFRCA9IDB4ZmZmZg0KK30gbHlucV9sYXN0X2NhbGxfZmFpbF9jYXVzZV90Ow0KK3R5cGVkZWYgc3RydWN0DQorew0KKyAgICBseW5xX2xhc3RfY2FsbF9mYWlsX2NhdXNlX3QgY2F1c2VfY29kZTsNCisgICAgY2hhciB2ZW5kb3JfY2F1c2VbTFlOUV9DQUxMX0ZBSUxfVkVORE9SX0NBVVNFXTsNCit9bHlucUxhc3RDYWxsRmFpbENhdXNlOw0KK2ludCBseW5xX2luaXRfY2FsbChpbnQgdVRva2VuKTsNCitpbnQgbHlucV9kZWluaXRfY2FsbCgpOw0KK2ludCBseW5xX2NhbGwoaW50ICpoYW5kbGUsY2hhciBhZGRyW10pOw0KK2ludCBseW5xX2NhbGxfYW5zd2VyKCk7DQoraW50IGx5bnFfY2FsbF9odW5ndXAoaW50KmhhbmRsZSk7DQoraW50IGx5bnFfY2FsbF9odW5ndXBfYWxsKCk7DQoraW50IGx5bnFfc2V0X2F1dG9fYW5zd2VyY2FsbChjb25zdCBpbnQgbW9kZSk7DQoraW50IGx5bnFfZ2V0X211dGVfbWljKGludCAqc3RhdHVzKTsNCitpbnQgbHlucV9zZXRfbXV0ZV9taWMoY29uc3QgaW50IGVuYWJsZSk7DQoraW50IGx5bnFfZ2V0X3NwZWVjaF92b2x1bWUoaW50ICp2b2x1bWUpOw0KK2ludCBseW5xX3NldF9zcGVlY2hfdm9sdW1lKGNvbnN0IGludCB2b2x1bWUpOw0KK2ludCBseW5xX2luY2FsbF9yZWNvcmRfc3RhcnQoY29uc3QgY2hhciogZmlsZV9wYXRoKTsNCitpbnQgbHlucV9pbmNhbGxfcmVjb3JkX3N0b3AoKTsNCitpbnQgbHlucV9zZXRfRFRNRihjb25zdCBjaGFyIGNhbGxudW0pOw0KK2ludCBseW5xX3NldF9EVE1GX3ZvbHVtZShjb25zdCBpbnQgdm9sdW1lKTsNCitpbnQgbHlucV9nZXRfY3VycmVudF9jYWxsX3N0YXRlKGludCAqaGFuZGxlLCAgICBpbnQgKmNhbGxfc3RhdGUsaW50ICp0b2EsaW50ICpkaXJlY3Rpb24sY2hhciBhZGRyW10pOw0KKy8qbGVpIGFkZCBmb3IgVDhUU0stMTcgMjAyMi83LzIwKi8NCitpbnQgbHlucV9zd2l0Y2hfd2FpdGluZ19vcl9ob2xkaW5nX2FuZF9hY3RpdmUodm9pZCk7DQoraW50IGx5bnFfaGFuZ3VwX3dhaXRpbmdfb3JfYmFja2dyb3VuZCh2b2lkKTsNCitpbnQgbHlucV9oYW5ndXBfZm9yZWdyb3VuZF9yZXN1bWVfYmFja2dyb3VuZCh2b2lkKTsNCisNCisvKiBhZGQgZm9yIFQxMDZidWctMjEzIDIwMjMvOS8xOCAqLw0KK3ZvaWQgbHlucV9yZWxlYXNlX3dhaXRfY2FsbCgpOw0KKw0KKy8qbGVpIGFkZCBmb3IgQVBJLTE2My9BUEktMTY0IDIwMjMvMS8zKi8NCisvKioNCisgKiBAYnJpZWYgICAgICAgICAgICAgICAgICB3YWl0X2NhbGxfc3RhdGVfY2hhbmdlDQorICogICAgICAgICAgICAgICAgICAgICAgICANCisgKiBAcGFyYW0gIGhhbmRsZSAgICAgICAgICAgIGNhbGxfaWQgICAgICAgICAgICANCisgKiBAcmV0dXJuIGludA0KKyAqLw0KK2ludCBseW5xX3dhaXRfY2FsbF9zdGF0ZV9jaGFuZ2UoaW50ICpoYW5kbGUpOw0KKy8qbGVpIGFkZCBmb3IgQVBJLTE2My9BUEktMTY0IDIwMjMvMS8zKi8NCisvKmxlaSBhZGQgZm9yIFQ4VFNLLTE3IDIwMjIvNy8yMCovDQorDQorI2lmZGVmIEVDQUxMX1NVUFBPUlQNCit0eXBlZGVmIGVudW17DQorICAgIExZTlFfRUNBTExfU0VUX05VTUJFUiA9IDAsICAgICAvKiBTZXQgTnVtYmVyICovDQorICAgIExZTlFfRUNBTExfU0VUX1VSSSA9IDEsICAgICAgLyogU2V0IFVyaSAqLyAgIA0KK31MWU5RX0VDYWxsX1NldF9UeXBlOw0KKw0KK3R5cGVkZWYgZW51bXsNCisgICAgTFlOUV9FTUVSX0NBVF9NQU5VQUxfRUNBTEwgPSAwLCAgICAgIC8qIE1hbnVhbCBFbWVyZ2VuY3kgZUNhbGwgKi8NCisgICAgTFlOUV9FTUVSX0NBVF9BVVRPX0VDQUxMID0gMSwgICAgIC8qICBBdXRvbWF0aWMgRW1lcmdlbmN5IGVDYWxsICovDQorfUxZTlFfRUNhbGxfQ2F0ZWdvcnk7DQorDQordHlwZWRlZiBlbnVtew0KKyAgICBMWU5RX0VDQUxMX1RFU1QgPSAwLCAgICAgLyogVGVzdCBlQ2FsbCAqLw0KKyAgICBMWU5RX0VDQUxMX0VNRVJHRU5DWSA9IDEsICAgICAgLyogRW1lcmdlbmN5IGVDYWxsICovDQorICAgIExZTlFfRUNBTExfUkVDT05GSUcgPSAyLCAgICAgLyogIFJlY29uZmlndXJhdGlvbiBlQ2FsbCAqLw0KKyAgICBMWU5RX0VDQUxMX01PX01BWD0zLA0KKyAgICBMWU5RX0VDQUxMX0NBTExCQUNLID0gMywgICAgIC8qICBDYWxsYmFjayBlQ2FsbCAqLw0KKyAgICBMWU5RX0VDQUxMX1ZBUl9NQVgsIA0KKyAgICBMWU5RX0VDQUxMX1ZBUl9OT05FPUxZTlFfRUNBTExfVkFSX01BWCwNCit9TFlOUV9FQ2FsbF9WYXJpYW50Ow0KKw0KK3R5cGVkZWYgZW51bXsNCisgICAgTFlOUV9FQ0FMTF9TRU5ESU5HX1NUQVJUID0gMSwNCisgICAgTFlOUV9FQ0FMTF9TRU5ESU5HX01TRCA9IDIsDQorICAgIExZTlFfRUNBTExfTExBQ0tfUkVDRUlWRUQgPSAzLA0KKyAgICBMWU5RX0VDQUxMX0FMQUNLX1BPU0lUSVZFX1JFQ0VJVkVEID0gNCwNCisgICAgTFlOUV9FQ0FMTF9BTEFDS19DTEVBUkRPV05fUkVDRUlWRUQgPSA1LA0KKyAgICBMWU5RX0VDQUxMX0RBSUxJTkcgPSA5LA0KKyAgICBMWU5RX0VDQUxMX0FMRVJUSU5HID0gMTAsDQorICAgIExZTlFfRUNBTExfQUNUSVZFID0gMTEsDQorICAgIExZTlFfRUNBTExfRElTQ09OTkVDVEVEID0gMTIsDQorICAgIExZTlFfRUNBTExfSU1TX0FDVElWRSA9IDEzLA0KKyAgICBMWU5RX0VDQUxMX0lNU19ESVNDT05ORUNURUQgPSAxNCwNCisgICAgTFlOUV9FQ0FMTF9BQk5PUk1BTF9IQU5HVVA9MTUsDQorICAgIExZTlFfRUNBTExfSU1TX01TRF9BQ0sgPSAyMCwNCisgICAgTFlOUV9FQ0FMTF9JTVNfVVBEQVRFX01TRCA9IDIxLA0KKyAgICBMWU5RX0VDQUxMX0lNU19JTl9CQU5EX1RSQU5TRkVSID0gMjIsDQorICAgIExZTlFfRUNBTExfSU1TX01TRF9OQUNLID0gMjMsDQorICAgIExZTlFfRUNBTExfSU1TX1NSVkNDID0gMjQsDQorICAgIExZTlFfRUNBTExfT05MWV9ERVJFR0lTVFJBVElPTiA9IDMxLA0KKyAgICBMWU5RX0VDQUxMX01BWV9ERVJFR0lTVEVSID0gMzIsDQorICAgIExZTlFfRUNBTExfUFNBUF9DQUxMQkFDS19TVEFSVCA9IDQwLA0KKyAgICBMWU5RX0VDQUxMX1BTQVBfQ0FMTEJBQ0tfSU1TX1VQREFURV9NU0QgPSA0MSwNCisgICAgTFlOUV9FQ0FMTF9TRU5ESU5HX1NUQVJUX0lOX1ZPSUNFPTgwMDAsICAgIA0KKyAgICBMWU5RX0VDQUxMX1QyX1RJTUVSX09VVCA9IDkwMDAsDQorICAgIExZTlFfRUNBTExfVDVfVElNRVJfT1VUID0gOTAwMSwNCisgICAgTFlOUV9FQ0FMTF9UNl9USU1FUl9PVVQgPSA5MDAyLA0KKyAgICBMWU5RX0VDQUxMX1Q3X1RJTUVSX09VVCA9IDkwMDMsDQorICAgIExZTlFfRUNBTExfUkVESUFMX1RJTUVSX09VVCA9IDkwMDQsICAgIA0KKyAgICBMWU5RX0VDQUxMX0FVVE9fQU5TX1RJTUVSX09VVCA9IDkwMDUsDQorICAgIExZTlFfRUNBTExfQVVUT19BTlNfSU1TX1RJTUVSX09VVCA9IDkwMDYsDQorICAgIExZTlFfRUNBTExfVU5TUEVDSUZJRUQgPSAweGZmZmYsDQorfUxZTlFfRUNhbGxfSW5kaWNhdGlvbjsNCisNCitpbnQgbHlucV9zZXRfdGVzdF9udW0oTFlOUV9FQ2FsbF9TZXRfVHlwZSB0eXBlLCBjb25zdCBjaGFyICp0ZXN0X251bSwgaW50IHRlc3RfbnVtX2xlbmd0aCk7DQoraW50IGx5bnFfZmFzdF9lY2FsbChpbnQqIGhhbmRsZSwgTFlOUV9FQ2FsbF9DYXRlZ29yeSBseW5xX2VjYWxsX2NhdCwgTFlOUV9FQ2FsbF9WYXJpYW50IGx5bnFfZWNhbGxfdmFyaWFudCwgIGNvbnN0IGNoYXIgKmFkZHIsIGludCBhZGRyX2xlbmd0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqbXNkX2RhdGEsIGludCBtc2RfbGVuZ3RoKTsNCitpbnQgbHlucV9zZXRfbXNkKGludCogaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2RfZGF0YSwgaW50IG1zZF9sZW5ndGgpOw0KK2ludCBseW5xX3NldF9pdnMoaW50IGVuYWJsZSk7DQoraW50IGx5bnFfaXZzX3B1c2hfbXNkKCk7DQoraW50IGx5bnFfd2FpdF9lY2FsbF9pbmRpY2F0aW9uKGludCogaGFuZGxlLCBMWU5RX0VDYWxsX0luZGljYXRpb24gKmVDYWxsX0luZGljYXRpb24pOw0KKyNlbmRpZg0KKw0KKy8qQXVkaW8gUGF0aCBzZXR0aW5nIGJlZ2luKi8NCit0eXBlZGVmIGVudW17DQorICAgIEFVRElPX01PREVfQ09ERUMgPSAwLCAgICAgLyogQ29kZWMgKi8NCisgICAgQVVESU9fTU9ERV9SVFAgPSAxLCAgICAgIC8qIFJUUCAqLyAgICAgICANCit9TFlOUV9BdWRpb19Nb2RlOw0KKw0KK3R5cGVkZWYgZW51bXsNCisgICAgUlRQX0NMSUVOVCA9IDAsICAgICANCisgICAgUlRQX1NFUlZFUiA9MSwNCisgICAgUlRQX01PREVfTUFYDQorfUxZTlFfUnRwX01vZGU7DQorDQordHlwZWRlZiBlbnVtew0KKyAgICBSdHBfU3NyY19yYW5kb20gPSAwLCAgICAgDQorICAgIFJ0cF9Tc3JjX3NwZWNpZmljID0xLCAgIA0KK31MWU5RX1J0cF9Tc3JjX01vZGU7DQorDQorLypzZXQqLw0KK2ludCBseW5xX3NldF92b2ljZV9hdWRpb19tb2RlKGNvbnN0IExZTlFfQXVkaW9fTW9kZSBhdWRpb19tb2RlKTsgDQoraW50IGx5bnFfc2V0X3JlbW90ZV9ydHBfaXAoY29uc3QgY2hhciogaXAsIGNvbnN0IGludCBpcF9sZW5ndGgpOw0KK2ludCBseW5xX3NldF92bGFuX2luZm8oY29uc3QgY2hhciogdmxhbl9pbmZvLCBjb25zdCBpbnQgdmxhbl9pbmZvX2xlbmd0aCk7DQoraW50IGx5bnFfc2V0X3J0cF9wb3J0KGNvbnN0IExZTlFfUnRwX01vZGUgcnRwX21vZGUsIGNvbnN0IGludCBwb3J0KTsNCitpbnQgbHlucV9zZXRfcnRwX3BhcmFtKGNvbnN0IGludCBjbG9ja19yYXRlLGNvbnN0IGludCBjaGFubmVscyxjb25zdCBpbnQgbGF0ZW5jeSk7IC8vb25seSBmb3IgY2xpZW50DQoraW50IGx5bnFfc2V0X2NhbGxfcnRwX3NzcmMoY29uc3QgTFlOUV9SdHBfU3NyY19Nb2RlIHNzcmNfbW9kZSwgY29uc3QgdW5zaWduZWQgaW50IHNzcmMpOw0KKw0KKy8qZ2V0Ki8NCitMWU5RX0F1ZGlvX01vZGUgbHlucV9nZXRfdm9pY2VfYXVkaW9fbW9kZSgpOw0KK2ludCBseW5xX2dldF9yZW1vdGVfcnRwX2lwKGNoYXIqIGlwLCBjb25zdCBpbnQgaXBfbGVuZ3RoKTsNCitpbnQgbHlucV9nZXRfdmxhbl9pbmZvKGNoYXIqIHZsYW5faW5mbywgY29uc3QgaW50IHZsYW5faW5mb19sZW5ndGgpOw0KK2ludCBseW5xX2dldF9ydHBfcG9ydChjb25zdCBMWU5RX1J0cF9Nb2RlIHJ0cF9tb2RlLCBpbnQqIHBvcnQpOw0KK2ludCBseW5xX2dldF9ydHBfcGFyYW0oaW50KiBjbG9ja19yYXRlLGludCogY2hhbm5lbHMsIGludCogbGF0ZW5jeSk7Ly9vbmx5IGZvciBjbGllbnQNCitpbnQgbHlucV9nZXRfY2FsbF9ydHBfc3NyYyhpbnQqIHNzcmNfbW9kLCB1bnNpZ25lZCBpbnQqIHNzcmMpOw0KKy8qQXVkaW8gUGF0aCBzZXR0aW5nIGVuZCovDQorDQordm9pZCBseW5xX3NldF90ZXN0X21vZGUoY29uc3QgaW50IHRlc3RfbW9kZSk7DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfY2FsbF9hcGkuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfY2FsbF9hcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODg5ODc1Zi4uMDAwMDAwMAotLS0gYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2NhbGxfYXBpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotKgotKiBEYXRhIDogMjAyMi8xMS8wNyAxNjo1NzoyOAotKiBBdXRob3IgOiBIYW5aaGl5dQotKi8KLQotI2lmZGVmIE1CVEtfUExBVEZPUk1fQVNSMTgwMwotI2luY2x1ZGUgIm1idGtfYXVkaW8uaCIKLSNlbmRpZgotCi10eXBlZGVmIGVudW0gewotICAgIExZTlFfQ0FMTF9GQUlMX1VOT0JUQUlOQUJMRV9OVU1CRVIgPSAxLAotICAgIExZTlFfQ0FMTF9GQUlMX05PUk1BTCA9IDE2LAotICAgIExZTlFfQ0FMTF9GQUlMX0JVU1kgPSAxNywKLSAgICBMWU5RX0NBTExfRkFJTF9DT05HRVNUSU9OID0gMzQsCi0gICAgTFlOUV9DQUxMX0ZBSUxfQUNNX0xJTUlUX0VYQ0VFREVEID0gNjgsCi0gICAgTFlOUV9DQUxMX0ZBSUxfTFlOUV9DQUxMX0JBUlJFRCA9IDI0MCwKLSAgICBMWU5RX0NBTExfRkFJTF9GRE5fQkxPQ0tFRCA9IDI0MSwKLSAgICBMWU5RX0NBTExfRkFJTF9JTVNJX1VOS05PV05fSU5fVkxSID0gMjQyLAotICAgIExZTlFfQ0FMTF9GQUlMX0lNRUlfTk9UX0FDQ0VQVEVEID0gMjQzLAotICAgIExZTlFfQ0FMTF9GQUlMX0RJQUxfTU9ESUZJRURfVE9fVVNTRCA9IDI0NCwgLyogU1RLIExZTlFfQ0FMTCBDb250cm9sICovCi0gICAgTFlOUV9DQUxMX0ZBSUxfRElBTF9NT0RJRklFRF9UT19TUyA9IDI0NSwKLSAgICBMWU5RX0NBTExfRkFJTF9ESUFMX01PRElGSUVEX1RPX0RJQUwgPSAyNDYsCi0gICAgTFlOUV9DQUxMX0ZBSUxfQ0RNQV9MT0NLRURfVU5USUxfUE9XRVJfQ1lDTEUgPSAxMDAwLAotICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfRFJPUCA9IDEwMDEsCi0gICAgTFlOUV9DQUxMX0ZBSUxfQ0RNQV9JTlRFUkNFUFQgPSAxMDAyLAotICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfUkVPUkRFUiA9IDEwMDMsCi0gICAgTFlOUV9DQUxMX0ZBSUxfQ0RNQV9TT19SRUpFQ1QgPSAxMDA0LAotICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfUkVUUllfT1JERVIgPSAxMDA1LAotICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfQUNDRVNTX0ZBSUxVUkUgPSAxMDA2LAotICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfUFJFRU1QVEVEID0gMTAwNywKLSAgICBMWU5RX0NBTExfRkFJTF9DRE1BX05PVF9FTUVSR0VOQ1kgPSAxMDA4LCAvKiBGb3Igbm9uLWVtZXJnZW5jeSBudW1iZXIgZGlhbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBlbWVyZ2VuY3kgY2FsbGJhY2sgbW9kZSAqLwotICAgIExZTlFfQ0FMTF9GQUlMX0NETUFfQUNDRVNTX0JMT0NLRUQgPSAxMDA5LCAvKiBDRE1BIG5ldHdvcmsgYWNjZXNzIHByb2JlcyBibG9ja2VkICovCi0gICAgTFlOUV9DQUxMX0ZBSUxfRVJST1JfVU5TUEVDSUZJRUQgPSAweGZmZmYKLX0gbHlucV9sYXN0X2NhbGxfZmFpbF9jYXVzZV90OwotCi10eXBlZGVmIGVudW17Ci0gICAgQVVESU9fTU9ERV9DT0RFQyA9IDAsICAgICAvKiBDb2RlYyAqLwotICAgIEFVRElPX01PREVfUlRQID0gMSwgICAgICAvKiBSVFAgKi8KLX1MWU5RX0F1ZGlvX01vZGU7Ci0KLXR5cGVkZWYgZW51bXsKLSAgICBSVFBfQ0xJRU5UID0gMCwgICAgIC8q5a6i5oi356uv77yM5LuO6L+c56uv5ouJ5paH5Lu25Yiw5pys5Zyw5pKt5pS+Ki8KLVJUUF9TRVJWRVIgPTEsICAgICAvKuacjeWKoeWZqOerr++8jOaOqOaWh+S7tuWIsOi/nOerr+aSreaUviovCi1SVFBfTU9ERV9NQVgKLX1MWU5RX1J0cF9Nb2RlOwotCi10eXBlZGVmIGVudW17Ci0gICAgTFlOUV9DQUxMX0FDVElWRSwKLSAgICBMWU5RX0NBTExfSE9MRElORywKLSAgICBMWU5RX0NBTExfRElBTElORywKLSAgICBMWU5RX0NBTExfQUxFUlRJTkcsCi0gICAgTFlOUV9DQUxMX0lOQ09NSU5HLAotICAgIExZTlFfQ0FMTF9XQUlUSU5HLAotICAgIExZTlFfQ0FMTF9PRkZFUklORywKLX1MWU5RX0NhbGxfU3RhdGU7Ci0KLWludCBseW5xX2luaXRfY2FsbChpbnQgdVRva2VuKTsKLWludCBseW5xX2RlaW5pdF9jYWxsKHZvaWQpOwotaW50IGx5bnFfY2FsbChpbnQgKmhhbmRsZSwgY2hhciBhZGRyW10pOwotaW50IGx5bnFfY2FsbF9hbnN3ZXIoKTsKLWludCBseW5xX2NhbGxfaHVuZ3VwX2FsbCgpOwotaW50IGx5bnFfY2FsbF9odW5ndXAoaW50ICpoYW5kbGUpOwotaW50IGx5bnFfaGFuZ3VwX3dhaXRpbmdfb3JfYmFja2dyb3VuZCh2b2lkKTsKLWludCBseW5xX3N3aXRjaF93YWl0aW5nX29yX2hvbGRpbmdfYW5kX2FjdGl2ZSh2b2lkKTsKLWludCBseW5xX2hhbmd1cF9mb3JlZ3JvdW5kX3Jlc3VtZV9iYWNrZ3JvdW5kKHZvaWQpOwotaW50IGx5bnFfd2FpdF9pbmNvbWluZ19jYWxsKHZvaWQgKmluY29taW5nX2NhbGxfY2IpOwotaW50IGx5bnFfZ2V0X211dGVfbWljIChpbnQgKnN0YXR1cyk7Ci1pbnQgbHlucV9zZXRfbXV0ZV9taWMoY29uc3QgaW50IGVuYWJsZSk7Ci1pbnQgbHlucV9zZXRfRFRNRihjb25zdCBjaGFyIGNhbGxudW0pOwotaW50IGx5bnFfZ2V0X2N1cnJlbnRfY2FsbF9zdGF0ZShpbnQgKmhhbmRsZSxpbnQgKmNhbGxfc3RhdGUsaW50KnRvYSxpbnQgKmRpcmVjdGlvbixjaGFyIGFkZHJbXSk7Ci0vL3ZvaWQgbHlucV9hdWRpb192b2x1bWVfY2IoaW50IHZvbHVtZSk7Ci1pbnQgbHlucV9zZXRfc3BlZWNoX3ZvbHVtZShjb25zdCBpbnQgdm9sdW1lKTsKLWludCBseW5xX2dldF9zcGVlY2hfdm9sdW1lKGludCAqIHZvbHVtZSk7CmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2RhdGEuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlZTE1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2RhdGEuaApAQCAtMCwwICsxLDgyIEBACisjaWZuZGVmIExZTlFfREFUQV9ICisjZGVmaW5lIExZTlFfREFUQV9IIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2RlZmluZSBMWU5RX0FQTl9DSEFOTkVMX01BWCAxMAorI2RlZmluZSBMWU5RX1BEUF9UWVBFX01BWF9MRU4gMTYKKyNkZWZpbmUgTFlOUV9JRkFDRV9OQU1FX01BWF9MRU4gNTAKKyNkZWZpbmUgTFlOUV9BUE5fTUFYX0xFTiA1MAorI2RlZmluZSBMWU5RX1RZUEVfTUFYX0xFTiA1MAorI2RlZmluZSBMWU5RX0FERFJFU1NFU19NQVhfTEVOIDEwMAorI2RlZmluZSBMWU5RX0ROU0VTX01BWF9MRU4gMjU2CisjZGVmaW5lIExZTlFfR0FURVdBWVNfTUFYX0xFTiA1MAorI2RlZmluZSBMWU5RX1BDU0NGX01BWF9MRU4gMjU2CisjZGVmaW5lIExZTlFfQVBOX1RZUEVfTUFYX0xFTiA1MAorI2RlZmluZSBMWU5RX1BEUF9BRERSX01BWF9MRU4gNjQKKyNkZWZpbmUgTFlOUV9ETlNfQUREUl9NQVhfTEVOIDI1NgorI2RlZmluZSBMWU5RX0dFVFdBWVNfQUREUl9NQVhfTEVOIDY0CisjZGVmaW5lIExZTlFfUE9YWV9BRERSX01BWF9MRU4gNjQKKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAgICAgICAgICAgc3RhdHVzOyAgICAgLyogQSBSSUxfRGF0YUNhbGxGYWlsQ2F1c2UsIDAgd2hpY2ggaXMgUERQX0ZBSUxfTk9ORSBpZiBubyBlcnJvciAqLworICAgIGludCAgICAgICAgICAgIHN1Z2dlc3RlZFJldHJ5VGltZTsgLyogSWYgc3RhdHVzICE9IDAsIHRoaXMgZmllbGRzIGluZGljYXRlcyB0aGUgc3VnZ2VzdGVkIHJldHJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjay1vZmYgdGltZXIgdmFsdWUgUklMIHdhbnRzIHRvIG92ZXJyaWRlIHRoZSBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmUtY29uZmlndXJlZCBpbiBGVy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdW5pdCBpcyBtaWxpc2Vjb25kcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgPCAwIG1lYW5zIG5vIHZhbHVlIGlzIHN1Z2dlc3RlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgMCBtZWFucyByZXRyeSBzaG91bGQgYmUgZG9uZSBBU0FQLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiBJTlRfTUFYKDB4N2ZmZmZmZmYpIG1lYW5zIG5vIHJldHJ5LiAqLworICAgIGludCAgICAgICAgICAgIGNpZDsgICAgICAgIC8qIENvbnRleHQgSUQsIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjYWxsICovCisgICAgaW50ICAgICAgICAgICAgYWN0aXZlOyAgICAgLyogMD1pbmFjdGl2ZSwgMT1hY3RpdmUvcGh5c2ljYWwgbGluayBkb3duLCAyPWFjdGl2ZS9waHlzaWNhbCBsaW5rIHVwICovCisgICAgY2hhciAgICAgICAgICAgdHlwZVtMWU5RX1BEUF9UWVBFX01BWF9MRU5dOyAgICAgICAvKiBPbmUgb2YgdGhlIFBEUF90eXBlIHZhbHVlcyBpbiBUUyAyNy4wMDcgc2VjdGlvbiAxMC4xLjEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlLCAiSVAiLCAiSVBWNiIsICJJUFY0VjYiLCBvciAiUFBQIi4gSWYgc3RhdHVzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBEUF9GQUlMX09OTFlfU0lOR0xFX0JFQVJFUl9BTExPV0VEIHRoaXMgaXMgdGhlIHR5cGUgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2ggYXMgIklQIiBvciAiSVBWNiIgKi8KKyAgICBjaGFyICAgICAgICAgICBpZm5hbWVbTFlOUV9JRkFDRV9OQU1FX01BWF9MRU5dOyAgICAgLyogVGhlIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUgKi8KKyAgICBjaGFyICAgICAgICAgICBhZGRyZXNzZXNbTFlOUV9QRFBfQUREUl9NQVhfTEVOXTsgIC8qIEEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgYWRkcmVzc2VzIHdpdGggb3B0aW9uYWwgIi8iIHByZWZpeCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4sICIxOTIuMC4xLjMiIG9yICIxOTIuMC4xLjExLzE2IDIwMDE6ZGI4OjoxLzY0Ii4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IG5vdCBiZSBlbXB0eSwgdHlwaWNhbGx5IDEgSVB2NCBvciAxIElQdjYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIG9mIGVhY2guIElmIHRoZSBwcmVmaXggbGVuZ3RoIGlzIGFic2VudCB0aGUgYWRkcmVzc2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBhc3N1bWVkIHRvIGJlIHBvaW50IHRvIHBvaW50IHdpdGggSVB2NCBoYXZpbmcgYSBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIG9mIDMyIGFuZCBJUHY2IDEyOC4gKi8KKyAgICBjaGFyICAgICAgICAgICBkbnNlc1tMWU5RX0ROU19BRERSX01BWF9MRU5dOyAgICAgIC8qIEEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgRE5TIHNlcnZlciBhZGRyZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZy4sICIxOTIuMC4xLjMiIG9yICIxOTIuMC4xLjExIDIwMDE6ZGI4OjoxIi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IGJlIGVtcHR5LiAqLworICAgIGNoYXIgICAgICAgICAgIGdhdGV3YXlzW0xZTlFfR0VUV0FZU19BRERSX01BWF9MRU5dOyAgIC8qIEEgc3BhY2UtZGVsaW1pdGVkIGxpc3Qgb2YgZGVmYXVsdCBnYXRld2F5IGFkZHJlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nLiwgIjE5Mi4wLjEuMyIgb3IgIjE5Mi4wLjEuMTEgMjAwMTpkYjg6OjEiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXkgYmUgZW1wdHkgaW4gd2hpY2ggY2FzZSB0aGUgYWRkcmVzc2VzIHJlcHJlc2VudCBwb2ludAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwb2ludCBjb25uZWN0aW9ucy4gKi8KKyAgICBjaGFyICAgICAgICAgICBwY3NjZltMWU5RX1BPWFlfQUREUl9NQVhfTEVOXTsgICAgLyogdGhlIFByb3h5IENhbGwgU3RhdGUgQ29udHJvbCBGdW5jdGlvbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgUENPKFByb3RvY29sIENvbmZpZ3VyYXRpb24gT3B0aW9uKSBmb3IgSU1TIGNsaWVudC4gKi8KKyAgICBpbnQgICAgICAgICAgICBtdHU7ICAgICAgICAvKiBNVFUgcmVjZWl2ZWQgZnJvbSBuZXR3b3JrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIDw9IDAgbWVhbnMgbmV0d29yayBoYXMgZWl0aGVyIG5vdCBzZW50IGEgdmFsdWUgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCBhbiBpbnZhbGlkIHZhbHVlICovCit9IGx5bnFfZGF0YV9jYWxsX3Jlc3BvbnNlX3YxMV90OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBpbmRleDsKKyAgICBjaGFyIGFwbltMWU5RX0FQTl9NQVhfTEVOXTsKKyAgICBjaGFyIGFwblR5cGVbTFlOUV9BUE5fVFlQRV9NQVhfTEVOXTsKK31seW5xX2Fwbl9pbmZvOworCitpbnQgbHlucV9pbml0X2RhdGEoaW50IHVUb2tlbik7CitpbnQgbHlucV9kZWluaXRfZGF0YSgpOworaW50IGx5bnFfc2V0dXBfZGF0YV9jYWxsKGludCAqaGFuZGxlKTsKK2ludCBseW5xX2RlYWN0aXZlX2RhdGFfY2FsbChpbnQgKmhhbmRsZSk7CitpbnQgbHlucV9zZXR1cF9kYXRhX2NhbGxfc3AoaW50ICpoYW5kbGUsY2hhciAqYXBuLGNoYXIgKmFwblR5cGUsY2hhciAqdXNlcixjaGFyICpwYXNzd29yZCxjaGFyICphdXRoVHlwZSxjaGFyICpub3JtYWxQcm90b2NvbCxjaGFyICpyb2FtaW5nUHJvdG9jb2wpOworaW50IGx5bnFfc2V0dXBfZGF0YV9jYWxsX3NwX3QxMDYoaW50ICpoYW5kbGUsY2hhciAqYXBuLGNoYXIgKmFwblR5cGUsY2hhciAqdXNlcixjaGFyICpwYXNzd29yZCxjaGFyICphdXRoVHlwZSxjaGFyICpub3JtYWxQcm90b2NvbCxjaGFyICpyb2FtaW5nUHJvdG9jb2wpOworLy9pbnQgbHlucV9kZWFjdGl2ZV9kYXRhX2NhbGxfc3AoaW50ICpoYW5kbGUsY2hhciAqYXBuVHlwZSk7CitpbnQgbHlucV9nZXRfZGF0YV9jYWxsX2xpc3QoaW50ICpoYW5kbGUsbHlucV9kYXRhX2NhbGxfcmVzcG9uc2VfdjExX3QgKmRhdGFDYWxsTGlzdCk7CitpbnQgbHlucV93YWl0X2RhdGFfY2FsbF9zdGF0ZV9jaGFuZ2UoaW50ICpoYW5kbGUpOworaW50IGx5bnFfbW9kaWZ5X2Fwbl9kYihjb25zdCBpbnQgY21kLGNoYXIgKmlkLGNoYXIgKm1jYyxjaGFyICptbmMsY2hhciAqYXBuLGNoYXIgKmFwbnR5cGUsY2hhciAqdXNlcixjaGFyICpwYXNzd29yZCxjaGFyICpub3JtYWxwcm90b2NvbCxjaGFyICpyb2FtaW5ncHJvdG9jb2wsY2hhciAqY2FycmllcixjaGFyICpvdXQpOworaW50IGx5bnFfcmVzZXRfYXBuKGNoYXIgKnJlc3VsdCk7CitpbnQgbHlucV9nZXRfYXBuX3RhYmxlKGludCAqc2l6ZSxseW5xX2Fwbl9pbmZvICoqbGlzdCk7Cit2b2lkIGx5bnFfcmVsZWFzZV93YWl0X2RhdGFfY2FsbCgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2RlZmxvZy5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9kZWZsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZmVjZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9kZWZsb2cuaApAQCAtMCwwICsxLDczIEBACisjaWZuZGVmIF9fTFlOUV9ERUZMT0dfSF9fDQorI2RlZmluZSBfX0xZTlFfREVGTE9HX0hfXw0KKyNpbmNsdWRlICJsaWJsb2cuaCINCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCit0eXBlZGVmIHZvaWQgKCpMWU5RX1dSSVRFX0xPR19QVFIpKGxvZ19sZXZlbF9lbnVtIGxldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7DQorZXh0ZXJuIExZTlFfV1JJVEVfTE9HX1BUUiBseW5xX3dyaXRlX2xvZzsNCitMWU5RX1dSSVRFX0xPR19QVFIgbHlucV9sb2dfZnVuY3Rpb25faW5pdChjb25zdCBjaGFyICpsb2dfbmFtZSk7DQorDQoraW50IGx5bnFfc3lzbG9nX3NldF9maWxlX3NpemUoaW50IHZhbHVlKTsNCitpbnQgbHlucV9zeXNsb2dfZ2V0X2ZpbGVfc2l6ZSh2b2lkKTsNCitpbnQgbHlucV9zeXNsb2dfc2V0X2ZpbGVfcm90YXRlKGludCB2YWx1ZSk7DQoraW50IGx5bnFfc3lzbG9nX2dldF9maWxlX3JvdGF0ZSh2b2lkKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorDQorI2RlZmluZSBseW5xX2xvZ192ZXJib3NlKC4uLikgIGRvIHsgbHlucV93cml0ZV9sb2coTE9HX1ZFUkJPU0UsX19WQV9BUkdTX18pO30gd2hpbGUgKDApDQorI2RlZmluZSBseW5xX2xvZ19lcnJvciguLi4pICBkbyB7bHlucV93cml0ZV9sb2coTE9HX0VSUk9SLF9fVkFfQVJHU19fKTt9IHdoaWxlICgwKQ0KKyNkZWZpbmUgbHlucV9sb2dfd2FybmluZyguLi4pICBkbyB7bHlucV93cml0ZV9sb2coTE9HX1dBUk5JTkcsX19WQV9BUkdTX18pO30gd2hpbGUgKDApDQorI2RlZmluZSBseW5xX2xvZ19pbmZvKC4uLikgIGRvIHtseW5xX3dyaXRlX2xvZyhMT0dfSU5GTyxfX1ZBX0FSR1NfXyk7fSB3aGlsZSAoMCkNCisjZGVmaW5lIGx5bnFfbG9nX2RlYnVnKC4uLikgIGRvIHtseW5xX3dyaXRlX2xvZyhMT0dfREVCVUcsX19WQV9BUkdTX18pO30gd2hpbGUgKDApDQorDQorI2RlZmluZSBMWVZFUkJMT0coLi4uKSAgZG8ge2x5bnFfd3JpdGVfbG9nKExPR19WRVJCT1NFLF9fVkFfQVJHU19fKTt9IHdoaWxlICgwKQ0KKyNkZWZpbmUgTFlFUlJMT0coLi4uKSAgZG8ge2x5bnFfd3JpdGVfbG9nKExPR19FUlJPUixfX1ZBX0FSR1NfXyk7fSB3aGlsZSAoMCkNCisjZGVmaW5lIExZV0FSTkxPRyguLi4pICBkbyB7bHlucV93cml0ZV9sb2coTE9HX1dBUk5JTkcsX19WQV9BUkdTX18pO30gd2hpbGUoMCkNCisjZGVmaW5lIExZSU5GTE9HKC4uLikgIGRvIHtseW5xX3dyaXRlX2xvZyhMT0dfSU5GTyxfX1ZBX0FSR1NfXyk7fSB3aGlsZSAoMCkNCisjZGVmaW5lIExZREJHTE9HKC4uLikgIGRvIHtseW5xX3dyaXRlX2xvZyhMT0dfREVCVUcsX19WQV9BUkdTX18pO30gd2hpbGUgKDApDQorDQorLy8ganVzdCBmb3IgY29tY29tcGF0aWJpbGl0eSwgZG8gbm90aGluZw0KKyNkZWZpbmUgTFlMT0dTRVQoYSkgZG97O313aGlsZSgwKQ0KKyNkZWZpbmUgTFlMT0dFSU5JVChZKSBkb3s7fXdoaWxlKDApDQorDQorI2lmbmRlZiBBTE9HVg0KKyNkZWZpbmUgQUxPR1YoLi4uKSBkbyB7bHlucV93cml0ZV9sb2coTE9HX1ZFUkJPU0UsX19WQV9BUkdTX18pO30gd2hpbGUgKDApDQorI2VuZGlmDQorDQorI2lmbmRlZiBBTE9HRQ0KKyNkZWZpbmUgQUxPR0UoLi4uKSBkbyB7bHlucV93cml0ZV9sb2coTE9HX0VSUk9SLF9fVkFfQVJHU19fKTt9IHdoaWxlICgwKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgQUxPR1cNCisjZGVmaW5lIEFMT0dXKC4uLikgZG8ge2x5bnFfd3JpdGVfbG9nKExPR19XQVJOSU5HLF9fVkFfQVJHU19fKTt9IHdoaWxlICgwKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgQUxPR0kNCisjZGVmaW5lIEFMT0dJKC4uLikgZG8ge2x5bnFfd3JpdGVfbG9nKExPR19JTkZPLF9fVkFfQVJHU19fKTt9IHdoaWxlICgwKQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgQUxPR0QNCisjZGVmaW5lIEFMT0dEKC4uLikgZG8ge2x5bnFfd3JpdGVfbG9nKExPR19ERUJVRyxfX1ZBX0FSR1NfXyk7fSB3aGlsZSAoMCkNCisjZW5kaWYNCisNCisjZGVmaW5lIERFRklORV9MWU5RX0xJQl9MT0codGFnKSBcDQorICAgIExZTlFfV1JJVEVfTE9HX1BUUiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkgbHlucV93cml0ZV9sb2cgPSBOVUxMOyBcDQorICAgIHZvaWQgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSB0YWcjI19pbml0KCkgXA0KKyAgICB7IFwNCisgICAgICAgIGx5bnFfd3JpdGVfbG9nID0gbHlucV9sb2dfZnVuY3Rpb25faW5pdCgjdGFnKTsgXA0KKyAgICB9DQorDQorI2RlZmluZSBERUZJTkVfTFlOUV9FWEVfTE9HKHRhZykgXA0KKyAgICBMWU5RX1dSSVRFX0xPR19QVFIgX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpIGx5bnFfd3JpdGVfbG9nID0gTlVMTDsgXA0KKyAgICB2b2lkIF9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdGFnIyNfaW5pdCgpIFwNCisgICAgeyBcDQorICAgICAgICBseW5xX3dyaXRlX2xvZyA9IGx5bnFfbG9nX2Z1bmN0aW9uX2luaXQoI3RhZyk7IFwNCisgICAgICAgIGx5bnFfbG9nX2NvbmZpZ3VyYXRpb25faW5pdCgjdGFnKTsgXA0KKyAgICB9DQorDQorI2VuZGlmICAvL19fTFlOUV9ERUZMT0dfSF9fDQpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9lY2FsbF9hcGkuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfZWNhbGxfYXBpLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU4YjZlNDEuLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9lY2FsbF9hcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSNpZm5kZWYgTFlOUV9FQ0FMTF9ICi0jZGVmaW5lIExZTlFfRUNBTExfSAotI2luY2x1ZGUgIm1idGtfdHlwZS5oIgotI2luY2x1ZGUgIm1idGtfbG9nLmgiCi0KLXR5cGVkZWYgdWludDMyIGVjYWxsX2hhbmRsZV90eXBlOwotCi10eXBlZGVmIGVudW17Ci0gICAgTFlOUV9FQ0FMTF9TRVRfTlVNQkVSID0gMCwgICAgIC8qIFNldCBOdW1iZXIgKi8KLSAgICBMWU5RX0VDQUxMX1NFVF9VUkkgPSAxLCAgICAgIC8qIFNldCBVcmkgKi8KLX1MWU5RX0VDYWxsX1NldF9UeXBlOwotCi10eXBlZGVmIGVudW17Ci0gICAgTFlOUV9FTUVSX0NBVF9NQU5VQUxfRUNBTEwgPSAwLCAgICAgIC8qIE1hbnVhbCBFbWVyZ2VuY3kgZUNhbGwgKi8KLSAgICBMWU5RX0VNRVJfQ0FUX0FVVE9fRUNBTEwgPSAxLCAgICAgLyogIEF1dG9tYXRpYyBFbWVyZ2VuY3kgZUNhbGwgKi8KLX1MWU5RX0VDYWxsX0NhdGVnb3J5OwotCi10eXBlZGVmIGVudW17Ci0gICAgTFlOUV9FQ0FMTF9URVNUID0gMCwgICAgIC8qIFRlc3QgZUNhbGwgKi8KLSAgICBMWU5RX0VDQUxMX0VNRVJHRU5DWSA9IDEsICAgICAgLyogRW1lcmdlbmN5IGVDYWxsICovCi0gICAgTFlOUV9FQ0FMTF9SRUNPTkZJRyA9IDIsICAgICAvKiAgUmVjb25maWd1cmF0aW9uIGVDYWxsICovCi0gICAgTFlOUV9FQ0FMTF9WQVJfTUFYLAotfUxZTlFfRUNhbGxfVmFyaWFudDsKLQotdHlwZWRlZiBlbnVtewotICAgIExZTlFfRUNBTExfU0VORElOR19TVEFSVCA9IDEsCi0gICAgTFlOUV9FQ0FMTF9TRU5ESU5HX01TRCA9IDIsCi0gICAgTFlOUV9FQ0FMTF9MTEFDS19SRUNFSVZFRCA9IDMsCi0gICAgTFlOUV9FQ0FMTF9BTEFDS19QT1NJVElWRV9SRUNFSVZFRCA9IDQsCi0gICAgTFlOUV9FQ0FMTF9BTEFDS19DTEVBUkRPV05fUkVDRUlWRUQgPSA1LAotICAgIExZTlFfRUNBTExfQUNUSVZFID0gMTEsCi0gICAgTFlOUV9FQ0FMTF9ESVNDT05ORUNURUQgPSAxMiwKLSAgICBMWU5RX0VDQUxMX0lNU19BQ1RJVkUgPSAxMywKLSAgICBMWU5RX0VDQUxMX0lNU19ESVNDT05ORUNURUQgPSAxNCwKLSAgICBMWU5RX0VDQUxMX0FCTk9STUFMX0hBTkdVUD0xNSwKLSAgICBMWU5RX0VDQUxMX0lNU19NU0RfQUNLID0gMjAsCi0gICAgTFlOUV9FQ0FMTF9JTVNfVVBEQVRFX01TRCA9IDIxLAotICAgIExZTlFfRUNBTExfSU1TX0lOX0JBTkRfVFJBTlNGRVIgPSAyMiwKLSAgICBMWU5RX0VDQUxMX0lNU19NU0RfTkFDSyA9IDIzLAotICAgIExZTlFfRUNBTExfSU1TX1NSVkNDID0gMjQsCi0gICAgTFlOUV9FQ0FMTF9PTkxZX0RFUkVHSVNUUkFUSU9OID0gMzEsCi0gICAgTFlOUV9FQ0FMTF9NQVlfREVSRUdJU1RFUiA9IDMyLAotICAgIExZTlFfRUNBTExfUFNBUF9DQUxMQkFDS19TVEFSVCA9IDQwLAotICAgIExZTlFfRUNBTExfUFNBUF9DQUxMQkFDS19JTVNfVVBEQVRFX01TRCA9IDQxLAotICAgIExZTlFfRUNBTExfVDJfVElNRVJfT1VUID0gOTAwMCwKLSAgICBMWU5RX0VDQUxMX1Q1X1RJTUVSX09VVCA9IDkwMDEsCi0gICAgTFlOUV9FQ0FMTF9UNl9USU1FUl9PVVQgPSA5MDAyLAotICAgIExZTlFfRUNBTExfVDdfVElNRVJfT1VUID0gOTAwMywKLSAgICBMWU5RX0VDQUxMX1JFRElBTF9USU1FUl9PVVQgPSA5MDA0LAotICAgIExZTlFfRUNBTExfQVVUT19BTlNfVElNRVJfT1VUID0gOTAwNSwKLSAgICBMWU5RX0VDQUxMX0FVVE9fQU5TX0lNU19USU1FUl9PVVQgPSA5MDA2LAotICAgIExZTlFfRUNBTExfVU5TUEVDSUZJRUQgPSAweGZmZmYsCi19TFlOUV9FQ2FsbF9JbmRpY2F0aW9uOwotCi1pbnQgbHlucV9lY2FsbF9pbml0KGVjYWxsX2hhbmRsZV90eXBlICpoYW5kbGUpOwotaW50IGx5bnFfZWNhbGxfZGVpbml0KGVjYWxsX2hhbmRsZV90eXBlIGhhbmRsZSk7Ci1pbnQgbHlucV9zZXRfdGVzdF9udW0oTFlOUV9FQ2FsbF9TZXRfVHlwZSB0eXBlLCBjb25zdCBjaGFyICp0ZXN0X251bSwgaW50IHRlc3RfbnVtX2xlbmd0aCk7Ci1pbnQgbHlucV9zZXRfcmVjb25mX251bShMWU5RX0VDYWxsX1NldF9UeXBlIHR5cGUsIGNvbnN0IGNoYXIgKnJlY29uZl9udW0sIGludCByZWNvbmZfbnVtX2xlbmd0aCk7Ci1pbnQgbHlucV9mYXN0X2VjYWxsKGludCogaGFuZGxlLAotICAgICAgICAgICAgICAgICAgICBMWU5RX0VDYWxsX0NhdGVnb3J5IGx5bnFfZWNhbGxfY2F0LAotICAgICAgICAgICAgICAgICAgICBMWU5RX0VDYWxsX1ZhcmlhbnQgbHlucV9lY2FsbF92YXJpYW50LAotICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphZGRyLCBpbnQgYWRkcl9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZF9kYXRhLCBpbnQgbXNkX2xlbmd0aCk7Ci1pbnQgbHlucV9tYWtlX2VjYWxsKGludCogaGFuZGxlLCBMWU5RX0VDYWxsX1ZhcmlhbnQgdHlwZSk7Ci1pbnQgbHlucV9zZXRfbXNkKGludCogaGFuZGxlLCBjb25zdCB1bnNpZ25lZCBjaGFyICptc2RfZGF0YSwgaW50IG1zZF9sZW5ndGgpOwotaW50IGx5bnFfc2V0X2l2cyhpbnQgZW5hYmxlKTsKLWludCBseW5xX2l2c19wdXNoX21zZCgpOwotaW50IGx5bnFfd2FpdF9lY2FsbF9pbmRpY2F0aW9uKGludCogaGFuZGxlLCBMWU5RX0VDYWxsX0luZGljYXRpb24gKmVDYWxsX0luZGljYXRpb24pOwotaW50IGx5bnFfZWNhbGxfaHVuZ3VwKGludCBoYW5kbGUpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfZ25zcy5oIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9nbnNzLmgKaW5kZXggNjc5MDM5Yi4uNmUyODI3YSAxMDA3NTUKLS0tIGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9nbnNzLmgKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9nbnNzLmgKQEAgLTEsMTIxICsxLDY5IEBACi0jaWZuZGVmIF9fTUJUS19MWU5RX0dOU1NfSF9fCi0jZGVmaW5lIF9fTUJUS19MWU5RX0dOU1NfSF9fCisvKgorKiBxc2VyX2duc3MuaAorKgorKiBRU0VSIEdOU1MgaGVhZGVyIGZpbGUuCisqCisqIEF1dGhvciA6IGxiCisqIERhdGUgICA6IDIwMjMvMTEvMjMgMTE6MTM6MTgKKyovCisjaWZuZGVmIF9RU0VSX0dOU1NfSAorI2RlZmluZSBfUVNFUl9HTlNTX0gKKyNpbmNsdWRlICJtYnRrX3R5cGUuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVWludF90OwogCiB0eXBlZGVmIGVudW0KIHsKLSAgICBFX0xZTlFfTE9DX01TR19JRF9TVEFUVVNfSU5GTyA9IDAsCi0gICAgRV9MWU5RX0xPQ19NU0dfSURfTE9DQVRJT05fSU5GTywKLSAgICBFX0xZTlFfTE9DX01TR19JRF9TVl9JTkZPLAotICAgIEVfTFlOUV9MT0NfTVNHX0lEX05NRUFfSU5GTywKLSAgICBFX0xZTlFfTE9DX01TR19JRF9DQVBBQklMSVRJRVNfSU5GTywKLSAgICBFX0xZTlFfTE9DX01TR19JRF9BR1BTX1NUQVRVUywKLSAgICBFX0xZTlFfTE9DX01TR19JRF9OSV9OT1RJRklDQVRJT04sCi0gICAgRV9MWU5RX0xPQ19NU0dfSURfWFRSQV9SRVBPUlRfU0VSVkVSLAotfUVfTFlOUV9MT0NfTVNHX0lEX1Q7CisgICAgRV9NVF9MT0NfTVNHX0lEX0xPQ0FUSU9OX0lORk8sIC8qKjwgcHZfZGF0YSA9ICYgbW9wZW5fbG9jYXRpb25faW5mb190ICovCisgICAgRV9NVF9MT0NfTVNHX0lEX05NRUFfSU5GTywgLyoqPCBwdl9kYXRhID0gJiBtb3Blbl9nbnNzX25tZWFfaW5mb190ICovCit9IGVfbXNnX2lkX3Q7CiAKLSNkZWZpbmUgTFlOUV9MT0NfTk1FQV9NQVhfTEVOR1RIICAyNTUgICAgICAgICAgICAgICAgIC8qKiAgTk1FQSBzdHJpbmcgbWF4aW11bSBsZW5ndGguICovCit0eXBlZGVmIHZvaWQgKCpnbnNzX2hhbmRsZXJfZnVuY190KQorKAorICAgIFVpbnRfdCAqaF9sb2MsCisgICAgZV9tc2dfaWRfdCBlX21zZ19pZCwgLy/mtojmga8gSUQKKyAgICB2b2lkICpwdl9kYXRhLCAvL+a2iOaBr+WGheWuue+8jOWPluWGs+S6jiBJRO+8jOWmguS4i+ivtOaYjgorICAgIHZvaWQgKmNvbnRleHRfcHRyIC8v55So5LqO5Yy65YiG5ZOq5Liq6L+U5Zue55qE5raI5oGvCispLyogbHlucV9BZGRSeEluZE1zZ0hhbmRsZXJfdCovOworCiB0eXBlZGVmIHN0cnVjdAogewotICAgIGludDY0X3QgICAgIHRpbWVzdGFtcDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKjwgICBTeXN0ZW0gVGltZXN0YW1wLCBtYXJrZWQgZm9yIHdoZW4gZ290IHRoZSBubWVhIGRhdGEgKi8KLSAgICBpbnQgICAgICAgICBsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8ICAgTk1FQSBzdHJpbmcgbGVuZ3RoLiAqLwotICAgIGNoYXIgICAgICAgIG5tZWFbTFlOUV9MT0NfTk1FQV9NQVhfTEVOR1RIICsgMV07ICAgLyoqPCAgIE5NRUEgc3RyaW5nLiovCi19TFlOUV9MT0NfTk1FQV9JTkZPX1Q7ICAvKiBNZXNzYWdlICovCisgICAgdWludDMyX3QgeWVhcjsgLy8g5aSn5LqOIDE5ODAKKyAgICB1aW50MzJfdCBtb250aDsgLy8gMS0xMgorICAgIHVpbnQzMl90IGRheTsgLy8gMS0zMQorICAgIHVpbnQzMl90IGhvdXI7IC8vIDAtMjMKKyAgICB1aW50MzJfdCBtaW51dGU7IC8vIDAtNTkKKyAgICB1aW50MzJfdCBzZWNvbmQ7IC8vIDAtNTkKKyAgICB1aW50MzJfdCBtaWxsaXNlY29uZDsgLy8gMC05OTkKK30gTFlOUV9JTkpFQ1RfVElNRV9JTlRPX1Q7IC8qIE1lc3NhZ2UgKi8KIAotLyogY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXIgdG8gbHlucV9nbnNzX3J4X2luZF9tc2dfaGFuZGxlcgotICAgZV9tc2dfaWQ6IHdoaWNoIGtpbmQgb2YgbXNnIGNhbiBiZSByZWNlaXZlZCBkZXBlbmQgb24gdGhlIGJpdF9tYXNrIHNldCBpbiBRTF9MT0NfU2V0X0luZGljYXRpb25zOwotICAgcHZfZGF0YTogZGVwZW5kIG9uIHRoZSBlX21zZ19pZCB0eXBlLgotKi8KLXR5cGVkZWYgdm9pZCAoKmx5bnFfZ25zc19yeF9pbmRfbXNnX2hhbmRsZXJfdCkKLSgKLSAgICB1aW50MzIgIGhfbG9jLAotICAgIEVfTFlOUV9MT0NfTVNHX0lEX1QgICBlX21zZ19pZCwKLSAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqcHZfZGF0YSwKLSAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqY29udGV4dFB0cgotKTsKK3R5cGVkZWYgZW51bSB7CisgICAgREVMRVRFX05PVEhJTkcgPSAwLCAvKuS4jeWIoOmZpOaVsOaNriovCisgICAgREVMRVRFX0VQSEVNRVJJUyA9IDEsIC8q5Yig6Zmk5pif5Y6GKi8KKyAgICBERUxFVEVfQUxNQU5BQyA9IDIsIC8q5Yig6Zmk5Y6G5LmmKi8KKyAgICBERUxFVEVfUE9TSVRJT05fVElNRSA9IDMsIC8q5Yig6Zmk5pe26Ze05ZKM5L2N572u5L+h5oGvLiAqLworICAgIERFTEVURV9VVEMgPSA0LCAvKuWIoOmZpCBVVEMg5pe26Ze0Ki8KKyAgICBERUxFVEVfQUxMID0gNSAvKuWIoOmZpOaJgOaciSovCit9IERFTEVURV9BSURJTkdfREFUQV9UWVBFX1Q7CiAKLS8qKgotICogQGJyaWVmICAgICAgZnVuY3Rpb24gZGVzY3JpcHRpb24KLSAqCi0gKiBAZGV0YWlscyAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbgotICoKLSAqIEBwYXJhbSAgICAgIHBhcmFtCi0gKgotICogQHJldHVybiAgICAgcmV0dXJuIHR5cGUKLSAqLwotaW50IGx5bnFfZ25zc19pbml0KHZvaWQpOwotLyoqCi0gKiBAYnJpZWYgICAgICBmdW5jdGlvbiBkZXNjcmlwdGlvbgotICoKLSAqIEBkZXRhaWxzICAgIGRldGFpbGVkIGRlc2NyaXB0aW9uCi0gKgotICogQHBhcmFtICAgICAgcGFyYW0KLSAqCi0gKiBAcmV0dXJuICAgICByZXR1cm4gdHlwZQotICovCi1pbnQgbHlucV9nbnNzX2RlaW5pdCh2b2lkKTsKK2ludCBxc2VyX0duc3NfSW5pdCAodWludDMyX3QgKmhfZ25zcyk7CiAKLS8qKgotICogQGJyaWVmICAgICAgZnVuY3Rpb24gZGVzY3JpcHRpb24KLSAqCi0gKiBAZGV0YWlscyAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbgotICoKLSAqIEBwYXJhbSAgICAgIHBhcmFtCi0gKgotICogQHJldHVybiAgICAgcmV0dXJuIHR5cGUKLSAqLwotaW50IGx5bnFfZ25zc19jYWxsYmFja19yZWcobHlucV9nbnNzX3J4X2luZF9tc2dfaGFuZGxlcl90IGhhbmRsZXJQdHIpOworaW50IHFzZXJfR25zc19EZWluaXQgKHVpbnQzMl90IGhfZ25zcyk7CiAKLS8qKgotICogQGJyaWVmICAgICAgZnVuY3Rpb24gZGVzY3JpcHRpb24KLSAqCi0gKiBAZGV0YWlscyAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbgotICoKLSAqIEBwYXJhbSAgICAgIHBhcmFtCi0gKgotICogQHJldHVybiAgICAgcmV0dXJuIHR5cGUKLSAqLwotaW50IGx5bnFfZ25zc19zdGFydCh2b2lkKTsKLS8qKgotICogQGJyaWVmICAgICAgZnVuY3Rpb24gZGVzY3JpcHRpb24KLSAqCi0gKiBAZGV0YWlscyAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbgotICoKLSAqIEBwYXJhbSAgICAgIHBhcmFtCi0gKgotICogQHJldHVybiAgICAgcmV0dXJuIHR5cGUKLSAqLwotaW50IGx5bnFfZ25zc19zdG9wKHZvaWQpOworaW50IHFzZXJfQWRkUnhJbmRNc2dIYW5kbGVyIChnbnNzX2hhbmRsZXJfZnVuY190IGhhbmRsZXJfcHRyLHVpbnQzMl90IGhfZ25zcyk7CiAKLS8qKgotICogQGJyaWVmICAgICAgZnVuY3Rpb24gZGVzY3JpcHRpb24KLSAqCi0gKiBAZGV0YWlscyAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbgotICoKLSAqIEBwYXJhbSAgICAgIHBhcmFtCi0gKgotICogQHJldHVybiAgICAgcmV0dXJuIHR5cGUKLSAqLwotaW50IGx5bnFfZ25zc19hZ3BzX2RhdGFjb25ub3Blbih2b2lkKTsKLS8qKgotICogQGJyaWVmICAgICAgZnVuY3Rpb24gZGVzY3JpcHRpb24KLSAqCi0gKiBAZGV0YWlscyAgICBkZXRhaWxlZCBkZXNjcmlwdGlvbgotICoKLSAqIEBwYXJhbSAgICAgIHBhcmFtCi0gKgotICogQHJldHVybiAgICAgcmV0dXJuIHR5cGUKLSAqLwotaW50IGx5bnFfZ25zc19kZXZfcmVzZXQodm9pZCk7CitpbnQgcXNlcl9TZXRfSW5kaWNhdGlvbnMgKHVpbnQzMl90IGhfZ25zcyxlX21zZ19pZF90IHR5cGUpOwogCi0vKioKLSAqIEBicmllZiAgICAgIGZ1bmN0aW9uIGRlc2NyaXB0aW9uCi0gKgotICogQGRldGFpbHMgICAgZGV0YWlsZWQgZGVzY3JpcHRpb24KLSAqCi0gKiBAcGFyYW0gICAgICBwYXJhbQotICoKLSAqIEByZXR1cm4gICAgIHJldHVybiB0eXBlCi0gKi8KLWludCBseW5xX2duc3NfZW5hYmxlX2dsb25hc3Modm9pZCk7CitpbnQgcXNlcl9HbnNzX1N0YXJ0ICh1aW50MzJfdCBoX2duc3MpOwogCi0jZW5kaWYKK2ludCBxc2VyX0duc3NfU3RvcCAodWludDMyX3QgaF9nbnNzKTsKKworaW50IHFzZXJfR25zc19JbmplY3RUaW1lICh1aW50MzJfdCBoX2duc3MsTFlOUV9JTkpFQ1RfVElNRV9JTlRPX1QgKnRpbWVfaW5mbyk7CisKK2ludCBxc2VyX0duc3NfRGVsZXRlX0FpZGluZ19EYXRhICh1aW50MzJfdCBoX2duc3MsREVMRVRFX0FJRElOR19EQVRBX1RZUEVfVCBmbGFncyk7CisKK2ludCBxc2VyX0duc3NfZG93bmxvYWRfdGxlKCk7CisKK2ludCBxc2VyX0duc3NfaW5qZWN0RXBoZW1lcmlzKHVpbnQzMl90IGhfZ25zcyk7CisKKyNlbmRpZiAvKiBfUVNFUl9HTlNTX0ggKi8KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfbGVkLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2xlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5NTI4MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX2xlZC5oCkBAIC0wLDAgKzEsMTIgQEAKKyNpZm5kZWYgTFlOUV9MRURfSA0KKyNkZWZpbmUgTFlOUV9MRURfSCAxDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIiB7DQorI2VuZGlmDQorDQoraW50IGx5bnFfc2V0X25ldGxlZF9vbihjb25zdCBpbnQgdGVzdF9tb2RlKTsNCitpbnQgbHlucV9zZXRfc3RhdHVzbGVkX29uKGNvbnN0IGludCB0ZXN0X21vZGUpOw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX25ldF9hcGkuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfbmV0X2FwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzMGY4ODM3Li4wMDAwMDAwCi0tLSBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfbmV0X2FwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0qCi0qIERhdGEgOiAyMDIyLzEwLzIxIDE2OjAwOjI4Ci0qIEF1dGhvciA6IExpdUJpbgotKi8KLSNpZm5kZWYgX0xZTlFfTkVUX0FQSV9ICi0jZGVmaW5lIF9MWU5RX05FVF9BUElfSAotI2luY2x1ZGUgIm1idGtfaW5mb19hcGkuaCIKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBSQURJT19URUNIXzNHUFAgPSAxLCAvKiAzR1BQIFRlY2hub2xvZ2llcyAtIEdTTSwgV0NETUEgKi8KLSAgICBSQURJT19URUNIXzNHUFAyID0gMiAvKiAzR1BQMiBUZWNobm9sb2dpZXMgLSBDRE1BICovCi19IFJJTF9SYWRpb1RlY2hub2xvZ3lGYW1pbHk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgaW50IHJzc2k7ICAgLy8gMDogMTEzIGRCbSBvciBsZXNzCi0gICAgICAgICAgICAgICAgLy8gMTogMTExIGRCbQotICAgICAgICAgICAgICAgIC8vIDIuLi4zMDogMTA5IGRCbS4uLjUzIGRCbQotICAgICAgICAgICAgICAgIC8vIDMxOiA1MSBkQm0gb3IgZ3JlYXRlcgotICAgICAgICAgICAgICAgIC8vIDk5OiBub3Qga25vd24gb3Igbm90IGRldGVjdGFibGUKLSAgICBpbnQgYmVyOyAgLy8gMC4uLjcgYXMgUlhRVUFMIHZhbHVlcyBpbiB0aGUgdGFibGUgaW4gM0dQUCBUUyA0NS4wMDggWzIwXSBzdWJjbGF1c2UgOC4yLjQKLSAgICAgICAgICAgICAgICAvLyA5OSBub3Qga25vd24gb3Igbm90IGRldGVjdGFibGUKLSAgICBpbnQgZ3NtX3NpZ192YWxpZDsKLSAgICBpbnQgcnhsZXY7Ly8gMDpyc3NpIDwgLTExMCBkQm0KLSAgICAgICAgICAgICAgICAvLyAxOiAtMTEwIGRCbSA8PSByc3NpIDwgLTEwOSBkQm0KLSAgICAgICAgICAgICAgICAvLyAyOiAtMTA5IGRCbSA8PSByc3NpIDwgLTEwOCBkQm0KLSAgICAgICAgICAgICAgICAvLyAuLi4uLi4KLSAgICAgICAgICAgICAgICAvLyA2MTogLTUwIGRCbSA8PSByc3NpIDwgLTQ5IGRCbQotICAgICAgICAgICAgICAgIC8vIDYyOiAtNDkgZEJtIDw9IHJzc2kgPCAtNDggZEJtCi0gICAgICAgICAgICAgICAgLy8gNjM6IC00OCBkQm0gPD0gcnNzaQotICAgICAgICAgICAgICAgIC8vIDk5OiBub3Qga25vd24gb3Igbm90IGRldGVjdGFibGUKLSAgICBpbnQgdW10c19zaWdfdmFsaWQ7Ci0gICAgaW50IHJzY3A7IC8vIDA6IHJzY3AgPCAtMTIwIGRCbQotICAgICAgICAgICAgICAgIC8vIDE6IC0xMjAgZEJtIDw9IHJzY3AgPCAtMTE5IGRCbQotICAgICAgICAgICAgICAgIC8vIDI6IC0xMTkgZEJtIDw9IHJzY3AgPCAtMTE4IGRCbQotICAgICAgICAgICAgICAgIC8vIC4uLi4uLgotICAgICAgICAgICAgICAgIC8vIDk0OiAtMjcgZEJtIDw9IHJzY3AgPCAtMjYgZEJtCi0gICAgICAgICAgICAgICAgLy8gOTU6IC0yNiBkQm0gPD0gcnNjcCA8IC0yNSBkQm0KLSAgICAgICAgICAgICAgICAvLyA5NjogLSAyNSBkQm0gPD0gcnNjcAotICAgICAgICAgICAgICAgIC8vIDI1NTogbm90IGtub3duIG9yIG5vdCBkZXRlY3RhYmxlCi0gICAgaW50IGVjbm87IC8vIDA6IEVjL0lvIDwgLTI0IGRCCi0gICAgICAgICAgICAgICAgLy8gMTogLTI0IGRCIDw9IEVjL0lvIDwgLTIzLjUgZEIKLSAgICAgICAgICAgICAgICAvLyAyOiAtMjMuNSBkQiA8PSBFYy9JbyA8IC0yMyBkQgotICAgICAgICAgICAgICAgIC8vIC4uLi4uLgotICAgICAgICAgICAgICAgIC8vIDQ3OiAtMSBkQiA8PSBFYy9JbyA8IC0wLjUgZEIKLSAgICAgICAgICAgICAgICAvLyA0ODogLTAuNSBkQiA8PSBFYy9JbyA8IDAgZEIKLSAgICAgICAgICAgICAgICAvLyA0OTogMCBkQiA8PSBFYy9JbwotICAgICAgICAgICAgICAgIC8vIDI1NTogbm90IGtub3duIG9yIG5vdCBkZXRlY3RhYmxlCi0gICAgaW50IGx0ZV9zaWdfdmFsaWQ7Ci0gICAgaW50IHJzcnE7IC8vIDA6IHJzcnEgPCAtMTkuNSBkQgotICAgICAgICAgICAgICAgIC8vIDE6IC0xOS41IGRCIDw9IHJzcnEgPCAtMTkgZEIKLSAgICAgICAgICAgICAgICAvLyAyOiAtMTkgZEIgPD0gcnNycSA8IC0xOC41IGRCCi0gICAgICAgICAgICAgICAgLy8gLi4uLi4uCi0gICAgICAgICAgICAgICAgLy8gMzI6IC00IGRCIDw9IHJzcnEgPCAtMy41IGRCCi0gICAgICAgICAgICAgICAgLy8gMzM6IC0zLjUgZEIgPD0gcnNycSA8IC0zIGRCCi0gICAgICAgICAgICAgICAgLy8gMzQ6IC0zIGRCIDw9IHJzcnEKLSAgICAgICAgICAgICAgICAvLyAyNTU6IG5vdCBrbm93biBvciBub3QgZGV0ZWN0YWJsZQotICAgIGludCByc3JwOyAvLyAwOiByc3JwIDwgLTE0MCBkQm0KLSAgICAgICAgICAgICAgICAvLyAxOiAtMTQwIGRCbSA8PSByc3JwIDwgLTEzOSBkQm0KLSAgICAgICAgICAgICAgICAvLyAyOiAtMTM5IGRCbSA8PSByc3JwIDwgLTEzOCBkQm0KLSAgICAgICAgICAgICAgICAvLyAuLi4uLi4KLSAgICAgICAgICAgICAgICAvLyA5NTogLTQ2IGRCbSA8PSByc3JwIDwgLTQ1IGRCbQotICAgICAgICAgICAgICAgIC8vIDk2OiAtNDUgZEJtIDw9IHJzcnAgPCAtNDQgZEJtCi0gICAgICAgICAgICAgICAgLy8gOTc6IC00NCBkQm0gPD0gcnNycAotICAgICAgICAgICAgICAgIC8vIDI1NTogbm90IGtub3duIG9yIG5vdCBkZXRlY3RhYmxlCi19IHNpZ25hbFN0cmVuZ3RoX3Q7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgWk9ORV9OVU1fU09DID0gMCwKLSAgICBaT05FX05VTV9SRgotfSBaT05FX05VTTsKLQotaW50IGx5bnFfbmV0d29ya19pbml0KGludCB1VG9rZW4pOwotCi1pbnQgbHlucV9uZXR3b3JrX2RlaW5pdCh2b2lkKTsKLQotaW50IGx5bnFfZ2V0X3ZlcnNpb24oY2hhciBidWZbXSk7Ci0KLWludCBseW5xX2dldF9pbWVpKGNoYXIgYnVmW10pOwotCi1pbnQgbHlucV9nZXRfc24oY2hhciBidWZbXSk7Ci0KLWludCBseW5xX3NodXRkb3duKGNoYXIgb3B0aW9uc1tdKTsKLQotaW50IGx5bnFfdGltZV9zZXQobWJ0a190aW1lX3R5cGVfZW51bSB0aW1lX3R5cGUsIGNoYXIqIHRpbWVfc3RyKTsKLQotaW50IGx5bnFfZ2V0X3pvbmVfdG1wKFpPTkVfTlVNIG51bSwgaW50ICp0ZW1wKTsKLQotaW50IGx5bnFfZ2V0X3NpbV9zdGF0dXMoaW50ICpjYXJkX3N0YXR1cyk7Ci0KLWludCBseW5xX2dldF9pbXNpKGNoYXIgYnVmW10pOwotCi1pbnQgbHlucV9nZXRfaWNjaWQoY2hhciBidWZbXSk7Ci0KLWludCBseW5xX3F1ZXJ5X3Bob25lX251bWJlcihjaGFyIGJ1ZltdKTsKLQotaW50IGx5bnFfc2ltX3Bvd2VyIChpbnQgbW9kZSk7Ci0KLWludCBseW5xX3F1ZXJ5X29wZXJhdGVyKGNoYXIgKk9wZXJhdG9yRk4sY2hhciAqT3BlcmF0b3JTSCxjaGFyICpNY2NNbmMpOwotCi1pbnQgbHlucV9xdWVyeV9uZXR3b3JrX3NlbGVjdGlvbl9tb2RlIChpbnQgKm5ldHNlbE1vZGUpOwotCi1pbnQgbHlucV9zZXRfbmV0d29ya19zZWxlY3Rpb25fbW9kZShjb25zdCBjaGFyICptb2RlLCBjb25zdCBjaGFyKiBtY2NtbmMpOwotCi1pbnQgbHlucV9xdWVyeV9hdmFpbGFibGVfbmV0d29yayhsaXN0X25vZGVfdCoqIG5ldF9saXN0KTsKLQotaW50IGx5bnFfcXVlcnlfcmVnaXN0cmF0aW9uX3N0YXRlKGNvbnN0IGNoYXIgKnR5cGUsIGludCogcmVnU3RhdGUsaW50ICppbXNSZWdTdGF0ZSxjaGFyICogTEFDLGNoYXIgKkNJRCxpbnQgKm5ldFR5cGUsaW50ICogcmFkaW9UZWNoRmFtLGludCAqbmV0UmVqZWN0ZWQpOwotCi1pbnQgbHlucV9xdWVyeV9wcmVmZmVycmVkX25ldHdvcmt0eXBlIChpbnQgKnByZU5ldFR5cGUpOwotCi1pbnQgbHlucV9zZXRfcHJlZmZlcnJlZF9uZXR3b3JrdHlwZSAoY29uc3QgaW50IHByZU5ldFR5cGUpOwotCi1pbnQgbHlucV9zZXRfYmFuZF9tb2RlKGludCBnc21fYmFuZCwgaW50IHVtdHNfYmFuZCwgaW50IHRkbHRlX2JhbmQsIGludCBmZGRsdGVfYmFuZCk7Ci0KLWludCBseW5xX3F1ZXJ5X2F2YWlsYWJsZV9iYW5kbW9kZSAoaW50ICpnc21fYmFuZCwgaW50ICp1bXRzX2JhbmQsIGludCAqdGRsdGVfYmFuZCwgaW50ICpmZGRsdGVfYmFuZCk7Ci0KLWludCBseW5xX3JhZGlvX29uIChjb25zdCBpbnQgZGF0YSk7Ci0KLWludCBseW5xX3F1ZXJ5X3JhZGlvX3RlY2ggKGludCogcmFkaW9UZWNoKTsKLQotaW50IGx5bnFfc29saWNpdGVkX3NpZ25hbF9zdHJlbmd0aCAoc2lnbmFsU3RyZW5ndGhfdCAqc29sU2lnU3RyZW4pOwotCi1pbnQgbHlucV9zZXRfaW1zIChjb25zdCBpbnQgaW1zX21vZGUpOwotCi1pbnQgbHlucV9pbml0X2NlbGwodm9pZCk7Ci0KLWludCBseW5xX2RlaW5pdF9jZWxsKHZvaWQpOwotCi1pbnQgbHlucV9xdWVyeV9jZWxsX2luZm8oaW50ICp0eXBlLCBsaXN0X25vZGVfdCAqKmNlbGxfbGlzdCk7Ci0KLXZvaWQgbHlucV9zZXRfY2VsbF9pbmZvKGNoYXIgKm1lbSk7Ci0KLS8qCi0qIFNldCBzcGVjaWZpYyBBUE4gaW5mb3JtYXRpb25zLgotKgotKiBjaWQgOiAyLTcKLSovCi1pbnQgbHlucV9hcG5fc2V0KGludCBjaWQsIG1idGtfaXBfdHlwZV9lbnVtIGlwX3R5cGUsIGNvbnN0IHZvaWQqIGFwbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp1c2VyX25hbWUsIGNvbnN0IHZvaWQgKnVzZXJfcGFzcywgY29uc3Qgdm9pZCAqYXV0aCk7Ci0KLS8qCi0qIEdldCBjdXJyZW50IGFsbCBBUE4gaW5mb3JtYXRpb25zLgotKi8KLWludCBseW5xX2Fwbl9nZXQoaW50ICphcG5fbnVtLCBtYnRrX2Fwbl9pbmZvX3QgYXBuc1tdKTsKLQotLyoKLSogU3RhcnQgZGF0YSBjYWxsLgotKi8KLWludCBseW5xX2RhdGFfY2FsbF9zdGFydChpbnQgY2lkLCBpbnQgdGltZW91dCk7Ci0KLS8qCi0qIFN0b3AgZGF0YSBjYWxsLgotKi8KLWludCBseW5xX2RhdGFfY2FsbF9zdG9wKGludCBjaWQsIGludCB0aW1lb3V0KTsKLQotLyoKLSogUXVlcnkgZGF0YSBjYWxsIHN0YXRlLgotKi8KLWludCBseW5xX2RhdGFfY2FsbF9xdWVyeShpbnQgY2lkLCBtYnRrX2lwdjRfaW5mb190ICppcHY0LCBtYnRrX2lwdjZfaW5mb190ICppcHY2KTsKLQotLyoKLSpHZXQgbmF0aXZlIGlwIGFuZCBmcmVlIHBvcnQKLSovCi1pbnQgbHlucV9nZXRfaXBfYW5kX3BvcnQoY2hhciAqaXBCdWZfb3V0LGludCAqcG9ydCxpbnQgaXB0eXBlKTsKLQotI2VuZGlmIC8qIF9MWU5RX05FVF9BUElfSCAqLwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9uZXR3b3JrLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX25ldHdvcmsuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODc4ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9uZXR3b3JrLmgKQEAgLTAsMCArMSwxNDcgQEAKKyNpZm5kZWYgTFlOUV9ORVRXT1JLX0gNCisjZGVmaW5lIExZTlFfTkVUV09SS19IIA0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK2V4dGVybiAiQyIgew0KKyNlbmRpZg0KKyNkZWZpbmUgTU9ERU1fR0VOOTcgMQ0KKyNkZWZpbmUgQ0VMTElORk9fTUFYX05VTSAgMTANCisjZGVmaW5lIExZX1JFQ09WRVJfVElNRVJfSU5URVJWQUwgMTI4DQorI2RlZmluZSBNQVhfQ0VMTElORk9fSVRFTV9OVU1CRVIgMzINCisjZGVmaW5lIE1BWF9PT1NfQ0ZHX0lURU1fTlVNQkVSIDMyDQorLypUODAwIHBsYXRmb3JtIHN1cHBvcnQgZ3NtLHdjZG1hIGx0ZSxuciAqLw0KK3R5cGVkZWYgc3RydWN0ew0KKyAgICBpbnQgZ3dfc2lnX3ZhbGlkOyAvKjEgdmFsaWQsMSBpbnZhbGlkKi8NCisgICAgaW50IHJzc2k7ICAgICAgICAgLyogVmFsaWQgdmFsdWVzIGFyZSAoMC0zMSwgOTkpIGFzIGRlZmluZWQgaW4gVFMgMjcuMDA3IDguNSAqLw0KKyAgICBpbnQgd2NkbWFfc2lnX3ZhbGlkOy8qMSB2YWxpZCwwIGludmFsaWQqLw0KKyAgICBpbnQgd2NkbWFfc2lnbmFsc3RyZW5ndGg7DQorICAgIGludCByc2NwOyAgICAgICAgLyogVGhlIFJlY2VpdmVkIFNpZ25hbCBDb2RlIFBvd2VyIGluIGRCbSBtdWx0aXBsZWQgYnkgLTEuDQorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgOiAyNSB0byAxMjANCisgICAgICAgICAgICAgICAgICAgICAgKiBJTlRfTUFYOiAweDdGRkZGRkZGIGRlbm90ZXMgaW52YWxpZCB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMjUuMTIzLCBzZWN0aW9uIDkuMS4xLjEgKi8NCisgICAgaW50IGVjbm87ICAgICAgICAvKiBWYWxpZCB2YWx1ZXMgYXJlIHBvc2l0aXZlIGludGVnZXJzLiAgVGhpcyB2YWx1ZSBpcyB0aGUgYWN0dWFsIEVjL0lvIG11bHRpcGxpZWQNCisgICAgICAgICAgICAgICAgICAgICAgKiBieSAtMTAuICBFeGFtcGxlOiBJZiB0aGUgYWN0dWFsIEVjL0lvIGlzIC0xMi41IGRCLCB0aGVuIHRoaXMgcmVzcG9uc2UgdmFsdWUNCisgICAgICAgICAgICAgICAgICAgICAgKiB3aWxsIGJlIDEyNS4qLw0KKyAgICBpbnQgbHRlX3NpZ192YWxpZDsvKjEgdmFsaWQsMCBpbnZhbGlkKi8NCisgICAgaW50IGx0ZV9zaWduYWxzdHJlbmd0aDsgICAgICAgICAgICAgICAgICAgICAgDQorICAgIGludCByc3JwOyAgICAgICAgLyogVGhlIGN1cnJlbnQgUmVmZXJlbmNlIFNpZ25hbCBSZWNlaXZlIFBvd2VyIGluIGRCbSBtdWx0aXBsZWQgYnkgLTEuDQorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2U6IDQ0IHRvIDE0MCBkQm0NCisgICAgICAgICAgICAgICAgICAgICAgKiBJTlRfTUFYOiAweDdGRkZGRkZGIGRlbm90ZXMgaW52YWxpZCB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzYuMTMzIDkuMS40ICovDQorICAgIGludCByc3JxOyAgICAgICAgLyogVGhlIGN1cnJlbnQgUmVmZXJlbmNlIFNpZ25hbCBSZWNlaXZlIFF1YWxpdHkgaW4gZEIgbXVsdGlwbGllZCBieSAtMS4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSYW5nZTogMjAgdG8gMyBkQi4NCisgICAgICAgICAgICAgICAgICAgICAgKiBJTlRfTUFYOiAweDdGRkZGRkZGIGRlbm90ZXMgaW52YWxpZCB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzYuMTMzIDkuMS43ICovDQorICAgIGludCByc3NucjsgICAgICAgLyogVGhlIGN1cnJlbnQgcmVmZXJlbmNlIHNpZ25hbCBzaWduYWwtdG8tbm9pc2UgcmF0aW8gaW4gMC4xIGRCIHVuaXRzLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlOiAtMjAwIHRvICszMDAgKC0yMDAgPSAtMjAuMCBkQiwgKzMwMCA9IDMwZEIpLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIElOVF9NQVggOiAweDdGRkZGRkZGIGRlbm90ZXMgaW52YWxpZCB2YWx1ZS4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzYuMTAxIDguMS4xICovDQorICAgIGludCBucl9zaWdfdmFsaWQ7LyoxIHZhbGlkLDAgaW52YWxpZCovDQorICAgIGludCBzc1JzcnA7ICAgICAgLyogU1MoU3luY2hyb25pemF0aW9uIFNpZ25hbCkgcmVmZXJlbmNlIHNpZ25hbCByZWNlaXZlZCBwb3dlciwgbXVsdGlwbGVkIGJ5IC0xLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJlZmVyZW5jZTogM0dQUCBUUyAzOC4yMTUuDQorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgWzQ0LCAxNDBdLCBJTlRfTUFYIG1lYW5zIGludmFsaWQvdW5yZXBvcnRlZC4qLw0KKyAgICBpbnQgc3NSc3JxOyAgICAgIC8qIFNTIHJlZmVyZW5jZSBzaWduYWwgcmVjZWl2ZWQgcXVhbGl0eSwgbXVsdGlwbGVkIGJ5IC0xLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJlZmVyZW5jZTogM0dQUCBUUyAzOC4yMTUuDQorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgWzMsIDIwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8NCisgICAgaW50IHNzU2lucjsgICAgICAvKiBTUyBzaWduYWwtdG8tbm9pc2UgYW5kIGludGVyZmVyZW5jZSByYXRpby4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzguMjE1IHNlY3Rpb24gNS4xLiosIDNHUFAgVFMgMzguMTMzIHNlY3Rpb24gMTAuMS4xNi4xLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlIFstMjMsIDQwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8NCisgICAgaW50IGNzaVJzcnA7ICAgICAvKiBDU0kgcmVmZXJlbmNlIHNpZ25hbCByZWNlaXZlZCBwb3dlciwgbXVsdGlwbGVkIGJ5IC0xLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJlZmVyZW5jZTogM0dQUCBUUyAzOC4yMTUuDQorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgWzQ0LCAxNDBdLCBJTlRfTUFYIG1lYW5zIGludmFsaWQvdW5yZXBvcnRlZC4qLw0KKyAgICBpbnQgY3NpUnNycTsgICAgIC8qIENTSSByZWZlcmVuY2Ugc2lnbmFsIHJlY2VpdmVkIHF1YWxpdHksIG11bHRpcGxlZCBieSAtMS4NCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzguMjE1Lg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlIFszLCAyMF0sIElOVF9NQVggbWVhbnMgaW52YWxpZC91bnJlcG9ydGVkLiovDQorICAgIGludCBjc2lTaW5yOyAgICAgLyogQ1NJIHNpZ25hbC10by1ub2lzZSBhbmQgaW50ZXJmZXJlbmNlIHJhdGlvLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJlZmVyZW5jZTogM0dQUCBUUyAxMzguMjE1IHNlY3Rpb24gNS4xLiosIDNHUFAgVFMgMzguMTMzIHNlY3Rpb24gMTAuMS4xNi4xLg0KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlIFstMjMsIDQwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8NCit9c2lnbmFsU3RyZW5ndGhfdDsNCisNCit0eXBlZGVmIGVudW0geyANCisgICAgTkVUV09SS19SQURJT19PTl9UWVBFX0NGVU5fMD0wLCAgDQorICAgIE5FVFdPUktfUkFESU9fT05fVFlQRV9OT1JNQUxfTU9ERT0xLA0KKyAgICBORVRXT1JLX1JBRElPX09OX1RZUEVfRkxJR0hUX01PREU9NCwNCit9bHlucV9uZXR3b3JrX3JhZGlvX29uX3R5cGU7ICANCisNCitpbnQgbHlucV9uZXR3b3JrX2luaXQoaW50IHV0b2tlbik7DQoraW50IGx5bnFfbmV0d29ya19kZWluaXQodm9pZCk7DQoraW50IGx5bnFfcXVlcnlfb3BlcmF0ZXIoY2hhciAqT3BlcmF0b3JGTixjaGFyICpPcGVyYXRvclNILGNoYXIgKk1jY01uYyk7DQoraW50IGx5bnFfcXVlcnlfbmV0d29ya19zZWxlY3Rpb25fbW9kZShpbnQgKm5ldHNlbE1vZGUpOw0KK2ludCBseW5xX3NldF9uZXR3b3JrX3NlbGVjdGlvbl9tb2RlKGNvbnN0IGNoYXIgKm1vZGUsY29uc3QgY2hhciogbWNjbW5jKTsNCitpbnQgbHlucV9xdWVyeV9hdmFpbGFibGVfbmV0d29yayhjaGFyICpPcGVyYXRvckZOLGNoYXIgKk9wZXJhdG9yU0gsY2hhciAqTWNjTW5jLGNoYXIgKiBOZXRTdGF0dXMpOw0KK2ludCBseW5xX3F1ZXJ5X3JlZ2lzdHJhdGlvbl9zdGF0ZShjb25zdCBjaGFyICp0eXBlLGludCogcmVnU3RhdGUsaW50KiBpbXNSZWdTdGF0ZSxjaGFyICogTEFDLGNoYXIgKiBDSUQsaW50ICpuZXRUeXBlLGludCAqcmFkaW9UZWNoRmFtLGludCAqbmV0UmVqZWN0ZWQpOw0KK2ludCBseW5xX3F1ZXJ5X3ByZWZmZXJyZWRfbmV0d29ya3R5cGUoaW50ICpwcmVOZXRUeXBlKTsNCitpbnQgbHlucV9zZXRfcHJlZmZlcnJlZF9uZXR3b3JrdHlwZShjb25zdCBpbnQgcHJlZmZlcnR5cGUpOw0KK2ludCBseW5xX3F1ZXJ5X2NlbGxfaW5mbyh1aW50NjRfdCBjZWxsaW5mb1tDRUxMSU5GT19NQVhfTlVNXSxpbnQgdGFjW0NFTExJTkZPX01BWF9OVU1dLGludCBlYXJmY25bQ0VMTElORk9fTUFYX05VTV0saW50ICogcmVhbE51bSk7DQoraW50IGx5bnFfc2V0X3Vuc29sX2NlbGxfaW5mb19saXN0cmF0ZShjb25zdCBpbnQgcmF0ZSk7DQoraW50IGx5bnFfc2V0X2JhbmRfbW9kZShjb25zdCBpbnQgYmFuZG1vZGUpOw0KK2ludCBseW5xX3F1ZXJ5X2F2YWlsYWJsZV9iYW5kbW9kZShpbnQgYXZhaWxCYW5Nb2RlW10pOw0KK2ludCBseW5xX3JhZGlvX29uKGNvbnN0IGx5bnFfbmV0d29ya19yYWRpb19vbl90eXBlIHR5cGUpOw0KK2ludCBseW5xX3F1ZXJ5X3JhZGlvX3N0YXRlKGludCAqcmFkaW9fc3RhdGUpOw0KK2ludCBseW5xX3F1ZXJ5X3JhZGlvX3RlY2goaW50KiByYWRpb1RlY2gpOw0KK2ludCBseW5xX3NvbGljaXRlZF9zaWduYWxfc3RyZW5ndGgoc2lnbmFsU3RyZW5ndGhfdCAqc29sU2lnU3RyZW4pOw0KK2ludCBseW5xX3NldF9pbXMoY29uc3QgaW50IGltc19tb2RlKTsNCitpbnQgbHlucV93YWl0X3NpZ25hbGNoYW5nZXMoaW50ICpoYW5kbGUpOw0KK2ludCBseW5xX2dldF91cmNfaW5mbyhjb25zdCBpbnQgaGFuZGxlLHNpZ25hbFN0cmVuZ3RoX3QgKnNvbFNpZ1N0cmVuLGludCAqc2xvdF9pZCk7DQorDQordHlwZWRlZiBlbnVtIHsgIA0KKyAgTFlOUV9DRUxMX0lORk9fVFlQRV9HU00gICAgPSAyLCAgDQorICBMWU5RX0NFTExfSU5GT19UWVBFX1dDRE1BICA9IDMsDQorICBMWU5RX0NFTExfSU5GT19UWVBFX0xURSAgICA9IDQsIA0KKyAgTFlOUV9DRUxMX0lORk9fVFlQRV9OUiAgICA9IDUNCit9IGx5bnFfbmV0d29ya19jZWxsX2luZm9fdHlwZTsNCisNCitpbnQgbHlucV9xdWVyeV9zZXJ2ZV9jZWxsX2luZm8oaW50IHNlcnZlX2NlbGxfaW5mb1tNQVhfQ0VMTElORk9fSVRFTV9OVU1CRVJdLCBpbnQgKiB2YWxpZF9udW1iZXIpOw0KKw0KK3R5cGVkZWYgZW51bSB7DQorICAgIE5FVFdPUktfU1RBVEVfQlVGRkVSX1RZUEVfVk9JQ0VfUkVHLA0KKyAgICBORVRXT1JLX1NUQVRFX0JVRkZFUl9UWVBFX0RBVEFfUkVHLA0KKyAgICBORVRXT1JLX1NUQVRFX0JVRkZFUl9UWVBFX0lNU19SRUcsDQorICAgIE5FVFdPUktfU1RBVEVfQlVGRkVSX1RZUEVfTUFYLA0KK31seW5xX25ldHdvcmtfc3RhdGVfYnVmZmVyX3R5cGU7ICAgIA0KK2ludCBseW5xX3NldF9zdGF0ZV9idWZmZXJfdmFsaWRfcGVyaW9kX29mX25ldHdvcmsobHlucV9uZXR3b3JrX3N0YXRlX2J1ZmZlcl90eXBlIHR5cGUsaW50IHZhbGlkX3BlcmlvZCk7DQoraW50IGx5bnFfZ2V0X3N0YXRlX2J1ZmZlcl92YWxpZF9wZXJpb2Rfb2ZfbmV0d29yayhseW5xX25ldHdvcmtfc3RhdGVfYnVmZmVyX3R5cGUgdHlwZSk7DQorI2lmZGVmIE1PREVNX0dFTjk3DQorLyoqQGJyaWVmIHNldCBvciBnZXQgT09TIHJlY292ZXIgdGltZXIgaW50ZXJ2YWwNCisqIEBwYXJhbSBtb2RlIFtJTl0gPG1vZGU+Og0KKyogIDA6c2V0DQorKiAgMTpnZXQNCisqIEBwYXJhbSBpbnRlcnZhbCBbSU5dIDxpbnRlcnZhbD46IHRoZSByZWNvdmVyeSB0aW1lciBpbnRlcnZhbC4NCisqICBmaWVsZDoNCisqICAgIFQxLFQyLC4uLixUMjM6aW50ZWdlciB2YWx1ZSAwfjB4RkZGRkZGRkYNCisqICAgIFRoZSBsZW5ndGggb2YgdGltZSBpbiBzZWNvbmRzLg0KKyogICAgZGVmdWFsdCBpbnRlcnZhbDogMjAsMjAsNjAsNjAsNjAsNjAsOTAsOTAsOTAsOTAsOTAsOTAsMTgwLDE4MCwxODAsMTgwLDE4MCwxODAsMzYwLDM2MCwzNjAsMzYwLDM2MA0KKyogQHBhcmFtIHJlc3VsdCBbT1VUXSA8cmVzdWx0PjogdGhlIHJlY292ZXJ5IHRpbWVyIGludGVydmFsLHdoZW4gdGhlIG1vZGUgaXMgMSwgdGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQuDQorDQorKiBAcmV0dXJuDQorKiAgMDpzdWNjZXNzDQorKiAgb3RoZXI6ZmFpbHVyZQ0KKyovDQoraW50IGx5bnFfb29zX3JlY292ZXJfdGltZXJfaW50ZXJ2YWwoaW50IG1vZGUsIGNoYXIgaW50ZXJ2YWxbTFlfUkVDT1ZFUl9USU1FUl9JTlRFUlZBTF0sY2hhciByZXN1bHRbTFlfUkVDT1ZFUl9USU1FUl9JTlRFUlZBTF0pOw0KKy8qKkBicmllZiBzZXQgZGVlcCBzbGVlcCByZWNvdmVyIHRpbWVyIGludGVydmFsDQorDQorKiBAcGFyYW0gcmVjb3ZlcnlfdGhyZXNob2xkIFtJTl0gPHJlY292ZXJ5X3RocmVzaG9sZD46IHZhbGlkIHJhbmdlIDItMTAgIC8vQWZ0ZXIgcGVyZm9ybWluZyBzZXZlcmFsIHJvdW5kcyBvZiBub3JtYWwgcmVjb3ZlcnksIGRlZXAgc2xlZXAgbW9kZSBvcHRpbWl6YXRpb24gd2lsbCBiZSBhcHBsaWVkDQorDQorKiBAcGFyYW0gZnVsbGJhbmRfdGltZXIgW0lOXSA8ZnVsbGJhbmRfdGltZXI+OnZhbGlkIHJhbmdlIDkwLTM2MCAvL2Z1bGxiYW5kIGludGVydmFybCBsZW5ndGggaW4gZGVlcCBzbGVlcCBtb2RlDQorDQorKiBAcGFyYW0gc25pZmZlcl90aW1lciBbSU5dIDxzbmlmZmVyX3RpbWVyPjp2YWxpZCByYW5nZSAxMC02MCAvLyBzbmlmZmUgaW50ZXJ2YXJsIGxlbmd0aCBpbiBkZWVwIHNsZWVwIG1vZGUuDQorDQorKiBAcGFyYW0gaW5hY3RpdmVfbW9kZSBbSU5dIDxpbmFjdGl2ZV9tb2RlPjoNCisqICAwIEV4aXQgaW5hY3RpdmUgbW9kZSANCisqICAxIGVudGVyIGluYWN0aXZlIG1vZGUNCisNCisqIEByZXR1cm4NCisqICAwOnN1Y2Nlc3MNCisqICBvdGhlcjpmYWlsdXJlDQorKi8NCitpbnQgbHlucV9vb3NfZGVlcF9zbGVlcF9yZWNvdmVyX3RpbWVyX2ludGVydmFsKGludCByZWNvdmVyeV90aHJlc2hvbGQsaW50IGZ1bGxiYW5kX3RpbWVyLGludCBzbmlmZmVyX3RpbWVyLGludCBpbmFjdGl2ZV9tb2RlKTsNCisjZW5kaWYNCisjaWYgKGRlZmluZWQgTU9CSUxFVEVLX1RBUkdFVF9QTEFURk9STV9UMTA2KSB8fCAoZGVmaW5lZCBNT0RFTV9HRU45NykNCitpbnQgbHlucV9zZXRfb29zX25ldF9zY2FuX2NmZyhpbnQgY29uZmlnX2xpc3RbTUFYX09PU19DRkdfSVRFTV9OVU1CRVJdLCBpbnQgdmFsaWRfbnVtKTsNCitpbnQgbHlucV9nZXRfb29zX25ldF9zY2FuX2NmZyhpbnQgY29uZmlnX2xpc3RbTUFYX09PU19DRkdfSVRFTV9OVU1CRVJdLCBpbnQqIHZhbGlkX251bSk7DQorI2VuZGlmDQordm9pZCBseW5xX3NldF90ZXN0X21vZGUoY29uc3QgaW50IHRlc3RfbW9kZSk7DQorI2lmZGVmIF9fY3BsdXNwbHVzDQorfQ0KKyNlbmRpZg0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfcXNlcl9uZXR3b3JrLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3FzZXJfbmV0d29yay5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NzI3YzIKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3FzZXJfbmV0d29yay5oCkBAIC0wLDAgKzEsNDI1IEBACisvKioKKyAqQGZpbGUgICAgIFFTRVJfbncuaAorICpAZGF0ZSAgICAgMjAxOC0wMi0yMgorICpAYXV0aG9yCisgKkBicmllZgorICovCisjaWZuZGVmIF9fTFlOUV9RU0VSX05FVFdPUktfSF9fCisjZGVmaW5lIF9fTFlOUV9RU0VSX05FVFdPUktfSF9fCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjaW5jbHVkZSAibWJ0a190eXBlLmgiCisKK3R5cGVkZWYgdWludDMyX3QgbndfY2xpZW50X2hhbmRsZV90eXBlOworCisKKyNkZWZpbmUgUVNFUl9OV19NT0RFX05PTkUgICAgIDB4MDAgICAgLyoqPCAgTm8gbmV0d29yay4gKi8KKyNkZWZpbmUgUVNFUl9OV19NT0RFX0dTTSAgICAgIDB4MDEgICAgLyoqPCAgSW5jbHVkZSBHU00gbmV0d29ya3MuICovCisjZGVmaW5lIFFTRVJfTldfTU9ERV9XQ0RNQSAgICAweDAyICAgIC8qKjwgIEluY2x1ZGUgV0NETUEgbmV0d29ya3MuICovCisjZGVmaW5lIFFTRVJfTldfTU9ERV9DRE1BICAgICAweDA0ICAgIC8qKjwgIEluY2x1ZGUgQ0RNQSBuZXR3b3Jrcy4gKi8KKyNkZWZpbmUgUVNFUl9OV19NT0RFX0VWRE8gICAgIDB4MDggICAgLyoqPCAgSW5jbHVkZSBFVkRPIG5ldHdvcmtzLiAqLworI2RlZmluZSBRU0VSX05XX01PREVfTFRFICAgICAgMHgxMCAgICAvKio8ICBJbmNsdWRlIExURSBuZXR3b3Jrcy4gKi8KKyNkZWZpbmUgUVNFUl9OV19NT0RFX1REU0NETUEgIDB4MjAgICAgLyoqPCAgSW5jbHVkZSBURFNDRE1BIG5ldHdvcmtzLiAqLworCit0eXBlZGVmIGVudW0KK3sKKyAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9PRkYgID0gMCwgICAgLyoqPCAgTm9uZSwgb3Igcm9hbWluZyBpbmRpY2F0b3Igb2ZmLiAqLworICAgIEVfUVNFUl9OV19ST0FNX1NUQVRFX09OICAgPSAxICAgICAvKio8ICBSb2FtaW5nIGluZGljYXRvciBvbi4gKi8KK31FX1FTRVJfTldfUk9BTV9TVEFURV9UWVBFX1Q7CisKKy8qKiBDb25maWd1cmVzIHRoZSBzZXR0aW5ncyB0aGF0IGRlZmluZSB0aGUgTUNNIG5ldHdvcmsgaW50ZXJmYWNlLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiAgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBNQ00gbmV0d29yayByZWdpc3RyYXRpb24gTmV0d29yayByZWdpc3RyYXRpb24gZGV0YWlscyBUZWNobm9sb2d5IGRlcGVuZGVudCBuZXR3b3JrIHJlZ2lzdHJhdGlvbiBkZXRhaWxzICovCisgICAgdWludDY0X3QgICAgICAgICAgICAgICAgICAgICAgICBwcmVmZXJyZWRfbndfbW9kZTsgIC8qKjwgICBQcmVmZXJyZWQgbmV0d29yayBtb2RlIGZvciBjb25uZWN0aW9uczsgYSBiaXRtYXNrIG9mIFFTRVJfTldfTU9ERV94eHh4LiovCisgICAgRV9RU0VSX05XX1JPQU1fU1RBVEVfVFlQRV9UICAgcm9hbWluZ19wcmVmOyAgICAgICAvKio8ICAgUm9hbWluZyBwcmVmZXJlbmNlLiovCit9UVNFUl9OV19DT05GSUdfSU5GT19UOworCisvKiogQ29uZmlndXJlcyB0aGUgT09TIChvdXQgb2Ygc2VydmljZSkgIHNldHRpbmdzIHRoYXQgZGVmaW5lIHRoZSBNQ00gbmV0d29yayBpbnRlcmZhY2UuICovCisjZGVmaW5lIFFTRVJfTldfT09TX0NGR19UWVBFX0ZBU1RfU0NBTiAgICAgICAgICAweDAwICAgIC8qKjwgIGZhc3QgbmV0IHNjYW4gKi8KKyNkZWZpbmUgUVNFUl9OV19PT1NfQ0ZHX1RZUEVfRlVMTF9CQU5EX1NDQU4gICAgIDB4MDEgICAgLyoqPCAgZnVsbCBiYW5kIHNjYW4gKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiAgICBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIE1DTSBuZXR3b3JrIGZhc3QgbmV0d29yayBzY2FuIHdoZW4gT09TIChvdXQgb2Ygc2VydmljZSkqLworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGU7CisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgIHRpbWVfaW50ZXJ2YWw7Cit9UVNFUl9OV19PT1NfQ09ORklHX0ZBU1RfU0NBTl9JTkZPX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgLyogICAgQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBNQ00gbmV0d29yayBmdWxsIGJhbmQgbmV0d29yayBzY2FuIHdoZW4gT09TIChvdXQgb2Ygc2VydmljZSkqLworICAgIGludCB0X21pbjsKKyAgICBpbnQgdF9zdGVwOworICAgIGludCB0X251bTsKKyAgICBpbnQgdF9tYXg7Cit9UVNFUl9OV19PT1NfQ09ORklHX0ZVTExfQkFORF9TQ0FOX0lORk9fVDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOyAgLyoqPCAgIFFTRVJfTldfT09TX0NGR19UWVBFX3h4eHguKi8KKyAgICB1bmlvbiB7CisgICAgUVNFUl9OV19PT1NfQ09ORklHX0ZBU1RfU0NBTl9JTkZPX1QgIGZhc3RfY2FuX2luZm87ICAgICAgIC8vIDAwCisgICAgUVNFUl9OV19PT1NfQ09ORklHX0ZVTExfQkFORF9TQ0FOX0lORk9fVCBmdWxsX2JhbmRfc2Nhbl9pbmZvOyAgICAgLy8gMDEKKyAgfSB1OworfVFTRVJfTldfT09TX0NPTkZJR19JTkZPX1Q7CisKKy8vZGVmaW5lZCBmb3IgUVNFUl9OV19FdmVudFJlZ2lzdGVyCisjZGVmaW5lICAgICBOV19JTkRfVk9JQ0VfUkVHX0VWRU5UX0lORF9GTEFHICAgICAgICAgICAgICAgKDEgPDwgMCkgICAgLyoqPCBtc2cgZm9ybWF0IDogUVNFUl9OV19WT0lDRV9SRUdfRVZFTlRfSU5EX1QgKi8KKyNkZWZpbmUgICAgIE5XX0lORF9EQVRBX1JFR19FVkVOVF9JTkRfRkxBRyAgICAgICAgICAgICAgICAoMSA8PCAxKSAgICAvKio8IG1zZyBmb3JtYXQgOiBRU0VSX05XX0RBVEFfUkVHX0VWRU5UX0lORF9UICovCisjZGVmaW5lICAgICBOV19JTkRfU0lHTkFMX1NUUkVOR1RIX0VWRU5UX0lORF9GTEFHICAgICAgICAgKDEgPDwgMikgICAgLyoqPCBtc2cgZm9ybWF0IDogUVNFUl9OV19TSU5HTkFMX0VWRU5UX0lORF9UICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgY2hhciBsb25nX2VvbnNbNTEyICsgMV07ICAgIC8qKjwgICBMb25nIEVPTlMuKi8KKyAgICBjaGFyIHNob3J0X2VvbnNbNTEyICsgMV07ICAgLyoqPCAgIFNob3J0IEVPTlMuKi8KKyAgICBjaGFyIG1jY1szICsgMV07ICAgICAgICAgICAgLyoqPCAgIE1vYmlsZSBjb3VudHJ5IGNvZGUuKi8KKyAgICBjaGFyIG1uY1szICsgMV07ICAgICAgICAgICAgLyoqPCAgIE1vYmlsZSBuZXR3b3JrIGNvZGUuKi8KK31RU0VSX05XX09QRVJBVE9SX05BTUVfSU5GT19UOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9URF9TQ0RNQSA9IDEsCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfR1NNICAgICAgPSAyLCAgICAvKio8ICBHU007IG9ubHkgc3VwcG9ydHMgdm9pY2UuICovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfSFNQQVAgICAgPSAzLCAgICAvKio8ICBIU1BBKy4gKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9MVEUgICAgICA9IDQsICAgIC8qKjwgIExURS4gKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9FSFJQRCAgICA9IDUsICAgIC8qKjwgIEVIUlBELiAqLworICAgIEVfUVNFUl9OV19SQURJT19URUNIX0VWRE9fQiAgID0gNiwgICAgLyoqPCAgRVZETyBCLiAqLworICAgIEVfUVNFUl9OV19SQURJT19URUNIX0hTUEEgICAgID0gNywgICAgLyoqPCAgSFNQQS4gKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9IU1VQQSAgICA9IDgsICAgIC8qKjwgIEhTVVBBLiAqLworICAgIEVfUVNFUl9OV19SQURJT19URUNIX0hTRFBBICAgID0gOSwgICAgLyoqPCAgSFNEUEEuICovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfRVZET19BICAgPSAxMCwgICAvKio8ICBFVkRPIEEuICovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfRVZET18wICAgPSAxMSwgICAvKio8ICBFVkRPIDAuICovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfMXhSVFQgICAgPSAxMiwgICAvKio8ICAxeFJUVC4gKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9JUzk1QiAgICA9IDEzLCAgIC8qKjwgIElTOTVCLiAqLworICAgIEVfUVNFUl9OV19SQURJT19URUNIX0lTOTVBICAgID0gMTQsICAgLyoqPCAgSVM5NUEuICovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfVU1UUyAgICAgPSAxNSwgICAvKio8ICBVTVRTLiAqLworICAgIEVfUVNFUl9OV19SQURJT19URUNIX0VER0UgICAgID0gMTYsICAgLyoqPCAgRURHRS4gKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9HUFJTICAgICA9IDE3LCAgIC8qKjwgIEdQUlMuICovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfTk9ORSAgICAgPSAxOCAgICAvKio8ICBObyB0ZWNobm9sb2d5IHNlbGVjdGVkLiAqLworfUVfUVNFUl9OV19SQURJT19URUNIX1RZUEVfVDsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBFX1FTRVJfTldfVEVDSF9ET01BSU5fTk9ORSAgICA9IDAsICAgIC8qKjwgIE5vbmUuICovCisgICAgRV9RU0VSX05XX1RFQ0hfRE9NQUlOXzNHUFAgICAgPSAxLCAgICAvKio8ICAzR1BQLiAqLworICAgIEVfUVNFUl9OV19URUNIX0RPTUFJTl8zR1BQMiAgID0gMiwgICAgLyoqPCAgM0dQUDIuICovCit9RV9RU0VSX05XX1RFQ0hfRE9NQUlOX1RZUEVfVDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgRV9RU0VSX05XX0lNU0lfVU5LTk9XTl9ITFJfREVOWV9SRUFTT04gICAgICAgICAgICAgICAgICAgID0gMSwgLyoqPCAgSU1TSSB1bmtub3duIGluIEhMUi4gKi8KKyAgICBFX1FTRVJfTldfSUxMRUdBTF9NU19ERU5ZX1JFQVNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyLCAvKio8ICBJbGxlZ2FsIE1TLiAqLworICAgIEVfUVNFUl9OV19JTVNJX1VOS05PV05fVkxSX0RFTllfUkVBU09OICAgICAgICAgICAgICAgICAgICA9IDMsIC8qKjwgIElNU0kgdW5rbm93biBpbiBWTFIuICovCisgICAgRV9RU0VSX05XX0lNRUlfTk9UX0FDQ0VQVEVEX0RFTllfUkVBU09OICAgICAgICAgICAgICAgICAgID0gNCwgLyoqPCAgSU1FSSBub3QgYWNjZXB0ZWQuICovCisgICAgRV9RU0VSX05XX0lMTEVHQUxfTUVfREVOWV9SRUFTT04gICAgICAgICAgICAgICAgICAgICAgICAgID0gNSwgLyoqPCAgSWxsZWdhbCBNRS4gKi8KKyAgICBFX1FTRVJfTldfUExNTl9OT1RfQUxMT1dFRF9ERU5ZX1JFQVNPTiAgICAgICAgICAgICAgICAgICAgPSA2LCAvKio8ICBQTE1OIG5vdCBhbGxvd2VkLiAqLworICAgIEVfUVNFUl9OV19MQV9OT1RfQUxMT1dFRF9ERU5ZX1JFQVNPTiAgICAgICAgICAgICAgICAgICAgICA9IDcsIC8qKjwgIExvY2F0aW9uIGFyZWEgbm90IGFsbG93ZWQuICovCisgICAgRV9RU0VSX05XX1JPQU1JTkdfTk9UX0FMTE9XRURfTEFfREVOWV9SRUFTT04gICAgICAgICAgICAgID0gOCwgLyoqPCAgUm9hbWluZyBub3QgYWxsb3dlZCBpbiB0aGlzIGxvY2F0aW9uIGFyZWEuICovCisgICAgRV9RU0VSX05XX05PX1NVSVRBQkxFX0NFTExTX0xBX0RFTllfUkVBU09OICAgICAgICAgICAgICAgID0gOSwgLyoqPCAgTm8gc3VpdGFibGUgY2VsbHMgaW4gbG9jYXRpb24gYXJlYS4gKi8KKyAgICBFX1FTRVJfTldfTkVUV09SS19GQUlMVVJFX0RFTllfUkVBU09OICAgICAgICAgICAgICAgICAgICAgPSAxMCwgLyoqPCAgTmV0d29yayBmYWlsdXJlLiAqLworICAgIEVfUVNFUl9OV19NQUNfRkFJTFVSRV9ERU5ZX1JFQVNPTiAgICAgICAgICAgICAgICAgICAgICAgICA9IDExLCAvKio8ICBNQUMgZmFpbHVyZS4gKi8KKyAgICBFX1FTRVJfTldfU1lOQ0hfRkFJTFVSRV9ERU5ZX1JFQVNPTiAgICAgICAgICAgICAgICAgICAgICAgPSAxMiwgLyoqPCAgU3luYyBmYWlsdXJlLiAqLworICAgIEVfUVNFUl9OV19DT05HRVNUSU9OX0RFTllfUkVBU09OICAgICAgICAgICAgICAgICAgICAgICAgICA9IDEzLCAvKio8ICBDb25nZXN0aW9uLiAqLworICAgIEVfUVNFUl9OV19HU01fQVVUSEVOVElDQVRJT05fVU5BQ0NFUFRBQkxFX0RFTllfUkVBU09OICAgICA9IDE0LCAvKio8ICBHU00gYXV0aGVudGljYXRpb24gdW5hY2NlcHRhYmxlLiAqLworICAgIEVfUVNFUl9OV19OT1RfQVVUSE9SSVpFRF9DU0dfREVOWV9SRUFTT04gICAgICAgICAgICAgICAgICA9IDE1LCAvKio8ICBOb3QgYXV0aG9yaXplZCBpbiB0aGlzIENTRy4gKi8KKyAgICBFX1FTRVJfTldfU0VSVklDRV9PUFRJT05fTk9UX1NVUFBPUlRFRF9ERU5ZX1JFQVNPTiAgICAgICAgPSAxNiwgLyoqPCAgU2VydmljZSBvcHRpb24gbm90IHN1cHBvcnRlZC4gKi8KKyAgICBFX1FTRVJfTldfUkVRX1NFUlZJQ0VfT1BUSU9OX05PVF9TVUJTQ1JJQkVEX0RFTllfUkVBU09OICAgPSAxNywgLyoqPCAgUmVxdWVzdGVkIHNlcnZpY2Ugb3B0aW9uIG5vdCBzdWJzY3JpYmVkLiAqLworICAgIEVfUVNFUl9OV19DQUxMX0NBTk5PVF9CRV9JREVOVElGSUVEX0RFTllfUkVBU09OICAgICAgICAgICA9IDE4LCAvKio8ICBDYWxsIGNhbm5vdCBiZSBpZGVudGlmaWVkLiAqLworICAgIEVfUVNFUl9OV19TRU1BTlRJQ0FMTFlfSU5DT1JSRUNUX01TR19ERU5ZX1JFQVNPTiAgICAgICAgICA9IDE5LCAvKio8ICBTZW1hbnRpY2FsbHkgaW5jb3JyZWN0IG1lc3NhZ2UuICovCisgICAgRV9RU0VSX05XX0lOVkFMSURfTUFOREFUT1JZX0lORk9fREVOWV9SRUFTT04gICAgICAgICAgICAgID0gMjAsIC8qKjwgIEludmFsaWQgbWFuZGF0b3J5IGluZm9ybWF0aW9uLiAqLworICAgIEVfUVNFUl9OV19NU0dfVFlQRV9OT05fRVhJU1RFTlRfREVOWV9SRUFTT04gICAgICAgICAgICAgICA9IDIxLCAvKio8ICBNZXNzYWdlIHR5cGUgbm9uLWV4aXN0ZW50IG9yIG5vdCBpbXBsZW1lbnRlZC4gKi8KKyAgICBFX1FTRVJfTldfSU5GT19FTEVNRU5UX05PTl9FWElTVEVOVF9ERU5ZX1JFQVNPTiAgICAgICAgICAgPSAyMiwgLyoqPCAgTWVzc2FnZSB0eXBlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIHN0YXRlLiAqLworICAgIEVfUVNFUl9OV19DT05ESVRJT05BTF9JRV9FUlJfREVOWV9SRUFTT04gICAgICAgICAgICAgICAgICA9IDIzLCAvKio8ICBDb25kaXRpb25hbCBJRSBlcnJvci4gKi8KKyAgICBFX1FTRVJfTldfTVNHX0lOQ09NUEFUSUJMRV9QUk9UT0NPTF9TVEFURV9ERU5ZX1JFQVNPTiAgICAgPSAyNCwgLyoqPCAgTWVzc2FnZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBzdGF0ZS4gKi8KKyAgICBFX1FTRVJfTldfUFJPVE9DT0xfRVJST1JfREVOWV9SRUFTT04gICAgICAgICAgICAgICAgICAgICAgPSAyNSwgLyoqPCAgVW5zcGVjaWZpZWQgcHJvdG9jb2wgZXJyb3IuICovCit9RV9RU0VSX05XX0RFTllfUkVBU09OX1RZUEVfVDsKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBFX1FTRVJfTldfU0VSVklDRV9OT05FICAgICA9IDB4MDAwMCwgIC8qKjwgIE5vdCByZWdpc3RlcmVkIG9yIG5vIGRhdGEuICovCisgICAgRV9RU0VSX05XX1NFUlZJQ0VfTElNSVRFRCAgPSAweDAwMDEsICAvKio8ICBSZWdpc3RlcmVkOyBlbWVyZ2VuY3kgc2VydmljZSBvbmx5LiAqLworICAgIEVfUVNFUl9OV19TRVJWSUNFX0ZVTEwgICAgID0gMHgwMDAyLCAgLyoqPCAgUmVnaXN0ZXJlZCwgZnVsbCBzZXJ2aWNlLiAqLworfUVfUVNFUl9OV19TRVJWSUNFX1RZUEVfVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBFX1FTRVJfTldfVEVDSF9ET01BSU5fVFlQRV9UICB0ZWNoX2RvbWFpbjsgICAgICAgIC8qKjwgICBUZWNobm9sb2d5LCB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIHR5cGUgIHRlY2g6IDAgLS0gTm9uZSwgMSAtLSAzR1BQLCAyIC0tIDNHUFAyLiovCisgICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfVFlQRV9UICAgcmFkaW9fdGVjaDsgICAgICAgICAvKio8ICAgUmFkaW8gdGVjaG5vbG9neTsgc2VlICNud19yYWRpb190ZWNoX3RfdjAxLiovCisgICAgRV9RU0VSX05XX1JPQU1fU1RBVEVfVFlQRV9UICAgcm9hbWluZzsgICAgICAgICAgICAvKio8ICAgMCAtLSBPZmYsIDEgLS0gUm9hbWluZyAoM0dQUDIgaGFzIGV4dGVuZGVkIHZhbHVlcykuKi8KKyAgICBFX1FTRVJfTldfREVOWV9SRUFTT05fVFlQRV9UICBkZW55X3JlYXNvbjsgICAgICAgIC8qKjwgICBTZXQgd2hlbiByZWdpc3RyYXRpb24gc3RhdGUgaXMgI253X2RlbnlfcmVhc29uX3RfdjAxLiovCisgICAgRV9RU0VSX05XX1NFUlZJQ0VfVFlQRV9UICAgICAgcmVnaXN0cmF0aW9uX3N0YXRlOyAvKio8ICAgUmVnaXN0cmF0aW9uIHN0YXRlLiovCit9UVNFUl9OV19DT01NT05fUkVHX0lORk9fVDsKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIEVfUVNFUl9OV19URUNIX0RPTUFJTl9UWVBFX1QgIHRlY2hfZG9tYWluOyAgICAgICAgLyoqPCAgIFRlY2hub2xvZ3ksIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgdHlwZSAgdGVjaDogMCAtLSBOb25lLCAxIC0tIDNHUFAsIDIgLS0gM0dQUDIuKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9UWVBFX1QgICByYWRpb190ZWNoOyAgICAgICAgIC8qKjwgICBSYWRpbyB0ZWNobm9sb2d5OyBzZWUgI253X3JhZGlvX3RlY2hfdF92MDEuKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jY1szKzFdOyAgICAgICAgICAgLyoqPCAgIE1vYmlsZSBjb3VudHJ5IGNvZGUuKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1uY1szKzFdOyAgICAgICAgICAgLyoqPCAgIE1vYmlsZSBuZXR3b3JrIGNvZGUuKi8KKyAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9UWVBFX1QgICByb2FtaW5nOyAgICAgICAgICAgIC8qKjwgICAwIC0tIE9mZiwgMSAtLSBSb2FtaW5nICgzR1BQMiBoYXMgZXh0ZW5kZWQgdmFsdWVzKS4qLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgZm9yYmlkZGVuOyAgICAgICAgICAvKio8ICAgRm9yYmlkZGVuOiAwIC0tIE5vLCAxIC0tIFllcy4qLworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgY2lkOyAgICAgICAgICAgICAgICAvKio8ICAgQ2VsbCBJRCBmb3IgdGhlIHJlZ2lzdGVyZWQgM0dQUCBzeXN0ZW0uKi8KKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgIGxhYzsgICAgICAgICAgICAgICAgLyoqPCAgIExvY2F0aW4gYXJlYSBjb2RlIGZvciB0aGUgcmVnaXN0ZXJlZCAzR1BQIHN5c3RlbS4qLworICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgcHNjOyAgICAgICAgICAgICAgICAvKio8ICAgUHJpbWFyeSBzY3JhbWJsaW5nIGNvZGUgKFdDRE1BIG9ubHkpOyAwIC0tIE5vbmUuKi8KKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgIHRhYzsgICAgICAgICAgICAgICAgLyoqPCAgIFRyYWNraW5nIGFyZWEgY29kZSBpbmZvcm1hdGlvbiBmb3IgTFRFLiovCit9UVNFUl9OV18zR1BQX1JFR19JTkZPX1Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBFX1FTRVJfTldfVEVDSF9ET01BSU5fVFlQRV9UICB0ZWNoX2RvbWFpbjsgICAgICAgIC8qKjwgICBUZWNobm9sb2d5LCB1c2VkIHRvIGRldGVybWluZSBzdHJ1Y3R1cmUgdHlwZSAgdGVjaDogMCAtLSBOb25lLCAxIC0tIDNHUFAsIDIgLS0gM0dQUDIuKi8KKyAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9UWVBFX1QgICByYWRpb190ZWNoOyAgICAgICAgIC8qKjwgICBSYWRpbyB0ZWNobm9sb2d5OyBzZWUgI253X3JhZGlvX3RlY2hfdF92MDEuKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jY1szKzFdOyAgICAgICAgICAgLyoqPCAgIE1vYmlsZSBjb3VudHJ5IGNvZGUuKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1uY1szKzFdOyAgICAgICAgICAgLyoqPCAgIE1vYmlsZSBuZXR3b3JrIGNvZGUuKi8KKyAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9UWVBFX1QgICByb2FtaW5nOyAgICAgICAgICAgIC8qKjwgICBSb2FtaW5nIHN0YXR1czsgc2VlICNud19yb2FtX3N0YXRlX3RfdjAxLiovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBmb3JiaWRkZW47ICAgICAgICAgIC8qKjwgICBGb3JiaWRkZW46IDAgLS0gTm8sIDEgLS0gWWVzLiovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBpblBSTDsgICAgICAgICAgICAgIC8qKjwgICAwIC0tIE5vdCBpbiBQUkwsIDEgLS0gSW4gUFJMLiovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBjc3M7ICAgICAgICAgICAgICAgIC8qKjwgICBDb25jdXJyZW50IHNlcnZpY2VzIHN1cHBvcnRlZDogMCAtLSBObywgMSAtLSBZZXMuKi8KKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgIHNpZDsgICAgICAgICAgICAgICAgLyoqPCAgIENETUEgc3lzdGVtIElELiovCisgICAgdWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICBuaWQ7ICAgICAgICAgICAgICAgIC8qKjwgICBDRE1BIG5ldHdvcmsgSUQuKi8KKyAgICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgIGJzaWQ7ICAgICAgICAgICAgICAgLyoqPCAgIEJhc2Ugc3RhdGlvbiBJRC4gQG5ld3BhZ2V0YWJsZSAqLworfVFTRVJfTldfM0dQUDJfUkVHX0lORk9fVDsKKworLyoqIEdldHMgdGhlIHN0YXR1cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gb2YgXDxpZFw+LiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWNlX3JlZ2lzdHJhdGlvbl92YWxpZDsgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgdm9pY2VfcmVnaXN0cmF0aW9uIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgICBRU0VSX05XX0NPTU1PTl9SRUdfSU5GT19UICAgICB2b2ljZV9yZWdpc3RyYXRpb247ICAgICAgICAgICAgICAgICAgICAgLyoqPCAgIFZvaWNlIHJlZ2lzdHJhdGlvbi4gKi8KKworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9yZWdpc3RyYXRpb25fdmFsaWQ7ICAgICAgICAgICAgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBkYXRhX3JlZ2lzdHJhdGlvbiBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19DT01NT05fUkVHX0lORk9fVCAgICAgZGF0YV9yZWdpc3RyYXRpb247ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgICBEYXRhIHJlZ2lzdHJhdGlvbi4gKi8KKworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgdm9pY2VfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcF92YWxpZDsgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgICBRU0VSX05XXzNHUFBfUkVHX0lORk9fVCAgICAgICB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwOyAgICAgICAgLyoqPCAgIFZvaWNlIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQLiAqLworCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHBfdmFsaWQ7ICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIGRhdGFfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcCBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV18zR1BQX1JFR19JTkZPX1QgICAgICAgZGF0YV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwOyAgICAgICAgIC8qKjwgICBEYXRhIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQLiAqLworCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwMl92YWxpZDsgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIHZvaWNlX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgICBRU0VSX05XXzNHUFAyX1JFR19JTkZPX1QgICAgICB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwMjsgICAgICAgLyoqPCAgIFZvaWNlIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQMi4gKi8KKworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwMl92YWxpZDsgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgICBRU0VSX05XXzNHUFAyX1JFR19JTkZPX1QgICAgICBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyOyAgICAgICAgLyoqPCAgIERhdGEgcmVnaXN0cmF0aW9uIGRldGFpbHMgZm9yIDNHUFAyLiAqLworfVFTRVJfTldfUkVHX1NUQVRVU19JTkZPX1Q7CisKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQ4X3QgICAgICByc3NpOyAgICAgICAvKio8ICAgUlNTSSBpbiBkQm0uIEluZGljYXRlcyByZWNlaXZlZCBzaWduYWwgc3RyZW5ndGguIEEgc2lnbmVkIHZhbHVlOyAtMTI1IG9yIGxvd2VyIGluZGljYXRlcyBubyBzaWduYWwuKi8KK31RU0VSX05XX0dTTV9TSUdOQUxfSU5GT19UOworCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50OF90ICAgICAgcnNzaTsgICAgICAgLyoqPCAgIFJTU0kgaW4gZEJtLiBJbmRpY2F0ZXMgZm9yd2FyZCBsaW5rIHBpbG90IEVjLiBBIHNpZ25lZCB2YWx1ZTsgLTEyNSBvciBsb3dlciBpbmRpY2F0ZXMgbm8gc2lnbmFsLiovCisgICAgaW50MTZfdCAgICAgZWNpbzsgICAgICAgLyoqPCAgIEVjL0lvIHZhbHVlIHJlcHJlc2VudGluZyBuZWdhdGl2ZSAwLjUgZEIgaW5jcmVtZW50cywgZS5nLiwgMiBlcXVhbHMgLTEgZGJtLiovCit9UVNFUl9OV19XQ0RNQV9TSUdOQUxfSU5GT19UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludDhfdCAgICAgIHJzc2k7ICAgICAgIC8qKjwgICBSU1NJIGluIGRCbS4gSW5kaWNhdGVzIGZvcndhcmQgbGluayBwaWxvdCBFYy4gICAgYSBzaWduZWQgdmFsdWU7IC0xMjUgb3IgbG93ZXIgaW5kaWNhdGVzIG5vIHNpZ25hbC4qLworICAgIGludDhfdCAgICAgIHJzY3A7ICAgICAgIC8qKjwgICBSU0NQIGluIGRCbS4qLworICAgIGludDE2X3QgICAgIGVjaW87ICAgICAgIC8qKjwgICBFYy9JbyB2YWx1ZSByZXByZXNlbnRpbmcgbmVnYXRpdmUgMC41IGRCIGluY3JlbWVudHMsIGUuZy4sIDIgZXF1YWxzIC0xIGRibS4qLworICAgIGludDhfdCAgICAgIHNpbnI7ICAgICAgIC8qKjwgICBNZWFzdXJlZCBTSU5SIGluIGRCLiBAbmV3cGFnZXRhYmxlICovCit9UVNFUl9OV19URFNDRE1BX1NJR05BTF9JTkZPX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50OF90ICAgICAgcnNzaTsgICAgICAgLyoqPCAgIFJTU0kgaW4gZEJtLiBJbmRpY2F0ZXMgZm9yd2FyZCBsaW5rIHBpbG90IEVjLiBBIHNpZ25lZCB2YWx1ZTsgLTEyNSBvciBsb3dlciBpbmRpY2F0ZXMgbm8gc2lnbmFsLiovCisgICAgaW50OF90ICAgICAgcnNycTsgICAgICAgLyoqPCAgIFJTUlEgdmFsdWUgaW4gZEIgKHNpZ25lZCBpbnRlZ2VyIHZhbHVlKSwgYXMgbWVhc3VyZWQgYnkgTDEuIFJhbmdlOiAtMyB0byAtMjAgKC0zIGVxdWFscyAtMyBkQiwgLTIwIGVxdWFscyAtMjAgZEIpLiovCisgICAgaW50MTZfdCAgICAgIHJzcnA7ICAgICAgIC8qKjwgICBDdXJyZW50IFJTUlAgaW4gZEJtLCBhcyBtZWFzdXJlZCBieSBMMS4gUmFuZ2U6IC00NCB0byAtMTQwICgtNDQgZXF1YWxzIC00NCBkQm0sIC0xNDAgZXF1YWxzIC0xNDAgZEJtKS4qLworICAgIGludDE2X3QgICAgICBzbnI7ICAgICAgICAvKio8ICAgU05SIGxldmVsIGFzIGEgc2NhbGVkIGludGVnZXIgaW4gdW5pdHMgb2YgMC4xIGRCOyBlLmcuLCAtMTYgZEIgaGFzIGEgdmFsdWUgb2YgLTE2MCBhbmQgMjQuNiBkQiBoYXMgYSB2YWx1ZSBvZiAyNDYuKi8KK31RU0VSX05XX0xURV9TSUdOQUxfSU5GT19UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludDhfdCAgICAgIHJzc2k7ICAgICAgIC8qKjwgICBSU1NJIGluIGRCbS4gSW5kaWNhdGVzIGZvcndhcmQgbGluayBwaWxvdCBQb3dlciAoQUdDKSArIEVjL0lvLiBBIHNpZ25lZCB2YWx1ZTsgLTEyNSBvciBsb3dlciBpbmRpY2F0ZXMgbm8gc2lnbmFsLiovCisgICAgaW50MTZfdCAgICAgZWNpbzsgICAgICAgLyoqPCAgIEVjL0lvIHZhbHVlIHJlcHJlc2VudGluZyBuZWdhdGl2ZSAwLjUgZEIgaW5jcmVtZW50cywgZS5nLiwgMiBlcXVhbHMgLTEgZGJtLiovCit9UVNFUl9OV19DRE1BX1NJR05BTF9JTkZPX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgaW50OF90ICAgICAgcnNzaTsgICAgICAgLyoqPCAgIFJTU0kgaW4gZEJtLiBJbmRpY2F0ZXMgZm9yd2FyZCBsaW5rIHBpbG90IFBvd2VyIChBR0MpICsgRWMvSW8uIEEgc2lnbmVkIHZhbHVlOyAtMTI1IG9yIGxvd2VyIGluZGljYXRlcyBubyBzaWduYWwuKi8KKyAgICBpbnQxNl90ICAgICBlY2lvOyAgICAgICAvKio8ICAgRWMvSW8gdmFsdWUgcmVwcmVzZW50aW5nIG5lZ2F0aXZlIDAuNSBkQiBpbmNyZW1lbnRzLCBlLmcuLCAyIGVxdWFscyAtMSBkYm0uKi8KKyAgICBpbnQ4X3QgICAgICBzaW5yOyAgICAgICAvKio8ICAgU0lOUiBsZXZlbC4qLworICAgIGludDMyX3QgICAgIGlvOyAgICAgICAgIC8qKjwgICBSZWNlaXZlZCBJTyBpbiBkQm0uICovCit9UVNFUl9OV19IRFJfU0lHTkFMX0lORk9fVDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQxNl90ICAgICBzc1JzcnA7ICAgLyogU1MoU3luY2hyb25pemF0aW9uIFNpZ25hbCkgcmVmZXJlbmNlIHNpZ25hbCByZWNlaXZlZCBwb3dlciwgbXVsdGlwbGVkIGJ5IC0xLgorICAgICAgICAgICAgICAgICAgICAgICogUmVmZXJlbmNlOiAzR1BQIFRTIDM4LjIxNS4KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlIFs0NCwgMTQwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8KKyAgICBpbnQxNl90ICAgICBzc1JzcnE7ICAgLyogU1MgcmVmZXJlbmNlIHNpZ25hbCByZWNlaXZlZCBxdWFsaXR5LCBtdWx0aXBsZWQgYnkgLTEuCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzguMjE1LgorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgWzMsIDIwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8KKyAgICBpbnQxNl90ICAgICBzc1NpbnI7ICAgLyogU1Mgc2lnbmFsLXRvLW5vaXNlIGFuZCBpbnRlcmZlcmVuY2UgcmF0aW8uCisgICAgICAgICAgICAgICAgICAgICAgKiBSZWZlcmVuY2U6IDNHUFAgVFMgMzguMjE1IHNlY3Rpb24gNS4xLiosIDNHUFAgVFMgMzguMTMzIHNlY3Rpb24gMTAuMS4xNi4xLgorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgWy0yMywgNDBdLCBJTlRfTUFYIG1lYW5zIGludmFsaWQvdW5yZXBvcnRlZC4qLworICAgIGludDE2X3QgICAgIGNzaVJzcnA7ICAvKiBDU0kgcmVmZXJlbmNlIHNpZ25hbCByZWNlaXZlZCBwb3dlciwgbXVsdGlwbGVkIGJ5IC0xLgorICAgICAgICAgICAgICAgICAgICAgICogUmVmZXJlbmNlOiAzR1BQIFRTIDM4LjIxNS4KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlIFs0NCwgMTQwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8KKyAgICBpbnQxNl90ICAgICBjc2lSc3JxOyAgLyogQ1NJIHJlZmVyZW5jZSBzaWduYWwgcmVjZWl2ZWQgcXVhbGl0eSwgbXVsdGlwbGVkIGJ5IC0xLgorICAgICAgICAgICAgICAgICAgICAgICogUmVmZXJlbmNlOiAzR1BQIFRTIDM4LjIxNS4KKyAgICAgICAgICAgICAgICAgICAgICAqIFJhbmdlIFszLCAyMF0sIElOVF9NQVggbWVhbnMgaW52YWxpZC91bnJlcG9ydGVkLiovCisgICAgaW50MTZfdCAgICAgY3NpU2lucjsgIC8qIENTSSBzaWduYWwtdG8tbm9pc2UgYW5kIGludGVyZmVyZW5jZSByYXRpby4KKyAgICAgICAgICAgICAgICAgICAgICAqIFJlZmVyZW5jZTogM0dQUCBUUyAxMzguMjE1IHNlY3Rpb24gNS4xLiosIDNHUFAgVFMgMzguMTMzIHNlY3Rpb24gMTAuMS4xNi4xLgorICAgICAgICAgICAgICAgICAgICAgICogUmFuZ2UgWy0yMywgNDBdLCBJTlRfTUFYIG1lYW5zIGludmFsaWQvdW5yZXBvcnRlZC4qLworfVFTRVJfTldfTlJfU0lHTkFMX0lORk9fVDsKKworCisvKiogR2V0cyBzaWduYWwgc3RyZW5ndGggaW5mb3JtYXRpb24uICovCit0eXBlZGVmIHN0cnVjdAoreworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgZ3NtX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBnc21fc2lnX2luZm8gaXMgYmVpbmcgcGFzc2VkLiAqLworICAgIFFTRVJfTldfR1NNX1NJR05BTF9JTkZPX1QgICAgIGdzbV9zaWdfaW5mbzsgICAgICAgICAgICAgICAvKio8ICAgR1NNIHNpZ25hbCBpbmZvcm1hdGlvbi4gKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIHdjZG1hX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgd2NkbWFfc2lnX2luZm8gaXMgYmVpbmcgcGFzc2VkLiAqLworICAgIFFTRVJfTldfV0NETUFfU0lHTkFMX0lORk9fVCAgIHdjZG1hX3NpZ19pbmZvOyAgICAgICAgICAgICAvKio8ICAgV0NETUEgc2lnbmFsIGluZm9ybWF0aW9uLiAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgdGRzY2RtYV9zaWdfaW5mb192YWxpZDsgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiB0ZHNjZG1hX3NpZ19pbmZvIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgICBRU0VSX05XX1REU0NETUFfU0lHTkFMX0lORk9fVCB0ZHNjZG1hX3NpZ19pbmZvOyAgICAgICAgICAgLyoqPCAgIFREU0NETUEgc2lnbmFsIGluZm9ybWF0aW9uLiAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgbHRlX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBsdGVfc2lnX2luZm8gaXMgYmVpbmcgcGFzc2VkLiAqLworICAgIFFTRVJfTldfTFRFX1NJR05BTF9JTkZPX1QgICAgIGx0ZV9zaWdfaW5mbzsgICAgICAgICAgICAgICAvKio8ICAgTFRFIHNpZ25hbCBpbmZvcm1hdGlvbi4gKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIGNkbWFfc2lnX2luZm9fdmFsaWQ7ICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgY2RtYV9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19DRE1BX1NJR05BTF9JTkZPX1QgICAgY2RtYV9zaWdfaW5mbzsgICAgICAgICAgICAgIC8qKjwgICBDRE1BIHNpZ25hbCBpbmZvcm1hdGlvbi4gKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIGhkcl9zaWdfaW5mb192YWxpZDsgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgaGRyX3NpZ19pbmZvIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgICBRU0VSX05XX0hEUl9TSUdOQUxfSU5GT19UICAgICBoZHJfc2lnX2luZm87ICAgICAgICAgICAgICAgLyoqPCAgIEhEUiBzaWduYWwgaW5mb3JtYXRpb24uICovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBucl9zaWdfaW5mb192YWxpZDsKKyAgICBRU0VSX05XX05SX1NJR05BTF9JTkZPX1QgICAgICBucl9zaWdfaW5mbzsKK31RU0VSX05XX1NJR05BTF9TVFJFTkdUSF9JTkZPX1Q7CisKKworCisKKworLyogQGJyaWRlZiBDYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHRvIFFTRVJfTldfQWRkUnhNc2dIYW5kbGVyCisgKiBtYXAgb2YgaW5kX2ZsYWcgYW5kIGluZF9tc2dfYnVmIGFzIGJlbGxvdyA6CisgKiAgTldfSU5EX1ZPSUNFX1JFR19FVkVOVF9JTkRfRkxBRyA6IFFTRVJfTldfVk9JQ0VfUkVHX0VWRU5UX0lORF9UCisgKiAgTldfSU5EX0RBVEFfUkVHX0VWRU5UX0lORF9GTEFHIDogUVNFUl9OV19EQVRBX1JFR19FVkVOVF9JTkRfVAorICogIE5XX0lORF9TSUdOQUxfU1RSRU5HVEhfRVZFTlRfSU5EX0ZMQUcgOiBRU0VSX05XX1NJTkdOQUxfRVZFTlRfSU5EX1QKKyAqICBOV19JTkRfQ0VMTF9BQ0NFU1NfU1RBVEVfQ0hHX0VWRU5UX0lORF9GTEFHIDogUVNFUl9OV19DRUxMX0FDQ0VTU19TVEFURV9FVkVOVF9JTkRfVAorICogIE5XX0lORF9OSVRaX1RJTUVfVVBEQVRFX0VWRU5UX0lORF9GTEFHIDogUVNFUl9OV19OSVRaX1RJTUVfRVZFTlRfSU5EX1QKKyAqICovCit0eXBlZGVmIHZvaWQgKCpRU0VSX05XX1J4TXNnSGFuZGxlckZ1bmNfdCkoCisgICAgbndfY2xpZW50X2hhbmRsZV90eXBlIGhfbncsCisgICAgdWludDMyX3QgaW5kX2ZsYWcsCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICppbmRfbXNnX2J1ZiwKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgaW5kX21zZ19sZW4sCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICpjb250ZXh0UHRyCispOworCisKKy8qKiBJbmRpY2F0aW9uIG1lc3NhZ2U7IEluZGljYXRpb24gZm9yIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyZWQgZXZlbnQgZmxhZyBOV19JTkRfVk9JQ0VfUkVHX0VWRU5UX0lORF9GTEFHICovCit0eXBlZGVmIHN0cnVjdCB7CisKKyAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyYXRpb25fdmFsaWQ7ICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIHZvaWNlX3JlZ2lzdHJhdGlvbiBpcyBiZWluZyBwYXNzZWQuICovCisgIFFTRVJfTldfQ09NTU9OX1JFR19JTkZPX1QgICAgIHJlZ2lzdHJhdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKio8IFZvaWNlIHJlZ2lzdHJhdGlvbi4gKi8KKworICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHBfdmFsaWQ7ICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgdm9pY2VfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcCBpcyBiZWluZyBwYXNzZWQuICovCisgIFFTRVJfTldfM0dQUF9SRUdfSU5GT19UICAgICAgIHJlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHA7ICAgICAgICAvKio8IFZvaWNlIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQLiAqLworCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcDJfdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwMiBpcyBiZWluZyBwYXNzZWQuICovCisgIFFTRVJfTldfM0dQUDJfUkVHX0lORk9fVCAgICAgIHJlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyOyAgICAgICAvKio8IFZvaWNlIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQMi4gKi8KK31RU0VSX05XX1ZPSUNFX1JFR19FVkVOVF9JTkRfVDsKKworLyoqIEluZGljYXRpb24gbWVzc2FnZTsgSW5kaWNhdGlvbiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXJlZCBldmVudCBmbGFnIE5XX0lORF9EQVRBX1JFR19FVkVOVF9JTkRfRkxBRyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uX3ZhbGlkOyAgICAgICAgICAgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBkYXRhX3JlZ2lzdHJhdGlvbiBpcyBiZWluZyBwYXNzZWQuICovCisgIFFTRVJfTldfQ09NTU9OX1JFR19JTkZPX1QgICAgIHJlZ2lzdHJhdGlvbjsgICAgICAgICAgICAgICAgICAgICAvKio8IERhdGEgcmVnaXN0cmF0aW9uLiAqLworCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcF92YWxpZDsgIC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAgaXMgYmVpbmcgcGFzc2VkLiAqLworICBRU0VSX05XXzNHUFBfUkVHX0lORk9fVCAgICAgICByZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwOyAgICAgICAgLyoqPCBEYXRhIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQLiAqLworCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcDJfdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyIGlzIGJlaW5nIHBhc3NlZC4gKi8KKyAgUVNFUl9OV18zR1BQMl9SRUdfSU5GT19UICAgICAgcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcDI7ICAgICAgIC8qKjwgRGF0YSByZWdpc3RyYXRpb24gZGV0YWlscyBmb3IgM0dQUDIuICovCit9UVNFUl9OV19EQVRBX1JFR19FVkVOVF9JTkRfVDsKKworCisvKiogSW5kaWNhdGlvbiBtZXNzYWdlOyBJbmRpY2F0aW9uIGZvciB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlcmVkIGV2ZW50IGZsYWcgTldfSU5EX1NJR05BTF9TVFJFTkdUSF9FVkVOVF9JTkRfRkxBRyAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVpbnQ4X3QgZ3NtX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIGdzbV9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19HU01fU0lHTkFMX0lORk9fVCAgICAgICBnc21fc2lnX2luZm87ICAgLyoqPCBHU00gc2luZ2FsIGluZm9ybWF0aW9uLiAqLworCisgICAgdWludDhfdCB3Y2RtYV9zaWdfaW5mb192YWxpZDsgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgd2NkbWFfc2lnX2luZm8gaXMgYmVpbmcgcGFzc2VkLiAqLworICAgIFFTRVJfTldfV0NETUFfU0lHTkFMX0lORk9fVCB3Y2RtYV9zaWdfaW5mbzsgICAgIC8qKjwgV0NETUEgc2luZ2FsIGluZm9ybWF0aW9uLiAqLworCisgICAgdWludDhfdCB0ZHNjZG1hX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgdGRzY2RtYV9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19URFNDRE1BX1NJR05BTF9JTkZPX1QgdGRzY2RtYV9zaWdfaW5mbzsgLyoqPCBURFNDRE1BIHNpbmdhbCBpbmZvcm1hdGlvbi4gKi8KKworICAgIHVpbnQ4X3QgbHRlX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIGx0ZV9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19MVEVfU0lHTkFMX0lORk9fVCBsdGVfc2lnX2luZm87ICAgICAgICAgLyoqPCBMVEUgc2luZ2FsIGluZm9ybWF0aW9uLiAqLworCisgICAgdWludDhfdCBjZG1hX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgY2RtYV9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19DRE1BX1NJR05BTF9JTkZPX1QgY2RtYV9zaWdfaW5mbzsgICAgICAgLyoqPCBDRE1BIHNpbmdhbCBpbmZvcm1hdGlvbi4gKi8KKworICAgIHVpbnQ4X3QgaGRyX3NpZ19pbmZvX3ZhbGlkOyAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmIGhkcl9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCisgICAgUVNFUl9OV19IRFJfU0lHTkFMX0lORk9fVCBoZHJfc2lnX2luZm87ICAgICAgICAgLyoqPCBIRFIgc2luZ2FsIGluZm9ybWF0aW9uLiAqLworCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICBucl9zaWdfaW5mb192YWxpZDsKKyAgICBRU0VSX05XX05SX1NJR05BTF9JTkZPX1QgICAgICBucl9zaWdfaW5mbzsKK31RU0VSX05XX1NJTkdOQUxfRVZFTlRfSU5EX1Q7CisKKworaW50IHFzZXJfbndfY2xpZW50X2luaXQobndfY2xpZW50X2hhbmRsZV90eXBlICAqcGhfbncpOworCitpbnQgcXNlcl9ud19jbGllbnRfZGVpbml0KG53X2NsaWVudF9oYW5kbGVfdHlwZSAgaF9udyk7CisKK2ludCBxc2VyX253X3NldF9jb25maWcKKygKKyAgICBud19jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgaF9udywKKyAgICBRU0VSX05XX0NPTkZJR19JTkZPX1QgICAgICpwdF9pbmZvCispOworCitpbnQgcXNlcl9ud19zZXRfb29zX2NvbmZpZworKAorICAgIG53X2NsaWVudF9oYW5kbGVfdHlwZSAgICAgICBoX253LAorICAgIFFTRVJfTldfT09TX0NPTkZJR19JTkZPX1QgICAgICpwdF9pbmZvCispOworCitpbnQgcXNlcl9ud19nZXRfb29zX2NvbmZpZworKAorICAgIG53X2NsaWVudF9oYW5kbGVfdHlwZSAgICAgICBoX253LAorICAgIFFTRVJfTldfT09TX0NPTkZJR19JTkZPX1QgICAgICpwdF9pbmZvCispOworCitpbnQgcXNlcl9ud19ldmVudF9yZWdpc3RlcgorKAorICAgIG53X2NsaWVudF9oYW5kbGVfdHlwZSAgICAgICBoX253LAorICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBiaXRtYXNrIC8vIGJpdCBPUiBvZiBOV19JTkRfeHh4eF9FVkVOVF9PTgorKTsKKworaW50IHFzZXJfbndfZ2V0X29wZXJhdG9yX25hbWUKKygKKyAgICBud19jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgICAgIGhfbncsCisgICAgUVNFUl9OV19PUEVSQVRPUl9OQU1FX0lORk9fVCAgKnB0X2luZm8gLy9Zb3Ugc2hvdWxkIG1hbGxvYyB0aGlzIG9yIG1heSBjYXVzZSBzdGFjayBvdmVyZmxvdworKTsKKworaW50IHFzZXJfbndfZ2V0X3JlZ19zdGF0dXMKKygKKyAgICBud19jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgICAgICAgICBoX253LAorICAgIFFTRVJfTldfUkVHX1NUQVRVU19JTkZPX1QgICAgICAgICAqcHRfaW5mbworKTsKKworaW50IHFzZXJfbndfZ2V0X3NpZ25hbF9zdHJlbmd0aAorKAorICAgIG53X2NsaWVudF9oYW5kbGVfdHlwZSAgICAgICAgICAgICAgIGhfbncsCisgICAgUVNFUl9OV19TSUdOQUxfU1RSRU5HVEhfSU5GT19UICAgICpwdF9pbmZvCispOworCitpbnQgcXNlcl9ud19hZGRfcnhfbXNnX2hhbmRsZXIKKygKKyAgICBud19jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgIGhfbncsCisgICAgUVNFUl9OV19SeE1zZ0hhbmRsZXJGdW5jX3QgaGFuZGxlclB0ciwKKyAgICB2b2lkKiBjb250ZXh0UHRyCispOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmLy9fX1FTRVJfTldfSF9fCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3FzZXJfc2ltLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3FzZXJfc2ltLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmYyNzgyYQotLS0gL2Rldi9udWxsCisrKyBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfcXNlcl9zaW0uaApAQCAtMCwwICsxLDM4NCBAQAorI2lmbmRlZiBfX0xZTlFfUVNFUl9TSU1fXworI2RlZmluZSBfX0xZTlFfUVNFUl9TSU1fXworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIm1idGtfdHlwZS5oIgorCisjZGVmaW5lIFFTRVJfU0lNX0lNU0lfTEVOX01BWCAgICAgMTYgIC8qKiAgTWF4aW11bSBsZW5ndGggb2YgSU1TSSBkYXRhLiAqLworI2RlZmluZSBRU0VSX1NJTV9JQ0NJRF9MRU5fTUFYICAgIDIwICAvKiogIE1heGltdW0gbGVuZ3RoIG9mIElDQ0lEIGRhdGEuICovCisKK3R5cGVkZWYgZW51bQoreworICAgIEVfUVNFUl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgICAgPSAwLCAgICAvKio8ICBTdWNjZXNzLiAqLworICAgIEVfUVNFUl9FUlJPUl9CQURQQVJNICAgICAgICAgICAgICAgICAgPSA0LCAgICAvKio8ICBCYWQgcGFyYW1ldGVyLiAqLworfUVfUVNFUl9FUlJPUl9DT0RFX1Q7CisKK3R5cGVkZWYgdWludDMyX3Qgc2ltX2NsaWVudF9oYW5kbGVfdHlwZTsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUVNFUl9TSU1fU0xPVF9JRF8xICAgICAgICAgID0gMHhCMDEsICAgIC8qKjwgSWRlbnRpZnkgY2FyZCBpbiBzbG90IDEuICAqLworICAgIFFTRVJfU0lNX1NMT1RfSURfMiAgICAgICAgICA9IDB4QjAyLCAgICAvKio8IElkZW50aWZ5IGNhcmQgaW4gc2xvdCAyLiAgKi8KK31RU0VSX1NJTV9TTE9UX0lEX1RZUEVfVDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUVNFUl9TSU1fQVBQX1RZUEVfVU5LTk9XTiAgID0gMHhCMDAsICAgIC8qKjwgIFVua25vd24gYXBwbGljYXRpb24gdHlwZSAgKi8KKyAgICBRU0VSX1NJTV9BUFBfVFlQRV8zR1BQICAgICAgPSAweEIwMSwgICAgLyoqPCBJZGVudGlmeSB0aGUgU0lNL1VTSU0gYXBwbGljYXRpb24gb24gdGhlIGNhcmQuICAqLworICAgIFFTRVJfU0lNX0FQUF9UWVBFXzNHUFAyICAgICA9IDB4QjAyLCAgICAvKio8IElkZW50aWZ5IHRoZSBSVUlNL0NTSU0gYXBwbGljYXRpb24gb24gdGhlIGNhcmQuICAqLworICAgIFFTRVJfU0lNX0FQUF9UWVBFX0lTSU0gICAgICA9IDB4QjAzLCAgICAvKio8IElkZW50aWZ5IHRoZSBJU0lNIGFwcGxpY2F0aW9uIG9uIHRoZSBjYXJkLiAgKi8KK31RU0VSX1NJTV9BUFBfVFlQRV9UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFFTRVJfU0lNX1NMT1RfSURfVFlQRV9UICAgICBlX3Nsb3RfaWQ7ICAvKio8IEluZGljYXRlcyB0aGUgc2xvdCB0byBiZSB1c2VkLiAqLworICAgIFFTRVJfU0lNX0FQUF9UWVBFX1QgICAgICAgICBlX2FwcDsgICAgICAvKio8IEluZGljYXRlcyB0aGUgdHlwZSBvZiB0aGUgYXBwbGljYXRpb24uICovCit9UVNFUl9TSU1fQVBQX0lEX0lORk9fVDsgIC8qIFR5cGUgKi8KKworI2RlZmluZSBRU0VSX1NJTV9QSU5fTEVOX01BWCAgOCAgIC8qKiAgTWF4aW11bSBsZW5ndGggb2YgUElOIGRhdGEuICovCisKK3R5cGVkZWYgZW51bQoreworICAgIFFTRVJfU0lNX1BJTl9JRF8xID0gMHhCMDEsICAvKio8IExldmVsIDEgdXNlciB2ZXJpZmljYXRpb24uICAqLworICAgIFFTRVJfU0lNX1BJTl9JRF8yID0gMHhCMDIsICAvKio8IExldmVsIDIgdXNlciB2ZXJpZmljYXRpb24uICAqLworfVFTRVJfU0lNX1BJTl9JRF9UWVBFX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUVNFUl9TSU1fQVBQX0lEX0lORk9fVCAgICAgICAgYXBwX2luZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBcHBsaWNhdGlvbiBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvbi4gKi8KKyAgICBRU0VSX1NJTV9QSU5fSURfVFlQRV9UICBwaW5faWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IFBJTiBJRC4gKi8KKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgcGluX3ZhbHVlX2xlbjsgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHBpbl92YWx1ZS4gKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgcGluX3ZhbHVlW1FTRVJfU0lNX1BJTl9MRU5fTUFYXTsgIC8qICBWYWx1ZSBvZiB0aGUgUElOICovCit9UVNFUl9TSU1fVkVSSUZZX1BJTl9JTkZPX1Q7CisKKy8qKiBDaGFuZ2VzIHRoZSBQSU4gdmFsdWUgb2YgYW4gYXBwbGljYXRpb24uIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHBhc3MgYm90aCB0aGUKKyAgICBuZXcgYW5kIHRoZSBvbGQgdmFsdWVzIG9mIHRoZSBQSU4gdG8gY29tcGxldGUgdGhlIG9wZXJhdGlvbi4KKyAgICBUaGUgc2FtZSBQSU4gY2FuIGJlIHVzZWQgYnkgbXVsdGlwbGUgc2Vzc2lvbnMgKGkuZS4sIHRoZSBQSU4gaXMgc2hhcmVkCisgICAgYmV0d2VlbiBHU00gYW5kIFJVSU0gaW4gYW4gSUNDIGNhcmQpLiBUaGUgUElOIGlzIGF1dG9tYXRpY2FsbHkgdmVyaWZpZWQKKyAgICBmb3IgYWxsIHRoZSBzZXNzaW9ucyB3aGVuIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBRU0VSX1NJTV9BUFBfSURfSU5GT19UICAgICAgICBhcHBfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBcHBsaWNhdGlvbiBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvbi4gKi8KKyAgICBRU0VSX1NJTV9QSU5fSURfVFlQRV9UICBwaW5faWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSU4gSUQuICovCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG9sZF9waW5fdmFsdWVfbGVuOyAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gb2xkX3Bpbl92YWx1ZS4gKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3Bpbl92YWx1ZVtRU0VSX1NJTV9QSU5fTEVOX01BWF07ICAvKio8IFZhbHVlIG9mIHRoZSBvbGQgUElOIGFzIGEgc2VxdWVuY2Ugb2YgQVNDSUkgY2hhcmFjdGVycy4gKi8KKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbmV3X3Bpbl92YWx1ZV9sZW47ICAgICAgICAgICAgICAgICAgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBuZXdfcGluX3ZhbHVlLiAqLworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBuZXdfcGluX3ZhbHVlW1FTRVJfU0lNX1BJTl9MRU5fTUFYXTsgIC8qKjwgVmFsdWUgb2YgdGhlIG5ldyBQSU4gYXMgYSBzZXF1ZW5jZSBvZiBBU0NJSSBjaGFyYWN0ZXJzLiAqLworfVFTRVJfU0lNX0NIQU5HRV9QSU5fSU5GT19UOworCisvKiogVW5ibG9ja3MgYSBibG9ja2VkIFBJTiB1c2luZyB0aGUgUFVLIGNvZGUuIFRoZSBjbGllbnQgbXVzdCBwYXNzIFBVSzEgdG8gdW5ibG9jayBQSU4xIG9yIFBVSzIgdG8gdW5ibG9jayBQSU4yLgorICAgIFRoZSBzYW1lIFBJTiBjYW4gYmUgdXNlZCBieSBtdWx0aXBsZSBzZXNzaW9ucyAoaS5lLiwgdGhlIFBJTiBpcyBzaGFyZWQgYmV0d2VlbiBHU00gYW5kIFJVSU0gaW4gYW4gSUNDIGNhcmQpLgorICAgIFRoZSBQSU4gaXMgYXV0b21hdGljYWxseSB2ZXJpZmllZCBmb3IgYWxsIHRoZSBzZXNzaW9ucyB3aGVuIHRoZSBjb21tYW5kIGlzIGV4ZWN1dGVkLiAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBRU0VSX1NJTV9BUFBfSURfSU5GT19UICAgICAgICBhcHBfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBBcHBsaWNhdGlvbiBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvbi4gKi8KKyAgICBRU0VSX1NJTV9QSU5fSURfVFlQRV9UICBwaW5faWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBQSU4gSUQuICovCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIHB1a192YWx1ZV9sZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gcHVrX3ZhbHVlLiAqLworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICBwdWtfdmFsdWVbUVNFUl9TSU1fUElOX0xFTl9NQVhdOyAgICAgIC8qKjwgVmFsdWUgb2YgdGhlIFBVSyBhcyBhIHNlcXVlbmNlIG9mIEFTQ0lJIGNoYXJhY3RlcnMuICovCisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG5ld19waW5fdmFsdWVfbGVuOyAgICAgICAgICAgICAgICAgICAgICAvKio8IE11c3QgYmUgc2V0IHRvIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gbmV3X3Bpbl92YWx1ZS4gKi8KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Bpbl92YWx1ZVtRU0VSX1NJTV9QSU5fTEVOX01BWF07ICAvKio8IFZhbHVlIG9mIHRoZSBuZXcgUElOIGFzIGEgc2VxdWVuY2Ugb2YgQVNDSUkgY2hhcmFjdGVycy4gKi8KK31RU0VSX1NJTV9VTkJMT0NLX1BJTl9JTkZPX1Q7CisKKy8qKiBFbmFibGVzIHRoZSBQSU4gb24gYW4gYXBwbGljYXRpb24uICovCit0eXBlZGVmICBRU0VSX1NJTV9WRVJJRllfUElOX0lORk9fVCBRU0VSX1NJTV9FTkFCTEVfUElOX0lORk9fVDsgLy9TYW1lCisKKy8qKiBEaXNhYmxlcyB0aGUgUElOIG9mIGFuIGFwcGxpY2F0aW9uLCAqLwordHlwZWRlZiAgUVNFUl9TSU1fVkVSSUZZX1BJTl9JTkZPX1QgUVNFUl9TSU1fRElTQUJMRV9QSU5fSU5GT19UOyAvL1NhbWUKKworCit0eXBlZGVmIGVudW0KK3sKKyAgICBRU0VSX1NJTV9QRVJTT19GRUFUVVJFX1RZUEVfVU5LTk9XTiAgICAgICAgICAgICAgICAgPSAweEIwMCwgLyoqPCAgVW5rbm93biBwZXJzb25hbGl6YXRpb24gZmVhdHVyZS4gICovCisgICAgUVNFUl9TSU1fUEVSU09fRkVBVFVSRV9UWVBFXzNHUFBfTkVUV09SSyAgICAgICAgICAgID0gMHhCMDEsIC8qKjwgIEZlYXR1cml6YXRpb24gYmFzZWQgb24gM0dQUCBNQ0MgYW5kIE1OQy4gICovCisgICAgUVNFUl9TSU1fUEVSU09fRkVBVFVSRV9UWVBFXzNHUFBfTkVUV09SS19TVUJTRVQgICAgID0gMHhCMDIsIC8qKjwgIEZlYXR1cml6YXRpb24gYmFzZWQgb24gM0dQUCBNQ0MsIE1OQywgYW5kIElNU0kgZGlnaXRzIDYgYW5kIDcuICAqLworICAgIFFTRVJfU0lNX1BFUlNPX0ZFQVRVUkVfVFlQRV8zR1BQX1NFUlZJQ0VfUFJPVklERVIgICA9IDB4QjAzLCAvKio8ICBGZWF0dXJpemF0aW9uIGJhc2VkIG9uIDNHUFAgTUNDLCBNTkMsIGFuZCBHSUQxLiAgKi8KKyAgICBRU0VSX1NJTV9QRVJTT19GRUFUVVJFX1RZUEVfM0dQUF9DT1JQT1JBVEUgICAgICAgICAgPSAweEIwNCwgLyoqPCAgRmVhdHVyaXphdGlvbiBiYXNlZCBvbiAzR1BQIE1DQywgTU5DLCBHSUQxLCBhbmQgR0lEMi4gICovCisgICAgUVNFUl9TSU1fUEVSU09fRkVBVFVSRV9UWVBFXzNHUFBfU0lNICAgICAgICAgICAgICAgID0gMHhCMDUsIC8qKjwgIEZlYXR1cml6YXRpb24gYmFzZWQgb24gdGhlIDNHUFAgSU1TSS4gICovCisgICAgUVNFUl9TSU1fUEVSU09fRkVBVFVSRV9UWVBFXzNHUFAyX05FVFdPUktfVFlQRV8xICAgID0gMHhCMDYsIC8qKjwgIEZlYXR1cml6YXRpb24gYmFzZWQgb24gM0dQUDIgTUNDIGFuZCBNTkMuICAqLworICAgIFFTRVJfU0lNX1BFUlNPX0ZFQVRVUkVfVFlQRV8zR1BQMl9ORVRXT1JLX1RZUEVfMiAgICA9IDB4QjA3LCAvKio8ICBGZWF0dXJpemF0aW9uIGJhc2VkIG9uIDNHUFAyIElSTSBjb2RlLiAgKi8KKyAgICBRU0VSX1NJTV9QRVJTT19GRUFUVVJFX1RZUEVfM0dQUDJfUlVJTSAgICAgICAgICAgICAgPSAweEIwOCwgLyoqPCAgRmVhdHVyaXphdGlvbiBiYXNlZCBvbiAzR1BQMiBJTVNJX00uICAqLworfVFTRVJfU0lNX1BFUlNPX0ZFQVRVUkVfVFlQRV9UOworCit0eXBlZGVmIGVudW0KK3sKKyAgICBRU0VSX1NJTV9DQVJEX1NUQVRFX1VOS05PV04gICAgICAgICAgICAgICAgICAgICA9IDB4QjAxLCAgICAvKio8IENhcmQgc3RhdGUgdW5rbm93bi4gKi8KKyAgICBRU0VSX1NJTV9DQVJEX1NUQVRFX0FCU0VOVCAgICAgICAgICAgICAgICAgICAgICA9IDB4QjAyLCAgICAvKio8IENhcmQgaXMgYWJzZW50LiAqLworICAgIFFTRVJfU0lNX0NBUkRfU1RBVEVfUFJFU0VOVCAgICAgICAgICAgICAgICAgICAgID0gMHhCMDMsICAgIC8qKjwgQ2FyZCBpcyBwcmVzZW50LiAqLworICAgIFFTRVJfU0lNX0NBUkRfU1RBVEVfRVJST1JfVU5LTk9XTiAgICAgICAgICAgICAgID0gMHhCMDQsICAgIC8qKjwgVW5rbm93biBlcnJvciBzdGF0ZS4gKi8KKyAgICBRU0VSX1NJTV9DQVJEX1NUQVRFX0VSUk9SX1BPV0VSX0RPV04gICAgICAgICAgICA9IDB4QjA1LCAgICAvKio8IFBvd2VyIGRvd24uICovCisgICAgUVNFUl9TSU1fQ0FSRF9TVEFURV9FUlJPUl9QT0xMX0VSUk9SICAgICAgICAgICAgPSAweEIwNiwgICAgLyoqPCBQb2xsIGVycm9yLiAqLworICAgIFFTRVJfU0lNX0NBUkRfU1RBVEVfRVJST1JfTk9fQVRSX1JFQ0VJVkVEICAgICAgID0gMHhCMDcsICAgIC8qKjwgIEZhaWxlZCB0byByZWNlaXZlIGFuIGFuc3dlciB0byByZXNldC4gICovCisgICAgUVNFUl9TSU1fQ0FSRF9TVEFURV9FUlJPUl9WT0xUX01JU01BVENIICAgICAgICAgPSAweEIwOCwgICAgLyoqPCBWb2x0YWdlIG1pc21hdGNoLiAqLworICAgIFFTRVJfU0lNX0NBUkRfU1RBVEVfRVJST1JfUEFSSVRZX0VSUk9SICAgICAgICAgID0gMHhCMDksICAgIC8qKjwgUGFyaXR5IGVycm9yLiAqLworICAgIFFTRVJfU0lNX0NBUkRfU1RBVEVfRVJST1JfU0lNX1RFQ0hOSUNBTF9QUk9CTEVNUz0gMHhCMEEsICAgIC8qKjwgQ2FyZCByZXR1cm5lZCB0ZWNobmljYWwgcHJvYmxlbXMuICovCit9UVNFUl9TSU1fQ0FSRF9TVEFURV9UWVBFX1Q7ICAvKio8IENhcmQgc3RhdGUuICovCisKK3R5cGVkZWYgZW51bQoreworICAgIFFTRVJfU0lNX0NBUkRfVFlQRV9VTktOT1dOICA9IDB4QjAwLCAgICAvKio8ICBVbmlkZW50aWZpZWQgY2FyZCB0eXBlLiAgKi8KKyAgICBRU0VSX1NJTV9DQVJEX1RZUEVfSUNDICAgICAgPSAweEIwMSwgICAgLyoqPCAgQ2FyZCBvZiBTSU0gb3IgUlVJTSB0eXBlLiAgKi8KKyAgICBRU0VSX1NJTV9DQVJEX1RZUEVfVUlDQyAgICAgPSAweEIwMiwgICAgLyoqPCAgQ2FyZCBvZiBVU0lNIG9yIENTSU0gdHlwZS4gICovCit9UVNFUl9TSU1fQ0FSRF9UWVBFX1Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFFTRVJfU0lNX1BST1ZfU1RBVEVfTk9ORSAgICA9IDB4QjAwLCAgICAvKio8ICBOb25wcm92aXNpb25pbmcuICAqLworICAgIFFTRVJfU0lNX1BST1ZfU1RBVEVfUFJJICAgICA9IDB4QjAxLCAgICAvKio8ICBQcmltYXJ5IHByb3Zpc2lvbmluZyBzdWJzY3JpcHRpb24uICAqLworICAgIFFTRVJfU0lNX1BST1ZfU1RBVEVfU0VDICAgICA9IDB4QjAyLCAgICAvKio8ICBTZWNvbmRhcnkgcHJvdmlzaW9uaW5nIHN1YnNjcmlwdGlvbi4gICovCit9UVNFUl9TSU1fU1VCU0NSSVBUSU9OX1RZUEVfVDsKKwordHlwZWRlZiBlbnVtCit7CisgICAgUVNFUl9TSU1fQVBQX1NUQVRFX1VOS05PV04gICAgICAgICAgICAgICAgICA9IDB4QjAwLCAgICAvKio8IEFwcGxpY2F0aW9uIHN0YXRlIHVua25vd24uICovCisgICAgUVNFUl9TSU1fQVBQX1NUQVRFX0RFVEVDVEVEICAgICAgICAgICAgICAgICA9IDB4QjAxLCAgICAvKio8ICBEZXRlY3RlZCBzdGF0ZS4gICovCisgICAgUVNFUl9TSU1fQVBQX1NUQVRFX1BJTjFfUkVRICAgICAgICAgICAgICAgICA9IDB4QjAyLCAgICAvKio8ICBQSU4xIHJlcXVpcmVkLiAgKi8KKyAgICBRU0VSX1NJTV9BUFBfU1RBVEVfUFVLMV9SRVEgICAgICAgICAgICAgICAgID0gMHhCMDMsICAgIC8qKjwgIFBVSzEgcmVxdWlyZWQuICAqLworICAgIFFTRVJfU0lNX0FQUF9TVEFURV9JTklUQUxJWkFUSU5HICAgICAgICAgICAgPSAweEIwNCwgICAgLyoqPCAgSW5pdGlhbGl6aW5nLiAgKi8KKyAgICBRU0VSX1NJTV9BUFBfU1RBVEVfUEVSU09fQ0tfUkVRICAgICAgICAgICAgID0gMHhCMDUsICAgIC8qKjwgIFBlcnNvbmFsaXphdGlvbiBjb250cm9sIGtleSByZXF1aXJlZC4gICovCisgICAgUVNFUl9TSU1fQVBQX1NUQVRFX1BFUlNPX1BVS19SRVEgICAgICAgICAgICA9IDB4QjA2LCAgICAvKio8ICBQZXJzb25hbGl6YXRpb24gdW5ibG9jayBrZXkgcmVxdWlyZWQuICAqLworICAgIFFTRVJfU0lNX0FQUF9TVEFURV9QRVJTT19QRVJNQU5FTlRMWV9CTE9DS0VEPSAweEIwNywgICAgLyoqPCAgUGVyc29uYWxpemF0aW9uIGlzIHBlcm1hbmVudGx5IGJsb2NrZWQuICAqLworICAgIFFTRVJfU0lNX0FQUF9TVEFURV9QSU4xX1BFUk1fQkxPQ0tFRCAgICAgICAgPSAweEIwOCwgICAgLyoqPCAgUElOMSBpcyBwZXJtYW5lbnRseSBibG9ja2VkLiAgKi8KKyAgICBRU0VSX1NJTV9BUFBfU1RBVEVfSUxMRUdBTCAgICAgICAgICAgICAgICAgID0gMHhCMDksICAgIC8qKjwgIElsbGVnYWwgYXBwbGljYXRpb24gc3RhdGUuICAqLworICAgIFFTRVJfU0lNX0FQUF9TVEFURV9SRUFEWSAgICAgICAgICAgICAgICAgICAgPSAweEIwQSwgICAgLyoqPCAgQXBwbGljYXRpb24gcmVhZHkgc3RhdGUuICBAbmV3cGFnZSAqLworfVFTRVJfU0lNX0FQUF9TVEFURV9UWVBFX1Q7CisKK3R5cGVkZWYgZW51bQoreworICAgIFFTRVJfU0lNX1BJTl9TVEFURV9VTktOT1dOICAgICAgICAgICAgICAgICAgPSAweEIwMSwgICAgLyoqPCBVbmtub3duIFBJTiBzdGF0ZS4gKi8KKyAgICBRU0VSX1NJTV9QSU5fU1RBVEVfRU5BQkxFRF9OT1RfVkVSSUZJRUQgICAgID0gMHhCMDIsICAgIC8qKjwgIFBJTiByZXF1aXJlZCwgYnV0IGhhcyBub3QgYmVlbiB2ZXJpZmllZC4gICovCisgICAgUVNFUl9TSU1fUElOX1NUQVRFX0VOQUJMRURfVkVSSUZJRUQgICAgICAgICA9IDB4QjAzLCAgICAvKio8ICBQSU4gcmVxdWlyZWQgYW5kIGhhcyBiZWVuIHZlcmlmaWVkLiAgKi8KKyAgICBRU0VSX1NJTV9QSU5fU1RBVEVfRElTQUJMRUQgICAgICAgICAgICAgICAgID0gMHhCMDQsICAgIC8qKjwgIFBJTiBub3QgcmVxdWlyZWQuICAqLworICAgIFFTRVJfU0lNX1BJTl9TVEFURV9CTE9DS0VEICAgICAgICAgICAgICAgICAgPSAweEIwNSwgICAgLyoqPCAgUElOIHZlcmlmaWNhdGlvbiBoYXMgZmFpbGVkIHRvbyBtYW55IHRpbWVzIGFuZCBpcyBibG9ja2VkLiBSZWNvdmVyYWJsZSB0aHJvdWdoIFBVSyB2ZXJpZmljYXRpb24uICAqLworICAgIFFTRVJfU0lNX1BJTl9TVEFURV9QRVJNQU5FTlRMWV9CTE9DS0VEICAgICAgPSAweEIwNiwgICAgLyoqPCAgUFVLIHZlcmlmaWNhdGlvbiBoYXMgZmFpbGVkIHRvbyBtYW55IHRpbWVzIGFuZCBpcyBub3QgcmVjb3ZlcmFibGUuICAqLworfVFTRVJfU0lNX1BJTl9TVEFURV9UWVBFX1Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUVNFUl9TSU1fU1VCU0NSSVBUSU9OX1RZUEVfVCAgICAgIHN1YnNjcmlwdGlvbjsgICAgICAgICAgIC8qKjwgICBUeXBlIG9mIHN1YnNjcmlwdGlvbiAoaS5lLiwgcHJpbWFyeSwgc2Vjb25kYXJ5LCBldGMuKS4gKi8KKyAgICBRU0VSX1NJTV9BUFBfU1RBVEVfVFlQRV9UICAgICAgICAgYXBwX3N0YXRlOyAgICAgICAgICAgICAgLyoqPCAgIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGFwcGxpY2F0aW9uLiAqLworICAgIFFTRVJfU0lNX1BFUlNPX0ZFQVRVUkVfVFlQRV9UICAgcGVyc29fZmVhdHVyZTsgICAgICAgICAgLyoqPCAgIEN1cnJlbnQgcGVyc29uYWxpemF0aW9uIHN0YXRlIGFuZCBmZWF0dXJlIGVuYWJsZWQuICovCisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29fcmV0cmllczsgICAgICAgICAgLyoqPCAgIE51bWJlciBvZiBwZXJzb25hbGl6YXRpb24gcmV0cmllcy4gKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb191bmJsb2NrX3JldHJpZXM7ICAvKio8ICAgTnVtYmVyIG9mIHBlcnNvbmFsaXphdGlvbiB1bmJsb2NrIHJldHJpZXMuICovCisgICAgUVNFUl9TSU1fUElOX1NUQVRFX1RZUEVfVCAgICAgICAgIHBpbjFfc3RhdGU7ICAgICAgICAgICAgIC8qKjwgICBDdXJyZW50IFBJTiAxIHN0YXRlLiAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbjFfbnVtX3JldHJpZXM7ICAgICAgIC8qKjwgICBOdW1iZXIgb2YgUElOIDEgcmV0cmllcy4gKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWsxX251bV9yZXRyaWVzOyAgICAgICAvKio8ICAgTnVtYmVyIG9mIFBVSyAxIHJldHJpZXMuICovCisgICAgUVNFUl9TSU1fUElOX1NUQVRFX1RZUEVfVCAgICAgICAgIHBpbjJfc3RhdGU7ICAgICAgICAgICAgIC8qKjwgICBDdXJyZW50IFBJTiAyIHN0YXRlLiAqLworICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbjJfbnVtX3JldHJpZXM7ICAgICAgIC8qKjwgICBOdW1iZXIgb2YgUElOIDIgcmV0cmllcy4gKi8KKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWsyX251bV9yZXRyaWVzOyAgICAgICAvKio8ICAgTnVtYmVyIG9mIFBVSyAyIHJldHJpZXMuICovCit9UVNFUl9TSU1fQ0FSRF9BUFBfSU5GT19UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFFTRVJfU0lNX0NBUkRfQVBQX0lORk9fVCAgICAgICAgICBhcHBfM2dwcDsgICAgICAgICAgICAgICAvKio8ICAgU3RvcmVzIDNHUFAgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uICovCisgICAgUVNFUl9TSU1fQ0FSRF9BUFBfSU5GT19UICAgICAgICAgIGFwcF8zZ3BwMjsgICAgICAgICAgICAgIC8qKjwgICBTdG9yZXMgM0dQUDIgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uICovCisgICAgUVNFUl9TSU1fQ0FSRF9BUFBfSU5GT19UICAgICAgICAgIGFwcF9pc2ltOyAgICAgICAgICAgICAgIC8qKjwgICBTdG9yZXMgSVNJTSBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi4gKi8KK31RU0VSX1NJTV9DQVJEX0FMTF9BUFBfSU5GT19UOworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFFTRVJfU0lNX0NBUkRfU1RBVEVfVFlQRV9UICAgICAgZV9jYXJkX3N0YXRlOy8qKjwgICBDdXJyZW50IGNhcmQgYW5kIGNhcmQgZXJyb3Igc3RhdGUuICovCisgICAgUVNFUl9TSU1fQ0FSRF9UWVBFX1QgICAgICAgICAgICBlX2NhcmRfdHlwZTsgLyoqPCAgIENhcmQgdHlwZS4gKi8KKyAgICBRU0VSX1NJTV9DQVJEX0FMTF9BUFBfSU5GT19UICAgICAgY2FyZF9hcHBfaW5mbzsgLyoqPCAgIFN0b3JlcyBhbGwgcmVsZXZhbnQgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uICovCit9UVNFUl9TSU1fQ0FSRF9TVEFUVVNfSU5GT19UOworCitpbnQgcXNlcl9zaW1fY2xpZW50X2luaXQoc2ltX2NsaWVudF9oYW5kbGVfdHlwZSAgKnBoX3NpbSk7CisKK2ludCBxc2VyX3NpbV9jbGllbnRfZGVpbml0KHNpbV9jbGllbnRfaGFuZGxlX3R5cGUgaF9zaW0pOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIEZVTkNUSU9OOiAgcXNlcl9zaW1fZ2V0aW1zaQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAgICBAYnJpZWYKKyAgICBGdW5jdGlvbiBzZW5kcyBhIGNvbW1hbmQgdG8gdGhlIG1vZGVtIHRvIHJldHJpZXZlIHRoZSBJTVNJIChmb3IgM0dQUCkKKyAgICBvciBJTVNJX00gKGZvciAzR1BQMikgZnJvbSB0aGUgU0lNIGluIEFTQ0lJIGZvcm0KKworICAgIEByZXR1cm4KKyAgICB2b2lkCisqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK2ludCBxc2VyX3NpbV9nZXRpbXNpKAorICAgIHNpbV9jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgICAgaF9zaW0sCisgICAgUVNFUl9TSU1fQVBQX0lEX0lORk9fVCAgICAgICAgICAgICpwdF9pbmZvLCAgIC8vLzwgW0lOXSBUaGUgU0lNIGlkZW50aWZpZXIgaW5mby4KKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICppbXNpLCAgICAgIC8vLzwgW09VVF0gSU1TSSBidWZmZXIKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGltc2lMZW4gICAgIC8vLzwgW0lOXSBJTVNJIGJ1ZmZlciBsZW5ndGgKKyk7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBGVU5DVElPTjogIHFzZXJfc2ltX2dldGljY2lkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICAgIEBicmllZgorICAgIEZ1bmN0aW9uIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgbW9kZW0gdG8gcmV0cmlldmUgdGhlIElDQ0lEIGZyb20KKyAgICBTSU0gaW4gQVNDSUkgZm9ybQorCisgICAgQHJldHVybgorICAgIGludAorKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitpbnQgcXNlcl9zaW1fZ2V0aWNjaWQKKygKKyAgICBzaW1fY2xpZW50X2hhbmRsZV90eXBlICAgICAgICAgIGhfc2ltLAorICAgIFFTRVJfU0lNX1NMT1RfSURfVFlQRV9UICAgICBzaW1JZCwgICAgIC8vLzwgW0lOXSBUaGUgU0lNIGlkZW50aWZpZXIuCisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaWNjaWQsICAgIC8vLzwgW09VVF0gSUNDSUQKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGljY2lkTGVuICAgLy8vPCBbSU5dIElDQ0lEIGJ1ZmZlciBsZW5ndGgKKyk7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBGVU5DVElPTjogIHFzZXJfc2ltX2dldHBob25lbnVtYmVyCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICAgIEBicmllZgorICAgIEZ1bmN0aW9uIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgbW9kZW0gdG8gcmV0cmlldmUgdGhlIGRldmljZSBwaG9uZQorICAgIG51bWJlciBmcm9tIE1TSVNETiAoZm9yIDNHUFApIG9yIE1ETiAoZm9yIDNHUFAyKSBmcm9tIHRoZSBTSU0gaW4KKyAgICBBU0NJSSBmb3JtCisKKyAgICBAcmV0dXJuCisgICAgaW50CisqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK2ludCBxc2VyX3NpbV9nZXRwaG9uZW51bWJlcgorKAorICAgIHNpbV9jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgICAgaF9zaW0sCisgICAgUVNFUl9TSU1fQVBQX0lEX0lORk9fVCAgICAgICAgICAgICpwdF9pbmZvLCAgIC8vLzwgW0lOXSBUaGUgU0lNIGlkZW50aWZpZXIuCisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcGhvbmVfbnVtLCAvLy88IFtPVVRdIHBob25lIG51bWJlcgorICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmVMZW4gICAgLy8vPCBbSU5dIHBob25lIG51bWJlciBidWZmZXIgbGVuZ3RoCispOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIEZVTkNUSU9OOiAgcXNlcl9zaW1fdmVyaWZ5cGluCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICAgIEBicmllZgorICAgIEZ1bmN0aW9uIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgbW9kZW0gdG8gdmVyaWZ5IGVpdGhlciBQSU4xIG9yIFBJTjIKKworICAgIEByZXR1cm4KKyAgICBpbnQKKyovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworaW50IHFzZXJfc2ltX3ZlcmlmeXBpbgorKAorICAgIHNpbV9jbGllbnRfaGFuZGxlX3R5cGUgICAgICBoX3NpbSwKKyAgICBRU0VSX1NJTV9WRVJJRllfUElOX0lORk9fVCAgICAqcHRfaW5mbyAgIC8vLzwgW0lOXSBWZXJpZnkgUElOIGluZm9yCispOworCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgRlVOQ1RJT046ICBxc2VyX3NpbV9jaGFuZ2VwaW4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgICAgQGJyaWVmCisgICAgRnVuY3Rpb24gc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBtb2RlbSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mCisgICAgZWl0aGVyIFBJTjEgb3IgUElOMgorCisgICAgQHJldHVybgorICAgIGludAorKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitpbnQgcXNlcl9zaW1fY2hhbmdlcGluCisoCisgICAgc2ltX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgIGhfc2ltLAorICAgIFFTRVJfU0lNX0NIQU5HRV9QSU5fSU5GT19UICAgICpwdF9pbmZvICAgLy8vPCBbSU5dIENoYW5nZSBQSU4gaW5mb3IKKyk7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBGVU5DVElPTjogIHFzZXJfc2ltX3VuYmxvY2twaW4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgICAgQGJyaWVmCisgICAgRnVuY3Rpb24gc2VuZHMgYSBjb21tYW5kIHRvIHRoZSBtb2RlbSB0byB1bmJsb2NrIGEgUElOMSBvciBQSU4yIHRoYXQKKyAgICBoYXMgYmVlbiBibG9ja2VkCisKKyAgICBAcmV0dXJuCisgICAgaW50CisqLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK2ludCBxc2VyX3NpbV91bmJsb2NrcGluCisoCisgICAgc2ltX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgIGhfc2ltLAorICAgIFFTRVJfU0lNX1VOQkxPQ0tfUElOX0lORk9fVCAgICpwdF9pbmZvICAgLy8vPCBbSU5dIFVuYmxvY2sgUElOIGluZm9yCispOworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIEZVTkNUSU9OOiAgcXNlcl9zaW1fZW5hYmxlcGluCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICAgIEBicmllZgorICAgIEZ1bmN0aW9uIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgbW9kZW0gdG8gZW5hYmxlIFBJTjEgb3IgUElOMgorCisgICAgQHJldHVybgorICAgIGludAorKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitpbnQgcXNlcl9zaW1fZW5hYmxlcGluCisoCisgICAgc2ltX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgIGhfc2ltLAorICAgIFFTRVJfU0lNX0VOQUJMRV9QSU5fSU5GT19UICAgICpwdF9pbmZvICAgLy8vPCBbSU5dIEVuYWJsZSBQSU4gaW5mb3IKKyk7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgRlVOQ1RJT046ICBxc2VyX3NpbV9kaXNhYmxlcGluCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKgorICAgIEBicmllZgorICAgIEZ1bmN0aW9uIHNlbmRzIGEgY29tbWFuZCB0byB0aGUgbW9kZW0gdG8gZGlzYWJsZSBQSU4xIG9yIFBJTjIKKworICAgIEByZXR1cm4KKyAgICBpbnQKKyovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworaW50IHFzZXJfc2ltX2Rpc2FibGVwaW4KKygKKyAgICBzaW1fY2xpZW50X2hhbmRsZV90eXBlICAgICAgaF9zaW0sCisgICAgUVNFUl9TSU1fRElTQUJMRV9QSU5fSU5GT19UICAgKnB0X2luZm8gICAvLy88IFtJTl0gRGlzYWJsZSBQSU4gaW5mb3IKKyk7CisKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBGVU5DVElPTjogIHFzZXJfc2ltX2dldGNhcmRzdGF0dXMKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgICAgQGJyaWVmCisgICAgRnVuY3Rpb24gcmV0cmlldmVzIHRoZSBzZXJ2ZXIgY2FjaGVkIGNhcmQgc3RhdHVzIGluZm9ybWF0aW9ucyBhbmQKKyAgICBzZW5kcyB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIGNsaWVudAorCisgICAgQHJldHVybgorICAgIGludAorKi8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitpbnQgcXNlcl9zaW1fZ2V0Y2FyZHN0YXR1cworKAorICAgIHNpbV9jbGllbnRfaGFuZGxlX3R5cGUgICAgICAgICAgaF9zaW0sCisgICAgUVNFUl9TSU1fU0xPVF9JRF9UWVBFX1QgICAgIHNpbUlkLCAgICAgLy8vPCBbSU5dIFRoZSBTSU0gaWRlbnRpZmllci4KKyAgICBRU0VSX1NJTV9DQVJEX1NUQVRVU19JTkZPX1QgICAqcHRfaW5mbyAgIC8vLzwgW09VVF0gQ2FydCBzdGF0dXMgaW5mb3Igb3V0cHV0CispOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfcXNlcl9zbXMuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfcXNlcl9zbXMuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Mjc2ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9xc2VyX3Ntcy5oCkBAIC0wLDAgKzEsMjQxIEBACisjaWZuZGVmIExZTlFfUVNFUl9TTVNfSAorI2RlZmluZSBMWU5RX1FTRVJfU01TX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZGVmaW5lIE1JTl9NU01fUEFSQU1fTlVNIDQKKyNkZWZpbmUgTUlOX0lNU19NU01fUEFSQU1fTlVNIDYKKyNkZWZpbmUgTUlOX1dSSVRNU01fUEFSQU1fTlVNIDUKKyNkZWZpbmUgTVNHX01BWF9MRU4gMTAyNAorI2RlZmluZSBURUxFUEhPTk5VTV9MRU4gNjQKKyNkZWZpbmUgU1RPUkFHU01TX01BWF9TSVpFIDEyOAorI2RlZmluZSBTTVNDX01BWF9MRU4gMjIKKyNkZWZpbmUgU01TX05VTV9NQVggMjU1CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3Qgc21zX2NsaWVudF9oYW5kbGVfdHlwZTsKKworLyoqICBNYXhpbXVtIGxlbmd0aCBvZiBhbiBTTVMuICovCisjZGVmaW5lIFFTRVJfU01TX01BWF9NVF9NU0dfTEVOR1RIICAgIDE0NDAKKworLyoqICBNYXhpbXVtIHN0cmluZyBsZW5ndGguICovCisjZGVmaW5lIFFTRVJfU01TX01BWF9BRERSX0xFTkdUSCAgICAgIDI1MgorCisvKiogIE1heGltdW0gc3RyaW5nIGxlbmd0aC4gKi8KKyNkZWZpbmUgUVNFUl9TTVNfTUFYX1NDQV9UWVBMRU5HVEggMworCit0eXBlZGVmIGVudW0gICAKK3sgICAgCisgICAgUVNFUl9TTVNfN0JJVCAgICAgICAgPSAwLAorICAgIFFTRVJfU01TXzhCSVQgICAgID0gMSwKKyAgICBRU0VSX1NNU19VQ1MyICAgICAgICAgICAgPSAyLAorICAgIC8vPDIwMTcvMTIvMjgtUUNNOVhPTDAwMDA0QzAwMS1QMDEtVmljZW50LkdhbywgPFtTTVNdIFNlZ21lbnQgMT09PiBDaGFyU2V0IHRvIEFscGhhIGltcGxlbWVudGF0aW9uLj4KKyAgICAvL1FTRVJfU01TX0lSQSAgICAgICAgICAgICA9IDMsLy9qdXN0IGZvciBpbnNpZGUgdGVzdCAKKyAgICAvLz4yMDE3LzEyLzI4LVFDTTlYT0wwMDAwNEMwMDEtUDAxLVZpY2VudC5HYW8KKworfVFTRVJfU01TX1Q7ICAgCisKK3R5cGVkZWYgZW51bSAgIAoreyAgICAKKyAgICBRU0VSX1NNU19NTyAgICAgICAgICAgICAgID0gMCwgICAgLy8vPCBTTVMgbW9iaWxlIHRlcm1pbmF0ZWQgbWVzc2FnZS4gIAorICAgIFFTRVJfU01TX01UICAgICAgICAgICAgICAgPSAxLCAgICAvLy88IFNNUyBtb2JpbGUgb3JpZ2luYXRlZCBtZXNzYWdlLiAKKyAgICBRU0VSX1NNU19CUk9BRENBU1RfTVQgICAgICA9IDIgICAgIC8vLzwgU01TIENlbGwgQnJvYWRjYXN0IG1lc3NhZ2UuICAgCit9UVNFUl9TTVNfVFlQVDsgCisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBRU0VSX1NNU19TVE9SQUdUWVBOT05FICAgICAgPSAtMSwgICAvKio8ICBNZXNzYWdlIG5vIG5lZWQgdG8gc3RvcmUuICovCisgICAgUVNFUl9TTVNfU1RPUkFHVFlQVUlNICAgICAgID0gMCwgICAgLyoqPCAgTWVzc2FnZSBzdG9yZSB0byBVSU0uICovCisgICAgUVNFUl9TTVNfU1RPUkFHVFlQTlYgICAgICAgID0gMSwgICAgLyoqPCAgTWVzc2FnZSBzdG9yZSB0byBOVi4gKi8KKyAgICBRU0VSX1NNU19TVE9SQUdUWVBEQiAgICAgPSAyLCAgICAvKio8ICBNZXNzYWdlIHN0b3JlIHRvIE5WLiAqLworfVFTRVJfU01TX1NUT1JBR1RZUFQ7CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBRU0VSX1NNU19NRVNTQUdNT0RVTktOT1dOICAgPSAtMSwgICAvKio8ICBNZXNzYWdlIHR5cGUgQ0RNQSAqLworICAgIFFTRVJfU01TX01FU1NBR01PRENETUEgICAgICA9IDAsICAgIC8qKjwgIE1lc3NhZ2UgdHlwZSBDRE1BICovCisgICAgUVNFUl9TTVNfTUVTU0FHTU9ER1cgICAgICAgID0gMSwgICAgLyoqPCAgTWVzc2FnZSB0eXBlIEdXLiAqLworfVFTRVJfU01TX01PRFRZUFQ7CisKK3R5cGVkZWYgc3RydWN0IAorIHsKKyAgICB1aW50OF90IHRvdGFsX3NlZ21lbnRzOyAgICAgLyoqPCAgICAgVGhlIG51bWJlciBvZiBsb25nICBzaG9ydCBtZXNzYWdlKi8KKyAgICB1aW50OF90IHNlZ19udW1iZXI7ICAgICAgICAgLyoqPCAgICAgQ3VycmVudCBudW1iZXIuKi8KKwl1aW50OF90IHJlZmVyZW5jbnVtYmVyOyAgIC8qKjwgcmVmZXJlbmNudW1iZXIuKi8KK31RU0VSX3Ntc191c2VyX2RhdGFfaGVhZF90OyAKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAvKiBJZiBzbXMgaXMgc3RvcmVkLCBpdCB3b24ndCBwYXJzZSwgeW91IG5lZWQgcmVhZCBpdCBieSB5b3Vyc2VsZiAqLworICAgIFFTRVJfU01TX1NUT1JBR1RZUFQgc3RvcmFnZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vL3NwZWNpZnkgd2hlcmUgc3RvcmVkIHRoaXMgbXNnCisgICAgCisgICAgUVNFUl9TTVNfVCAgICAgICBmb3JtYXQ7CisgICAgUVNFUl9TTVNfVFlQVCAgICAgICAgIHR5cGU7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgc3JjX2FkZHJbUVNFUl9TTVNfTUFYX0FERFJfTEVOR1RIXTsgLy8vVGVsZXBob25lIG51bWJlciBzdHJpbmcuICAKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBzbXNfZGF0YV9sZW47CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgc21zX2RhdGFbUVNFUl9TTVNfTUFYX01UX01TR19MRU5HVEhdOyAgIC8vL1NNUyBjb250ZW50LCBkYXRhIGZvcm1hdCBkZXBlbmRzIG9uIGZvcm1hdAorICAgIGNoYXIgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcFsyMV07ICAgICAgICAgICAgICAgICAgICAgIC8vL01lc3NhZ2UgdGltZSBzdGFtcCAoaW4gdGV4dCBtb2RlKS4gc3RyaW5nIGZvcm1hdDogInl5L01NL2RkLGhoOm1tOnNzKy8tVGltZVpvbmUiIAorICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgIHVzZXJfZGF0YV9oZWFkX3ZhbGlkOyAgICAgICAgICAgICAgIC8vaW5kaWNhdGUgd2hldGhlciBsb25nIHNtcy4gVFJVRS1sb25nIHNtczsgRkFMU0Utc2hvcnQgbWVzc2FnZTsKKyAgICBRU0VSX3Ntc191c2VyX2RhdGFfaGVhZF90ICB1c2VyX2RhdGFfaGVhZDsgICAgICAgICAgICAgICAgICAgIC8vbG9uZyBzbXMgdXNlciBkYXRhIGhlYWQgaW5mby4KKyAgICBRU0VSX1NNU19NT0RUWVBUICAgIG1vZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy9zcGVjaWZ5IHdoZXJlIHN0b3JlZCB0aGlzIG1zZyBjZG1hIG9yIGd3IGFyZWEKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzdG9yYWdlX2luZGV4OyAgICAgICAgICAgICAgICAgICAgICAvLy9zdG9yYWdlIGluZGV4LCAtMSBtZWFucyBub3Qgc3RvcmUKK30gUVNFUl9zbXNfaW5mb190OworICAgICAKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgUVNFUl9TTVNfU1RPUkFHVFlQVCBzdG9yYWdlOworICAgIFFTRVJfU01TX01PRFRZUFQgICAgbW9kZTsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICBzdG9yYWdlX2lkeDsKK30gUVNFUl9zbXNfc3RvcmFnZV9pbmZvX3Q7CisKK3R5cGVkZWYgZW51bSAKK3sKKyAgICBRU0VSX1NNU19VTktOT1dOICAgICAgICAgICAgPSAtMSwgCisgICAgUVNFUl9TTVNfRElTQ0FSRCAgICAgICAgICAgID0gMHgwMCwgLyogIEluY29taW5nIG1lc3NhZ2VzIGZvciB0aGlzIHJvdXRlIGFyZSBkaXNjYXJkZWQgYnkgdGhlIFdNUyBzZXJ2aWNlIHdpdGhvdXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeWluZyBRTUlfV01TIGNsaWVudHMgKi8KKyAgICBRU0VSX1NNU19TVE9SQU5EX05PVElGWSAgID0gMHgwMSwgLyogIEluY29taW5nIG1lc3NhZ2VzIGZvciB0aGlzIHJvdXRlIGFyZSBzdG9yZWQgdG8gdGhlIHNwZWNpZmllZCBkZXZpY2UgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwgYW5kIG5ldyBtZXNzYWdlIG5vdGlmaWNhdGlvbnMgKi8KKyAgICBRU0VSX1NNU19UUkFOU0ZFUl9PTkxZICAgICAgPSAweDAyLCAvKiAgSW5jb21pbmcgbWVzc2FnZXMgZm9yIHRoaXMgcm91dGUgYXJlIHRyYW5zZmVycmVkIHRvIHRoZSBjbGllbnQsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50IGlzIGV4cGVjdGVkIHRvIHNlbmQgQUNLIHRvIHRoZSBuZXR3b3JrICovCisgICAgUVNFUl9TTVNfVFJBTlNGRVJfQU5EX0FDSyAgID0gMHgwMywgLyogIEluY29taW5nIG1lc3NhZ2VzIGZvciB0aGlzIHJvdXRlIGFyZSB0cmFuc2ZlcnJlZCB0byB0aGUgY2xpZW50LCBhbmQgQUNLIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgdG8gdGhlIG5ldHdvcmsgKi8KK31RU0VSX1NNU19SRUNFUFRJT05fQUNUSU9OX1RZUFQ7CisKKyNkZWZpbmUgUVNFUl9XTVNfTUVTU0FHTEVOR1RIX01BWCAyNTUKKwordHlwZWRlZiBlbnVtIAorIHsKKyAgICBRU0VSX1dNU19NRVNTQUdDRE1BICAgICAgICAgICAgPSAweDAwLCAgICAgLy8tIDB4MDAgLS0gTUVTU0FHQ0RNQSAtLSBDRE1BIFxuIAorICAgIFFTRVJfV01TX01FU1NBR0dXX1BQICAgICAgICAgICA9IDB4MDYsICAgICAvLy0gMHgwNiAtLSBNRVNTQUdHV19QUCAtLSBHV19QUAorfVFTRVJfV01TX01FU1NBR1RZUEU7CisKKwordHlwZWRlZiBzdHJ1Y3QKKyB7CisgIFFTRVJfV01TX01FU1NBR1RZUEUgZm9ybWF0OworICB1aW50MzJfdCByYXdfbWVzc2FnbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqPCBNdXN0IGJlIHNldCB0byAjIG9mIGVsZW1lbnRzIGluIHJhd19tZXNzYWdlICovCisgIHVpbnQ4X3QgcmF3X21lc3NhZ2VbUVNFUl9XTVNfTUVTU0FHTEVOR1RIX01BWF07ICAgICAgIC8qKjwgUmF3IG1lc3NhZ2UgZGF0YSovCit9UVNFUl93bXNfc2VuZF9yYXdfbWVzc2FnZV9kYXRhX3Q7IAorCit0eXBlZGVmIGVudW0KK3sKKyAgUVNFUl9XTVNfVExfQ0FVU0NPREFERFJfVkFDQU5UICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwLCAKKyAgUVNFUl9XTVNfVExfQ0FVU0NPREFERFJfVFJBTlNMQVRJT05fRkFJTFVSRSAgICAgICAgICAgPSAweDAxLCAKKyAgUVNFUl9XTVNfVExfQ0FVU0NPRE5FVFdPUktfUkVTT1VSQ1NIT1JUQUdFICAgICAgICAgID0gMHgwMiwgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RORVRXT1JLX0ZBSUxVUkUgICAgICAgICAgICAgICAgICAgID0gMHgwMywgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RJTlZBTElEX1RFTEVTRVJWSUNJRCAgICAgICAgICAgICA9IDB4MDQsIAorICBRU0VSX1dNU19UTF9DQVVTQ09ETkVUV09SS19PVEhFUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDUsIAorICBRU0VSX1dNU19UTF9DQVVTQ09ETk9fUEFHUkVTUE9OU0UgICAgICAgICAgICAgICAgICAgPSAweDIwLCAKKyAgUVNFUl9XTVNfVExfQ0FVU0NPRERFU1RfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIxLCAKKyAgUVNFUl9XTVNfVExfQ0FVU0NPRE5PX0FDSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDIyLCAKKyAgUVNFUl9XTVNfVExfQ0FVU0NPRERFU1RfUkVTT1VSQ1NIT1JUQUdFICAgICAgICAgICAgID0gMHgyMywgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RTTVNfREVMSVZFUllfUE9TVFBPTkVEICAgICAgICAgICAgID0gMHgyNCwgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RERVNUX09VVF9PRl9TRVJWICAgICAgICAgICAgICAgICAgID0gMHgyNSwgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RERVNUX05PVF9BVF9BRERSICAgICAgICAgICAgICAgICAgID0gMHgyNiwgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RERVNUX09USEVSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNywgCisgIFFTRVJfV01TX1RMX0NBVVNDT0RSQURJT19JRl9SRVNPVVJDU0hPUlRBR0UgICAgICAgICA9IDB4NDAsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EUkFESU9fSUZfSU5DT01QQVRBQklMSVRZICAgICAgICAgICA9IDB4NDEsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EUkFESU9fSUZfT1RIRVIgICAgICAgICAgICAgICAgICAgICA9IDB4NDIsIAorICBRU0VSX1dNU19UTF9DQVVTQ09ERU5DT0RJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjAsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EU01TX09SSUdfREVOSUVEICAgICAgICAgICAgICAgICAgICA9IDB4NjEsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EU01TX1RFUk1fREVOSUVEICAgICAgICAgICAgICAgICAgICA9IDB4NjIsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EU1VQUF9TRVJWX05PVF9TVVBQICAgICAgICAgICAgICAgICA9IDB4NjMsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EU01TX05PVF9TVVBQICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQsIAorICBRU0VSX1dNU19UTF9DQVVTQ09ETUlTU0lOR19FWFBFQ1RFRF9QQVJBTSAgICAgICAgICAgICA9IDB4NjUsIAorICBRU0VSX1dNU19UTF9DQVVTQ09ETUlTU0lOR19NQU5EX1BBUkFNICAgICAgICAgICAgICAgICA9IDB4NjYsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EVU5SRUNPR05JWkVEX1BBUkFNX1ZBTCAgICAgICAgICAgICA9IDB4NjcsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EVU5FWFBFQ1RFRF9QQVJBTV9WQUwgICAgICAgICAgICAgICA9IDB4NjgsIAorICBRU0VSX1dNU19UTF9DQVVTQ09EVVNFUl9EQVRBX1NJWkVSUiAgICAgICAgICAgICAgICAgPSAweDY5LCAKKyAgUVNFUl9XTVNfVExfQ0FVU0NPREdFTkVSQUxfT1RIRVIgICAgICAgICAgICAgICAgICAgICAgPSAweDZBLCAKK31RU0VSX1dNU19UTF9DQVVTQ09EVFlQRTsKKworCisKK3R5cGVkZWYgc3RydWN0CisgeworICB1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2lkOyAgICAgICAgICAgIC8qICBNZXNzYWdlIElEICovCisgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2NvZHZhbGlkOyAgICAgIC8qKjwgTXVzdCBiZSBzZXQgdG8gdHJ1ZSBpZiBjYXVzY29kZSBpcyBiZWluZyBwYXNzZWQgKi8KKyAgUVNFUl9XTVNfVExfQ0FVU0NPRFRZUEUgICAgICAgICAgIGNhdXNjb2RlOyAgCit9UVNFUl93bXNfcmF3X3NlbmRfcmVzcF90OworCit0eXBlZGVmIHN0cnVjdCAKKyB7CisgIGNoYXIgc2VydmljZV9jZW50ZXJfYWRkcltRU0VSX1NNU19NQVhfQUREUl9MRU5HVEggKyAxXTsgICAgICAgICAvKio8ICAgQWRkcmVzcyBvZiB0aGUgc2VydmljZSBjZW50ZXIuKi8KKyAgdWludDhfdCBzZXJ2aWNlX2NlbnRlcl9hZGRyX3R5cHZhbGlkOworICBjaGFyIHNlcnZpY2VfY2VudGVyX2FkZHJfdHlwZVtRU0VSX1NNU19NQVhfU0NBX1RZUExFTkdUSCArIDFdOyAgICAvKio8ICAgMTI5IGlmIHRoZSBTTVNDIGFkZHJlc3MgZG9lcyBub3Qgc3RhcnQgd2l0aCBhICIrIiBjaGFyYWN0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE0NSBpZiB0aGUgU01TQyBhZGRyZXNzIHN0YXJ0cyB3aXRoIGEgIisiIGNoYXJhY3RlciovCit9UVNFUl9zbXNfc2VydmljZV9jZW50ZXJfY2ZnX3Q7CisKK3R5cGVkZWYgUVNFUl9zbXNfaW5mb190ICAgICAgIFFTRVJfU01TX01zZ190OyAKK3R5cGVkZWYgUVNFUl9zbXNfaW5mb190KiAgICAgIFFTRVJfU01TX01zZ1JlZjsgCisKKy8qIENhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8gcXNlcl9zbXNfYWRkcnhtc2doYW5kbGVyLCBtc2dSZWYgY29udGFpbnMgdGhlIGRldGFpbCBtc2cgaW5mb3IgKi8KK3R5cGVkZWYgdm9pZCAoKlFTRVJfU01TX1J4TXNnSGFuZGxlckZ1bmNfdCkoUVNFUl9TTVNfTXNnUmVmIG1zZ1JlZiwgdm9pZCogY29udGV4dFB0cik7CisKKy8qIEluaXQgU01TIG1vZHVsZSBhbmQgcmV0dXJuIGhfc21zLCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlIG9uZXMgKi8KK2ludCBxc2VyX3Ntc19jbGllbnRfaW5pdChzbXNfY2xpZW50X2hhbmRsZV90eXBlICAqcGhfc21zKTsKKworLyogQWRkIGNhbGxiYWNrIGZ1bmN0aW9uLCBpZiBhbnkgbmV3IG1zZyBhcnJpdmVkLCBpdCB3aWxsIG5vdGlmeSBhcHAgKi8KK2ludCBxc2VyX3Ntc19hZGRyeG1zZ2hhbmRsZXIoUVNFUl9TTVNfUnhNc2dIYW5kbGVyRnVuY190IGhhbmRsZXJQdHIsIHZvaWQqIGNvbnRleHRQdHIpOworCisvKiBTZW5kIHNtcywgeW91IGp1c3QgbmVlZCB0byBmaWxsIGZvcm1hdC9zcmNfYWRkci9zbXNfZGF0YV9sZW4vc21zX2RhdGEsCisgICBpZiBmb3JtYXQgaXMgVUNTMiwgdGhlIGRhdGEgc2hvdWxkIGJlIFVuaWNvZGUtQkUgZm9ybWF0LgorKi8KK2ludCBxc2VyX3Ntc19zZW5kX3NtcyhzbXNfY2xpZW50X2hhbmRsZV90eXBlIGhfc21zLCBRU0VSX3Ntc19pbmZvX3QgKnB0X3Ntc19pbmZvKTsKKworLyogRGVJbml0IFNNUyBtb2R1bGUgYW5kIHJlbGVhc2UgcmVzb3VyY2UsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgbGFzdCBvbmUuICovCitpbnQgcXNlcl9zbXNfY2xpZW50X2RlaW5pdChzbXNfY2xpZW50X2hhbmRsZV90eXBlIGhfc21zKTsKKyAgICAgCisvKiBEZWxldGUgdGhlIFNNUyBzcGVjaWZpZWQgaW4gdGhlICBwdF9zbXNfc3RvcmFnZSAqLworaW50IHFzZXJfc21zX2RlbGV0ZWZyb21zdG9yYWdlKHNtc19jbGllbnRfaGFuZGxlX3R5cGUgIGhfc21zLCBRU0VSX3Ntc19zdG9yYWdlX2luZm9fdCAgKnB0X3Ntc19zdG9yYWdlKTsKKworLyogU2VuZCBzbXMgUERVLgorKi8KK2ludCBxc2VyX3Ntc19zZW5kX3Ntc3BkdSggc21zX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgaF9zbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgUVNFUl93bXNfc2VuZF9yYXdfbWVzc2FnZV9kYXRhX3QgKnJhd19tZXNzYWdkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgIFFTRVJfd21zX3Jhd19zZW5kX3Jlc3BfdCAqcmF3cmVzcCk7CisKKworLyogR2V0IHNtcyBjZW50ZXIgYWRkcmVzcy4KKyovCitpbnQgcXNlcl9zbXNfZ2V0c21zY2VudGVyYWRkcmVzcyggc21zX2NsaWVudF9oYW5kbGVfdHlwZSAgICAgaF9zbXMsCisgICAgICAgICAgICAgICAgICAgICAgIFFTRVJfc21zX3NlcnZpY2VfY2VudGVyX2NmZ190ICpzZXRfc2NhX2NmZyk7CisKKy8qIFNldCBzbXMgY2VudGVyIGFkZHJlc3MuCisqLworaW50IHFzZXJfc21zX3NldHNtc2NlbnRlcmFkZHJlc3MoIHNtc19jbGllbnRfaGFuZGxlX3R5cGUgICAgIGhfc21zLAorICAgICAgICAgICAgICAgICAgICAgICBRU0VSX3Ntc19zZXJ2aWNlX2NlbnRlcl9jZmdfdCAqZ2V0X3NjYV9jZmcpOworCisvKgorVXNhZ2UgMSAocmVnaXN0ZXIgY2FsbGJhY2sgYW5kIHdhaXQgZm9yIG5ldyBzbXMgYXJyaXZlKTogCisxLCBxc2VyX3Ntc19jbGllbnRfaW5pdAorMiwgcXNlcl9zbXNfYWRkcnhtc2doYW5kbGVyKHBmX2NiKQorMywgd2FpdCBmb3Igc21zIGFycml2ZSwgcGZfY2Igd2lsbCBwYXNzIHRoZSBkZXRhaWwgc21zIGluZm8gdG8gYXBwLgorNCwgcXNlcl9zbXNfY2xpZW50X2RlaW5pdAorCisKK1VzYWdlIDIgKFNlbmQgc21zKTogCisxLCBxc2VyX3Ntc19jbGllbnRfaW5pdAorMiwgcXNlcl9zbXNfYWRkcnhtc2doYW5kbGVyKHBmX2NiKQorMywgcXNlcl9zbXNfc2VuZF9zbXMKKzQsIHFzZXJfc21zX2NsaWVudF9kZWluaXQKKworCitVc2FnZSAzIChzdG9yZSBzbXMpOiAKKzEsIHFzZXJfc21zX2NsaWVudF9pbml0CisyLCBxc2VyX3Ntc19hZGRyeG1zZ2hhbmRsZXIocGZfY2IpCiszLCBxc2VyX3Ntc19zZXRyb3V0ZWxpc3QgKE5vdGljZTogY2xhc3MtMCBub3QgYWxsb3dlZCB0byBzdG9yZSwgY2xhc3MtMiBtdXN0IGJlIHN0b3JlZCB0byBVSU0pCis0LCBwZl9jYiB3aWxsIGJlIGNhbGxlZCB3aGVuIG5ldyBzbXMgYXJyaXZlZCwgYW5kIHRlbGwgeW91IHdoZXJlIHRoZSBzbXMgc3RvcmVkCis1LCB5b3UgY2FuIGNhbGwgcXNlcl9zbXNfZGVsZXRlZnJvbXN0b3JhZ2UgdG8gZGVsZXRlIHNwZWNpZmllZCBzbXMsIHRoZSBsb2NhdGlvbiBjYW4gYmUgZ290IGZyb20gcGZfY2IuCis2LCBxc2VyX3Ntc19jbGllbnRfZGVpbml0CisqLworICAgIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9seW5xL2x5bnFfc2ltLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3NpbS5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhmMjg0OWEKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3NpbS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgIEZpbGVOYW1lOiBseW5xX3NpbS5oCisjICAgICBEZXNjOiBhYm91dCBTSU1BUEkKKyMgICAgIEF1dGhvcjogbGVpCisjICAgICBWZXJzaW9uOiBWMi4wCisjICAgICBMYXN0Q2hhbmdlOiAyMDIzLTAzLTEzCisjICAgICBIaXN0b3J5OgorIyBJZiB5b3UgbmVlZCB0byB1c2UgYW55IEFQSSB1bmRlciBseW5xX3NpbSwgeW91IG11c3QgZmlyc3QgY2FsbCB0aGUgbHlucV9zaW1faW5pdCgpIGZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlc2UgZnVuY3Rpb25zLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworI2lmbmRlZiBfX0xZTlFfU0lNX18KKyNkZWZpbmUgX19MWU5RX1NJTV9fCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjaW5jbHVkZSAibWJ0a190eXBlLmgiCisKK2ludCBseW5xX2dldF9zaW1fc3RhdHVzKGludCAqY2FyZF9zdGF0dXMpOworaW50IGx5bnFfZ2V0X2ltc2koY2hhciBidWZbXSk7CitpbnQgbHlucV9zaW1faW5pdChpbnQgdXRva2VuKTsKK2ludCBseW5xX3NpbV9kZWluaXQodm9pZCk7CitpbnQgbHlucV9lbmFibGVfcGluKGNoYXIgcGluW10pOworaW50IGx5bnFfZGlzYWJsZV9waW4oY2hhciBwaW5bXSk7CitpbnQgbHlucV9nZXRfaWNjaWQoY2hhciBidWZbXSk7CitpbnQgbHlucV9xdWVyeV9waW5fbG9jayhjaGFyICpwaW4saW50IGJ1ZltdKTsKK2ludCBseW5xX3ZlcmlmeV9waW4oY2hhciAqcGluKTsKK2ludCBseW5xX2NoYW5nZV9waW4oY2hhciAqb2xkX3BpbiwgY2hhciAqbmV3X3Bpbik7CitpbnQgbHlucV91bmxvY2tfcGluKGNoYXIgKnB1aywgY2hhciAqcGluKTsKK2ludCBseW5xX3F1ZXJ5X3Bob25lX251bWJlcihjaGFyIGJ1ZltdKTsKK2ludCBseW5xX3N3aXRjaF9jYXJkKGludCBzbG90KTsKK2ludCBseW5xX3NjcmVlbihpbnQgbnVtKTsKK2ludCBseW5xX2dldF9pbWVpKGNoYXIgYnVmW10pOworaW50IGx5bnFfZ2V0X2ltZWlfYW5kX3N2KGNoYXIgaW1laVtdLGNoYXIgc3ZbXSk7CisKKy8qKgorICogQGJyaWVmICAgICAgICAgICAgICAgICAgIFJlcXVlc3QgU0lNIEkvTyBvcGVyYXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBUUyAyNy4wMDcgInJlc3RyaWN0ZWQgU0lNIiBvcGVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpdCBhc3N1bWVzIGFsbCBvZiB0aGUgRUYgc2VsZWN0aW9uIHdpbGwgYmUgZG9uZSBieSB0aGUgY2FsbGVlLgorICogQHBhcmFtICBsaXN0ICAgICAgICAgICAgIHR5cGU6IFtJTl0gbGlzdFswXTpvbmUgb2YgdGhlIGNvbW1hbmRzIGxpc3RlZCBmb3IgVFMgMjcuMDA3ICtDUlNNLihjb21tYW5kKQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtJTl0gbGlzdFsxXTpFRiBpZChmaWxlaWQpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogW0lOXSBsaXN0WzJdOm9mZnNldChwMSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBbSU5dIGxpc3RbM106b2Zmc2V0KHAyKQorICogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFtJTl0gbGlzdFs0XTpyZXNwb25zZSBsZW4sc29tZXRpbWVzIG5lZWRuJ3QgY2FyZShwMykKKyAqIEBwYXJhbSAgcGF0aCAgICAgICAgICAgICB0eXBlOiBbSU5dICJwYXRoaWQiIGZyb20gVFMgMjcuMDA3ICtDUlNNIGNvbW1hbmQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogW0lOXSBQYXRoIGlzIGluIGhleCBhc2NpaWkgZm9ybWF0IGVnICI3ZjIwNWY3MCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBbSU5dIFBhdGggbXVzdCBhbHdheXMgYmUgcHJvdmlkZWQuCisgKiBAcGFyYW0gIGRhdGEgICAgICAgICAgICAgdHlwZTogW0lOXSBNYXkgYmUgTlVMTAorICogQHBhcmFtICBwaW4yICAgICAgICAgICAgIHR5cGU6IFtJTl0gTWF5IGJlIE5VTEwKKyAqIEBwYXJhbSAgYWlkUHRyICAgICAgICAgICB0eXBlOiBbSU5dIEFJRCB2YWx1ZSwgU2VlIEVUU0kgMTAyLjIyMSA4LjEgYW5kIDEwMS4yMjAgNCwgTlVMTCBpZiBubyB2YWx1ZS4KKyAqIEBwYXJhbSAgc3cgICAgICAgICAgICAgICB0eXBlOiBbT1VUXQorICogQHBhcmFtICBzaW1SZXNwb25zZSAgICAgIHR5cGU6IFtPVVRdIHJlc3BvbnNlCisgKiBAcmV0dXJuIGludAorICovCitpbnQgbHlucV9yZXFfc2ltX2lvKGludCBsaXN0WzVdLCBjaGFyICpwYXRoLCBjaGFyICpkYXRhLCBjaGFyICpwaW4yLCBjaGFyICphaWRQdHIsIGludCBzd1syXSwgY2hhciAqc2ltUmVzcG9uc2UpOworCisvKioKKyAqIEBicmllZgorICogQHBhcmFtICBvcHRpb25zICAgICAgICAgdHlwZTogW0lOXSBbb3B0aW9uc10gZGVmaW5lIHdoZXRoZXIgeW91IHdhbnQgdG8gaGFsdCwgcG93ZXItb2ZmLCBvciByZWJvb3QgdGhlIG1hY2hpbmUuTWF5IGJlIE5VTEwKKyAqIEBwYXJhbSAgdGltZSAgICAgICAgICAgIHR5cGU6IFtJTl0gW3RpbWVdIHNwZWNpZmllcyB3aGVuIHlvdSB3YW50IHRoZSBzaHV0ZG93biB0byBwZXJmb3JtLk1heSBiZSBOVUxMCisgKiBAcGFyYW0gIG1lc3NhZ2UgICAgICAgICB0eXBlOiBbSU5dIFttZXNzYWdlXSBhZGRzIGEgbWVzc2FnZSB0aGF0IGFubm91bmNlcyB0aGUgc2h1dGRvd24uTWF5IGJlIE5VTEwKKyAqIEByZXR1cm4gaW50CisgKi8KK2ludCBseW5xX3NodXRkb3duKGNoYXIgb3B0aW9uc1tdLCBjaGFyIHRpbWVbXSwgY2hhciBtZXNzYWdlW10pOworCisvKioKKyAqIEBicmllZiAgICAgICAgICAgICAgICAgICBnZXQgY3Vycm5ldCB2ZXJzaW9uIG9mIG1vYmlsZXRlaworICogQHBhcmFtICBidWYgICAgICAgICAgICAgIHR5cGU6IFtvdXRdIE15IFBhcmFtIGRvYworICogQHJldHVybiBpbnQKKyAqLworaW50IGx5bnFfZ2V0X3ZlcnNpb24oY2hhciBidWZbXSk7CisKKy8qKgorICogQGJyaWVmIHNpbSBwb3dlciBvbi9vZmYKKyAqCisgKi8KKyNpZmRlZiBNT0JJTEVURUtfVEFSR0VUX1BMQVRGT1JNX1QxMDYKK2ludCBseW5xX3Jlc2V0X3NpbSh2b2lkKTsKKyNlbHNlCitpbnQgbHlucV9zaW1fcG93ZXIoaW50IG1vZGUpOworI2VuZGlmCisvKioKKyAqIEBicmllZiByZXNldCBtb2RlbQorICoKKyAqLworaW50IGx5bnFfcmVzZXRfbW9kZW0odm9pZCk7CisKKy8qKgorICogQGJyaWVmIGZhY3RvcnkgdGVzdCB0byBib3RoIHJhZGlvIG9uL29mZgorICoKKyAqLworaW50IGx5bnFfZmFjdG9yeV9yYWRpb19zdGF0ZShpbnQgbnVtKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9zbXMuaCBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfc21zLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQzNDZhNgotLS0gL2Rldi9udWxsCisrKyBiL21idGsvaW5jbHVkZS9seW5xL2x5bnFfc21zLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBMWU5RX1NNU19IDQorI2RlZmluZSBMWU5RX1NNU19IIDENCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCisjZGVmaW5lIE1JTl9NU01fUEFSQU1fTlVNIDQNCisjZGVmaW5lIE1JTl9JTVNfTVNNX1BBUkFNX05VTSA2DQorI2RlZmluZSBNSU5fV1JJVEVfTVNNX1BBUkFNX05VTSA1DQorI2RlZmluZSBNU0dfTUFYX0xFTiAxMDI0DQorI2RlZmluZSBURUxFUEhPTkVfTlVNX0xFTiA2NA0KKyNkZWZpbmUgU1RPUkFHRV9TTVNfTUFYX1NJWkUgMTI4DQorI2RlZmluZSBTTVNDX01BWF9MRU4gMjINCisjZGVmaW5lIFNNU19OVU1fTUFYIDI1NQ0KKw0KK2ludCBseW5xX3Ntc19pbml0KGludCB1VG9rZW4pOw0KK2ludCBseW5xX3Ntc19kZWluaXQodm9pZCk7DQoraW50IGx5bnFfc2VuZF9zbXMoY2hhciB0ZWxlcGhvbnlfbnVtW1RFTEVQSE9ORV9OVU1fTEVOXSwgaW50IGNoYXJzZXQsIGNoYXIgKm1zZywgaW50IG1zZ2xlbik7DQoraW50IGx5bnFfcmVhZF9zbXMoaW50IGluZGV4LGludCAqc3RhdHVzLGludCAqY2hhcnNldCxjaGFyIHNtc2NbU01TQ19NQVhfTEVOXSxpbnQgKnNtc2NMZW4saW50ICpzbXNsZW4sY2hhciBtZXNzYWdlW01TR19NQVhfTEVOXSxjaGFyIHRlbGVOdW1bVEVMRVBIT05FX05VTV9MRU5dLGludCAqbnVtTGVuLGludCAqY3VycmVudCxpbnQgKnRvdGFsKTsNCitpbnQgbHlucV9nZXRfc21zY19hZGRyZXNzKGNoYXIgc2VydmljZV9udW1bU01TQ19NQVhfTEVOXSk7DQoraW50IGx5bnFfc2V0X3Ntc2NfYWRkcmVzcyhjb25zdCBjaGFyKiBzZXJ2aWNlX251bSk7DQoraW50IGx5bnFfbGlzdF9zbXMoY2hhciBpbmRleF9saXN0W1NNU19OVU1fTUFYXSk7DQoraW50IGx5bnFfZGVsZXRlX3NtcyhpbnQgaW5kZXgpOw0KK2ludCBseW5xX3dhaXRfcmVjZWl2ZV9uZXdfc21zKGludCAqaGFuZGxlKTsNCisjaWZkZWYgX19jcGx1c3BsdXMNCit9DQorI2VuZGlmDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9zbXNfYXBpLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3Ntc19hcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggY2VkZjIzMC4uMDAwMDAwMAotLS0gYS9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3Ntc19hcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLSNpZm5kZWYgTFlOUV9TTVNfUVBJX0gNCi0jZGVmaW5lIExZTlFfU01TX1FQSV9IDQotLyoNCi0qDQotKiBEYXRhIDogMjAyMi8xMS8yOSANCi0qIEF1dGhvciA6IEx1b0ppYW4NCi0qLw0KLQ0KLSNpbmNsdWRlICJtYnRrX3R5cGUuaCINCi0NCi0jZGVmaW5lIFRFTEVQSE9ORV9OVU1fTUFYIDE2DQotI2RlZmluZSBNU01fTlVNQkVSX01BWCAxMDI0KzENCi0jZGVmaW5lIFJFU19OVU1fTUlOIDEyOA0KLQ0KLQ0KLWVudW0gRW51bURDUyB7DQotICAgIEJJVDcgPSAwLCAgICAgICAgICAgIC8vIEdTTSDX1rf7vK8NCi0gICAgQklUOCA9IDEsICAgICAgICAgICAgLy8gQVNDSUnX1rf7vK8NCi0gICAgVUNTMiA9IDIgICAgICAgICAgICAgLy8gVW5pY29kZSDX1rf7vK8NCi19Ow0KLQ0KLXN0cnVjdCBQRFVVREggew0KLSAgICB1bnNpZ25lZCBpbnQgY291bnQ7ICAgIC8vINDFz6LUqsvYyv2+3dfWvdrK/Q0KLSAgICBjaGFyIElFSTsgICAgICAgICAgIC8vINDFz6LUqsvYserKtg0KLSAgICBjaGFyICpJRUQ7ICAgICAgICAgIC8vINDFz6LUqsvYyv2+3Q0KLX07DQotDQotLy8g08O7p8r9vt3Ntw0KLXN0cnVjdCBVREhTIHsNCi0gICAgaW50IGNvdW50Ow0KLSAgICBzdHJ1Y3QgUERVVURIICpVREg7DQotfTsNCi0NCi1zdHJ1Y3QgU01TX1N0cnVjdCB7DQotICAgIGNoYXIgKlNDQTsgICAgICAgICAvLyC3/s7x1tDQxLXY1rcNCi0gICAgY2hhciAqT0E7ICAgICAgICAgIC8vILeiy823vbXY1rcNCi0gICAgY2hhciAqU0NUUzsgICAgICAgIC8vILf+zvHW0NDEyrG85LTBDQotICAgIHN0cnVjdCBVREhTICpVREg7ICAgICAvLyDTw7unyv2+3c23DQotICAgIGNoYXIgKlVEOyAgICAgICAgICAvLyDTw7unyv2+3Q0KLQ0KLSAgICBib29sIFJQOyAgICAgICAgICAgICAgLy8g06a08MK3vrYNCi0gICAgYm9vbCBVREhJOyAgICAgICAgICAgIC8vINPDu6fK/b7dzbex6sq2DQotICAgIGJvb2wgU1JJOyAgICAgICAgICAgICAvLyDXtMyssai45ta4yr4NCi0gICAgYm9vbCBNTVM7ICAgICAgICAgICAgIC8vILj8tuDQxc+it6LLzQ0KLSAgICBpbnQgTVRJOyAgICAgICAgICAgICAgLy8g0MXPosDg0M3WuMq+DQotDQotICAgIGNoYXIgUElEOyAgICAgICAgICAvLyBQSUQg0K3S6bHqyrYNCi0NCi0gICAgZW51bSBFbnVtRENTIERDUzsgICAgICAvLyDK/b7dseDC67e9sLgNCi0gICAgYm9vbCBUQzsgICAgICAgICAgICAgIC8vIM7Esb7Rucv11rjKviAwo7ogzrTRucv1IDGjutG5y/UNCi0gICAgaW50IE1DOyAgICAgICAgICAgICAgIC8vIM/7z6LA4NDNIC0xo7ogzt4gMaO60sa2r8nosbjM2LaowODQzSAyo7pTSU3M2LaowODQzSAzo7rW1bbLyeixuMzYtqjA4NDNDQotDQotfTsNCi0NCi1leHRlcm4gc3RydWN0IFNNU19TdHJ1Y3QgUERVRGVjb2RpbmcoY29uc3QgY2hhciAqZGF0YSk7DQotI2RlZmluZSBEU0NfdG9fbXNnKERTQykgKERTQyA9PSAwID8gIkJpdDciIDogKERTQyA9PSAxID8gIkJpdDgiIDogIlVDUzIiKSkNCi0NCi0NCi0NCi1pbnQgbHlucV9pbml0X3NtcyhpbnQgdVRva2VuKTsNCi1pbnQgbHlucV9kZWluaXRfc21zKHZvaWQpOw0KLWludCBseW5xX2RlbGV0ZV9zbXMoaW50IGluZGV4KTsNCi1pbnQgbHlucV93YWl0X3JlY2VpdmVfbmV3X3NtcyhpbnQgKmhhbmRsZSk7DQotaW50IGx5bnFfc2VuZF9zbXMoY2hhciAqdGVsZXBob255X251bSwgaW50IHN0YXRlLCBjaGFyICptc2cpOw0KLWludCBseW5xX2xpc3Rfc21zKGludCBzdGF0LCBpbnQgaW5kZXgsIGNoYXIgKmRhdGEpOw0KLWludCBseW5xX3F1ZXJ5X3Ntc19zdG9yYWdlX3N0YXR1cyh2b2lkKTsNCi0NCi12b2lkIGx5bnFfc21zX3N0YXRlX2NoYW5nZV9jYihjb25zdCB2b2lkKiBkYXRhLCBpbnQgZGF0YV9sZW4pOw0KLQ0KLWludCBseW5xX2dldF9zbXNjX2FkZHJlc3MoY2hhciAqc2VydmljZU51bWJlcik7DQotaW50IGx5bnFfc2V0X3Ntc2NfYWRkcmVzcyhjb25zdCBjaGFyKiBzZXJ2aWNlX251bSk7DQotDQotI2VuZGlmDQpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9zeXN0aW1lLmggYi9tYnRrL2luY2x1ZGUvbHlucS9seW5xX3N5c3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMWQ0ODA1Ci0tLSAvZGV2L251bGwKKysrIGIvbWJ0ay9pbmNsdWRlL2x5bnEvbHlucV9zeXN0aW1lLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qKkBmaWxlIGx5bnEtc3lzdGltZS5oDQorICoNCisgKiBAYnJpZWYgU3luYyBzeXN0aW1lIGZvcm0gZWFjaCB0aW1lIHNvdXJjZS4NCisgKg0KKyAqIEBhdXRob3Igc2ouemhhbmcNCisgKg0KKyAqIEBkYXRlIDIwMjMtMDgtMTQNCisgKg0KKyAqIEB2ZXJzaW9uIFYxLjANCisgKg0KKyAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSBNb2JpbGVUZWsNCisgKi8NCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKyNpbmNsdWRlIDx0aW1lLmg+DQorDQorI2lmbmRlZiBfTFlOUV9TWVNUSU1FX0hfDQorI2RlZmluZSBfTFlOUV9TWVNUSU1FX0hfDQorDQorI2lmZGVmIF9fY3BsdXNwbHVzDQorZXh0ZXJuICJDIg0KK3sNCisjZW5kaWYNCisNCit0eXBlZGVmIHN0cnVjdCB0aW1lX3NvdXJjZV9zdGF0dXMNCit7DQorICAgIGludCBudHA7DQorICAgIGludCBuaXR6Ow0KKyAgICBpbnQgZ25zczsNCit9dGltZV9zcmNfc3RhdHVzX3M7DQorDQorI2lmZGVmIE1PQklMRVRFS19UQVJHRVRfUExBVEZPUk1fVDEwNg0KKw0KKyAgICAvKipAYnJpZWYgU2V0IHRoZSBydGMgdGltZSB0byB0aGUgc3lzdGVtIHRpbWUuDQorICAgICAqDQorICAgICAqIEBwYXJhbSB2b2lkDQorICAgICAqDQorICAgICAqIEByZXR1cm4NCisgICAgICogICAgICAwOnN1Y2Nlc3MNCisgICAgICogICAgICBvdGhlcjpmYWlsdXJlDQorICAgICAqLw0KKyAgICBpbnQgbHlucV9zeW5jX3RpbWVfZnJvbV9ydGModm9pZCk7DQorDQorICAgIC8qKkBicmllZiBTZXQgdGhlIHN5c3RlbSB0aW1lIHRvIHRoZSBydGMgdGltZS4NCisgICAgICoNCisgICAgICogQHBhcmFtIHZvaWQNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBseW5xX3NldF9ydGNfdGltZSh2b2lkKTsNCisNCisgICAgLyoqQGJyaWVmIFF1ZXJ5IHRoZSBydGMgdGltZS4NCisgICAgICoNCisgICAgICogQHBhcmFtIFtPVVRdIHVsc2VjOiBydGMgdGltZSwgc2VjY29uZHMgZnJvbSAxOTAwLjEuMSAwMDowMA0KKyAgICAgKg0KKyAgICAgKiBAcmV0dXJuDQorICAgICAqICAgICAgMDpzdWNjZXNzDQorICAgICAqICAgICAgb3RoZXI6ZmFpbHVyZQ0KKyAgICAgKi8NCisgICAgaW50IGx5bnFfZ2V0X3J0Y190aW1lKHVuc2lnbmVkIGxvbmcgKnVsc2VjKTsNCisjZW5kaWYNCisNCisgICAgLyoqQGJyaWVmIFF1ZXJ5IHRoZSB0aW1lIHNvdXJjZSBzdGF0dXMgbm93Lg0KKyAgICAgKg0KKyAgICAgKiBAcGFyYW0gW09VVF0gbnRwLCBuaXR6LCBnbnNzOg0KKyAgICAgKiAgICAgICAgMDogZGlzYWJsZQ0KKyAgICAgKiAgICAgICAgMTogZW5hYmxlDQorICAgICAqDQorICAgICAqIEByZXR1cm4NCisgICAgICogICAgICAwIDogc3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBseW5xX2dldF90aW1lX3NyY19zdGF0dXModGltZV9zcmNfc3RhdHVzX3MgKnRpbWVfc3JjKTsNCisNCisgICAgLyoqQGJyaWVmIFR1cm4gc250cCBvbi9vZmYNCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAwIHNldCBzdWNjZXNzDQorICAgICAqICAgIDEgU05UUF9ESVNFTkFCTEUNCisgICAgICogICAgMiBTTlRQX0FMUkVBRFlfRU5BQkxFDQorICAgICAqLw0KKyAgICBpbnQgbnRwX3N5bmNfdGltZShpbnQgZW5hYmxlKTsNCisNCisgICAgLyoqQGJyaWVmIEVuYWJsZS9EaXNlbmFibGUgc3luYyB0aW1lIGZyb20gTklUWi4NCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBtb2RlbV90aW1lX2VuYWJsZShpbnQgZW5hYmxlKTsNCisNCisgICAgLyoqQGJyaWVmIEVuYWJsZS9EaXNlbmFibGUgc3luYyB0aW1lIGZyb20gR05TUy4NCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCBnbnNzX3RpbWVfZW5hYmxlKGludCBlbmFibGUpOw0KKw0KKyAgICAvKipAYnJpZWYgVXNlciBzZXQgc3lzdGltZSBtYW51YWxseS4NCisgICAgICoNCisgICAgICogQHBhcmFtIGVuYWJsZSBbSU5dIDogMCAgZGlzZW5hYmxlOyAxIGVuYWJsZTsNCisgICAgICoNCisgICAgICogQHJldHVybg0KKyAgICAgKiAgICAgIDA6c3VjY2Vzcw0KKyAgICAgKiAgICAgIG90aGVyOmZhaWx1cmUNCisgICAgICovDQorICAgIGludCB1c2VyX3NldF90aW1lKGNoYXIgKmRhdGUsIGNoYXIgKnRpbWUpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvbWJ0ay9tYnRrX2luZm9fYXBpLmggYi9tYnRrL2luY2x1ZGUvbWJ0ay9tYnRrX2luZm9fYXBpLmgKaW5kZXggNDExZjMwOS4uZmU0MjY4ZCAxMDA3NTUKLS0tIGEvbWJ0ay9pbmNsdWRlL21idGsvbWJ0a19pbmZvX2FwaS5oCisrKyBiL21idGsvaW5jbHVkZS9tYnRrL21idGtfaW5mb19hcGkuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgIm1idGtfbGlzdC5oIgogI2luY2x1ZGUgIm1idGtfbG9nLmgiCiAjaW5jbHVkZSAibWJ0a191dGlscy5oIgorI2luY2x1ZGUgIm1idGtfcGR1X3Ntcy5oIgogCiAjaWZuZGVmIFVOVVNFRAogI2RlZmluZSBVTlVTRUQoYSkgICAgKHZvaWQpKGEpCkBAIC02MjQsNiArNjI1LDE2MyBAQAogaW50IG1idGtfcmFkaW9fc3RhdGVfc2V0KG1idGtfaW5mb19oYW5kbGVfdCogaGFuZGxlLCBpbnQgcmFkaW9fc3RhdGUpOwogCiAvKgorKiBSZXR1cm4gc21zIGNtZ2YuCisqLworaW50IG1idGtfc21zX2NtZ2ZfZ2V0KG1idGtfaW5mb19oYW5kbGVfdCogaGFuZGxlLCBpbnQgKnZvbHRlX3N0YXRlKTsKKworLyoKKyogU2V0IHNtcyBjbWdmLgorKgorKiB2b2x0ZV9zdGF0ZToKKyogMCA6IFBEVSBtb2RlLgorKiAxIDogIHRleHQgbW9kZS4KKyoKKyogUmVzdGFydGluZyB0YWtlcyBlZmZlY3QgYWZ0ZXIgZXhlY3V0aW9uLgorKi8KK2ludCBtYnRrX3Ntc19jbWdmX3NldChtYnRrX2luZm9faGFuZGxlX3QqIGhhbmRsZSwgaW50IG1vZGUpOworCisvKgorKiBTZXQgc21zIGNtZ3MuCisqCitpZiBQRFUgbW9kZSAoK0NNR0Y9MCk6CisrQ01HUz08bGVuZ3RoPjxDUj4KK1BEVSBpcyBnaXZlbjxjdHJsLVovRVNDPgorCitpZiB0ZXh0IG1vZGUgKCtDTUdGPTEpOgorK0NNR1M9PGRhPlssPHRvZGE+XTxDUj4KK3RleHQgaXMgZW50ZXJlZDxjdHJsLVovRVNDPgorCisqIFJlc3RhcnRpbmcgdGFrZXMgZWZmZWN0IGFmdGVyIGV4ZWN1dGlvbi4KKyovCitpbnQgbWJ0a19zbXNfY21nc19zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBjbWdzLCBjaGFyICpyZXNwKTsKKworLyoKKyogU2V0IHNtcyBjbWd3LgorKgoraWYgdGV4dCBtb2RlICgrQ01HRj0xKToKKytDTUdXPTxvYS9kYT5bLDx0b29hL3RvZGE+Wyw8c3RhdD5dXQorPENSPgordGV4dCBpcyBlbnRlcmVkPGN0cmwtWi9FU0M+CitpZiBQRFUgbW9kZSAoK0NNR0Y9MCk6CisrQ01HVz08bGVuZ3RoPlssPHN0YXQ+XTxDUj5QRFUgaXMKK2dpdmVuPGN0cmwtWi9FU0M+CisKKyovCitpbnQgbWJ0a19zbXNfY21nd19zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBjbWd3LCBjaGFyICpyZXNwKTsKKworLyoKKyogU2V0IHNtcyBjbWdkLgorKgorKiArQ01HRD08aW5kZXg+Wyw8ZGVsZmxhZz5dCisqCisqIFJlc3RhcnRpbmcgdGFrZXMgZWZmZWN0IGFmdGVyIGV4ZWN1dGlvbi4KKyovCitpbnQgbWJ0a19zbXNfY21nZF9zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBjbWRnKTsKKworLyoKKyogU2V0IHNtcyBjbWdsLgorKgorKiBBVCtDTUdMWz08c3RhdD5dCisqCisqIFJlc3RhcnRpbmcgdGFrZXMgZWZmZWN0IGFmdGVyIGV4ZWN1dGlvbi4KKyovCitpbnQgbWJ0a19zbXNfY21nbF9zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBjbWdsLCBjaGFyICpyZXNwKTsKKworLyoKKyogUmV0dXJuIHNtcyBjc2NhLgorKi8KK2ludCBtYnRrX3Ntc19jc2NhX2dldChtYnRrX2luZm9faGFuZGxlX3QqIGhhbmRsZSwgY2hhciAqYnVmKTsKKworLyoKKyogU2V0IHNtcyBjc2NhLgorKgorKiBBVCtDU0NBPTxudW1iZXI+IFssPHR5cGU+XQorKgorKiBSZXN0YXJ0aW5nIHRha2VzIGVmZmVjdCBhZnRlciBleGVjdXRpb24uCisqLworaW50IG1idGtfc21zX2NzY2Ffc2V0KG1idGtfaW5mb19oYW5kbGVfdCogaGFuZGxlLCBjaGFyICogY3NjYSk7CisKKy8qCisqIFNldCBzbXMgY3NtcC4KKyoKKyogQVQrQ1NNUD1bPGZvPlssPHZwPlssPHBpZD5bLDxkY3M+XV1dXQorKgorKiBSZXN0YXJ0aW5nIHRha2VzIGVmZmVjdCBhZnRlciBleGVjdXRpb24uCisqLworaW50IG1idGtfc21zX2NzbXBfc2V0KG1idGtfaW5mb19oYW5kbGVfdCogaGFuZGxlLCBjaGFyICogY3NtcCk7CisKKy8qCisqIFNldCBzbXMgY3NjYi4KKyoKKyogQVQrQ1NDQj08Wzxtb2RlPlssPG1pZHM+Wyw8ZGNzcz5dXV0+CisqCisqIFJlc3RhcnRpbmcgdGFrZXMgZWZmZWN0IGFmdGVyIGV4ZWN1dGlvbi4KKyovCitpbnQgbWJ0a19zbXNfY3NjYl9zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBjc2NiKTsKKworLyoKKyogU2V0IHNtcyBjbm1pLgorKgorYXQrY25taT0xLDIKKworT0sKK2lmIHNlbmRpbmcgZmFpbHM6CisrQ01TIEVSUk9SOiA8ZXJyPgorKi8KK2ludCBtYnRrX3Ntc19jbm1pX3NldChtYnRrX2luZm9faGFuZGxlX3QqIGhhbmRsZSk7CisKKy8qCisqIFNldCBzbXMgY21zcy4KKyoKKytDTVNTPTxpbmRleD5bLDxkYT5bLDx0b2RhPl1dCisKK2lmIHNlbmRpbmcgc3VjY2Vzc2Z1bDoKKytDTVNTOiA8bXI+CitPSworaWYgc2VuZGluZyBmYWlsczoKKytDTVMgRVJST1I6IDxlcnI+CisqLworaW50IG1idGtfc21zX2Ntc3Nfc2V0KG1idGtfaW5mb19oYW5kbGVfdCogaGFuZGxlLCBjaGFyICogY21zcywgY2hhciAqcmVzcCk7CisKKy8qCisqIFJldHVybiBzbXMgY21nZi4KKyovCitpbnQgbWJ0a19zbXNfY3Btc19nZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBtZW0pOworCisvKgorKiBTZXQgc21zIGNwbXMuCisqCisqIEFUK0NQTVM9PG1lbTE+Wyw8bWVtMj5bLDxtZW0zPl1dCisqCisqIFJlc3RhcnRpbmcgdGFrZXMgZWZmZWN0IGFmdGVyIGV4ZWN1dGlvbi4KKyovCitpbnQgbWJ0a19zbXNfY3Btc19zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGNoYXIgKiBtZW0sIGNoYXIqIHJlc3BvbnNlKTsKKworLyoKKyogU2V0IHNtcyBjbS4KKyoKKyogK0NNR1I9PGluZGV4PgorCitpZiBQRFUgbW9kZSAoK0NNR0Y9MCkg77+977+9Y29tbWFuZCBzdWNjZXNzZnVsOgorK0NNR1I6IDxzdGF0PixbPGFscGhhPl0sPGxlbmd0aD48Q1I+PExGPjxwZHU+CitPSworaWYgdGV4dCBtb2RlICgrQ01HRj0xKSwgY29tbWFuZCBzdWNjZXNzZnVsIGFuZCBTTVMtREVMSVZFUjoKKytDTUdSOjxzdGF0Piw8b2E+LFs8YWxwaGE+XSw8c2N0cz5bLDx0b29hPiw8Zm8+LDxwaWQ+LDxkY3MKKz4sIDxzY2E+LDx0b3NjYT4sPGxlbmd0aD5dPENSPjxMRj48ZGF0YT4KK09LCitpZiB0ZXh0IG1vZGUgKCtDTUdGPTEpLCBjb21tYW5kIHN1Y2Nlc3NmdWwgYW5kIFNNUy1TVUJNSVQ6CisrQ01HUjoKKzxzdGF0Piw8ZGE+LFs8YWxwaGE+XVssPHRvZGE+LDxmbz4sPHBpZD4sPGRjcz4sWzx2cD5dLAorPHNjYT4sPHRvc2NhPiw8bGVuZ3RoPl08Q1I+PExGPjxkYXRhPgorT0sKK290aGVyd2lzZToKKytDTVMgRVJST1I6IDxlcnI+CisqCisqIFJlc3RhcnRpbmcgdGFrZXMgZWZmZWN0IGFmdGVyIGV4ZWN1dGlvbi4KKyovCitpbnQgbWJ0a19zbXNfY21ncl9zZXQobWJ0a19pbmZvX2hhbmRsZV90KiBoYW5kbGUsIGludCBpbmRleCwgY2hhciAqcmVzcCk7CisKKy8qCiAqIEdldCBzaW0gc3RhdGUuCiAqLwogaW50IG1idGtfc2ltX3N0YXRlX2dldChtYnRrX2luZm9faGFuZGxlX3QqIGhhbmRsZSwgbWJ0a19zaW1fc3RhdGVfZW51bSAqc2ltX3N0YXRlKTsKZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9tYnRrL21idGtfcGR1X3Ntcy5oIGIvbWJ0ay9pbmNsdWRlL21idGsvbWJ0a19wZHVfc21zLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzY0MTZkZgotLS0gL2Rldi9udWxsCisrKyBiL21idGsvaW5jbHVkZS9tYnRrL21idGtfcGR1X3Ntcy5oCkBAIC0wLDAgKzEsMTkxIEBACisvLw0KKy8vIENyZWF0ZWQgYnkgaGl0bW9vbiBvbiAxNS0xMi05Lg0KKy8vDQorDQorI2lmbmRlZiBTTVNfU01TX0gNCisjZGVmaW5lIFNNU19TTVNfSA0KKw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSAibWJ0a191dGYuaCINCisjaW5jbHVkZSAibWJ0a190eXBlLmgiDQorDQorI2RlZmluZSBNQVhfU01TX05SIDMyDQorDQorLy90eXBlZGVmIGludCBib29sOw0KKw0KKyNkZWZpbmUgdHJ1ZSAxDQorI2RlZmluZSBmYWxzZSAwDQorDQorZW51bSBFbnVtRENTIHsNCisgICAgQklUNyA9IDAsICAgICAgICAgICAgLy8gR1NNIOWtl+espumbhg0KKyAgICBCSVQ4ID0gMSwgICAgICAgICAgICAvLyBBU0NJSeWtl+espumbhg0KKyAgICBVQ1MyID0gMiAgICAgICAgICAgICAvLyBVbmljb2RlIOWtl+espumbhg0KK307DQorDQorZW51bSBFbnVtVURMIHsNCisgICAgQklUN1VETCA9IDE2MCwNCisgICAgQklUOFVETCA9IDE0MCwNCisgICAgVUNTMlVETCA9IDcwDQorfTsNCisNCitlbnVtIEVudW1DU01JRUkgew0KKyAgICBCSVQ4TUlFSSA9IDAsDQorICAgIEJJVDE2TUlFSSA9IDgNCit9Ow0KKw0KK3N0cnVjdCBQRFVVREggew0KKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7ICAgIC8vIOS/oeaBr+WFg+e0oOaVsOaNruWtl+iKguaVsA0KKyAgICBjaGFyIElFSTsgICAgICAgICAgIC8vIOS/oeaBr+WFg+e0oOagh+ivhg0KKyAgICBjaGFyICpJRUQ7ICAgICAgICAgIC8vIOS/oeaBr+WFg+e0oOaVsOaNrg0KK307DQorDQorLy8g55So5oi35pWw5o2u5aS0DQorc3RydWN0IFVESFMgew0KKyAgICBpbnQgY291bnQ7DQorICAgIHN0cnVjdCBQRFVVREggKlVESDsNCit9Ow0KKw0KKy8vIOeUqOaIt+aVsOaNruaVsOe7hO+8jOeUqOS6juaLhuWIhuefreS/oQ0KK3N0cnVjdCBVRFMgew0KKyAgICB1bnNpZ25lZCBpbnQgdG90YWw7DQorICAgIGNoYXIgKipEYXRhOw0KK307DQorDQorLy8g57yW56CB5ZCO55+t5L+hDQorc3RydWN0IFBEVVMgew0KKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7DQorICAgIGNoYXIgKipQRFU7DQorfTsNCisNCitzdHJ1Y3QgQnl0ZUFycmF5IHsNCisgICAgY2hhciAqYXJyYXk7DQorICAgIHVuc2lnbmVkIGludCBsZW47DQorfTsNCisNCitzdHJ1Y3QgU01TX1N0cnVjdCB7DQorICAgIGNoYXIgKlNDQTsgICAgICAgICAvLyDmnI3liqHkuK3lv4PlnLDlnYANCisgICAgY2hhciAqT0E7ICAgICAgICAgIC8vIOWPkemAgeaWueWcsOWdgA0KKyAgICBjaGFyICpTQ1RTOyAgICAgICAgLy8g5pyN5Yqh5Lit5b+D5pe26Ze05oizDQorICAgIHN0cnVjdCBVREhTICpVREg7ICAgICAvLyDnlKjmiLfmlbDmja7lpLQNCisgICAgY2hhciAqVUQ7ICAgICAgICAgIC8vIOeUqOaIt+aVsOaNrg0KKw0KKyAgICBib29sIFJQOyAgICAgICAgICAgICAgLy8g5bqU562U6Lev5b6EDQorICAgIGJvb2wgVURISTsgICAgICAgICAgICAvLyDnlKjmiLfmlbDmja7lpLTmoIfor4YNCisgICAgYm9vbCBTUkk7ICAgICAgICAgICAgIC8vIOeKtuaAgeaKpeWRiuaMh+ekug0KKyAgICBib29sIE1NUzsgICAgICAgICAgICAgLy8g5pu05aSa5L+h5oGv5Y+R6YCBDQorICAgIGludCBNVEk7ICAgICAgICAgICAgICAvLyDkv6Hmga/nsbvlnovmjIfnpLoNCisNCisgICAgY2hhciBQSUQ7ICAgICAgICAgIC8vIFBJRCDljY/orq7moIfor4YNCisNCisgICAgZW51bSBFbnVtRENTIERDUzsgICAgICAvLyDmlbDmja7nvJbnoIHmlrnmoYgNCisgICAgYm9vbCBUQzsgICAgICAgICAgICAgIC8vIOaWh+acrOWOi+e8qeaMh+ekuiAw77yaIOacquWOi+e8qSAx77ya5Y6L57ypDQorICAgIGludCBNQzsgICAgICAgICAgICAgICAvLyDmtojmga/nsbvlnosgLTHvvJog5pegIDHvvJrnp7vliqjorr7lpIfnibnlrprnsbvlnosgMu+8mlNJTeeJueWumuexu+WeiyAz77ya57uI56uv6K6+5aSH54m55a6a57G75Z6LDQorDQorfTsNCisNCisNCisvLyDnn63kv6Hop6PnoIENCitzdHJ1Y3QgU01TX1N0cnVjdCBQRFVEZWNvZGluZyhjb25zdCBjaGFyICpkYXRhKTsNCisNCisvLyDnn63kv6HnvJbnoIEsIOiHquWKqOehruWumue8lueggeaWueahiA0KK3N0cnVjdCBQRFVTICpQRFVFbmNvZGluZyhjaGFyICpTQ0EsIGNoYXIgKkRBLCBjaGFyICpVREMsIHN0cnVjdCBVREhTICp1ZGhzKTsNCisNCisvLyDnn63kv6HnvJbnoIHnnJ/mraPnmoTlt6XkvZwNCisvLy8g5Y+R6YCB5pa5UERV5qC85byP77yIU01TLVNVQk1JVC1QRFXvvIkNCisvLy8gU0NB77yIU2VydmljZSBDZW50ZXIgQWRyZXNz77yJ77ya55+t5L+h5Lit5b+D77yM6ZW/5bqmMS0xMg0KKy8vLyBQRFUtVHlwZe+8iFByb3RvY29sIERhdGEgVW5pdCBUeXBl77yJ77ya5Y2P6K6u5pWw5o2u5Y2V5YWD57G75Z6L77yM6ZW/5bqmMQ0KKy8vLyBNUu+8iE1lc3NhZ2UgUmVmZXJlbmNl77yJ77ya5raI5oGv5Y+C6ICD5YC877yM5Li6MO+9njI1NeOAgumVv+W6pjENCisvLy8gREHvvIhEZXN0aW5hdGlvbiBBZHJlc3PvvInvvJrmjqXmlLbmlrlTTUXnmoTlnLDlnYDvvIzplb/luqYyLTEyDQorLy8vIFBJRO+8iFByb3RvY29sIElkZW50aWZpZXLvvInvvJrljY/orq7moIfor4bvvIzplb/luqYxDQorLy8vIERDU++8iERhdGEgQ29kaW5nIFNjaGVtZe+8ie+8mue8lueggeaWueahiO+8jOmVv+W6pjENCisvLy8gVlDvvIhWYWxpZGl0eSBQZXJpb2TvvInvvJrmnInmlYjmnJ/vvIzplb/luqbkuLox77yI55u45a+577yJ5oiW6ICFN++8iOe7neWvueaIluWinuW8uu+8iQ0KKy8vLyBVREzvvIhVc2VyIERhdGEgTGVuZ3Ro77yJ77ya55So5oi35pWw5o2u5q616ZW/5bqm77yM6ZW/5bqmMQ0KKy8vLyBVRO+8iFVzZXIgRGF0Ye+8ie+8mueUqOaIt+aVsOaNru+8jOmVv+W6pjAtMTQwDQorDQorc3RydWN0IFBEVVMgKlBEVURvRW5jb2RpbmcoY2hhciAqU0NBLCBjaGFyICpEQSwgY2hhciAqVURDLCBzdHJ1Y3QgVURIUyAqdWRocywgZW51bSBFbnVtRENTIERDUyk7DQorDQorDQorLy8g5pyN5Yqh5Lit5b+D5Zyw5Z2A6Kej56CBDQorY2hhciAqU0NBRGVjb2RpbmcoY29uc3QgY2hhciAqZGF0YSwgaW50ICpFbmRJbmRleCk7DQorDQorLy8g5Y6f5aeL5Zyw5Z2A6Kej56CBDQorY2hhciAqT0FEZWNvZGluZyhjb25zdCBjaGFyICpkYXRhLCBpbnQgaW5kZXgsIGludCAqRW5kSW5kZXgpOw0KKw0KKy8vIOacjeWKoeS4reW/g+aXtumXtOaIs+ino+eggQ0KK2NoYXIgKlNDVFNEZWNvZGluZyhjb25zdCBjaGFyICpkYXRhLCBpbnQgaW5kZXgpOw0KKw0KKy8vIEJDRCDop6PnoIENCitpbnQgQkNERGVjb2RpbmcoY29uc3QgY2hhciAqZGF0YSwgaW50IGluZGV4LCBib29sIGlzTVNCKTsNCisNCisvLyDnlKjmiLfmlbDmja7lpLTop6PnoIENCitzdHJ1Y3QgVURIUyAqVURIRGVjb2RpbmcoY29uc3QgY2hhciAqZGF0YSwgaW50IGluZGV4KTsNCisNCisvLyDnlKjmiLfmlbDmja7op6PnoIENCitjaGFyICpVc2VyRGF0YURlY29kaW5nKGNvbnN0IGNoYXIgKmRhdGEsIGludCBpbmRleCwgYm9vbCBVREhJLCBlbnVtIEVudW1EQ1MgZGNzKTsNCisNCisvLyA3LUJpdOe8lueggeino+WOi+e8qQ0KK2NoYXIgKkJJVDdVbnBhY2soY29uc3QgY2hhciAqZGF0YSwgaW50IGluZGV4LCBpbnQgU2VwdGV0cywgaW50IEZpbGxCaXRzKTsNCisNCisvLyDovazmjaJHU03lrZfnrKbnvJbnoIHliLBVbmljb2Rl57yW56CBDQorY2hhciAqQklUN0RlY29kaW5nKGNoYXIgKkJJVDdEYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZSk7DQorDQorLy8gNy1CaXTluo/liJflkoxVbmljb2Rl57yW56CB5piv5ZCm55u45ZCMDQoraW50IGlzQklUN1NhbWUodV9pbnQxNl90IFVDUzIpOw0KKw0KKy8vIOWIpOaWreaYr+WQpuaYr0dTTeWtl+espuS4sg0KK2ludCBpc0dTTVN0cmluZyhjaGFyICpEYXRhKTsNCisNCisvLyDnlKjmiLfmlbDmja7mi4bliIYNCitzdHJ1Y3QgVURTICpVRENTcGxpdChjaGFyICpVREMsIHN0cnVjdCBVREhTICp1aGRzLCBlbnVtIEVudW1EQ1MgRENTKTsNCisNCisvLyDojrflvpfnlKjmiLfmlbDmja7lpLTplb/luqYNCitpbnQgZ2V0VURITChzdHJ1Y3QgVURIUyAqdWRocyk7DQorDQorLy8g6K6h566X6ZyA6KaB55qENy1CaXTnvJbnoIHlrZfoioLmlbANCitpbnQgU2VwdGV0c0xlbmd0aChjaGFyICpzb3VyY2UpOw0KKw0KKy8vIOWwhjctQml057yW56CB5a2X6IqC5pWw5o2i566X5oiQVUNTMue8lueggeWtl+espuaVsA0KK2ludCBTZXB0ZXRzVG9DaGFycyhjaGFyICpzb3VyY2UsIGludCBpbmRleCwgaW50IHNlcHRldHMpOw0KKw0KKy8vIOWcqOeUqOaIt+aVsOaNruWktOS4reWinuWKoOmVv+efreS/oeS/oeaBr+WFg+e0oA0KK3N0cnVjdCBVREhTICpVcGRhdGVVREgoc3RydWN0IFVESFMgKnVkaHMsIGludCBDU01NUiwgaW50IHRvdGFsLCBpbnQgaW5kZXgpOw0KKw0KKy8v5Y2V5p2h55+t5L+h57yW56CBDQorY2hhciAqU29sb1BEVUVuY29kaW5nKGNoYXIgKlNDQSwgY2hhciAqREEsIGNoYXIgKlVDLCBzdHJ1Y3QgVURIUyAqdWRocywgZW51bSBFbnVtRENTIERDUyk7DQorDQorLy8gU0NB57yW56CBDQorY2hhciAqU0NBRW5jb2RpbmcoY2hhciAqU0NBKTsNCisNCisvLyBQRFVUWVBFIOe8lueggQ0KK2NoYXIgKlBEVVR5cGVFbmNvZGluZyhib29sIFVESCk7DQorDQorLy8gTVIs5raI5oGv5Y+C6ICD5YC8DQorY2hhciAqTVJFbmNvZGluZygpOw0KKw0KKy8v5o6l5pS25pa5U01F5Zyw5Z2ADQorY2hhciAqREFFbmNvZGluZyhjaGFyICpEQSk7DQorDQorLy8g5Y2P6K6u5qCH6K+GDQorY2hhciAqUElERW5jb2RpbmcoKTsNCisNCisvLyDnvJbnoIHmlrnmoYgNCitjaGFyICpEQ1NFbmNvZGluZyhjaGFyICpVRCwgZW51bSBFbnVtRENTIERDUyk7DQorDQorLy8g55So5oi35pWw5o2u6ZW/5bqm5Y+K5YaF5a65DQorY2hhciAqVURFbmNvZGluZyhjaGFyICpVRCwgc3RydWN0IFVESFMgKnVkaHMsIGVudW0gRW51bURDUyBEQ1MpOw0KKw0KKy8vIOeUqOaIt+aVsOaNruWktOe8lueggQ0KK2NoYXIgKlVESEVuY29kaW5nKHN0cnVjdCBVREhTICp1ZGhzLCBpbnQgKlVESEwpOw0KKw0KKy8vIOeUqOaIt+aVsOaNruWGheWuuee8lueggQ0KK2NoYXIgKlVEQ0VuY29kaW5nKGNoYXIgKlVEQywgaW50ICpVRENMLCBpbnQgVURITCwgZW51bSBFbnVtRENTIERDUyk7DQorDQorLy8g5bCGVUNTMue8lueggeWtl+espuS4sui9rOaNouaIkDctQml057yW56CB5a2X6IqCIOW6j+WIlw0KK3N0cnVjdCBCeXRlQXJyYXkgKkJJVDdFbmNvZGluZyhjaGFyICpVREMsIGludCAqU2VwdGV0cyk7DQorDQorLy8gIDctQml057yW56CB5Y6L57ypDQorY2hhciAqQklUN1BhY2soc3RydWN0IEJ5dGVBcnJheSAqQml0N0FycmF5LCBpbnQgVURITCk7DQorDQordm9pZCBzbXNfaW5pdCgpOw0KKw0KKyNlbmRpZiAvL1NNU19TTVNfSA0KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9tYnRrL21idGtfdXRmLmggYi9tYnRrL2luY2x1ZGUvbWJ0ay9tYnRrX3V0Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhMTZjZWQKLS0tIC9kZXYvbnVsbAorKysgYi9tYnRrL2luY2x1ZGUvbWJ0ay9tYnRrX3V0Zi5oCkBAIC0wLDAgKzEsODUgQEAKKy8vDQorLy8gQ3JlYXRlZCBieSBoaXRtb29uIG9uIDE1LTEyLTE3Lg0KKy8vDQorDQorI2lmbmRlZiBTTVNfVVRGX0gNCisjZGVmaW5lIFNNU19VVEZfSA0KKw0KKyNpbmNsdWRlIDxzdGRkZWYuaD4NCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQorDQordHlwZWRlZiB1bnNpZ25lZCBpbnQgVVRGMzI7DQorLyogYXQgbGVhc3QgMzIgYml0cyAqLw0KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVRGMTY7DQorLyogYXQgbGVhc3QgMTYgYml0cyAqLw0KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVVEY4Ow0KKy8qIHR5cGljYWxseSA4IGJpdHMgKi8NCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQm9vbGVhbjsgLyogMCBvciAxICovDQorDQorLyogU29tZSBmdW5kYW1lbnRhbCBjb25zdGFudHMgKi8NCisjZGVmaW5lIFVOSV9SRVBMQUNFTUVOVF9DSEFSIChVVEYzMikweDAwMDBGRkZEDQorI2RlZmluZSBVTklfTUFYX0JNUCAoVVRGMzIpMHgwMDAwRkZGRg0KKyNkZWZpbmUgVU5JX01BWF9VVEYxNiAoVVRGMzIpMHgwMDEwRkZGRg0KKyNkZWZpbmUgVU5JX01BWF9VVEYzMiAoVVRGMzIpMHg3RkZGRkZGRg0KKyNkZWZpbmUgVU5JX01BWF9MRUdBTF9VVEYzMiAoVVRGMzIpMHgwMDEwRkZGRg0KKw0KK3R5cGVkZWYgZW51bSB7DQorICAgIGNvbnZlcnNpb25PSywgLyogY29udmVyc2lvbiBzdWNjZXNzZnVsICovDQorICAgICAgICAgICAgc291cmNlRXhoYXVzdGVkLCAvKiBwYXJ0aWFsIGNoYXJhY3RlciBpbiBzb3VyY2UsIGJ1dCBoaXQgZW5kICovDQorICAgICAgICAgICAgdGFyZ2V0RXhoYXVzdGVkLCAvKiBpbnN1ZmYuIHJvb20gaW4gdGFyZ2V0IGZvciBjb252ZXJzaW9uICovDQorICAgICAgICAgICAgc291cmNlSWxsZWdhbCAgICAgICAgLyogc291cmNlIHNlcXVlbmNlIGlzIGlsbGVnYWwvbWFsZm9ybWVkICovDQorfSBDb252ZXJzaW9uUmVzdWx0Ow0KKw0KK3R5cGVkZWYgZW51bSB7DQorICAgIHN0cmljdENvbnZlcnNpb24gPSAwLA0KKyAgICBsZW5pZW50Q29udmVyc2lvbg0KK30gQ29udmVyc2lvbkZsYWdzOw0KKw0KKy8qIFRoaXMgaXMgZm9yIEMrKyBhbmQgZG9lcyBubyBoYXJtIGluIEMgKi8NCisjaWZkZWYgX19jcGx1c3BsdXMNCitleHRlcm4gIkMiIHsNCisjZW5kaWYNCisNCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEY4dG9VVEYxNigNCisgICAgICAgIGNvbnN0IFVURjggKipzb3VyY2VTdGFydCwgY29uc3QgVVRGOCAqc291cmNlRW5kLA0KKyAgICAgICAgVVRGMTYgKip0YXJnZXRTdGFydCwgVVRGMTYgKnRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKTsNCisNCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEYxNnRvVVRGOCgNCisgICAgICAgIGNvbnN0IFVURjE2ICoqc291cmNlU3RhcnQsIGNvbnN0IFVURjE2ICpzb3VyY2VFbmQsDQorICAgICAgICBVVEY4ICoqdGFyZ2V0U3RhcnQsIFVURjggKnRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKTsNCisNCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEY4dG9VVEYzMigNCisgICAgICAgIGNvbnN0IFVURjggKipzb3VyY2VTdGFydCwgY29uc3QgVVRGOCAqc291cmNlRW5kLA0KKyAgICAgICAgVVRGMzIgKip0YXJnZXRTdGFydCwgVVRGMzIgKnRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKTsNCisNCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEYzMnRvVVRGOCgNCisgICAgICAgIGNvbnN0IFVURjMyICoqc291cmNlU3RhcnQsIGNvbnN0IFVURjMyICpzb3VyY2VFbmQsDQorICAgICAgICBVVEY4ICoqdGFyZ2V0U3RhcnQsIFVURjggKnRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKTsNCisNCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEYxNnRvVVRGMzIoDQorICAgICAgICBjb25zdCBVVEYxNiAqKnNvdXJjZVN0YXJ0LCBjb25zdCBVVEYxNiAqc291cmNlRW5kLA0KKyAgICAgICAgVVRGMzIgKip0YXJnZXRTdGFydCwgVVRGMzIgKnRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKTsNCisNCitDb252ZXJzaW9uUmVzdWx0IENvbnZlcnRVVEYzMnRvVVRGMTYoDQorICAgICAgICBjb25zdCBVVEYzMiAqKnNvdXJjZVN0YXJ0LCBjb25zdCBVVEYzMiAqc291cmNlRW5kLA0KKyAgICAgICAgVVRGMTYgKip0YXJnZXRTdGFydCwgVVRGMTYgKnRhcmdldEVuZCwgQ29udmVyc2lvbkZsYWdzIGZsYWdzKTsNCisNCitCb29sZWFuIGlzTGVnYWxVVEY4U2VxdWVuY2UoY29uc3QgVVRGOCAqc291cmNlLCBjb25zdCBVVEY4ICpzb3VyY2VFbmQpOw0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cw0KK30NCisjZW5kaWYNCisNCisvLyDojrflvpfkuIvkuIDkuKpjaGFy55qE6LW35aeL5Zyw5Z2ADQordV9pbnQzMl90IG5leHRfY2hhcih1bnNpZ25lZCBjaGFyICoqc3RyaW5nKTsNCisNCitjb25zdCB1bnNpZ25lZCBjaGFyICp1dGYzMnRvdXRmOCh3Y2hhcl90ICpzb3VyY2UsIHVuc2lnbmVkIGNoYXIgKnRhcmdldCwgc2l6ZV90IHNpemUsICBpbnQgKmxlbik7DQorDQordW5zaWduZWQgY2hhciAqdXRmMTZ0b3V0ZjgodW5zaWduZWQgc2hvcnQgKnNvdXJjZSwgdW5zaWduZWQgY2hhciAqdGFyZ2V0LCBzaXplX3Qgc2l6ZSwgIGludCAqbGVuKTsNCit1bnNpZ25lZCBzaG9ydCAqdXRmOHRvdXRmMTYodW5zaWduZWQgY2hhciAqc291cmNlLCB1bnNpZ25lZCBzaG9ydCAqdGFyZ2V0LCBzaXplX3Qgc2l6ZSwgIGludCAqbGVuKTsNCisNCitpbnQgdXRmOGxlbih1bnNpZ25lZCBjaGFyICpzdHJpbmcpOw0KK2ludCBpc19hY3NpaSh1bnNpZ25lZCBjaGFyICpzdHJpbmcpOw0KK3NpemVfdCB1dGY4X2dldF9zaXplKHVuc2lnbmVkIGNoYXIgKnNvdXJjZSwgc2l6ZV90IG51bSk7DQorDQorI2VuZGlmIC8vU01TX1VURl9IDQpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9hZGMuaCBiL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfYWRjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZhYTFjZjMuLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9hZGMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0qIHFzZXJfYWRjLmgKLSoKLSogUVNFUiBhZGMgaGVhZGVyIGZpbGUuCi0qCi0qIEF1dGhvciA6IGxiCi0qIERhdGUgICA6IDIwMjMvMTEvMjMgMTE6MDM6MjYKLSovCi0jaWZuZGVmIF9RU0VSX0FEQ19ICi0jZGVmaW5lIF9RU0VSX0FEQ19ICi0jaW5jbHVkZSAibWJ0a190eXBlLmgiCi0KLXR5cGVkZWYgZW51bSBBRENfQ0hBTk5FTAotewotICAgIFFBRENfTk9ORSA9IDAsIC8v5qCH5b+X5L2NIDAg5q2j5bi45qih5byPCi0gICAgQURDMCA9IDEsIC8v5oyH5a6aIEFEQzAg6YCa6YGTCi0gICAgQURDMSA9IDIsIC8v5oyH5a6aIEFEQzEg6YCa6YGTCi0gICAgQURDMiA9IDMsIC8v5oyH5a6aIEFEQzIg6YCa6YGTCi0gICAgUUFEQ19FTkQgLy/mnprkuL7nu5PmnZ/moIflv5cKLX0gQURDX0NIQU5ORUxfRTsKLQotaW50IHFzZXJfYWRjX3Nob3coQURDX0NIQU5ORUxfRSBxYWRjKTsKLQotI2VuZGlmIC8qIF9RU0VSX0FEQ19IICovCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX2RhdGFfY2FsbC5oIGIvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9kYXRhX2NhbGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZmJlZGRhZC4uMDAwMDAwMAotLS0gYS9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX2RhdGFfY2FsbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0qIHFzZXJfZGF0YV9jYWxsLmgKLSoKLSogUVNFUiBkYXRhIGNhbGwgaGVhZGVyIGZpbGUuCi0qCi0qIEF1dGhvciA6IGxiCi0qIERhdGUgICA6IDIwMjMvMTEvMjMgMTM6MzI6MzcKLSovCi0jaWZuZGVmIF9RU0VSX0RBVEFfQ0FMTF9ICi0jZGVmaW5lIF9RU0VSX0RBVEFfQ0FMTF9ICi0jaW5jbHVkZSAibWJ0a190eXBlLmgiCi0KLSNkZWZpbmUgUVNFUl9BUE5fTUFYX0xJU1QgOAotI2RlZmluZSBRU0VSX0FQTl9OQU1FX1NJWkUgMTUwCi0jZGVmaW5lIFFTRVJfQVBOX1VTRVJOQU1FX1NJWkUgMTI3Ci0jZGVmaW5lIFFTRVJfQVBOX1BBU1NXT1JEX1NJWkUgMTI3Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgUVNFUl9EQVRBX0NBTExfRVJST1JfTk9ORSA9IDAsCi0gICAgUVNFUl9EQVRBX0NBTExfRVJST1JfSU5WQUxJRF9QQVJBTVMsCi19IHFzZXJfZGF0YV9jYWxsX2Vycm9yX2U7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY0ID0gMCwgLyohPCBJUHY0IGNhbGwuICovCi0gICAgUVNFUl9EQVRBX0NBTExfVFlQRV9JUFY2LCAvKiE8IElQdjYgY2FsbC4gKi8KLSAgICBRU0VSX0RBVEFfQ0FMTF9UWVBFX0lQVjRWNiwgLyohPCBJUHY0IGFuZCBJUHY2IGNhbGwgKE9ubHkgdXNlZCBjYWxsIHN0YXJ0IG9yIHN0b3ApLiAqLwotfSBxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZTsKLQotdHlwZWRlZiBlbnVtIHsKLSAgICBRU0VSX0FQTl9QRFBfVFlQRV9JUFY0ID0gMCwKLSAgICBRU0VSX0FQTl9QRFBfVFlQRV9QUFAsCi0gICAgUVNFUl9BUE5fUERQX1RZUEVfSVBWNiwKLSAgICBRU0VSX0FQTl9QRFBfVFlQRV9JUFY0VjYsCi19IHFzZXJfYXBuX3BkcF90eXBlX2U7Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgUVNFUl9BUE5fQVVUSF9QUk9UT19ERUZBVUxUID0gMCwKLSAgICBRU0VSX0FQTl9BVVRIX1BST1RPX05PTkUsCi0gICAgUVNFUl9BUE5fQVVUSF9QUk9UT19QQVAsCi0gICAgUVNFUl9BUE5fQVVUSF9QUk9UT19DSEFQLAotICAgIFFTRVJfQVBOX0FVVEhfUFJPVE9fUEFQX0NIQVAsCi19IHFzZXJfYXBuX2F1dGhfcHJvdG9fZTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIgcHJvZmlsZV9pZHg7IC8qITwgVU1UUy9DTURBIHByb2ZpbGUgSUQuICovCi0gICAgYm9vbCByZWNvbm5lY3Q7IC8qITwgV2hldGhlciB0byByZS1kaWFsIGFmdGVyIGRpc2Nvbm5lY3RpbmcgdGhlIG5ldHdvcmsuKi8KLSAgICBxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZSBpcF9mYW1pbHk7IC8qITwgSVAgdmVyc2lvbi4gKi8KLSAgICBjaGFyIGNkbWFfdXNlcm5hbWVbUVNFUl9BUE5fVVNFUk5BTUVfU0laRV07IC8qITwgVXNlcm5hbWUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLwotICAgIGNoYXIgY2RtYV9wYXNzd29yZFtRU0VSX0FQTl9QQVNTV09SRF9TSVpFXTsgLyohPCBQYXNzd29yZCB0byBiZSB1c2VkIGR1cmluZyBkYXRhIG5ldHdvcmsgYXV0aGVudGljYXRpb24uICovCi19IHFzZXJfZGF0YV9jYWxsX3M7Ci0KLXN0cnVjdCB2NF9pbmZvIHsKLSAgICBjaGFyIG5hbWVbMTZdOyAvKiE8IEludGVyZmFjZSBOYW1lLiAqLwotICAgIHFzZXJfZGF0YV9jYWxsX3N0YXRlX2Ugc3RhdGU7IC8qITwgVGhlIGRpYWwgc3RhdHVzLiAqLwotICAgIGJvb2wgcmVjb25uZWN0OyAvKiE8IHJlLWRpYWwgZmxhZy4gKi8KLSAgICBzdHJ1Y3QgdjRfYWRkcmVzc19zdGF0dXMgYWRkcjsgLyohPCBJUHY0IElQIEFkZHJlc3MgaW5mb3JtYXRpb24uICovCi0gICAgc3RydWN0IHBrdF9zdGF0cyBzdGF0czsgLyohPCBJUHY0IHN0YXRpY3MgKi8KLX07Ci0KLXN0cnVjdCB2Nl9pbmZvIHsKLSAgICBjaGFyIG5hbWVbMTZdOyAvKiE8IEludGVyZmFjZSBOYW1lLiAqLwotICAgIHFzZXJfZGF0YV9jYWxsX3N0YXRlX2Ugc3RhdGU7IC8qITwgVGhlIGRpYWwgc3RhdHVzLiAqLwotICAgIGJvb2wgcmVjb25uZWN0OyAvKiE8IHJlLWRpYWwgZmxhZy4gKi8KLSAgICBzdHJ1Y3QgdjZfYWRkcmVzc19zdGF0dXMgYWRkcjsgLyohPCBJUHY2IElQIEFkZHJlc3MgaW5mb3JtYXRpb24uICovCi0gICAgc3RydWN0IHBrdF9zdGF0cyBzdGF0czsgLyohPCBJUHY2IHN0YXRpY3MgKi8KLX07Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyIHByb2ZpbGVfaWR4OyAvKiE8IFVNVFMvQ0RNQSBwcm9maWxlIElELiAqLwotICAgIHFzZXJfZGF0YV9jYWxsX2lwX2ZhbWlseV9lIGlwX2ZhbWlseTsgLyohPCBJUCB2ZXJzaW9uLiAqLwotICAgIHN0cnVjdCB2NF9pbmZvIHY0OyAvKiE8IElQdjQgaW5mb3JtYXRpb24gKi8KLSAgICBzdHJ1Y3QgdjZfaW5mbyB2NjsgLyohPCBJUHY2IGluZm9ybWF0aW9uICovCi19IHFzZXJfZGF0YV9jYWxsX2luZm9fczsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIGNoYXIgcHJvZmlsZV9pZHg7IC8qITwgVU1UUy9DRE1BIHByb2ZpbGUgSUQuICovCi0gICAgcXNlcl9hcG5fcGRwX3R5cGVfZSBwZHBfdHlwZTsgLyohPCBQYWNrZXQgRGF0YSBQcm90b2NvbCAoUERQKSB0eXBlIHNwZWNpZmllcyB0aGUgdHlwZSBvZiBkYXRhIHBheWxvYWQgZXhjaGFuZ2VkIG92ZXIgdGhlIGFpcmxpbmsgd2hlbiB0aGUgcGFja2V0IGRhdGEgc2Vzc2lvbiBpcyBlc3RhYmxpc2hlZCB3aXRoIHRoaXMgcHJvZmlsZS4gKi8KLSAgICBxc2VyX2Fwbl9hdXRoX3Byb3RvX2UgYXV0aF9wcm90bzsgLyohPCBBdXRoZW50aWNhdGlvbiBQcm90b2NvbC4gKi8KLSAgICBjaGFyIGFwbl9uYW1lW1FTRVJfQVBOX05BTUVfU0laRV07IC8qITwgQSBzdHJpbmcgcGFyYW1ldGVyIHRoYXQgaXMgYSBsb2dpY2FsIG5hbWUgdXNlZCB0byBzZWxlY3QgdGhlIEdHU04gYW5kIGV4dGVybmFsIHBhY2tldCBkYXRhIG5ldHdvcmsuICovCi0gICAgY2hhciB1c2VybmFtZVtRU0VSX0FQTl9VU0VSTkFNRV9TSVpFXTsgLyohPCBVc2VybmFtZSB1c2VkIGR1cmluZyBkYXRhIG5ldHdvcmsgYXV0aGVudGljYXRpb24uICovCi0gICAgY2hhciBwYXNzd29yZFtRU0VSX0FQTl9QQVNTV09SRF9TSVpFXTsgLyohPCBQYXNzd29yZCB0byBiZSB1c2VkIGR1cmluZyBkYXRhIG5ldHdvcmsgYXV0aGVudGljYXRpb24uICovCi0gICAgY2hhciBhcG5fdHlwZVtRU0VSX0FQTl9OQU1FX1NJWkVdOyAvKlRoZSBwcmltYXJ5IGtleSBvZiB0aGUgYXBuIHRhYmxlLCBjYW5ub3QgaW5zZXJ0IHR3byBhcG4gaW5mb3JtYXRpb24gd2l0aCB0aGUgc2FtZSBhcG5fdHlwZSovCi19IHFzZXJfYXBuX2luZm9fczsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHFzZXJfYXBuX3BkcF90eXBlX2UgcGRwX3R5cGU7IC8qITwgUGFja2V0IERhdGEgUHJvdG9jb2wgKFBEUCkgdHlwZSBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgZGF0YSBwYXlsb2FkIGV4Y2hhbmdlZCBvdmVyIHRoZSBhaXJsaW5rIHdoZW4gdGhlIHBhY2tldCBkYXRhIHNlc3Npb24gaXMgZXN0YWJsaXNoZWQgd2l0aCB0aGlzIHByb2ZpbGUuICovCi0gICAgcXNlcl9hcG5fYXV0aF9wcm90b19lIGF1dGhfcHJvdG87IC8qITwgQXV0aGVudGljYXRpb24gUHJvdG9jb2wuICovCi0gICAgY2hhciBhcG5fbmFtZVtRU0VSX0FQTl9OQU1FX1NJWkVdOyAvKiE8IEEgc3RyaW5nIHBhcmFtZXRlciB0aGF0IGlzIGEgbG9naWNhbCBuYW1lIHVzZWQgdG8gc2VsZWN0IHRoZSBHR1NOIGFuZCBleHRlcm5hbCBwYWNrZXQgZGF0YSBuZXR3b3JrLiAqLwotICAgIGNoYXIgdXNlcm5hbWVbUVNFUl9BUE5fVVNFUk5BTUVfU0laRV07IC8qITwgVXNlcm5hbWUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLwotICAgIGNoYXIgcGFzc3dvcmRbUVNFUl9BUE5fUEFTU1dPUkRfU0laRV07IC8qITwgUGFzc3dvcmQgdG8gYmUgdXNlZCBkdXJpbmcgZGF0YSBuZXR3b3JrIGF1dGhlbnRpY2F0aW9uLiAqLwotICAgIGNoYXIgYXBuX3R5cGVbUVNFUl9BUE5fTkFNRV9TSVpFXTsgLypUaGUgcHJpbWFyeSBrZXkgb2YgdGhlIGFwbiB0YWJsZSwgY2Fubm90IGluc2VydCB0d28gYXBuIGluZm9ybWF0aW9uIHdpdGggdGhlIHNhbWUgYXBuX3R5cGUqLwotfSBxc2VyX2Fwbl9hZGRfczsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGludCBjbnQ7IC8qYXBuW10g5pWw57uE5Lit5pyJ5pWIIGFwbiDnmoTmlbDnm64gKi8KLSAgICBxc2VyX2Fwbl9pbmZvX3MgYXBuW1FTRVJfQVBOX01BWF9MSVNUXTsKLX0gcXNlcl9hcG5faW5mb19saXN0X3M7Ci0KLXR5cGVkZWYgdm9pZCAoKnFzZXJfZGF0YV9jYWxsX2V2dF9jYl90KShxc2VyX2RhdGFfY2FsbF9zdGF0ZV9zICpzdGF0ZSk7Ci0KLWludCBxc2VyX2RhdGFfY2FsbF9pbml0KHFzZXJfZGF0YV9jYWxsX2V2dF9jYl90IGV2dF9jYik7Ci0KLXZvaWQgcXNlcl9kYXRhX2NhbGxfZGVzdHJveSh2b2lkKTsKLQotaW50IHFzZXJfZGF0YV9jYWxsX3N0YXJ0KHFzZXJfZGF0YV9jYWxsX3MgKmRhdGFfY2FsbCwgcXNlcl9kYXRhX2NhbGxfZXJyb3JfZSAqZXJyKTsKLQotaW50IHFzZXJfZGF0YV9jYWxsX3N0b3AoY2hhciBwcm9maWxlX2lkeCwgcXNlcl9kYXRhX2NhbGxfaXBfZmFtaWx5X2UgaXBfZmFtaWx5LCBxc2VyX2RhdGFfY2FsbF9lcnJvcl9lICplcnIpOwotCi1pbnQgcXNlcl9kYXRhX2NhbGxfaW5mb19nZXQoY2hhciBwcm9maWxlX2lkeCxxc2VyX2RhdGFfY2FsbF9pcF9mYW1pbHlfZSBpcF9mYW1pbHkscXNlcl9kYXRhX2NhbGxfaW5mb19zICppbmZvLHFzZXJfZGF0YV9jYWxsX2Vycm9yX2UgKmVycik7Ci0KLWludCBxc2VyX2Fwbl9zZXQocXNlcl9hcG5faW5mb19zICphcG4pOwotCi1pbnQgcXNlcl9hcG5fZ2V0KHVuc2lnbmVkIGNoYXIgcHJvZmlsZV9pZHgsIHFzZXJfYXBuX2luZm9fcyAqYXBuKTsKLQotaW50IHFzZXJfYXBuX2FkZChxc2VyX2Fwbl9hZGRfcyAqYXBuLCB1bnNpZ25lZCBjaGFyICpwcm9maWxlX2lkeCk7Ci0KLWludCBxc2VyX2Fwbl9kZWwodW5zaWduZWQgY2hhciBwcm9maWxlX2lkeCk7Ci0KLWludCBxc2VyX2Fwbl9nZXRfbGlzdChxc2VyX2Fwbl9pbmZvX2xpc3RfcyAqYXBuX2xpc3QpOwotCi0jZW5kaWYgLyogX1FTRVJfREFUQV9DQUxMX0ggKi8KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfZm90YS5oIGIvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9mb3RhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDc0MjVkMjEuLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9mb3RhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKgotKiBxc2VyX2ZvdGEuaAotKgotKiBRU0VSIEZvdGEgaGVhZGVyIGZpbGUuCi0qCi0qIEF1dGhvciA6IGxiCi0qIERhdGUgICA6IDIwMjMvMTEvMjMgMTE6MDk6MzMKLSovCi0jaWZuZGVmIF9RU0VSX0ZPVEFfSAotI2RlZmluZSBfUVNFUl9GT1RBX0gKLSNpbmNsdWRlICJtYnRrX3R5cGUuaCIKLQotaW50IGx5bnFfcm9ja19tYWluKGludCBmaXJzdF9ydW4pOwotCi1pbnQgbHlucV9mb3RhX3NldF9hZGRyX3ZhbHVlKGNoYXIgKnZhbHVlLGludCBzaXplKTsKLQotaW50IGx5bnFfZm90YV9ucmVzdGFydCh2b2lkKTsKLQotaW50IGx5bnFfZ2V0X3VwZ3JhZGVfc3RhdHVzKHZvaWQpOwotCi0KLSNlbmRpZiAvKiBfUVNFUl9GT1RBX0ggKi8KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfZ25zcy5oIGIvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9nbnNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZlMjgyN2EuLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9nbnNzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotKiBxc2VyX2duc3MuaAotKgotKiBRU0VSIEdOU1MgaGVhZGVyIGZpbGUuCi0qCi0qIEF1dGhvciA6IGxiCi0qIERhdGUgICA6IDIwMjMvMTEvMjMgMTE6MTM6MTgKLSovCi0jaWZuZGVmIF9RU0VSX0dOU1NfSAotI2RlZmluZSBfUVNFUl9HTlNTX0gKLSNpbmNsdWRlICJtYnRrX3R5cGUuaCIKLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgVWludF90OwotCi10eXBlZGVmIGVudW0KLXsKLSAgICBFX01UX0xPQ19NU0dfSURfTE9DQVRJT05fSU5GTywgLyoqPCBwdl9kYXRhID0gJiBtb3Blbl9sb2NhdGlvbl9pbmZvX3QgKi8KLSAgICBFX01UX0xPQ19NU0dfSURfTk1FQV9JTkZPLCAvKio8IHB2X2RhdGEgPSAmIG1vcGVuX2duc3Nfbm1lYV9pbmZvX3QgKi8KLX0gZV9tc2dfaWRfdDsKLQotdHlwZWRlZiB2b2lkICgqZ25zc19oYW5kbGVyX2Z1bmNfdCkKLSgKLSAgICBVaW50X3QgKmhfbG9jLAotICAgIGVfbXNnX2lkX3QgZV9tc2dfaWQsIC8v5raI5oGvIElECi0gICAgdm9pZCAqcHZfZGF0YSwgLy/mtojmga/lhoXlrrnvvIzlj5blhrPkuo4gSUTvvIzlpoLkuIvor7TmmI4KLSAgICB2b2lkICpjb250ZXh0X3B0ciAvL+eUqOS6juWMuuWIhuWTquS4qui/lOWbnueahOa2iOaBrwotKS8qIGx5bnFfQWRkUnhJbmRNc2dIYW5kbGVyX3QqLzsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICB1aW50MzJfdCB5ZWFyOyAvLyDlpKfkuo4gMTk4MAotICAgIHVpbnQzMl90IG1vbnRoOyAvLyAxLTEyCi0gICAgdWludDMyX3QgZGF5OyAvLyAxLTMxCi0gICAgdWludDMyX3QgaG91cjsgLy8gMC0yMwotICAgIHVpbnQzMl90IG1pbnV0ZTsgLy8gMC01OQotICAgIHVpbnQzMl90IHNlY29uZDsgLy8gMC01OQotICAgIHVpbnQzMl90IG1pbGxpc2Vjb25kOyAvLyAwLTk5OQotfSBMWU5RX0lOSkVDVF9USU1FX0lOVE9fVDsgLyogTWVzc2FnZSAqLwotCi10eXBlZGVmIGVudW0gewotICAgIERFTEVURV9OT1RISU5HID0gMCwgLyrkuI3liKDpmaTmlbDmja4qLwotICAgIERFTEVURV9FUEhFTUVSSVMgPSAxLCAvKuWIoOmZpOaYn+WOhiovCi0gICAgREVMRVRFX0FMTUFOQUMgPSAyLCAvKuWIoOmZpOWOhuS5piovCi0gICAgREVMRVRFX1BPU0lUSU9OX1RJTUUgPSAzLCAvKuWIoOmZpOaXtumXtOWSjOS9jee9ruS/oeaBry4gKi8KLSAgICBERUxFVEVfVVRDID0gNCwgLyrliKDpmaQgVVRDIOaXtumXtCovCi0gICAgREVMRVRFX0FMTCA9IDUgLyrliKDpmaTmiYDmnIkqLwotfSBERUxFVEVfQUlESU5HX0RBVEFfVFlQRV9UOwotCi1pbnQgcXNlcl9HbnNzX0luaXQgKHVpbnQzMl90ICpoX2duc3MpOwotCi1pbnQgcXNlcl9HbnNzX0RlaW5pdCAodWludDMyX3QgaF9nbnNzKTsKLQotaW50IHFzZXJfQWRkUnhJbmRNc2dIYW5kbGVyIChnbnNzX2hhbmRsZXJfZnVuY190IGhhbmRsZXJfcHRyLHVpbnQzMl90IGhfZ25zcyk7Ci0KLWludCBxc2VyX1NldF9JbmRpY2F0aW9ucyAodWludDMyX3QgaF9nbnNzLGVfbXNnX2lkX3QgdHlwZSk7Ci0KLWludCBxc2VyX0duc3NfU3RhcnQgKHVpbnQzMl90IGhfZ25zcyk7Ci0KLWludCBxc2VyX0duc3NfU3RvcCAodWludDMyX3QgaF9nbnNzKTsKLQotaW50IHFzZXJfR25zc19JbmplY3RUaW1lICh1aW50MzJfdCBoX2duc3MsTFlOUV9JTkpFQ1RfVElNRV9JTlRPX1QgKnRpbWVfaW5mbyk7Ci0KLWludCBxc2VyX0duc3NfRGVsZXRlX0FpZGluZ19EYXRhICh1aW50MzJfdCBoX2duc3MsREVMRVRFX0FJRElOR19EQVRBX1RZUEVfVCBmbGFncyk7Ci0KLWludCBxc2VyX0duc3NfZG93bmxvYWRfdGxlKCk7Ci0KLWludCBxc2VyX0duc3NfaW5qZWN0RXBoZW1lcmlzKHVpbnQzMl90IGhfZ25zcyk7Ci0KLSNlbmRpZiAvKiBfUVNFUl9HTlNTX0ggKi8KZGlmZiAtLWdpdCBhL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfbG9nLmggYi9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX2xvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNzc3MzZlLi4wMDAwMDAwCi0tLSBhL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfbG9nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotKiBxc2VyX2xvZy5oCi0qCi0qIFFTRVIgTG9nIEhlYWRlciBGaWxlLgotKgotKiBBdXRob3IgOiBsYgotKiBEYXRlICAgOiAyMDIzLzExLzIzIDExOjQzOjIxCi0qLwotI2lmbmRlZiBfUVNFUl9MT0dfSAotI2RlZmluZSBfUVNFUl9MT0dfSAotI2luY2x1ZGUgIm1idGtfdHlwZS5oIgotCi10eXBlZGVmIGVudW0KLXsKLSAgICBMT0dfVkVSQk9TRSA9IDAsCi0gICAgTE9HX0VSUk9SLAotICAgIExPR19XQVJOSU5HLAotICAgIExPR19JTkZPLAotICAgIExPR19ERUJVRywKLSAgICBMT0dfTEVWRUxfTUFYCi19IGxvZ19sZXZlbF9lbnVtOwotCi12b2lkIGx5bnFfbG9nX2NvbmZpZ3VyYXRpb25faW5pdChjb25zdCBjaGFyICpsb2dfbmFtZSk7Ci0KLXZvaWQgbHlucV9sb2dfZ2xvYmFsX291dHB1dChsb2dfbGV2ZWxfZW51bSBMZXZlbCxjb25zdCBjaGFyICpmb3JtYXQsLi4uKTsKLQotaW50IGx5bnFfc3lzbG9nX3NldF9maWxlX3NpemUoaW50IHZhbHVlKTsKLQotaW50IGx5bnFfc3lzbG9nX2dldF9maWxlX3NpemUodm9pZCk7Ci0KLWludCBseW5xX3N5c2xvZ19zZXRfZmlsZV9yb3RhdGUoaW50IHZhbHVlKTsKLQotaW50IGx5bnFfc3lzbG9nX2dldF9maWxlX3JvdGF0ZSh2b2lkKTsKLQotaW50IGx5bnFfc2V0X2xvZ19sZXZlbChjb25zdCBjaGFyICogbW9kdWxlX25hbWUsIGxvZ19sZXZlbF9lbnVtIGxldmVsKTsKLQotaW50IGx5bnFfZ2V0X2xvZ19sZXZlbChjb25zdCBjaGFyICogbW9kdWxlX25hbWUsIGxvZ19sZXZlbF9lbnVtICpsZXZlbCk7Ci0KLWludCBseW5xX3NldF9zcGVjaWFsX2xvZ19sZXZlbChjb25zdCBjaGFyICogZXhlX25hbWUsIGNvbnN0IGNoYXIgKiBtb2R1bGVfbmFtZSwgbG9nX2xldmVsX2VudW0gbGV2ZWwpOwotCi1pbnQgbHlucV9nZXRfc3BlY2lhbF9sb2dfbGV2ZWwoY29uc3QgY2hhciAqIGV4ZV9uYW1lLCBjb25zdCBjaGFyICogbW9kdWxlX25hbWUsIGxvZ19sZXZlbF9lbnVtICpsZXZlbCk7Ci0KLWludCBseW5xX25vdGlmeV9yZWNhbGNfbG9nX2xldmVsKHBpZF90IHBpZCk7Ci0KLXZvaWQgbHlucV9sb2dfZGVidWcoY29uc3QgY2hhciAqZm9ybWF0LC4uLik7Ci0KLXZvaWQgbHlucV9sb2dfaW5mbyhjb25zdCBjaGFyICpmb3JtYXQsLi4uKTsKLQotdm9pZCBseW5xX2xvZ193YXJuaW5nKGNvbnN0IGNoYXIgKmZvcm1hdCwuLi4pOwotCi12b2lkIGx5bnFfbG9nX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwuLi4pOwotCi12b2lkIGx5bnFfbG9nX3ZlcmJvc2UoY29uc3QgY2hhciAqZm9ybWF0LC4uLik7Ci0KLSNlbmRpZiAvKiBfUVNFUl9MT0dfSCAqLwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9uZXRfbGlnaHQuaCBiL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfbmV0X2xpZ2h0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ1ODk2OGQuLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9uZXRfbGlnaHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLS8qCi0qIHFzZXJfbmV0X2xpZ2h0LmgKLSoKLSogUVNFUiBuZXR3b3JrIGxpZ2h0IGNvbnRyb2wgQVBJLgotKgotKiBBdXRob3IgOiBsYgotKiBEYXRlICAgOiAyMDIzLzExLzIzIDEzOjA5OjQ3Ci0qLwotI2lmbmRlZiBfUVNFUl9ORVRfTElHSFRfSAotI2RlZmluZSBfUVNFUl9ORVRfTElHSFRfSAotI2luY2x1ZGUgIm1idGtfdHlwZS5oIgotCi1pbnQgbHlucV9zZXRfbmV0bGVkX29uKGludCBsZWRfbW9kZSk7Ci0KLWludCBseW5xX3NldF9zdGF0dXNsZWRfb24oaW50IGxlZF9tb2RlKTsKLQotI2VuZGlmIC8qIF9RU0VSX05FVF9MSUdIVF9IICovCmRpZmYgLS1naXQgYS9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX25ldHdvcmsuaCBiL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfbmV0d29yay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYmNhYTdhLi4wMDAwMDAwCi0tLSBhL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfbmV0d29yay5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLS8qCi0qIHFzZXJfbmV0d29yay5oCi0qCi0qIFFTRVIgbmV0d29yayBBUEkuCi0qCi0qIEF1dGhvciA6IGxiCi0qIERhdGUgICA6IDIwMjMvMTEvMjMgMTM6NTk6NDQKLSovCi0jaWZuZGVmIF9RU0VSX05FVFdPUktfSAotI2RlZmluZSBfUVNFUl9ORVRXT1JLX0gKLSNpbmNsdWRlICJtYnRrX3R5cGUuaCIKLQotdHlwZWRlZiB1aW50MzJfdCBud19jbGllbnRfaGFuZGxlX3R5cGU7Ci0KLSNkZWZpbmUgUVNFUl9OV19NT0RFX05PTkUgMHgwMCAvKio8IE5vIG5ldHdvcmsuICovCi0jZGVmaW5lIFFTRVJfTldfTU9ERV9HU00gMHgwMSAvKio8IEluY2x1ZGUgR1NNIG5ldHdvcmtzLiAqLwotI2RlZmluZSBRU0VSX05XX01PREVfV0NETUEgMHgwMiAvKio8IEluY2x1ZGUgV0NETUEgbmV0d29ya3MuICovCi0jZGVmaW5lIFFTRVJfTldfTU9ERV9DRE1BIDB4MDQgLyoqPCBJbmNsdWRlIENETUEgbmV0d29ya3MuICovCi0jZGVmaW5lIFFTRVJfTldfTU9ERV9FVkRPIDB4MDggLyoqPCBJbmNsdWRlIEVWRE8gbmV0d29ya3MuICovCi0jZGVmaW5lIFFTRVJfTldfTU9ERV9MVEUgMHgxMCAvKio8IEluY2x1ZGUgTFRFIG5ldHdvcmtzLiAqLwotI2RlZmluZSBRU0VSX05XX01PREVfVERTQ0RNQSAweDIwIC8qKjwgSW5jbHVkZSBURFNDRE1BIG5ldHdvcmtzLiAqLwotI2RlZmluZSBOV19JTkRfVk9JQ0VfUkVHX0VWRU5UX0lORF9GTEFHICgxIDw8IDApIC8qKjwgbXNnIGZvcm1hdCA6IFFTRVJfTldfVk9JQ0VfUkVHX0VWRU5UX0lORF9UICovCi0jZGVmaW5lIE5XX0lORF9EQVRBX1JFR19FVkVOVF9JTkRfRkxBRyAoMSA8PCAxKSAvKio8IG1zZyBmb3JtYXQgOiBRU0VSX05XX0RBVEFfUkVHX0VWRU5UX0lORF9UICovCi0jZGVmaW5lIE5XX0lORF9TSUdOQUxfU1RSRU5HVEhfRVZFTlRfSU5EX0ZMQUcgKDEgPDwgMikgLyoqPCBtc2cgZm9ybWF0IDogUVNFUl9OV19TSU5HTkFMX0VWRU5UX0lORF9UICovCi0jZGVmaW5lIFFTRVJfTldfT09TX0NGR19UWVBFX0ZBU1RfU0NBTiAweDAwIC8qKjwgZmFzdCBuZXQgc2NhbiAqLwotI2RlZmluZSBRU0VSX05XX09PU19DRkdfVFlQRV9GVUxMX0JBTkRfU0NBTiAweDAxIC8qKjwgZnVsbCBiYW5kIHNjYW4gKi8KLQotCi10eXBlZGVmIGVudW0KLXsKLSAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9PRkYgPSAwLCAvKio8IE5vbmUsIG9yIHJvYW1pbmcgaW5kaWNhdG9yIG9mZi4gKi8KLSAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9PTiA9IDEgLyoqPCBSb2FtaW5nIGluZGljYXRvciBvbi4gKi8KLX0gRV9RU0VSX05XX1JPQU1fU1RBVEVfVFlQRV9UOyAvLyAoTm90IFN1cHBvcnQgTm93KQotCi0vKiogQ29uZmlndXJlcyB0aGUgc2V0dGluZ3MgdGhhdCBkZWZpbmUgdGhlIE1DTSBuZXR3b3JrIGludGVyZmFjZS4gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgLyogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBNQ00gbmV0d29yayByZWdpc3RyYXRpb24gTmV0d29yayByZWdpc3RyYXRpb24gZGV0YWlscyBUZWNobm9sb2d5Ci0gICAgZGVwZW5kZW50IG5ldHdvcmsgcmVnaXN0cmF0aW9uIGRldGFpbHMgKi8KLSAgICB1aW50NjRfdCBwcmVmZXJyZWRfbndfbW9kZTsgLyoqPCBQcmVmZXJyZWQgbmV0d29yayBtb2RlIGZvcgotICAgIGNvbm5lY3Rpb25zOyBhIGJpdG1hc2sgb2YgUVNFUl9OV19NT0RFX3h4eHguKi8KLSAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9UWVBFX1Qgcm9hbWluZ19wcmVmOyAvKio8IFJvYW1pbmcgcHJlZmVyZW5jZS4qLwotfSBRU0VSX05XX0NPTkZJR19JTkZPX1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgY2hhciBsb25nX2VvbnNbNTEyICsgMV07IC8qKjwgTG9uZyBFT05TLiovCi0gICAgY2hhciBzaG9ydF9lb25zWzUxMiArIDFdOyAvKio8IFNob3J0IEVPTlMuKi8KLSAgICBjaGFyIG1jY1szICsgMV07IC8qKjwgTW9iaWxlIGNvdW50cnkgY29kZS4qLwotICAgIGNoYXIgbW5jWzMgKyAxXTsgLyoqPCBNb2JpbGUgbmV0d29yayBjb2RlLiovCi19IFFTRVJfTldfT1BFUkFUT1JfTkFNRV9JTkZPX1Q7Ci0KLXR5cGVkZWYgZW51bQotewotICAgIEVfUVNFUl9OV19URUNIX0RPTUFJTl9OT05FID0gMCwgLyoqPCBOb25lLiAqLwotICAgIEVfUVNFUl9OV19URUNIX0RPTUFJTl8zR1BQID0gMSwgLyoqPCAzR1BQLiAqLwotICAgIEVfUVNFUl9OV19URUNIX0RPTUFJTl8zR1BQMiA9IDIsIC8qKjwgM0dQUDIuICovCi19IEVfUVNFUl9OV19URUNIX0RPTUFJTl9UWVBFX1Q7Ci0KLXR5cGVkZWYgZW51bQotewotICAgIEVfUVNFUl9OV19JTVNJX1VOS05PV05fSExSX0RFTllfUkVBU09OID0gMSwgLyoqPCBJTVNJIHVua25vd24gaW4gSExSLiAqLwotICAgIEVfUVNFUl9OV19JTExFR0FMX01TX0RFTllfUkVBU09OID0gMiwgLyoqPCBJbGxlZ2FsIE1TLiAqLwotICAgIEVfUVNFUl9OV19JTVNJX1VOS05PV05fVkxSX0RFTllfUkVBU09OID0gMywgLyoqPCBJTVNJICAgIHVua25vd24gaW4gVkxSLiAqLwotICAgIEVfUVNFUl9OV19JTUVJX05PVF9BQ0NFUFRFRF9ERU5ZX1JFQVNPTiA9IDQsIC8qKjwgSU1FSSAgICBub3QgYWNjZXB0ZWQuICovCi0gICAgRV9RU0VSX05XX0lMTEVHQUxfTUVfREVOWV9SRUFTT04gPSA1LCAvKio8IElsbGVnYWwgICAgTUUuICovCi0gICAgRV9RU0VSX05XX1BMTU5fTk9UX0FMTE9XRURfREVOWV9SRUFTT04gPSA2LCAvKio8ICAgIFBMTU4gbm90IGFsbG93ZWQuICovCi0gICAgRV9RU0VSX05XX0xBX05PVF9BTExPV0VEX0RFTllfUkVBU09OID0gNywgLyoqPCAgICBMb2NhdGlvbiBhcmVhIG5vdCBhbGxvd2VkLiAqLwotICAgIEVfUVNFUl9OV19ST0FNSU5HX05PVF9BTExPV0VEX0xBX0RFTllfUkVBU09OID0gOCwgLyoqPCAgICBSb2FtaW5nIG5vdCBhbGxvd2VkIGluIHRoaXMgbG9jYXRpb24gYXJlYS4gKi8KLSAgICBFX1FTRVJfTldfTk9fU1VJVEFCTEVfQ0VMTFNfTEFfREVOWV9SRUFTT04gPSA5LCAvKio8IE5vICAgIHN1aXRhYmxlIGNlbGxzIGluIGxvY2F0aW9uIGFyZWEuICovCi0gICAgRV9RU0VSX05XX05FVFdPUktfRkFJTFVSRV9ERU5ZX1JFQVNPTiA9IDEwLCAvKio8ICAgIE5ldHdvcmsgZmFpbHVyZS4gKi8KLSAgICBFX1FTRVJfTldfTUFDX0ZBSUxVUkVfREVOWV9SRUFTT04gPSAxMSwgLyoqPCBNQUMgICAgZmFpbHVyZS4gKi8KLSAgICBFX1FTRVJfTldfU1lOQ0hfRkFJTFVSRV9ERU5ZX1JFQVNPTiA9IDEyLCAvKio8IFN5bmMgICAgZmFpbHVyZS4gKi8KLSAgICBFX1FTRVJfTldfQ09OR0VTVElPTl9ERU5ZX1JFQVNPTiA9IDEzLCAvKio8ICAgIENvbmdlc3Rpb24uICovCi0gICAgRV9RU0VSX05XX0dTTV9BVVRIRU5USUNBVElPTl9VTkFDQ0VQVEFCTEVfREVOWV9SRUFTT04gPSAxNCwgLyoqPCAgICBHU00gYXV0aGVudGljYXRpb24gdW5hY2NlcHRhYmxlLiAqLwotICAgIEVfUVNFUl9OV19OT1RfQVVUSE9SSVpFRF9DU0dfREVOWV9SRUFTT04gPSAxNSwgLyoqPCBOb3QgICAgYXV0aG9yaXplZCBpbiB0aGlzIENTRy4gKi8KLSAgICBFX1FTRVJfTldfU0VSVklDRV9PUFRJT05fTk9UX1NVUFBPUlRFRF9ERU5ZX1JFQVNPTiA9IDE2LCAvKio8ICAgIFNlcnZpY2Ugb3B0aW9uIG5vdCBzdXBwb3J0ZWQuICovCi0gICAgRV9RU0VSX05XX1JFUV9TRVJWSUNFX09QVElPTl9OT1RfU1VCU0NSSUJFRF9ERU5ZX1JFQVNPTiA9IDE3LCAvKio8ICAgIFJlcXVlc3RlZCBzZXJ2aWNlIG9wdGlvbiBub3Qgc3Vic2NyaWJlZC4gKi8KLSAgICBFX1FTRVJfTldfQ0FMTF9DQU5OT1RfQkVfSURFTlRJRklFRF9ERU5ZX1JFQVNPTiA9IDE4LCAvKio8IENhbGwgICAgY2Fubm90IGJlIGlkZW50aWZpZWQuICovCi0gICAgRV9RU0VSX05XX1NFTUFOVElDQUxMWV9JTkNPUlJFQ1RfTVNHX0RFTllfUkVBU09OID0gMTksIC8qKjwgICAgU2VtYW50aWNhbGx5IGluY29ycmVjdCBtZXNzYWdlLiAqLwotICAgIEVfUVNFUl9OV19JTlZBTElEX01BTkRBVE9SWV9JTkZPX0RFTllfUkVBU09OID0gMjAsIC8qKjwgICAgSW52YWxpZCBtYW5kYXRvcnkgaW5mb3JtYXRpb24uICovCi0gICAgRV9RU0VSX05XX01TR19UWVBFX05PTl9FWElTVEVOVF9ERU5ZX1JFQVNPTiA9IDIxLCAvKio8ICAgIE1lc3NhZ2UgdHlwZSBub24tZXhpc3RlbnQgb3Igbm90IGltcGxlbWVudGVkLiAqLwotICAgIEVfUVNFUl9OV19JTkZPX0VMRU1FTlRfTk9OX0VYSVNURU5UX0RFTllfUkVBU09OID0gMjIsIC8qKjwgICAgTWVzc2FnZSB0eXBlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIHN0YXRlLiAqLwotICAgIEVfUVNFUl9OV19DT05ESVRJT05BTF9JRV9FUlJfREVOWV9SRUFTT04gPSAyMywgLyoqPCAgICBDb25kaXRpb25hbCBJRSBlcnJvci4gKi8KLSAgICBFX1FTRVJfTldfTVNHX0lOQ09NUEFUSUJMRV9QUk9UT0NPTF9TVEFURV9ERU5ZX1JFQVNPTiA9IDI0LCAvKio8ICAgIE1lc3NhZ2Ugbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgcHJvdG9jb2wgc3RhdGUuICovCi0gICAgRV9RU0VSX05XX1BST1RPQ09MX0VSUk9SX0RFTllfUkVBU09OID0gMjUsIC8qKjwgICAgVW5zcGVjaWZpZWQgcHJvdG9jb2wgZXJyb3IuICovCi19IEVfUVNFUl9OV19ERU5ZX1JFQVNPTl9UWVBFX1Q7Ci0KLXR5cGVkZWYgZW51bQotewotICAgIEVfUVNFUl9OV19TRVJWSUNFX05PTkUgPSAweDAwMDAsIC8qKjwgTm90IHJlZ2lzdGVyZWQgb3Igbm8gZGF0YS4gKi8KLSAgICBFX1FTRVJfTldfU0VSVklDRV9MSU1JVEVEID0gMHgwMDAxLCAvKio8IFJlZ2lzdGVyZWQ7IGVtZXJnZW5jeSBzZXJ2aWNlIG9ubHkuICovCi0gICAgRV9RU0VSX05XX1NFUlZJQ0VfRlVMTCA9IDB4MDAwMiwgLyoqPCBSZWdpc3RlcmVkLCBmdWxsIHNlcnZpY2UuICovCi19ICAgRV9RU0VSX05XX1NFUlZJQ0VfVFlQRV9UOwotCi10eXBlZGVmIGVudW0KLXsKLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9URF9TQ0RNQSA9IDEsCi0gICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfR1NNID0gMiwgLyoqPCBHU007IG9ubHkgc3VwcG9ydHMgdm9pY2UuICovCi0gICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfSFNQQVAgPSAzLCAvKio8IEhTUEErLiAqLwotICAgIEVfUVNFUl9OV19SQURJT19URUNIX0xURSA9IDQsIC8qKjwgTFRFLiAqLwotICAgIEVfUVNFUl9OV19SQURJT19URUNIX0VIUlBEID0gNSwgLyoqPCBFSFJQRC4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9FVkRPX0IgPSA2LCAvKio8IEVWRE8gQi4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9IU1BBID0gNywgLyoqPCBIU1BBLiAqLwotICAgIEVfUVNFUl9OV19SQURJT19URUNIX0hTVVBBID0gOCwgLyoqPCBIU1VQQS4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9IU0RQQSA9IDksIC8qKjwgSFNEUEEuICovCi0gICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfRVZET19BID0gMTAsIC8qKjwgRVZETyBBLiAqLwotICAgIEVfUVNFUl9OV19SQURJT19URUNIX0VWRE9fMCA9IDExLCAvKio8IEVWRE8gMC4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF8xeFJUVCA9IDEyLCAvKio8IDF4UlRULiAqLwotICAgIEVfUVNFUl9OV19SQURJT19URUNIX0lTOTVCID0gMTMsIC8qKjwgSVM5NUIuICovCi0gICAgRV9RU0VSX05XX1JBRElPX1RFQ0hfSVM5NUEgPSAxNCwgLyoqPCBJUzk1QS4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9VTVRTID0gMTUsIC8qKjwgVU1UUy4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9FREdFID0gMTYsIC8qKjwgRURHRS4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9HUFJTID0gMTcsIC8qKjwgR1BSUy4gKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9OT05FID0gMTggLyoqPCBObyB0ZWNobm9sb2d5IHNlbGVjdGVkLiAqLwotfSBFX1FTRVJfTldfUkFESU9fVEVDSF9UWVBFX1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgRV9RU0VSX05XX1RFQ0hfRE9NQUlOX1RZUEVfVCB0ZWNoX2RvbWFpbjsgLyoqPCBUZWNobm9sb2d5LCB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIHR5cGUgdGVjaDogMCAtLSBOb25lLCAxIC0tIDNHUFAsIDIgLS0gM0dQUDIuKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9UWVBFX1QgcmFkaW9fdGVjaDsgLyoqPCBSYWRpbyB0ZWNobm9sb2d5OyBzZWUgI253X3JhZGlvX3RlY2hfdF92MDEuKi8KLSAgICBFX1FTRVJfTldfUk9BTV9TVEFURV9UWVBFX1Qgcm9hbWluZzsgLyoqPCAwIC0tIE9mZiwgMSAtLSBSb2FtaW5nICgzR1BQMiBoYXMgZXh0ZW5kZWQgdmFsdWVzKS4qLwotICAgIEVfUVNFUl9OV19ERU5ZX1JFQVNPTl9UWVBFX1QgZGVueV9yZWFzb247IC8qKjwgU2V0IHdoZW4gcmVnaXN0cmF0aW9uICAgIHN0YXRlIGlzICNud19kZW55X3JlYXNvbl90X3YwMS4qLwotICAgIEVfUVNFUl9OV19TRVJWSUNFX1RZUEVfVCByZWdpc3RyYXRpb25fc3RhdGU7IC8qKjwgUmVnaXN0cmF0aW9uIHN0YXRlLiovCi19UVNFUl9OV19DT01NT05fUkVHX0lORk9fVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBFX1FTRVJfTldfVEVDSF9ET01BSU5fVFlQRV9UIHRlY2hfZG9tYWluOyAvKio8IFRlY2hub2xvZ3ksIHVzZWQgdG8gICAgZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgdHlwZSB0ZWNoOiAwIC0tIE5vbmUsIDEgLS0gM0dQUCwgMiAtLSAzR1BQMi4qLwotICAgIEVfUVNFUl9OV19SQURJT19URUNIX1RZUEVfVCByYWRpb190ZWNoOyAvKio8IFJhZGlvIHRlY2hub2xvZ3k7IHNlZSNud19yYWRpb190ZWNoX3RfdjAxLiovCi0gICAgY2hhciBtY2NbMysxXTsgLyoqPCBNb2JpbGUgY291bnRyeSBjb2RlLiovCi0gICAgY2hhciBtbmNbMysxXTsgLyoqPCBNb2JpbGUgbmV0d29yayBjb2RlLiovCi0gICAgRV9RU0VSX05XX1JPQU1fU1RBVEVfVFlQRV9UIHJvYW1pbmc7IC8qKjwgMCAtLSBPZmYsIDEgLS0gUm9hbWluZyAgICAoM0dQUDIgaGFzIGV4dGVuZGVkIHZhbHVlcykuKi8KLSAgICB1aW50OF90IGZvcmJpZGRlbjsgLyoqPCBGb3JiaWRkZW46IDAgLS0gTm8sIDEgLS0gWWVzLiovCi0gICAgdWludDMyX3QgY2lkOyAvKio8IENlbGwgSUQgZm9yIHRoZSByZWdpc3RlcmVkIDNHUFAgICAgc3lzdGVtLiovCi0gICAgdWludDE2X3QgbGFjOyAvKio8IExvY2F0aW4gYXJlYSBjb2RlIGZvciB0aGUgICAgcmVnaXN0ZXJlZCAzR1BQIHN5c3RlbS4qLwotICAgIHVpbnQxNl90IHBzYzsgLyoqPCBQcmltYXJ5IHNjcmFtYmxpbmcgY29kZSAgICAoV0NETUEgb25seSk7IDAgLS0gTm9uZS4qLwotICAgIHVpbnQxNl90IHRhYzsgLyoqPCBUcmFja2luZyBhcmVhIGNvZGUgaW5mb3JtYXRpb24gICAgZm9yIExURS4qLwotfVFTRVJfTldfM0dQUF9SRUdfSU5GT19UOwotCi10eXBlZGVmIHN0cnVjdAotewotICAgIEVfUVNFUl9OV19URUNIX0RPTUFJTl9UWVBFX1QgdGVjaF9kb21haW47IC8qKjwgVGVjaG5vbG9neSwgdXNlZCB0byAgICBkZXRlcm1pbmUgc3RydWN0dXJlIHR5cGUgdGVjaDogMCAtLSBOb25lLCAxIC0tIDNHUFAsIDIgLS0gM0dQUDIuKi8KLSAgICBFX1FTRVJfTldfUkFESU9fVEVDSF9UWVBFX1QgcmFkaW9fdGVjaDsgLyoqPCBSYWRpbyB0ZWNobm9sb2d5OyBzZWUjbndfcmFkaW9fdGVjaF90X3YwMS4qLwotICAgIGNoYXIgbWNjWzMrMV07IC8qKjwgTW9iaWxlIGNvdW50cnkgY29kZS4qLwotICAgIGNoYXIgbW5jWzMrMV07IC8qKjwgTW9iaWxlIG5ldHdvcmsgY29kZS4qLwotICAgIEVfUVNFUl9OV19ST0FNX1NUQVRFX1RZUEVfVCByb2FtaW5nOyAvKio8IFJvYW1pbmcgc3RhdHVzOyBzZWUjbndfcm9hbV9zdGF0ZV90X3YwMS4qLwotICAgIHVpbnQ4X3QgZm9yYmlkZGVuOyAvKio8IEZvcmJpZGRlbjogMCAtLSBObywgMSAtLSBZZXMuKi8KLSAgICB1aW50OF90IGluUFJMOyAvKio8IDAgLS0gTm90IGluIFBSTCwgMSAtLSBJbiBQUkwuKi8KLSAgICB1aW50OF90IGNzczsgLyoqPCBDb25jdXJyZW50IHNlcnZpY2VzIHN1cHBvcnRlZDogMCAgICAtLSBObywgMSAtLSBZZXMuKi8KLSAgICB1aW50MTZfdCBzaWQ7IC8qKjwgQ0RNQSBzeXN0ZW0gSUQuKi8KLSAgICB1aW50MTZfdCBuaWQ7IC8qKjwgQ0RNQSBuZXR3b3JrIElELiovCi0gICAgdWludDE2X3QgYnNpZDsgLyoqPCBCYXNlIHN0YXRpb24gSUQuIEBuZXdwYWdldGFibGUgICAgKi8KLX1RU0VSX05XXzNHUFAyX1JFR19JTkZPX1Q7Ci0KLS8qKiBHZXRzIHRoZSBzdGF0dXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25uZWN0aW9uIG9mIFw8aWRcPi4gKi8KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgdWludDhfdCB2b2ljZV9yZWdpc3RyYXRpb25fdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gICAgVFJVRSBpZiB2b2ljZV9yZWdpc3RyYXRpb24gaXMgYmVpbmcgcGFzc2VkLiAqLwotICAgIFFTRVJfTldfQ09NTU9OX1JFR19JTkZPX1Qgdm9pY2VfcmVnaXN0cmF0aW9uOyAvKio8ICAgIFZvaWNlIHJlZ2lzdHJhdGlvbi4gKi8KLSAgICB1aW50OF90IGRhdGFfcmVnaXN0cmF0aW9uX3ZhbGlkOyAvKio8IE11c3QgYmUgc2V0IHRvICAgIFRSVUUgaWYgZGF0YV9yZWdpc3RyYXRpb24gaXMgYmVpbmcgcGFzc2VkLiAqLwotICAgIFFTRVJfTldfQ09NTU9OX1JFR19JTkZPX1QgZGF0YV9yZWdpc3RyYXRpb247IC8qKjwgICAgRGF0YSByZWdpc3RyYXRpb24uICovCi0gICAgdWludDhfdCB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwX3ZhbGlkOyAvKio8IE11c3QgYmUgc2V0IHRvICAgIFRSVUUgaWYgdm9pY2VfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcCBpcyBiZWluZyBwYXNzZWQuICovCi0gICAgUVNFUl9OV18zR1BQX1JFR19JTkZPX1Qgdm9pY2VfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcDsgLyoqPCBWb2ljZSAgICByZWdpc3RyYXRpb24gZGV0YWlscyBmb3IgM0dQUC4gKi8oTm90IFN1cHBvcnQgTm93KQotICAgIHVpbnQ4X3QgZGF0YV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwX3ZhbGlkOyAvKio8IE11c3QgYmUgc2V0IHRvICAgIFRSVUUgaWYgZGF0YV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwIGlzIGJlaW5nIHBhc3NlZC4gKi8KLSAgICBRU0VSX05XXzNHUFBfUkVHX0lORk9fVCBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHA7IC8qKjwgRGF0YSAgICByZWdpc3RyYXRpb24gZGV0YWlscyBmb3IgM0dQUC4gKi8oTm90IFN1cHBvcnQgTm93KQotICAgIHVpbnQ4X3Qgdm9pY2VfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcDJfdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gICAgVFJVRSBpZiB2b2ljZV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwMiBpcyBiZWluZyBwYXNzZWQuICovCi0gICAgUVNFUl9OV18zR1BQMl9SRUdfSU5GT19UIHZvaWNlX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyOyAvKio8IFZvaWNlICAgIHJlZ2lzdHJhdGlvbiBkZXRhaWxzIGZvciAzR1BQMi4gKi8oTm90IFN1cHBvcnQgTm93KQotICAgIHVpbnQ4X3QgZGF0YV9yZWdpc3RyYXRpb25fZGV0YWlsc18zZ3BwMl92YWxpZDsgLyoqPCBNdXN0IGJlIHNldCB0byAgICBUUlVFIGlmIGRhdGFfcmVnaXN0cmF0aW9uX2RldGFpbHNfM2dwcDIgaXMgYmVpbmcgcGFzc2VkLiAqLwotICAgIFFTRVJfTldfM0dQUDJfUkVHX0lORk9fVCBkYXRhX3JlZ2lzdHJhdGlvbl9kZXRhaWxzXzNncHAyOyAvKio8IERhdGEgICAgcmVnaXN0cmF0aW9uIGRldGFpbHMgZm9yIDNHUFAyLiAqLyhOb3QgU3VwcG9ydCBOb3cpCi19UVNFUl9OV19SRUdfU1RBVFVTX0lORk9fVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQ4X3QgcnNzaTsgLyoqPCBSU1NJIGluIGRCbS4gSW5kaWNhdGVzIHJlY2VpdmVkIHNpZ25hbCBzdHJlbmd0aC4gQSBzaWduZWQgdmFsdWU7LTEyNSBvciBsb3dlciBpbmRpY2F0ZXMgbm8gc2lnbmFsLiovCi19UVNFUl9OV19HU01fU0lHTkFMX0lORk9fVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQ4X3QgcnNzaTsgLyoqPCBSU1NJIGluIGRCbS4gSW5kaWNhdGVzIGZvcndhcmQgbGluayBwaWxvdCBFYy4gQSBzaWduZWQgdmFsdWU7IC0xMjUgb3IgbG93ZXIgaW5kaWNhdGVzIG5vIHNpZ25hbC4qLwotICAgIGludDE2X3QgZWNpbzsgLyoqPCBFYy9JbyB2YWx1ZSByZXByZXNlbnRpbmcgbmVnYXRpdmUgMC41IGRCIGluY3JlbWVudHMsIGUuZy4sIDIgZXF1YWxzIC0xIGRibS4qLwotfVFTRVJfTldfV0NETUFfU0lHTkFMX0lORk9fVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQ4X3QgcnNzaTsgLyoqPCBSU1NJIGluIGRCbS4gSW5kaWNhdGVzIGZvcndhcmQgbGluayBwaWxvdCBFYy4gYSBzaWduZWQgdmFsdWU7IC0xMjUgb3IgbG93ZXIgaW5kaWNhdGVzIG5vIHNpZ25hbC4qLwotICAgIGludDhfdCByc2NwOyAvKio8IFJTQ1AgaW4gZEJtLiovCi0gICAgaW50MTZfdCBlY2lvOyAvKio8IEVjL0lvIHZhbHVlIHJlcHJlc2VudGluZyBuZWdhdGl2ZSAwLjUgZEIgaW5jcmVtZW50cywgZS5nLiwgMiBlcXVhbHMgLTEgZGJtLiovCi0gICAgaW50OF90IHNpbnI7IC8qKjwgTWVhc3VyZWQgU0lOUiBpbiBkQi4gQG5ld3BhZ2V0YWJsZSAqLwotfVFTRVJfTldfVERTQ0RNQV9TSUdOQUxfSU5GT19UOwotCi10eXBlZGVmIHN0cnVjdAotewotICAgIGludDhfdCByc3NpOyAvKio8IFJTU0kgaW4gZEJtLiBJbmRpY2F0ZXMgZm9yd2FyZCBsaW5rIHBpbG90IEVjLiBBIHNpZ25lZCB2YWx1ZTsgLTEyNSBvciBsb3dlciBpbmRpY2F0ZXMgbm8gc2lnbmFsLiovCi0gICAgaW50OF90IHJzcnE7IC8qKjwgUlNSUSB2YWx1ZSBpbiBkQiAoc2lnbmVkIGludGVnZXIgdmFsdWUpLCBhcyBtZWFzdXJlZCBieSBMMS5SYW5nZTogLTMgdG8gLTIwICgtMyBlcXVhbHMgLTMgZEIsIC0yMCBlcXVhbHMgLTIwIGRCKS4qLwotICAgIGludDE2X3QgcnNycDsgLyoqPCBDdXJyZW50IFJTUlAgaW4gZEJtLCBhcyBtZWFzdXJlZCBieSBMMS4gUmFuZ2U6IC00NCB0byAtMTQwICgtNDQgZXF1YWxzIC00NCBkQm0sIC0xNDAgZXF1YWxzIC0xNDAgZEJtKS4qLwotICAgIGludDE2X3Qgc25yOyAvKio8IFNOUiBsZXZlbCBhcyBhIHNjYWxlZCBpbnRlZ2VyIGluIHVuaXRzIG9mIDAuMSBkQjsgZS5nLiwgLTE2IGRCIGhhcyBhIHZhbHVlIG9mIC0xNjAgYW5kIDI0LjYgZEIgaGFzIGEgdmFsdWUgb2YgMjQ2LiovCi19UVNFUl9OV19MVEVfU0lHTkFMX0lORk9fVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQ4X3QgcnNzaTsgLyoqPCBSU1NJIGluIGRCbS4gSW5kaWNhdGVzIGZvcndhcmQgbGluayBwaWxvdCBQb3dlciAoQUdDKSArIEVjL0lvLiBBIHNpZ25lZCB2YWx1ZTsgLTEyNSBvciBsb3dlciBpbmRpY2F0ZXMgbm8gc2lnbmFsLiovCi0gICAgaW50MTZfdCBlY2lvOyAvKio8IEVjL0lvIHZhbHVlIHJlcHJlc2VudGluZyBuZWdhdGl2ZSAwLjUgZEIgaW5jcmVtZW50cywgZS5nLiwgMiBlcXVhbHMgLTEgZGJtLiovCi19UVNFUl9OV19DRE1BX1NJR05BTF9JTkZPX1Q7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgaW50OF90IHJzc2k7IC8qKjwgUlNTSSBpbiBkQm0uIEluZGljYXRlcyBmb3J3YXJkIGxpbmsgcGlsb3QgUG93ZXIgKEFHQykgKyBFYy9Jby4gQSBzaWduZWQgdmFsdWU7IC0xMjUgb3IgbG93ZXIgaW5kaWNhdGVzIG5vIHNpZ25hbC4qLwotICAgIGludDE2X3QgZWNpbzsgLyoqPCBFYy9JbyB2YWx1ZSByZXByZXNlbnRpbmcgbmVnYXRpdmUgMC41IGRCIGluY3JlbWVudHMsIGUuZy4sIDIgZXF1YWxzIC0xIGRibS4qLwotICAgIGludDhfdCBzaW5yOyAvKio8IFNJTlIgbGV2ZWwuKi8KLSAgICBpbnQzMl90IGlvOyAvKio8IFJlY2VpdmVkIElPIGluIGRCbS4gKi8KLX1RU0VSX05XX0hEUl9TSUdOQUxfSU5GT19UOwotCi10eXBlZGVmIHN0cnVjdAotewotICAgIGludDE2X3Qgc3NSc3JwOyAvKiBTUyhTeW5jaHJvbml6YXRpb24gU2lnbmFsKSByZWZlcmVuY2Ugc2lnbmFsIHJlY2VpdmVkIHBvd2VyLCBtdWx0aXBsZWQgYnkgLTEuICogUmVmZXJlbmNlOiAzR1BQIFRTIDM4LjIxNS4gKiBSYW5nZSBbNDQsIDE0MF0sIElOVF9NQVggbWVhbnMgaW52YWxpZC91bnJlcG9ydGVkLiovCi0gICAgaW50MTZfdCBzc1JzcnE7IC8qIFNTIHJlZmVyZW5jZSBzaWduYWwgcmVjZWl2ZWQgcXVhbGl0eSwgbXVsdGlwbGVkIGJ5IC0xLiAqIFJlZmVyZW5jZTogM0dQUCBUUyAzOC4yMTUuICogUmFuZ2UgWzMsIDIwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8KLSAgICBpbnQxNl90IHNzU2lucjsgLyogU1Mgc2lnbmFsLXRvLW5vaXNlIGFuZCBpbnRlcmZlcmVuY2UgcmF0aW8uICogUmVmZXJlbmNlOiAzR1BQIFRTIDM4LjIxNSBzZWN0aW9uIDUuMS4qLCAzR1BQIFRTIDM4LjEzMyBzZWN0aW9uIDEwLjEuMTYuMS4gKiBSYW5nZSBbLTIzLCA0MF0sIElOVF9NQVggbWVhbnMgaW52YWxpZC91bnJlcG9ydGVkLiovCi0gICAgaW50MTZfdCBjc2lSc3JwOyAvKiBDU0kgcmVmZXJlbmNlIHNpZ25hbCByZWNlaXZlZCBwb3dlciwgbXVsdGlwbGVkIGJ5IC0xLiAqIFJlZmVyZW5jZTogM0dQUCBUUyAzOC4yMTUuICogUmFuZ2UgWzQ0LCAxNDBdLCBJTlRfTUFYIG1lYW5zIGludmFsaWQvdW5yZXBvcnRlZC4qLwotICAgIGludDE2X3QgY3NpUnNycTsgLyogQ1NJIHJlZmVyZW5jZSBzaWduYWwgcmVjZWl2ZWQgcXVhbGl0eSwgbXVsdGlwbGVkIGJ5IC0xLiAqIFJlZmVyZW5jZTogM0dQUCBUUyAzOC4yMTUuICogUmFuZ2UgWzMsIDIwXSwgSU5UX01BWCBtZWFucyBpbnZhbGlkL3VucmVwb3J0ZWQuKi8KLSAgICBpbnQxNl90IGNzaVNpbnI7IC8qIENTSSBzaWduYWwtdG8tbm9pc2UgYW5kIGludGVyZmVyZW5jZSByYXRpby4gKiBSZWZlcmVuY2U6IDNHUFAgVFMgMTM4LjIxNSBzZWN0aW9uIDUuMS4qLCAzR1BQIFRTIDM4LjEzMyBzZWN0aW9uIDEwLjEuMTYuMS4gKiBSYW5nZSBbLTIzLCA0MF0sIElOVF9NQVggbWVhbnMgaW52YWxpZC91bnJlcG9ydGVkLiovCi19UVNFUl9OV19OUl9TSUdOQUxfSU5GT19UOwotCi0vKiogR2V0cyBzaWduYWwgc3RyZW5ndGggaW5mb3JtYXRpb24uICovCi10eXBlZGVmIHN0cnVjdAotewotICAgIHVpbnQ4X3QgZ3NtX3NpZ19pbmZvX3ZhbGlkOyAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgICAgZ3NtX3NpZ19pbmZvIGlzIGJlaW5nIHBhc3NlZC4gKi8KLSAgICBRU0VSX05XX0dTTV9TSUdOQUxfSU5GT19UIGdzbV9zaWdfaW5mbzsgLyoqPCBHU00gc2lnbmFsICAgIGluZm9ybWF0aW9uLiAqLwotICAgIHVpbnQ4X3Qgd2NkbWFfc2lnX2luZm9fdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiAgICB3Y2RtYV9zaWdfaW5mbyBpcyBiZWluZyBwYXNzZWQuICovCi0gICAgUVNFUl9OV19XQ0RNQV9TSUdOQUxfSU5GT19UIHdjZG1hX3NpZ19pbmZvOyAvKio8IFdDRE1BICAgIHNpZ25hbCBpbmZvcm1hdGlvbi4gKi8KLSAgICB1aW50OF90IHRkc2NkbWFfc2lnX2luZm9fdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiAgICB0ZHNjZG1hX3NpZ19pbmZvIGlzIGJlaW5nIHBhc3NlZC4gKi8KLSAgICBRU0VSX05XX1REU0NETUFfU0lHTkFMX0lORk9fVCB0ZHNjZG1hX3NpZ19pbmZvOyAvKio8IFREU0NETUEgICAgc2lnbmFsIGluZm9ybWF0aW9uLiAqLwotICAgIHVpbnQ4X3QgbHRlX3NpZ19pbmZvX3ZhbGlkOyAvKio8IE11c3QgYmUgc2V0IHRvIFRSVUUgaWYgICAgbHRlX3NpZ19pbmZvIGlzIGJlaW5nIHBhc3NlZC4gKi8KLSAgICBRU0VSX05XX0xURV9TSUdOQUxfSU5GT19UIGx0ZV9zaWdfaW5mbzsgLyoqPCBMVEUgc2lnbmFsICAgIGluZm9ybWF0aW9uLiAqLwotICAgIHVpbnQ4X3QgY2RtYV9zaWdfaW5mb192YWxpZDsgLyoqPCBNdXN0IGJlIHNldCB0byBUUlVFIGlmICAgIGNkbWFfc2lnX2luZm8gaXMgYmVpbmcgcGFzc2VkLiAqLwotICAgIFFTRVJfTldfQ0RNQV9TSUdOQUxfSU5GT19UIGNkbWFfc2lnX2luZm87IC8qKjwgQ0RNQSBzaWduYWwgICAgaW5mb3JtYXRpb24uICovCi0gICAgdWludDhfdCBoZHJfc2lnX2luZm9fdmFsaWQ7IC8qKjwgTXVzdCBiZSBzZXQgdG8gVFJVRSBpZiAgICBoZHJfc2lnX2luZm8gaXMgYmVpbmcgcGFzc2VkLiAqLwotICAgIFFTRVJfTldfSERSX1NJR05BTF9JTkZPX1QgaGRyX3NpZ19pbmZvOyAvKio8IEhEUiBzaWduYWwgICAgaW5mb3JtYXRpb24uICovCi0gICAgdWludDhfdCBucl9zaWdfaW5mb192YWxpZDsKLSAgICBRU0VSX05XX05SX1NJR05BTF9JTkZPX1QgbnJfc2lnX2luZm87Ci19UVNFUl9OV19TSUdOQUxfU1RSRU5HVEhfSU5GT19UOwotCi0vKiBAYnJpZGVmIENhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8gUVNFUl9OV19hZGRfcnhfbXNnX2hhbmRsZXIgKiBtYXAgb2YgaW5kX2ZsYWcgYW5kIGluZF9tc2dfYnVmIGFzIGJlbGxvdyA6ICogTldfSU5EX1ZPSUNFX1JFR19FVkVOVF9JTkRfRkxBRyA6IFFTRVJfTldfVk9JQ0VfUkVHX0VWRU5UX0lORF9UCi0qIE5XX0lORF9EQVRBX1JFR19FVkVOVF9JTkRfRkxBRyA6IFFTRVJfTldfREFUQV9SRUdfRVZFTlRfSU5EX1QKLSogTldfSU5EX1NJR05BTF9TVFJFTkdUSF9FVkVOVF9JTkRfRkxBRyA6IFFTRVJfTldfU0lOR05BTF9FVkVOVF9JTkRfVAotKiAqLwotdHlwZWRlZiB2b2lkICgqUVNFUl9OV19SeE1zZ0hhbmRsZXJGdW5jX3QpKAotICAgIG53X2NsaWVudF9oYW5kbGVfdHlwZSBoX253LAotICAgIHVpbnQzMl90IGluZF9mbGFnLAotICAgIHZvaWQgKmluZF9tc2dfYnVmLAotICAgIHVpbnQzMl90IGluZF9tc2dfbGVuLAotICAgIHZvaWQgKmNvbnRleHRQdHIKLSk7Ci0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gICAgLyogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBNQ00gbmV0d29yayBmYXN0IG5ldHdvcmsgc2NhbiB3aGVuIE9PUyAob3V0IG9mIHNlcnZpY2UpKi8KLSAgICBjaGFyIGVuYWJsZTsgLyogMCBvciAxKi8KLSAgICB1aW50MTZfdCB0aW1lX2ludGVydmFsOyAvKnVuaXQgaXMgc2Vjb25kLCB2YWx1ZSByYW5nZTogWzEsNjU1MzVdLCB2YWxpZCB3aGVuIGVuYWJsZSBlcXVhbCAxKi8KLX1RU0VSX05XX09PU19DT05GSUdfRkFTVF9TQ0FOX0lORk9fVDsKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICAvKiBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIE1DTSBuZXR3b3JrIGZ1bGwgYmFuZCBuZXR3b3JrIHNjYW4gd2hlbiBPT1MgKG91dCBvZgotICAgIHNlcnZpY2UpKi8KLSAgICAvKnRfbWluIHRfc3RlcCB0X251bSB0X21heCB1bml0IGlzIHNlY29uZCwgdmFsdWUgcmFuZ2U6IGFsbCBhcmUgemVybyBPUiBhbGwgYXJlIGJldHdlZW5bMSwgNjU1MzVdLCBpZgotICAgIHRfbWluIDwgdF9tYXgsIHRpbWUgaW50ZXJ2YWwgd2lsbCBiZSB0X21heCovCi0gICAgaW50IHRfbWluOwotICAgIGludCB0X3N0ZXA7Ci0gICAgaW50IHRfbnVtOwotICAgIGludCB0X21heDsKLX1RU0VSX05XX09PU19DT05GSUdfRlVMTF9CQU5EX1NDQU5fSU5GT19UOwotCi10eXBlZGVmIHN0cnVjdAotewotICAgIGNoYXIgdHlwZTsgLyoqPCBRU0VSX05XX09PU19DRkdfVFlQRV94eHh4LiovCi0gICAgdW5pb24gewotICAgICAgICBRU0VSX05XX09PU19DT05GSUdfRkFTVF9TQ0FOX0lORk9fVCBmYXN0X2Nhbl9pbmZvOwotICAgICAgICBRU0VSX05XX09PU19DT05GSUdfRlVMTF9CQU5EX1NDQU5fSU5GT19UIGZ1bGxfYmFuZF9zY2FuX2luZm87Ci0gICAgfSB1OwotfVFTRVJfTldfT09TX0NPTkZJR19JTkZPX1Q7Ci0KLWludCBxc2VyX253X2NsaWVudF9pbml0KG53X2NsaWVudF9oYW5kbGVfdHlwZSAqcGhfbncpOwotCi1pbnQgcXNlcl9ud19jbGllbnRfZGVpbml0KG53X2NsaWVudF9oYW5kbGVfdHlwZSBoX253KTsKLQotaW50IHFzZXJfbndfc2V0X2NvbmZpZyhud19jbGllbnRfaGFuZGxlX3R5cGUgaF9udyxRU0VSX05XX0NPTkZJR19JTkZPX1QgKnB0X2luZm8pOwotCi1pbnQgcXNlcl9ud19nZXRfb3BlcmF0b3JfbmFtZShud19jbGllbnRfaGFuZGxlX3R5cGUgaF9udywgUVNFUl9OV19PUEVSQVRPUl9OQU1FX0lORk9fVCAqcHRfaW5mbyk7Ci0KLWludCBxc2VyX253X2dldF9yZWdfc3RhdHVzKG53X2NsaWVudF9oYW5kbGVfdHlwZSBoX253LCBRU0VSX05XX1JFR19TVEFUVVNfSU5GT19UICpwdF9pbmZvKTsKLQotaW50IHFzZXJfbndfZ2V0X3NpZ25hbF9zdHJlbmd0aChud19jbGllbnRfaGFuZGxlX3R5cGUgaF9udyxRU0VSX05XX1NJR05BTF9TVFJFTkdUSF9JTkZPX1QgKnB0X2luZm8pOwotCi1pbnQgcXNlcl9ud19hZGRfcnhfbXNnX2hhbmRsZXIgKG53X2NsaWVudF9oYW5kbGVfdHlwZSBoX253LCBRU0VSX05XX1J4TXNnSGFuZGxlckZ1bmNfdCBoYW5kbGVyUHRyKTsKLQotaW50IHFzZXJfbndfc2V0X29vc19jb25maWcgKG53X2NsaWVudF9oYW5kbGVfdHlwZSBoX253LCBRU0VSX05XX09PU19DT05GSUdfSU5GT19UICpwdF9pbmZvKTsKLQotaW50IHFzZXJfbndfZ2V0X29vc19jb25maWcgKG53X2NsaWVudF9oYW5kbGVfdHlwZSBoX253LCBRU0VSX05XX09PU19DT05GSUdfSU5GT19UICpwdF9pbmZvKTsKLQotI2VuZGlmIC8qIF9RU0VSX05FVFdPUktfSCAqLwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9zaW0uaCBiL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfc2ltLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDhiMTM3ODkuLjAwMDAwMDAKLS0tIGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9zaW0uaAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLQpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9zbGVlcC5oIGIvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl9zbGVlcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4MjBjY2RiLi4wMDAwMDAwCi0tLSBhL21idGsvaW5jbHVkZS9xc2VyL3FzZXJfc2xlZXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0qIHFzZXJfc2xlZXAuaAotKgotKiBRU0VSIGF1dG8gc2xlZXAgQVBJLgotKgotKiBBdXRob3IgOiBsYgotKiBEYXRlICAgOiAyMDIzLzExLzIzIDEzOjE4OjI2Ci0qLwotI2lmbmRlZiBfUVNFUl9TTEVFUF9ICi0jZGVmaW5lIF9RU0VSX1NMRUVQX0gKLSNpbmNsdWRlICJtYnRrX3R5cGUuaCIKLQotaW50IHFzZXJfYXV0b3N1c3BlbmRfZW5hYmxlKGNoYXIgZW5hYmxlKTsKLQotaW50IHFzZXJfd2FrZWxvY2tfY3JlYXRlKGNvbnN0IGNoYXIqIG5hbWUgLCBzaXplX3QgbGVuKTsKLQotaW50IHFzZXJfd2FrZWxvY2tfbG9jayhpbnQgZmQpOwotCi1pbnQgcXNlcl93YWtlbG9ja191bmxvY2soaW50IGZkKTsKLQotaW50IHFzZXJfd2FrZWxvY2tfZGVzdHJveShpbnQgZmQpOwotCi0jZW5kaWYgLyogX1FTRVJfU0xFRVBfSCAqLwpkaWZmIC0tZ2l0IGEvbWJ0ay9pbmNsdWRlL3FzZXIvcXNlcl90aW1lLmggYi9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX3RpbWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjA0MjllOS4uMDAwMDAwMAotLS0gYS9tYnRrL2luY2x1ZGUvcXNlci9xc2VyX3RpbWUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0qIHFzZXJfdGltZS5oCi0qCi0qIFFTRVIgdGltZSBoZWFkZXIgZmlsZS4KLSoKLSogQXV0aG9yIDogbGIKLSogRGF0ZSAgIDogMjAyMy8xMS8yMyAxMzoyNjoxMQotKi8KLSNpZm5kZWYgX1FTRVJfVElNRV9ICi0jZGVmaW5lIF9RU0VSX1RJTUVfSAotI2luY2x1ZGUgIm1idGtfdHlwZS5oIgotCi10eXBlZGVmIHN0cnVjdCB0aW1lX3NvdXJjZV9zdGF0dXMKLXsKLSAgICBpbnQgbnRwOwotICAgIGludCBuaXR6OwotICAgIGludCBnbnNzOwotfSB0aW1lX3NyY19zdGF0dXNfczsKLQotaW50IG50cF9zeW5jX3RpbWUoaW50IGVuYWJsZSk7Ci0KLWludCBtb2RlbV90aW1lX2VuYWJsZShpbnQgZW5hYmxlKTsKLQotaW50IGduc3NfdGltZV9lbmFibGUoaW50IGVuYWJsZSk7Ci0KLWludCB1c2VyX3NldF90aW1lKGNoYXIqIGRhdGUsIGNoYXIqIHRpbWUpOwotCi1pbnQgbHlucV9zeW5jX3RpbWVfZnJvbV9ydGModm9pZCk7Ci0KLWludCBseW5xX2dldF90aW1lX3NyY19zdGF0dXMgKHRpbWVfc3JjX3N0YXR1c19zICogdGltZV9zcmMpOwotCi1pbnQgbHlucV9zZXRfcnRjX3RpbWUodm9pZCk7Ci0KLWludCBseW5xX2dldF9ydGNfdGltZSh1bnNpZ25lZCBsb25nICp1bHNlYyk7Ci0KLSNlbmRpZiAvKiBfUVNFUl9USU1FX0ggKi8K