ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ0aW55YWxzYS9hdWRpb19taXhlcl9jdHJsLmMgYi9hcC9saWIvbGlidGlueWFsc2EvYXVkaW9fbWl4ZXJfY3RybC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4NDQ4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcC9saWIvbGlidGlueWFsc2EvYXVkaW9fbWl4ZXJfY3RybC5jCkBAIC0wLDAgKzEsMTMyNyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbnlhbHNhL2Fzb3VuZGxpYi5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgorI2luY2x1ZGUgPHRpbnlhbHNhL2F1ZGlvX21peGVyX2N0cmwuaD4KKworI2RlZmluZSBBUlJBWV9TSVpFKGEpIChzaXplb2YgKGEpIC8gc2l6ZW9mICgoYSlbMF0pKQorCitzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHsKKwljb25zdCBjaGFyICpjb250cm9sOworCWNoYXIgKnZhbHVlc1syXTsKK307CisKKworI2lmIGRlZmluZWQgX1VTRV9DT0RFQ19USTMxMDAKKworCitlbnVtIHRfb3V0cHV0X3ZvbCB7CisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzYzXzVEQiA9IDAsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzYzREIgPSAxLAorICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yN0RCID0gNzMsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzI0REIgPSA3OSwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjFEQiA9IDg1LAorICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18xOERCID0gOTEsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzE1REIgPSA5NywKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTJEQiA9IDEwMywKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfOURCID0gMTA5LAorICAgIFRfT1VUUFVUX1ZPTF9NSU5VU182REIgPSAxMTUsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzNEQiA9IDEyMSwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMkRCID0gMTIzLAorICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18xREIgPSAxMjUsCisgICAgVF9PVVRQVVRfVk9MXzBEQiA9IDEyNywKKyAgICBUX09VVFBVVF9WT0xfMURCID0gMTI5LAorICAgIFRfT1VUUFVUX1ZPTF8yREIgPSAxMzEsCisgICAgVF9PVVRQVVRfVk9MXzNEQiA9IDEzMywKKyAgICBUX09VVFBVVF9WT0xfNkRCID0gMTM5LAorICAgIFRfT1VUUFVUX1ZPTF85REIgPSAxNDUsCisgICAgVF9PVVRQVVRfVk9MXzEyREIgPSAxNTEsCisgICAgVF9PVVRQVVRfVk9MXzI0REIgPSAxNzUsCit9OworCitlbnVtIHRfaW5wdXRfdm9sIHsKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18xMkRCID0gMCwKKwlUX0lOUFVUX1ZPTF9NSU5VU183REIgPSAxMCwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU182REIgPSAxMiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU181REIgPSAxNCwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU180REIgPSAxNiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18zREIgPSAxOCwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18yREIgPSAyMCwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18xREIgPSAyMiwKKyAgICBUX0lOUFVUX1ZPTF8wREIgPSAyNCwKKyAgICBUX0lOUFVUX1ZPTF8xREIgPSAyNiwKKyAgICBUX0lOUFVUX1ZPTF8yREIgPSAyOCwKKyAgICBUX0lOUFVUX1ZPTF8zREIgPSAzMCwKKyAgICBUX0lOUFVUX1ZPTF8yMERCID0gNjQsCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy+/qrv6s/XKvLuvtffTwworCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiNDAifX0sCisJeyJBREMgTXV0ZSIsIHsiMCJ9fSwKKwl7IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjcifX0sCisJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCisJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCisJeyJIUCBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjciLCAiMTI3In19LAorCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgorfTsKKworI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfRldQCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31gorCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjcifX0sCisJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCisJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCisJeyJIUCBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjciLCAiMTI3In19LAorCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgorfTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31gorCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiMTIifX0sCisJeyJBREMgTXV0ZSIsIHsiMCJ9fSwKKwl7IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKKwl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAorCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjEifX0sCisJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCisJeyJIUCBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIwIiwgIjAifX0sCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2lNwa8rks/bNqLXACisJeyJTcGVha2VyIFN3aXRjaCIsIHsiMSJ9fSwKKwl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMiJ9fSwgLy8xOGRCCisJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMCJ9fSwKKwl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKK307CisKK3N0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaTWljMWxwX01pYzFsbcrkyOvNqLXACisJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKK307CisKK3N0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsvL7bU06bT2k1pYzFycMrkyOvNqLXACisJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7Ik9mZiJ9fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKKwl7Ik1pYyBQR0EgQ2FwdHVyZSBWb2x1bWUiLCB7IjEyIn19LAorCS8veyJBREMgTXV0ZSIsIHsiMCJ9fSwKKwkvL3siQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCisJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCisJeyJIUCBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjciLCAiMTI3In19LAorCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgkKKwl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAorCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI5IiwgIjEyOSJ9fSwKKwl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAorCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAorCXsiSFAgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiNSIsICI1In19LAorCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIyNCJ9fSwKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXAIE1pYzFycMrkyOvNqLXACisJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwKKwkvL3siQURDIE11dGUiLCB7IjAifX0sCisJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCisJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKKwl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIJCisJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUgIiwgeyIxMjkiLCAiMTI5In19LAorCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjEifX0sCisJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCisJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyI3IiwgIjcifX0sIC8vN2RCCisJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX0sCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHNlbGVjdCIsIHsiaGVhZHNldCJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorfTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACisJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyIxMiJ9fSwKKwkvL3siQURDIE11dGUiLCB7IjAifX0sCisJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjcifX0sCisJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCisJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjQiLCAiMTI0In19LCAvLy0xLjVkQgorCXsiU3BlYWtlciBTd2l0Y2giLCB7IjEifX0sCisJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjAifX0sIC8vMThkQgorCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCisJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjAifX0sCisJeyJNSUMxTE0gUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCXsiTUlDMUxNIE0tVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAorCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsic3BlYWsifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKK307CisKKyNlbHNlIAorc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKKwl7IlNwZWFrZXIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3In19LAorCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAorCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCisJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKKwl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKKwl7Ik1pYyBQR0EgQ2FwdHVyZSBWb2x1bWUiLCB7IjQwIn19LAorCXsiQURDIE11dGUiLCB7IjAifX0sCisJeyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKKworfTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACisJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKKwl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAorCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAorCXsiSFAgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMCIsICIwIn19LAorfTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy+21NOm09pTcGvK5LP2zai1wAorCXsiU3BlYWtlciBTd2l0Y2giLCB7IjEifX0sCisJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjIifX0sIC8vMThkQgorCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCisJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjAifX0sCit9OworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2k1pYzFscF9NaWMxbG3K5Mjrzai1wAorCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCit9OworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly+21NOm09pNaWMxcnDK5Mjrzai1wAorCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACisJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwKKwkvL3siQURDIE11dGUiLCB7IjAifX0sCisJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCisJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKKwl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIJCisJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyOSIsICIxMjkifX0sCisJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMSJ9fSwKKwl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMSJ9fSwKKwl7IkhQIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjciLCAiNyJ9fSwKKwl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisJeyJNSUMxUlAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX0sCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorfTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wCBNaWMxcnDK5Mjrzai1wAorCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiNDAifX0sCisJLy97IkFEQyBNdXRlIiwgeyIwIn19LAorCS8veyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKKwl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAorCXsiREFDIFJpZ2h0IElucHV0IiwgeyJNb25vIn19LAorCXsiT3V0cHV0IFJpZ2h0IEZyb20gUmlnaHQgREFDIiwgeyIxIn19LAorCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKKwl7IkhQIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyIsICIxMjcifX0sCisJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIiwgIjEifX0sIC8vN2RCCQorCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lICIsIHsiMTI5IiwgIjEyOSJ9fSwKKwl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAorCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAorCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiNyIsICI3In19LCAvLzdkQgorCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAorCXsidm9pY2UgcHJvY2Vzc2luZyBzZWxlY3QiLCB7ImhlYWRzZXQifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgLy+21NOm09pTcGvK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAorCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiMjAifX0sCisJLy97IkFEQyBNdXRlIiwgeyIwIn19LAorCS8veyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKKwl7IlNwZWFrZXIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3In19LAorCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAorCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCisJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI0IiwgIjEyNCJ9fSwgLy8tMS41ZEIKKwl7IlNwZWFrZXIgU3dpdGNoIiwgeyIxIn19LAorCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIyIn19LCAvLzE4ZEIKKwl7IkhQIExlZnQgU3dpdGNoIiwgeyIwIn19LAorCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIwIn19LAorCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIyNCJ9fSwKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCit9OworCisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIG91dHB1dF9kYWNfdm9sID0gCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI5IiwiMTI5In19OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbnB1dF9hZGNfdm9sID0geyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBkYWNfbXV0ZSA9IHsiREFDIE11dGUiLCB7IjEiLCAiMSJ9fTsKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGFkY19tdXRlID0geyJBREMgTXV0ZSIsIHsiMSJ9fTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgc3BrX3BhdGhfb25vZmZbXSA9IHsKKwl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAorfTsKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHJjdl9wYXRoX29ub2ZmW10gPSB7CisJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMCJ9fSwKKwl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKK307CitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBlYXJwX3BhdGhfb25vZmZbXSA9IHsKKwl7IkhQIExlZnQgU3dpdGNoIiwgeyIwIn19LAorCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIwIn19LAorfTsKK3N0YXRpYyBpbnQgb3V0cHV0X3ZvbF9jb252ZXJzaW9uKGludCB2b2wpCit7CisJc3dpdGNoKHZvbCl7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMDoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU182M181REI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMToKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18yN0RCOworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzI6CisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMjREQjsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8zOgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzIxREI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNDoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18xOERCOworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzU6CisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQjsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF82OgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzEyREI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNzoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU185REI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfODoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU182REI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfOToKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zREI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMTA6CisJCXJldHVybiBUX09VVFBVVF9WT0xfMERCOworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzExOgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MXzNEQjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MXzBEQjsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaW5wdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKK3sKKwlzd2l0Y2godm9sKSB7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8wOgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfMTJEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzE6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU183REI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8yOgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfNkRCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMzoKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzVEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzQ6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU180REI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF81OgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfM0RCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfNjoKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzJEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzc6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18xREI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF84OgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfMERCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfOToKKwkJcmV0dXJuIFRfSU5QVVRfVk9MXzFEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzEwOgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfMkRCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMTE6CisJCXJldHVybiBUX0lOUFVUX1ZPTF8zREI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFRfSU5QVVRfVk9MXzBEQjsKKwl9Cit9CisKKyAKKyNlbGlmIGRlZmluZWQgX1VTRV9DT0RFQ19FUzgzNzQKKworCitlbnVtIHRfb3V0cHV0X3ZvbCB7CisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzk2REIgPSAwLAorCVRfT1VUUFVUX1ZPTF9NSU5VU185NURCID0gMiwKKwlUX09VVFBVVF9WT0xfTUlOVVNfOTBEQiA9IDEyLAorCVRfT1VUUFVUX1ZPTF9NSU5VU184NURCID0gMjIsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzgwREIgPSAzMiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNzVEQiA9IDQyLAorICAgIFRfT1VUUFVUX1ZPTF9NSU5VU183MERCID0gNTIsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzY1REIgPSA2MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNjBEQiA9IDcyLAorICAgIFRfT1VUUFVUX1ZPTF9NSU5VU181NURCID0gODIsCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzUwREIgPSA5MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNDVEQiA9IDEwMiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNDBEQiA9IDExMiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMzVEQiA9IDEyMiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMzBEQiA9IDEzMiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjVEQiA9IDE0MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjBEQiA9IDE1MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQiA9IDE2MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTBEQiA9IDE3MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfN0RCICA9IDE3OCwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNkRCICA9IDE4MCwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNURCICA9IDE4MiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNERCICA9IDE4NCwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfM0RCICA9IDE4NiwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMkRCICA9IDE4OCwKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMURCICA9IDE5MCwKKyAgICBUX09VVFBVVF9WT0xfMERCICAgICAgICA9IDE5MgorfTsKKworZW51bSB0X2lucHV0X3ZvbCB7CisgICAgVF9JTlBVVF9WT0xfTUlOVVNfOTZEQiA9IDAsCisJVF9JTlBVVF9WT0xfTUlOVVNfOTVEQiA9IDIsCisJVF9JTlBVVF9WT0xfTUlOVVNfOTBEQiA9IDEyLAorCVRfSU5QVVRfVk9MX01JTlVTXzg1REIgPSAyMiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU184MERCID0gMzIsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfNzVEQiA9IDQyLAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzcwREIgPSA1MiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU182NURCID0gNjIsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfNjBEQiA9IDcyLAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzU1REIgPSA4MiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU181MERCID0gOTIsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfNDVEQiA9IDEwMiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU180MERCID0gMTEyLAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzM1REIgPSAxMjIsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfMzBEQiA9IDEzMiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18yNURCID0gMTQyLAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzIwREIgPSAxNTIsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfMTVEQiA9IDE2MiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18xMERCID0gMTcyLAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzdEQiAgPSAxNzgsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfNkRCICA9IDE4MCwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU181REIgID0gMTgyLAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzREQiAgPSAxODQsCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfM0RCICA9IDE4NiwKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18yREIgID0gMTg4LAorICAgIFRfSU5QVVRfVk9MX01JTlVTXzFEQiAgPSAxOTAsCisgICAgVF9JTlBVVF9WT0xfMERCICAgICAgICA9IDE5MgorfTsKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy+/qrv6s/XKvLuvtffTwworCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisJeyJBTEMgTVVYIiwgeyIwIn19LAkKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTUifX0sCisJeyJEQUMgTVVURSIsIHsiMCJ9fSwgIAkgIAorCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTIwIn19LAkKKwl7IkRBQyBTRFAgU1JDIE1VWCIsICB7IjAifX0sICAKKwl7IkRBQyBTUkMgTVVYIiwgIHsiMCJ9fSAKK307CisKKy8vI2lmZGVmICBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX0MzMUYKKyNpZiAoIGRlZmluZWQgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9DMzFGIHx8IGRlZmluZWQgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9XVFdEICkKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKKwl7IkRBQyBNVVRFIiwgeyIwIn19LCAgCSAgCisJLy97IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fSwJCisJeyJEQUMgU0RQIFNSQyBNVVgiLCAgeyIwIn19LCAgCisJeyJEQUMgU1JDIE1VWCIsICB7IjAifX0gCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCisJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCisJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKKwl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCQorCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKyNpZiAwCQorCXsiQUxDIE1VWCIsIHsiMSJ9fSwJCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI1In19LAorCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTEifX0sCisJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyIyIn19LAorCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIwIn19LAorCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisjZW5kaWYKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorfTsKKworI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRAorc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0sIAkKKwl7IlNQRUFLRVIgTUlYRVIgR0FJTiIsIHsiNDEifX0sCQkvLzFkCQorCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyIwIn19LAkvLzFlCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTIifX0sIC8vMzgKK307CisjZWxzZQorc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCisJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAgICAgIAorCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsiaGFuZHNldCJ9fSwKK307CisKKyNlbmRpZgorLyoKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCisJeyJTUEVBS0VSIE1JWEVSIEdBSU4iLCB7IjQifX0sCQkJCisJeyJTUEVBS0VSIE9VVFBVVCBWb2x1bWUiLCB7IjQifX0sCQkKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMSJ9fSAJCit9OworKi8KKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTptPaU3BryuSz9s2otcAKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKKwl7Ik1PTk8gT1VUIEdBSU4iLCB7IjExIn19LCAgICAgIAorCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsic3BlYWsifX0sCit9OworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2kxpbjEtUmluMcrkyOvNqLXACisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAorfTsKKworc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8vttTTptPaTGluMi1SaW4yyuTI682otcAKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjIifX0sCQorfTsKKworI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRAorCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACisJLy97InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhlYWRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LAkvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKwl7IkFMQyBNVVgiLCB7IjAifX0sIAorCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKKwl7IkxJTiBQR0EgR0FJTiIsIHsiNiJ9fSwJCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCisJCQkKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMSJ9fSwgCQorCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyIzMiJ9fSwJLy9vbGQgNDEJCQorCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyIwIn19LAkvLzEKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MiJ9fSwgLy8zOAorfTsKKworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKwl7IkFMQyBNVVgiLCB7IjAifX0sCQorI2lmIDAKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKyNlbmRpZgkKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQorCXsiTU9OTyBPVVQgR0FJTiIsIHsiMTEifX0sIAorICAgIHsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkyIn19LCAKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKK307CisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAgTWljMXJwyuTI682otcAKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQorCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAorCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisjaWYgMAorCXsiQUxDIENhcHR1cmUgVGFyZ2V0IFZvbHVtZSIsIHsiNyJ9fSwKKwl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAorCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKKwl7IkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCisJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKKwl7IkFMQyBXSU4gU0laRSIsIHsiNiJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAorCXsiQUxDIENhcHR1cmUgTkcgU3dpdGNoIiwgeyIwIn19LAorI2VuZGlmCQorCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKKwl7IkxJTiBQR0EgR0FJTiIsIHsiNyJ9fSwJCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCisJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LAorCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LAorCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCXsidm9pY2UgcHJvY2Vzc2luZyBzZWxlY3QiLCB7ImhlYWRzZXQifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKK307CisjaWZkZWYgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9XVFdEIC8vY2xhc3MtZCAtLT5yZWNlaXZlcgorc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKwl7IkFMQyBNVVgiLCB7IjAifX0sCQorI2lmIDAJCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAorCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCisJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAorCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKKwl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAorCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisjZW5kaWYJCisJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAorCXsiTElOIFBHQSBHQUlOIiwgeyI2In19LAkKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCQorCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwgCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxODYifX0sCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorfTsKKyNlbHNlLy9tb21vIG91dCAtPiBzcGVha2VyCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQorCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAorCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisjaWYgMAkKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKyNlbmRpZgkKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LAkJCisJeyJNT05PIE9VVCBHQUlOIiwgeyIwIn19LCAKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE4NiJ9fSwKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCit9OworCisjZW5kaWYKKworCisKKyNlbHNlCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31gorCXsiREFDIE1VVEUiLCB7IjAifX0sICAJICAKKwkvL3siREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTIwIn19LAkKKwl7IkRBQyBTRFAgU1JDIE1VWCIsICB7IjAifX0sICAKKwl7IkRBQyBTUkMgTVVYIiwgIHsiMCJ9fSAKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwJCisJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAorI2lmIDEJCisJeyJBTEMgTVVYIiwgeyIxIn19LAkKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjUifX0sCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMSJ9fSwKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjIifX0sCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIwIn19LAorCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjAifX0sCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKyNlbmRpZgorCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKKwl7IkxJTiBQR0EgR0FJTiIsIHsiMyJ9fSwJCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE4MCJ9fSwJCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKKwl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sICAgICAgCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0KK307CisKKy8qCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2lNwa8rks/bNqLXACisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCQorCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyI0In19LAkJCQorCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyI0In19LAkJCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0gCQorfTsKKyovCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2lNwa8rks/bNqLXACisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCisJeyJNT05PIE9VVCBHQUlOIiwgeyIzIn19LCAgICAgIAorCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19Cit9OworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2kxpbjEtUmluMcrkyOvNqLXACisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAorfTsKKworc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8vttTTptPaTGluMi1SaW4yyuTI682otcAKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjIifX0sCQorfTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAorCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwJCisJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCisJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKKwl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCisJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAorCisJeyJBTEMgTVVYIiwgeyIwIn19LAkKKyNpZiAwCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAorCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCisJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAorCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKKwl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAorCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisjZW5kaWYJCisJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAorCXsiTElOIFBHQSBHQUlOIiwgeyI3In19LAkKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKKwl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sIAorICAgIHsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LCAKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXAIE1pYzFycMrkyOvNqLXACisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKwl7IkFMQyBNVVgiLCB7IjAifX0sCQorI2lmIDAKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKyNlbmRpZgkKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisJeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQorCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MCJ9fSwKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKwl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQorCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAorCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisjaWYgMAkKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKyNlbmRpZgkKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisJeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQorCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LAkJCisJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MCJ9fSwKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCit9OworCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgb3V0cHV0X2RhY192b2wgPSB7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgaW5wdXRfYWRjX3ZvbCA9IHsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX07CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGRhY19tdXRlID0geyJEQUMgTVVURSIsIHsiMSJ9fTsKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGFkY19tdXRlID0geyJBREMgTVVURSIsIHsiMSJ9fTsKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgc3BrX3BhdGhfb25vZmZbXSA9IHsKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHJjdl9wYXRoX29ub2ZmW10gPSB7CisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCit9OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBlYXJwX3BhdGhfb25vZmZbXSA9IHsKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKK307CisKKworc3RhdGljIGludCBvdXRwdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKK3sKKwlzd2l0Y2godm9sKXsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8wOgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzk2REI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMToKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU180NURCOworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzI6CisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfNDBEQjsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8zOgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzM1REI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNDoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zMERCOworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzU6CisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMjVEQjsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF82OgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzIwREI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNzoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18xNURCOworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzg6CisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMTBEQjsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF85OgorCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzZEQjsKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xMDoKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zREI7CisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMTE6CisJCXJldHVybiBUX09VVFBVVF9WT0xfMERCOworCWRlZmF1bHQ6CisJCXJldHVybiBUX09VVFBVVF9WT0xfMERCOworCX0KK30KKworc3RhdGljIGludCBpbnB1dF92b2xfY29udmVyc2lvbihpbnQgdm9sKQoreworCXN3aXRjaCh2b2wpIHsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzA6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU185NkRCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMToKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzMwREI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8yOgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfMjVEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzM6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yMERCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfNDoKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzE1REI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF81OgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfMTBEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzY6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU183REI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF83OgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfNERCOworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfODoKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzNEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzk6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yREI7CisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8xMDoKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzFEQjsKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzExOgorCQlyZXR1cm4gVF9JTlBVVF9WT0xfMERCOworCWRlZmF1bHQ6CisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18zMERCOworCX0KK30KKworI2VuZGlmCisKKy8vc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgbnhwX3ZvaWNlX3ZvbCA9IAl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBWb2x1bWUiLHsiMyJ9fTsgLy8ocmFuZ2UgMC0+NSkKKworc3RhdGljIHZvaWQgbWl4X3NldF92YWx1ZV93cmFwKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGNvbnN0IGNoYXIgKmNvbnRyb2wsIGNoYXIgKip2YWx1ZXMpCit7CisJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCWVudW0gbWl4ZXJfY3RsX3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2N0bF92YWx1ZXM7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoaXNkaWdpdChjb250cm9sWzBdKSkKKwkJY3RsID0gbWl4ZXJfZ2V0X2N0bChtaXhlciwgYXRvaShjb250cm9sKSk7CisJZWxzZQorCQljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIGNvbnRyb2wpOworCisJaWYgKCFjdGwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOworCQlyZXR1cm47CisJfQorCisJdHlwZSA9IG1peGVyX2N0bF9nZXRfdHlwZShjdGwpOworCW51bV9jdGxfdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CisKKwlpZiAoaXNkaWdpdCh2YWx1ZXNbMF1bMF0pKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9jdGxfdmFsdWVzOyBpKyspIHsKKwkJCWlmIChtaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaSwgYXRvaSh2YWx1ZXNbaV0pKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGludmFsaWQgdmFsdWUgZm9yIGluZGV4ICVkXG4iLCBpKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCX0gZWxzZSB7CisJCWlmICh0eXBlID09IE1JWEVSX0NUTF9UWVBFX0VOVU0pIHsKKwkJCS8qaWYgKG51bV92YWx1ZXMgIT0gMSkgeworCQkJICAgIGZwcmludGYoc3RkZXJyLCAiRW5jbG9zZSBzdHJpbmdzIGluIHF1b3RlcyBhbmQgdHJ5IGFnYWluXG4iKTsKKwkJCSAgICByZXR1cm47CisJCQl9Ki8KKwkJCWlmIChtaXhlcl9jdGxfc2V0X2VudW1fYnlfc3RyaW5nKGN0bCwgdmFsdWVzWzBdKSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBpbnZhbGlkIGVudW0gdmFsdWVcbiIpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogb25seSBlbnVtIHR5cGVzIGNhbiBiZSBzZXQgd2l0aCBzdHJpbmdzXG4iKTsKKwkJfQorCX0KK30KKworI2lmZGVmIF9DUEVfQVVESU9fUFJKCitpbnQgbWl4X3NldF9vdXRwdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKK3sKKwkKKwlyZXR1cm4gMDsKK30KKworaW50IG1peF9zZXRfaW5wdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKK3sKKworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X2lucHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQoreworCisKKwlyZXR1cm4gMDsKK30KKworaW50IG1peF9zZXRfb3V0cHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQoreworCisKKwlyZXR1cm4gMDsKK30KKworaW50IG1peF9zZXRfb3V0cHV0X211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCit7CisKKworCXJldHVybiAwOworfQorCitpbnQgbWl4X3NldF9pbnB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQoreworCisJCQorCXJldHVybiAwOworfQorCitpbnQgbWl4X3NldF9vdXRwdXRwYXRoX29ub2ZmKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoICxib29sIG9ub2ZmKQoreworCisJcmV0dXJuIDA7Cit9CisKKworaW50IG1peF9zZXRfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpCit7CisKKworCXJldHVybiAwOworfQorCitpbnQgbWl4X3NldF92b2ljZV9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQoreworCisJCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X3ZvaWNlX3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGgpCit7CisJaW50IGk7CisKKworCXJldHVybiAwOworfQorCisKK2ludCBtaXhfc2V0X2luX2NhbGxfdG9uZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdG9udHlwZSkKK3sKKworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X2RlZmF1bHRfcGFyYW0oc3RydWN0IG1peGVyICptaXhlcikgCit7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitpbnQgbWl4X3NldF9vdXRwdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fb3V0X3BhcmFfYXVkaW8pOyBpKyspIHsKKwkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBjb21tb25fb3V0X3BhcmFfYXVkaW9baV0uY29udHJvbCwgY29tbW9uX291dF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7CisJfQorCXN3aXRjaCAocGF0aCkgeworCWNhc2UgVF9PVVRQVVRfUkVDRUlWRVI6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhwX291dHBhdGhfcGFyYV9hdWRpbyk7IGkrKykgeworCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBocF9vdXRwYXRoX3BhcmFfYXVkaW9baV0uY29udHJvbCwgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUX09VVFBVVF9TUEVBS0VSOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvKTsgaSsrKSB7CisJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9baV0uY29udHJvbCwgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgbWl4X3NldF9pbnB1dF9wYXRoKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9pbl9wYXJhX2F1ZGlvKTsgaSsrKSB7CisJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0uY29udHJvbCwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKwl9CisJc3dpdGNoIChwYXRoKSB7CisJY2FzZSBUX0lOUFVUX01JQ0xQOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpbyk7IGkrKykgeworCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tpXS5jb250cm9sLCBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOworCQl9CisJCWJyZWFrOworCWNhc2UgVF9JTlBVVF9NSUNSUDoKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpbyk7IGkrKykgeworCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW2ldLmNvbnRyb2wsIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG1peF9zZXRfaW5wdXRfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpCit7CisJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCWNoYXIgKm5hbWUgPSBpbnB1dF9hZGNfdm9sLmNvbnRyb2w7CisJaW50IG51bV92YWx1ZXMsIGk7CisJaW50IHZvbCA9IGlucHV0X3ZvbF9jb252ZXJzaW9uKHZvbHVtZSk7CisKKwljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCWlmICghY3RsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworICAgIG51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIHZvbCk7CisgICAgfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X291dHB1dF92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50IHZvbHVtZSkKK3sKKwlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisJY2hhciAqbmFtZSA9IG91dHB1dF9kYWNfdm9sLmNvbnRyb2w7CisJaW50IG51bV92YWx1ZXMsIGk7CisKKwlpbnQgdm9sID0gb3V0cHV0X3ZvbF9jb252ZXJzaW9uKHZvbHVtZSk7CisKKwljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCWlmICghY3RsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIHZvbCk7CisgICAgfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X291dHB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwljaGFyICpuYW1lID0gZGFjX211dGUuY29udHJvbDsgCisJaW50IG51bV92YWx1ZXMsIGk7CisKKwljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCWlmICghY3RsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIGVuYWJsZSk7CisgICAgfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X2lucHV0X211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCWNoYXIgKm5hbWUgPSBhZGNfbXV0ZS5jb250cm9sOworCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisJaW50IG51bV92YWx1ZXMsIGk7CisKKwlpZiAoIWN0bCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZhbHVlczsgaSsrKSB7CisJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCBlbmFibGUpOworICAgIH0KKwkJCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X291dHB1dHBhdGhfb25vZmYoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGggLGJvb2wgb25vZmYpCit7CisJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCXN0cnVjdCBhdWRpb19wYXJhX2NvbmYgKnBhdGhfcGFyYTsKKwlpbnQgaSwgaiwgbnVtX3ZhbHVlcywgc2l6ZTsKKwlzd2l0Y2gocGF0aCkgeworCWNhc2UgVF9PVVRQVVRfUkVDRUlWRVI6CisJCXNpemUgPSBBUlJBWV9TSVpFKHJjdl9wYXRoX29ub2ZmKTsKKwkJcGF0aF9wYXJhID0gcmN2X3BhdGhfb25vZmY7CisJCWJyZWFrOworCWNhc2UgVF9PVVRQVVRfU1BFQUtFUjoKKwkJc2l6ZSA9IEFSUkFZX1NJWkUoc3BrX3BhdGhfb25vZmYpOworCQlwYXRoX3BhcmEgPSBzcGtfcGF0aF9vbm9mZjsKKwkJYnJlYWs7CisJY2FzZSBUX09VVFBVVF9IRUFEU0VUOgorCQlzaXplID0gQVJSQVlfU0laRShlYXJwX3BhdGhfb25vZmYpOworCQlwYXRoX3BhcmEgPSBlYXJwX3BhdGhfb25vZmY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgcGF0aF9wYXJhW2ldLmNvbnRyb2wpOworCQludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CisKKwkgICAgZm9yIChqID0gMDsgaiA8IG51bV92YWx1ZXM7IGorKykgeworCQkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGosIG9ub2ZmKTsKKwkgICAgfQorCisvLwkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBzcGtfcGF0aF9vbm9mZltpXS5jb250cm9sLCBzcGtfcGF0aF9vbm9mZltpXS52YWx1ZXMpOworICAgIH0KKworCXJldHVybiAwOworfQorCisKK2ludCBtaXhfc2V0X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQoreworCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwljaGFyIG5hbWVbXSA9ICJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggVm9sdW1lIjsKKwljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCWlmICghY3RsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCB2b2x1bWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtaXhfc2V0X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCWNoYXIgbmFtZVtdID0gInZvaWNlIHVwbGluayBtdXRlIjsKKwljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCWlmICghY3RsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCBlbmFibGUpOworCQorCXJldHVybiAwOworfQorCitpbnQgbWl4X3NldF92b2ljZV9wYXRoKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoKQoreworCWludCBpOworLyoKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25faW5fcGFyYV9hdWRpbyk7IGkrKykgeworCQl0aW55bWl4X3NldF92YWx1ZV90ZXN0KG1peGVyLCBjb21tb25faW5fcGFyYV9hdWRpb1tpXS5jb250cm9sLCBjb21tb25faW5fcGFyYV9hdWRpb1tpXS52YWx1ZXMpOworCX0KKwkKKwlmb3IoaSA9IDA7aTxBUlJBWV9TSVpFKGNvbW1vbl9vdXRfcGFyYV9hdWRpbyk7aSsrKQorCXsKKyAJICAJdGlueW1peF9zZXRfdmFsdWVfdGVzdChtaXhlcixjb21tb25fb3V0X3BhcmFfYXVkaW9baV0uY29udHJvbCxjb21tb25fb3V0X3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKwl9CisqLwkKKwlzd2l0Y2ggKHBhdGgpIHsKKwljYXNlIFRfT1VUUFVUX1JFQ0VJVkVSOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlKTsgaSsrKQl7CisJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0uY29udHJvbCwgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtpXS52YWx1ZXMpOworCQl9CisJCWJyZWFrOworCWNhc2UgVF9PVVRQVVRfU1BFQUtFUjoKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlKTsgaSsrKSB7CisJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtpXS5jb250cm9sLCBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0udmFsdWVzKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRfT1VUUFVUX0hFQURTRVQ6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2UpOyBpKyspIHsKKwkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtpXS5jb250cm9sLCBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLnZhbHVlcyk7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitpbnQgbWl4X3NldF9pbl9jYWxsX3RvbmUoc3RydWN0IG1peGVyICptaXhlciwgaW50IHRvbnR5cGUpCit7CisJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCWNoYXIgbmFtZVtdID0gInZvaWNlIHRvbmUgc2VsIjsKKwljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCWlmICghY3RsKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCB0b250eXBlKTsKKworCXJldHVybiAwOworfQorCitpbnQgbWl4X3NldF9kZWZhdWx0X3BhcmFtKHN0cnVjdCBtaXhlciAqbWl4ZXIpIAoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfZGVmYXVsdF9wYXJhKTsgaSsrKSB7CisJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgaW5pdF9kZWZhdWx0X3BhcmFbaV0uY29udHJvbCwgaW5pdF9kZWZhdWx0X3BhcmFbaV0udmFsdWVzKTsKKwl9CisJCisJcmV0dXJuIDA7Cit9CisjZW5kaWYK