ZGlmZiAtLWdpdCBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS9saW51eC01LjEwL3NvdW5kL3NvYy9jb2RlY3MvZXM4MzExLmMgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvbGludXgtNS4xMC9zb3VuZC9zb2MvY29kZWNzL2VzODMxMS5jCmluZGV4IGU1ZTdkMjUuLjZmNWVlY2MgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS9saW51eC01LjEwL3NvdW5kL3NvYy9jb2RlY3MvZXM4MzExLmMKKysrIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL2xpbnV4LTUuMTAvc291bmQvc29jL2NvZGVjcy9lczgzMTEuYwpAQCAtNDQwLDcgKzQ0MCw4IEBACiAJc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBkYWktPmNvbXBvbmVudDsNCiAJc3RydWN0IGVzODMxMV9wcml2YXRlICplczgzMTEgPSBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOw0KIA0KLQlwcl9pbmZvKCJFbnRlciBpbnRvICVzKClcbiIsIF9fZnVuY19fKTsNCisJLy9maXggVDEwNkJVRy0xNTMNCisJcHJpbnRrKCJFbnRlciBpbnRvICVzKCksZnJlcTolZFxuIiwgX19mdW5jX18sZnJlcSk7DQogCXN3aXRjaCAoZnJlcSkgew0KIAljYXNlIDExMjg5NjAwOg0KIAljYXNlIDIyNTc5MjAwOg0KQEAgLTQ1OSw2ICs0NjAsOCBAQAogCWNhc2UgMTUzNjAwMDoNCiAJY2FzZSAxMDI0MDAwOg0KIAljYXNlIDEyMDAwMDAwOg0KKwkvL2ZpeCBUMTA2QlVHLTE1Mw0KKwljYXNlIDI2MDAwMDAwOg0KIAkJZXM4MzExLT5tY2xrX3JhdGUgPSBmcmVxOw0KIAkJcmV0dXJuIDA7DQogCX0NCkBAIC00OTYsNyArNDk5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7DQogCX0NCiAJc25kX3NvY19jb21wb25lbnRfd3JpdGUoY29tcG9uZW50LCBFUzgzMTFfUkVTRVRfUkVHMDAsIGlmYWNlKTsNCi0NCisgICAgDQogDQogCS8qIGludGVyZmFjZSBmb3JtYXQgKi8NCiAJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9GT1JNQVRfTUFTSykgew0KQEAgLTU4NCw3ICs1ODcsOSBAQAogCWludCBjb2VmZjsNCiAJdTggcmVndiwgZGF0bXA7DQogDQotCXByX2luZm8oIkVudGVyIGludG8gJXMoKVxuIiwgX19mdW5jX18pOw0KKwkvL2ZpeCBUMTA2QlVHLTE1Mw0KKwlpbnQgcmF0ZTsNCisJcHJpbnRrKCJFbnRlciBpbnRvICVzKClcbiIsIF9fZnVuY19fKTsNCiAJLyogd2UgbmVlZCBtY2xrIHJhdGUgdG8gY29uZmlndXJlIHJlZ2lzdGVycy4gU2V0IE1DTEsgaGVyZSBpZiBmYWlsZWQNCiAJICogdG8gZ2V0IG1jbGsgZnJvbSBzZXRfc3lzY2xrLg0KIAkgKg0KQEAgLTYwMyw2ICs2MDgsOCBAQAogCQllczgzMTEtPm1jbGtfcmF0ZSA9IDY0ICogcGFyYW1zX3JhdGUocGFyYW1zKTsNCiAJfQ0KIA0KKwkvL2ZpeCBUMTA2QlVHLTE1Mw0KKwlyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsNCiAJcHJfaW5mbygiJXMsIG1jbGsgPSAlZCwgbHJjayA9ICVkXG4iLCBfX2Z1bmNfXywNCiAJCQllczgzMTEtPm1jbGtfcmF0ZSwgcGFyYW1zX3JhdGUocGFyYW1zKSk7DQogDQpAQCAtNjEwLDcgKzYxNyw4IEBACiAJaWYgKGNvZWZmIDwgMCkgew0KIAkJcHJfaW5mbygiVW5hYmxlIHRvIGNvbmZpZ3VyZSBzYW1wbGUgcmF0ZSAlZEh6IHdpdGggJWRIeiBNQ0xLXG4iLA0KIAkJCXBhcmFtc19yYXRlKHBhcmFtcyksIGVzODMxMS0+bWNsa19yYXRlKTsNCi0JCXJldHVybiAtRUlOVkFMOw0KKwkJLy9maXggVDEwNkJVRy0xNTMNCisJCS8vcmV0dXJuIC1FSU5WQUw7DQogCX0NCiAJLyoNCiAJICogc2V0IGNsb2NrIHBhcmFtbWV0ZXJzDQpAQCAtNzIwLDYgKzcyOCwyNyBAQAogCQkvKiBzZXQgaWZhY2UgKi8NCiAJCXNuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX1NEUE9VVF9SRUcwQSwgaWZhY2UpOw0KIAl9DQorDQorCS8vZml4IFQxMDZCVUctMTUzDQorCXNuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX0NMS19NQU5BR0VSX1JFRzAyLCAweDk4KTsNCisNCisJc25kX3NvY19jb21wb25lbnRfd3JpdGUoY29tcG9uZW50LCBFUzgzMTFfQ0xLX01BTkFHRVJfUkVHMDMsIDB4MWIpOw0KKw0KKwlzbmRfc29jX2NvbXBvbmVudF93cml0ZShjb21wb25lbnQsIEVTODMxMV9DTEtfTUFOQUdFUl9SRUcwNCwgMHgxYik7DQorDQorCWlmKHJhdGUgPT0gMzAwMCkNCisJc25kX3NvY19jb21wb25lbnRfd3JpdGUoY29tcG9uZW50LCBFUzgzMTFfQ0xLX01BTkFHRVJfUkVHMDUsIDB4YmIpOw0KKwlpZihyYXRlID09IDE2MDAwKQ0KKwlzbmRfc29jX2NvbXBvbmVudF93cml0ZShjb21wb25lbnQsIEVTODMxMV9DTEtfTUFOQUdFUl9SRUcwNSwgMHg1NSk7DQorDQorCXNuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX0NMS19NQU5BR0VSX1JFRzA2LCAweDE4KTsNCisNCisJc25kX3NvY19jb21wb25lbnRfd3JpdGUoY29tcG9uZW50LCBFUzgzMTFfQ0xLX01BTkFHRVJfUkVHMDcsIDB4MDYpOw0KKw0KKw0KKwlzbmRfc29jX2NvbXBvbmVudF93cml0ZShjb21wb25lbnQsIEVTODMxMV9DTEtfTUFOQUdFUl9SRUcwOCwgMHg1OCk7DQorCS8vZml4IFQxMDZCVUctMTUzDQorDQogCXJldHVybiAwOw0KIH0NCiANCkBAIC0xMDcxLDcgKzExMDAsMTAgQEAKIAlzbmRfc29jX2NvbXBvbmVudF93cml0ZShjb21wb25lbnQsIEVTODMxMV9DTEtfTUFOQUdFUl9SRUcwMSwgMHgzMCk7DQogCXNuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX0NMS19NQU5BR0VSX1JFRzAyLCAweDAwKTsNCiAJc25kX3NvY19jb21wb25lbnRfd3JpdGUoY29tcG9uZW50LCBFUzgzMTFfQ0xLX01BTkFHRVJfUkVHMDMsIDB4MTApOw0KLQlzbmRfc29jX2NvbXBvbmVudF93cml0ZShjb21wb25lbnQsIEVTODMxMV9BRENfUkVHMTYsIDB4MjQpOw0KKw0KKwkvL2ZpeCBUMTA2QlVHLTE1Mw0KKwkvL3NuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX0FEQ19SRUcxNiwgMHgyNCk7DQorCXNuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX0FEQ19SRUcxNiwgMHgyMSk7DQogCXNuZF9zb2NfY29tcG9uZW50X3dyaXRlKGNvbXBvbmVudCwgRVM4MzExX0NMS19NQU5BR0VSX1JFRzA0LCAweDEwKTsNCiAJc25kX3NvY19jb21wb25lbnRfd3JpdGUoY29tcG9uZW50LCBFUzgzMTFfQ0xLX01BTkFHRVJfUkVHMDUsIDB4MDApOw0KIAlzbmRfc29jX2NvbXBvbmVudF93cml0ZShjb21wb25lbnQsIEVTODMxMV9TRFBJTl9SRUcwOSwgMHgwMCk7DQpkaWZmIC0tZ2l0IGEvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL3p4aWNfYXBwX29wZW4vcGxhdGZvcm0vbGlidGlueWFsc2EvYXVkaW9fbWl4ZXJfY3RybC5jIGIvY2FwL3p4Mjk3NTIwdjMvenhpY19jb2RlL3p4aWNfc291cmNlL3p4aWNfYXBwX29wZW4vcGxhdGZvcm0vbGlidGlueWFsc2EvYXVkaW9fbWl4ZXJfY3RybC5jCmluZGV4IGZiNDI5YzAuLjdjM2UxZDYgMTAwNzU1Ci0tLSBhL2NhcC96eDI5NzUyMHYzL3p4aWNfY29kZS96eGljX3NvdXJjZS96eGljX2FwcF9vcGVuL3BsYXRmb3JtL2xpYnRpbnlhbHNhL2F1ZGlvX21peGVyX2N0cmwuYworKysgYi9jYXAvengyOTc1MjB2My96eGljX2NvZGUvenhpY19zb3VyY2UvenhpY19hcHBfb3Blbi9wbGF0Zm9ybS9saWJ0aW55YWxzYS9hdWRpb19taXhlcl9jdHJsLmMKQEAgLTEsMTg0MSArMSw0MDI3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KKwogI2luY2x1ZGUgPHVuaXN0ZC5oPgorCiAjaW5jbHVkZSA8c3RyaW5nLmg+CisKICNpbmNsdWRlIDxmY250bC5oPgorCiAjaW5jbHVkZSA8c3RkaW50Lmg+CisKICNpbmNsdWRlIDxzdGRib29sLmg+CisKICNpbmNsdWRlIDxlcnJuby5oPgorCiAjaW5jbHVkZSA8c3RkbGliLmg+CisKICNpbmNsdWRlIDxjdHlwZS5oPgorCiAjaW5jbHVkZSA8dGlueWFsc2EvYXNvdW5kbGliLmg+CisKICNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKwogI2luY2x1ZGUgPHRpbnlhbHNhL2F1ZGlvX21peGVyX2N0cmwuaD4KIAorCisKICNkZWZpbmUgQVJSQVlfU0laRShhKSAoc2l6ZW9mIChhKSAvIHNpemVvZiAoKGEpWzBdKSkKIAorCisKIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgeworCiAJY29uc3QgY2hhciAqY29udHJvbDsKKwogCWNoYXIgKnZhbHVlc1syXTsKKwogfTsKIAogCisKKworCiAjaWYgZGVmaW5lZCBfVVNFX0NPREVDX1RJMzEwMAogCiAKKworCisKIGVudW0gdF9vdXRwdXRfdm9sIHsKKwogICAgIFRfT1VUUFVUX1ZPTF9NSU5VU182M181REIgPSAwLAorCiAgICAgVF9PVVRQVVRfVk9MX01JTlVTXzYzREIgPSAxLAorCiAgICAgVF9PVVRQVVRfVk9MX01JTlVTXzI3REIgPSA3MywKKwogICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yNERCID0gNzksCisKICAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjFEQiA9IDg1LAorCiAgICAgVF9PVVRQVVRfVk9MX01JTlVTXzE4REIgPSA5MSwKKwogICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18xNURCID0gOTcsCisKICAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTJEQiA9IDEwMywKKwogICAgIFRfT1VUUFVUX1ZPTF9NSU5VU185REIgPSAxMDksCisKICAgICBUX09VVFBVVF9WT0xfTUlOVVNfNkRCID0gMTE1LAorCiAgICAgVF9PVVRQVVRfVk9MX01JTlVTXzNEQiA9IDEyMSwKKwogICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yREIgPSAxMjMsCisKICAgICBUX09VVFBVVF9WT0xfTUlOVVNfMURCID0gMTI1LAorCiAgICAgVF9PVVRQVVRfVk9MXzBEQiA9IDEyNywKKwogICAgIFRfT1VUUFVUX1ZPTF8xREIgPSAxMjksCisKICAgICBUX09VVFBVVF9WT0xfMkRCID0gMTMxLAorCiAgICAgVF9PVVRQVVRfVk9MXzNEQiA9IDEzMywKKwogICAgIFRfT1VUUFVUX1ZPTF82REIgPSAxMzksCisKICAgICBUX09VVFBVVF9WT0xfOURCID0gMTQ1LAorCiAgICAgVF9PVVRQVVRfVk9MXzEyREIgPSAxNTEsCisKICAgICBUX09VVFBVVF9WT0xfMjREQiA9IDE3NSwKKwogfTsKIAorCisKIGVudW0gdF9pbnB1dF92b2wgeworCiAgICAgVF9JTlBVVF9WT0xfTUlOVVNfMTJEQiA9IDAsCisKIAlUX0lOUFVUX1ZPTF9NSU5VU183REIgPSAxMCwKKwogICAgIFRfSU5QVVRfVk9MX01JTlVTXzZEQiA9IDEyLAorCiAgICAgVF9JTlBVVF9WT0xfTUlOVVNfNURCID0gMTQsCisKICAgICBUX0lOUFVUX1ZPTF9NSU5VU180REIgPSAxNiwKKwogICAgIFRfSU5QVVRfVk9MX01JTlVTXzNEQiA9IDE4LAorCiAgICAgVF9JTlBVVF9WT0xfTUlOVVNfMkRCID0gMjAsCisKICAgICBUX0lOUFVUX1ZPTF9NSU5VU18xREIgPSAyMiwKKwogICAgIFRfSU5QVVRfVk9MXzBEQiA9IDI0LAorCiAgICAgVF9JTlBVVF9WT0xfMURCID0gMjYsCisKICAgICBUX0lOUFVUX1ZPTF8yREIgPSAyOCwKKwogICAgIFRfSU5QVVRfVk9MXzNEQiA9IDMwLAorCiAgICAgVF9JTlBVVF9WT0xfMjBEQiA9IDY0LAorCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy+/qrv6s/XKvLuvtffTwworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGluaXRfZGVmYXVsdF9wYXJhW10gPSB7ICAvL+W8gOacuuWIneWni+WMluiwg+eUqAorCiAJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwKKwogCXsiQURDIE11dGUiLCB7IjAifX0sCisKIAl7IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCiAJeyJTcGVha2VyIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyJ9fSwKKwogCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAorCiAJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwogCXsiREFDIFJpZ2h0IElucHV0IiwgeyJNb25vIn19LAorCiAJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCisKIAl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCisKIAl7IkhQIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyIsICIxMjcifX0sCisKIAl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIKKwogfTsKIAorCisKICNpZmRlZiBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX0ZXUAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy/lr7nlupTlhazlhbHpg6jliIYKKwogCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjcifX0sCisKIAl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSJ9fSwKKwogCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKIAl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwogCXsiT3V0cHV0IFJpZ2h0IEZyb20gUmlnaHQgREFDIiwgeyIxIn19LAorCiAJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCiAJeyJIUCBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjciLCAiMTI3In19LAorCiAJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIiwgIjEifX0sIC8vN2RCCisKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5YWs5YWx6YOo5YiGCisKIAl7Ik1pYyBQR0EgQ2FwdHVyZSBWb2x1bWUiLCB7IjEyIn19LAorCiAJeyJBREMgTXV0ZSIsIHsiMCJ9fSwKKwogCXsiQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCiAKKworCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOS6jkhw6L6T5Ye66YCa6YGTCisKIAl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAorCiAJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMSJ9fSwKKwogCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAorCiAJeyJIUCBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIwIiwgIjAifX0sCisKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAvL+WvueW6lOS6jlNwa+i+k+WHuumAmumBkworCiAJeyJTcGVha2VyIFN3aXRjaCIsIHsiMSJ9fSwKKwogCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIyIn19LCAvLzE4ZEIKKwogCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCisKIAl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKKwogfTsKIAotc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy+21NOm09pNaWMxbHBfTWljMWxtyuTI682otcAKKworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL+WvueW6lOS6jk1pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKwogCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKIAl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAogCisKKwogfTsKIAotc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8vttTTptPaTWljMXJwyuTI682otcAKKworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly/lr7nlupTkuo5NaWMxcnDovpPlhaXpgJrpgZMKKwogCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKIAl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBk01pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKwogCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiMTIifX0sCisKIAkvL3siQURDIE11dGUiLCB7IjAifX0sCisKIAkvL3siQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCisKIAl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAorCiAJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKIAl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwogCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKKwogCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKKwogCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgkKKwogCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCisKIAl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyOSIsICIxMjkifX0sCisKIAl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAorCiAJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCisKIAl7IkhQIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjUiLCAiNSJ9fSwKKwogCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKIAl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCiAJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAorCiAjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgCisKICAgICAgICAgCisKIAl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKICNlbmRpZgkKKwogfTsKIAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wCBNaWMxcnDK5Mjrzai1wAorCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL+WvueW6lOS6jkhw6L6T5Ye66YCa6YGTIE1pYzFycOi+k+WFpemAmumBkworCiAJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwKKwogCS8veyJBREMgTXV0ZSIsIHsiMCJ9fSwKKwogCS8veyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKKwogCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKIAl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwogCXsiT3V0cHV0IFJpZ2h0IEZyb20gUmlnaHQgREFDIiwgeyIxIn19LAorCiAJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCiAJeyJIUCBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjciLCAiMTI3In19LAorCiAJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyIxIiwgIjEifX0sIC8vN2RCCQorCiAJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKKwogCXsiREFDIFBsYXliYWNrIFZvbHVtZSAiLCB7IjEyOSIsICIxMjkifX0sCisKIAl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAorCiAJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCisKIAl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjciLCAiNyJ9fSwgLy83ZEIKKwogCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKIAl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX0sCisKICNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAKKwogCXsidm9pY2UgcHJvY2Vzc2luZyBzZWxlY3QiLCB7ImhlYWRzZXQifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKKwogI2VuZGlmCQorCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8v5a+55bqU5LqOU3Br6L6T5Ye66YCa6YGTTWljMWxwX01pYzFsbei+k+WFpemAmumBkworCiAJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyIxMiJ9fSwKKwogCS8veyJBREMgTXV0ZSIsIHsiMCJ9fSwKKwogCS8veyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKKwogCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjcifX0sCisKIAl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSJ9fSwKKwogCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKIAl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwogCXsiT3V0cHV0IFJpZ2h0IEZyb20gUmlnaHQgREFDIiwgeyIxIn19LAorCiAJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCiAJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjQiLCAiMTI0In19LCAvLy0xLjVkQgorCiAJeyJTcGVha2VyIFN3aXRjaCIsIHsiMSJ9fSwKKwogCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIwIn19LCAvLzE4ZEIKKwogCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCisKIAl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKKwogCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKwogCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKIAl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCiAJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAorCiAjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgCiAKKworCiAJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorCiAjZW5kaWYJCisKIH07CiAKKworCiAjZWxzZSAKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25fb3V0X3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25fb3V0X3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5YWs5YWx6YOo5YiGCisKIAl7IlNwZWFrZXIgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3In19LAorCiAJeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCisKIAl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAorCiAJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKIAl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwogCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKKwogCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKKwogCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgorCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOWFrOWFsemDqOWIhgorCiAJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwKKwogCXsiQURDIE11dGUiLCB7IjAifX0sCisKIAl7IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAogCisKKwogfTsKIAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBkworCiAJeyJTcGVha2VyIFN3aXRjaCIsIHsiMCJ9fSwKKwogCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjEifX0sCisKIAl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMSJ9fSwKKwogCXsiSFAgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMCIsICIwIn19LAorCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2lNwa8rks/bNqLXACisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZMKKwogCXsiU3BlYWtlciBTd2l0Y2giLCB7IjEifX0sCisKIAl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMiJ9fSwgLy8xOGRCCisKIAl7IkhQIExlZnQgU3dpdGNoIiwgeyIwIn19LAorCiAJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjAifX0sCisKIH07CiAKLXN0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaTWljMWxwX01pYzFsbcrkyOvNqLXACisKKworc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy/lr7nlupTkuo5NaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKIAl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCiAJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKIAorCisKIH07CiAKLXN0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsvL7bU06bT2k1pYzFycMrkyOvNqLXACisKKworc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8v5a+55bqU5LqOTWljMXJw6L6T5YWl6YCa6YGTCisKIAl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCiAJeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCiAJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiT2ZmIn19LAorCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACi0JeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyI0MCJ9fSwvL2FuYWxvZyBnYWluIGNvbnRyb2wgZnJvbSAwIGRCIHRvIDU5LjUgZEIgaW4gc3RlcHMgb2YgMC41IGRCCi0JeyJBREMgTXV0ZSIsIHsiMCJ9fSwvL0FEQyBtdXRpbmcKLQl7IkRBQyBNdXRlIiwgeyIwIiwiMCJ9fSwvL0RBQyBtdXRpbmcgYW5kIHNldHRpbmcgdXAgYSBtYXN0ZXIgZ2FpbiBjb250cm9sIHRvIGNvbnRyb2wgYm90aCBjaGFubmVscyBvY2N1cnMKLQkvL3siQURDIEZpbmUgQ2FwdHVyZSBWb2x1bWUiLCB7IjAifX0sCi0JeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKLQl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKLQl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKLQl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sLy8iMSIgbWVhbnMgREFDX0wgaXMgZmlyc3RseSByb3V0ZWQgdG8gdGhlIGxlZnQtY2hhbm5lbCBtaXhlciBhbXBsaWZpZXIsIHRoZW4gcm91dGVkIEhQTCBkcml2ZXIKLQl7IkhQIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjExNCIsICIxMTQifX0sLy9BbmFsb2cgVm9sdW1lIENvbnRyb2wgZm9yIEhlYWRwaG9uZSBhbmQgU3BlYWtlciBPdXRwdXRzKEQwfkQ2KQotCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLyBIUEwvSFBSIGRyaXZlciBpcyBub3QgbXV0ZWQKLQl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LC8vQW5hbG9nIFZvbHVtZSBDb250cm9sIGZvciBTcGVha2VyIE91dHB1dHMoRDcpCi0JeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMzUiLCAiMTM1In19LC8vREFDIHZvbHVtZTogLTEyNyB0byA0OD8/Ly8wNjI31L2089T20ubUvbTzCi0JeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMSJ9fSwvL0FuYWxvZyBWb2x1bWUgQ29udHJvbCBmb3IgSGVhZHBob25lIE91dHB1dHMoRDcpCi0JeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCi0JeyJIUCBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyI5IiwgIjkifX0sLy9IUEwvSFBSIGRyaXZlciBpcyA5ZEIoMH45KQotCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKLQl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCi0JeyJNSUMxTFAgUC1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKLQl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIyNCJ9fSwKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAotI2VuZGlmCQotfTsKIAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wCBNaWMxcnDK5Mjrzai1wAorCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBk01pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKwogCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiNDAifX0sCisKIAl7IkFEQyBNdXRlIiwgeyIwIn19LAorCiAJeyJEQUMgTXV0ZSIsIHsiMCIsIjAifX0sCQorCiAJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAorCiAJeyJEQUMgTGVmdCBJbnB1dCIsIHsiTW9ubyJ9fSwKKwogCXsiREFDIFJpZ2h0IElucHV0IiwgeyJNb25vIn19LAorCiAJeyJPdXRwdXQgUmlnaHQgRnJvbSBSaWdodCBEQUMiLCB7IjEifX0sCisKIAl7Ik91dHB1dCBMZWZ0IEZyb20gTGVmdCBEQUMiLCB7IjEifX0sCisKIAl7IkhQIEFuYWxvZyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyNyIsICIxMjcifX0sCisKIAl7IkhQIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEiLCAiMSJ9fSwgLy83ZEIJCisKIAl7IlNwZWFrZXIgU3dpdGNoIiwgeyIwIn19LAotCXsiREFDIFBsYXliYWNrIFZvbHVtZSAiLCB7IjEyOSIsICIxMjkifX0sCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyOSIsICIxMjkifX0sCisKIAl7IkhQIExlZnQgU3dpdGNoIiwgeyIxIn19LAorCiAJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjEifX0sCi0JeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyI3IiwgIjcifX0sIC8vN2RCCisKKwl7IkhQIERyaXZlciBQbGF5YmFjayBWb2x1bWUiLCB7IjciLCAiNyJ9fSwKKwogCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKLQl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAotCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKLQl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKKwl7Ik1JQzFSUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKKwl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCisJeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKKwogCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIyNCJ9fSwKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAKLQl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCisKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKICNlbmRpZgkKKwogfTsKIAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACi0JeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyIyMCJ9fSwKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBkyBNaWMxcnDovpPlhaXpgJrpgZMKKworCXsiTWljIFBHQSBDYXB0dXJlIFZvbHVtZSIsIHsiNDAifX0sCisKIAl7IkFEQyBNdXRlIiwgeyIwIn19LAotCXsiREFDIE11dGUiLCB7IjAiLCIwIn19LAorCisJeyJEQUMgTXV0ZSIsIHsiMCIsIjAifX0sCQorCiAJLy97IkFEQyBGaW5lIENhcHR1cmUgVm9sdW1lIiwgeyIwIn19LAotCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMTYifX0sCi0JeyJTcGVha2VyIERyaXZlciBQbGF5YmFjayBTd2l0Y2giLCB7IjEifX0sCisKIAl7IkRBQyBMZWZ0IElucHV0IiwgeyJNb25vIn19LAorCiAJeyJEQUMgUmlnaHQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKIAl7Ik91dHB1dCBSaWdodCBGcm9tIFJpZ2h0IERBQyIsIHsiMSJ9fSwKKwogCXsiT3V0cHV0IExlZnQgRnJvbSBMZWZ0IERBQyIsIHsiMSJ9fSwKLQl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEzMCIsICIxMzAifX0sIC8vCi0JeyJTcGVha2VyIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFZvbHVtZSIsIHsiMSJ9fSwgLy8xMmRCIC8vMH4zIGlzIDZkQn4yNGRCKDYtZEIgU3RlcHMpCi0JeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMCJ9fSwKLQl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKKworCXsiSFAgQW5hbG9nIFBsYXliYWNrIFZvbHVtZSIsIHsiMTI3IiwgIjEyNyJ9fSwKKworCXsiSFAgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSIsICIxIn19LCAvLzdkQgkKKworCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUgIiwgeyIxMjkiLCAiMTI5In19LAorCisJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMSJ9fSwKKworCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIxIn19LAorCisJeyJIUCBEcml2ZXIgUGxheWJhY2sgU3dpdGNoIiwgeyI3IiwgIjcifX0sIC8vN2RCCisKIAl7Ik1JQzFMTSBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCi0JeyJNSUMxUlAgUC1UZXJtaW5hbCIsIHsiT2ZmIn19LAotCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCi0JeyJNSUMxTE0gTS1UZXJtaW5hbCIsIHsiRkZSIDEwIE9obSJ9fSwKKworCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKKwl7Ik1JQzFMUCBQLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJPZmYifX0sCisKIAl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX0sCisKICNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAKLSAgICAgICAgCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHNlbGVjdCIsIHsiaGVhZHNldCJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorCiAjZW5kaWYJCisKIH07CiAKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8v5a+55bqU5LqOU3Br6L6T5Ye66YCa6YGTTWljMWxwX01pYzFsbei+k+WFpemAmumBkworCisJeyJNaWMgUEdBIENhcHR1cmUgVm9sdW1lIiwgeyIyMCJ9fSwKKworCXsiQURDIE11dGUiLCB7IjAifX0sCisKKwl7IkRBQyBNdXRlIiwgeyIwIiwiMCJ9fSwKKworCS8veyJBREMgRmluZSBDYXB0dXJlIFZvbHVtZSIsIHsiMCJ9fSwKKworCXsiU3BlYWtlciBBbmFsb2cgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjcifX0sCisKKwl7IlNwZWFrZXIgRHJpdmVyIFBsYXliYWNrIFN3aXRjaCIsIHsiMSJ9fSwKKworCXsiREFDIExlZnQgSW5wdXQiLCB7Ik1vbm8ifX0sCisKKwl7IkRBQyBSaWdodCBJbnB1dCIsIHsiTW9ubyJ9fSwKKworCXsiT3V0cHV0IFJpZ2h0IEZyb20gUmlnaHQgREFDIiwgeyIxIn19LAorCisJeyJPdXRwdXQgTGVmdCBGcm9tIExlZnQgREFDIiwgeyIxIn19LAorCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxMjQiLCAiMTI0In19LCAvLy0xLjVkQgorCisJeyJTcGVha2VyIFN3aXRjaCIsIHsiMSJ9fSwKKworCXsiU3BlYWtlciBEcml2ZXIgUGxheWJhY2sgVm9sdW1lIiwgeyIyIn19LCAvLzE4ZEIKKworCXsiSFAgTGVmdCBTd2l0Y2giLCB7IjAifX0sCisKKwl7IkhQIFJpZ2h0IFN3aXRjaCIsIHsiMCJ9fSwKKworCXsiTUlDMUxNIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKworCXsiTUlDMVJQIFAtVGVybWluYWwiLCB7Ik9mZiJ9fSwKKworCXsiTUlDMUxQIFAtVGVybWluYWwiLCB7IkZGUiAxMCBPaG0ifX0sCisKKwl7Ik1JQzFMTSBNLVRlcm1pbmFsIiwgeyJGRlIgMTAgT2htIn19LAorCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjI0In19LAorCisjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgCisKKyAgICAgICAgCisKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNlbmRpZgkKKworfTsKKworCisKICNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBvdXRwdXRfZGFjX3ZvbCA9IAl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyOSIsIjEyOSJ9fTsKIAorCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGlucHV0X2FkY192b2wgPSB7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMjQifX07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBkYWNfbXV0ZSA9IHsiREFDIE11dGUiLCB7IjEiLCAiMSJ9fTsKKwogc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgYWRjX211dGUgPSB7IkFEQyBNdXRlIiwgeyIxIn19OwogCisKKwogc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgc3BrX3BhdGhfb25vZmZbXSA9IHsKKwogCXsiU3BlYWtlciBTd2l0Y2giLCB7IjAifX0sCisKIH07CisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHJjdl9wYXRoX29ub2ZmW10gPSB7CisKIAl7IkhQIExlZnQgU3dpdGNoIiwgeyIwIn19LAorCiAJeyJIUCBSaWdodCBTd2l0Y2giLCB7IjAifX0sCisKIH07CisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGVhcnBfcGF0aF9vbm9mZltdID0geworCiAJeyJIUCBMZWZ0IFN3aXRjaCIsIHsiMCJ9fSwKKwogCXsiSFAgUmlnaHQgU3dpdGNoIiwgeyIwIn19LAorCiB9OworCiBzdGF0aWMgaW50IG91dHB1dF92b2xfY29udmVyc2lvbihpbnQgdm9sKQorCiB7CisKIAlzd2l0Y2godm9sKXsKKwogCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzA6CisKIAkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU182M181REI7CisKIAljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xOgorCiAJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMjdEQjsKKwogCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzI6CisKIAkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18yNERCOworCiAJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMzoKKwogCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzIxREI7CisKIAljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF80OgorCiAJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMThEQjsKKwogCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzU6CisKIAkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18xNURCOworCiAJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNjoKKwogCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzEyREI7CisKIAljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF83OgorCiAJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfOURCOworCiAJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfODoKKwogCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzZEQjsKKwogCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzk6CisKIAkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zREI7CisKIAljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xMDoKKwogCQlyZXR1cm4gVF9PVVRQVVRfVk9MXzBEQjsKKwogCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzExOgorCiAJCXJldHVybiBUX09VVFBVVF9WT0xfM0RCOworCiAJZGVmYXVsdDoKKwogCQlyZXR1cm4gVF9PVVRQVVRfVk9MXzBEQjsKKwogCX0KKwogfQogCisKKwogc3RhdGljIGludCBpbnB1dF92b2xfY29udmVyc2lvbihpbnQgdm9sKQorCiB7CisKIAlzd2l0Y2godm9sKSB7CisKIAljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzA6CisKIAkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzEyREI7CisKIAljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzE6CisKIAkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzdEQjsKKwogCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMjoKKwogCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfNkRCOworCiAJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8zOgorCiAJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU181REI7CisKIAljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzQ6CisKIAkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzREQjsKKwogCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfNToKKwogCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfM0RCOworCiAJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF82OgorCiAJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yREI7CisKIAljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzc6CisKIAkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzFEQjsKKwogCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfODoKKwogCQlyZXR1cm4gVF9JTlBVVF9WT0xfMERCOworCiAJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF85OgorCiAJCXJldHVybiBUX0lOUFVUX1ZPTF8xREI7CisKIAljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzEwOgorCiAJCXJldHVybiBUX0lOUFVUX1ZPTF8yREI7CisKIAljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzExOgorCiAJCXJldHVybiBUX0lOUFVUX1ZPTF8zREI7CisKIAlkZWZhdWx0OgorCiAJCXJldHVybiBUX0lOUFVUX1ZPTF8wREI7CisKIAl9CisKIH0KIAotIAotI2VsaWYgZGVmaW5lZCBfVVNFX0NPREVDX0VTODM3NAorI2VsaWYgZGVmaW5lZCBfVVNFX0NPREVDX0VTODMxMQorCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy/lvIDmnLrliJ3lp4vljJbosIPnlKgKIAogCi1lbnVtIHRfb3V0cHV0X3ZvbCB7Ci0gICAgVF9PVVRQVVRfVk9MX01JTlVTXzk2REIgPSAwLAotCVRfT1VUUFVUX1ZPTF9NSU5VU185NURCID0gMiwKLQlUX09VVFBVVF9WT0xfTUlOVVNfOTBEQiA9IDEyLAotCVRfT1VUUFVUX1ZPTF9NSU5VU184NURCID0gMjIsCi0gICAgVF9PVVRQVVRfVk9MX01JTlVTXzgwREIgPSAzMiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNzVEQiA9IDQyLAotICAgIFRfT1VUUFVUX1ZPTF9NSU5VU183MERCID0gNTIsCi0gICAgVF9PVVRQVVRfVk9MX01JTlVTXzY1REIgPSA2MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNjBEQiA9IDcyLAotICAgIFRfT1VUUFVUX1ZPTF9NSU5VU181NURCID0gODIsCi0gICAgVF9PVVRQVVRfVk9MX01JTlVTXzUwREIgPSA5MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNDVEQiA9IDEwMiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNDBEQiA9IDExMiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMzVEQiA9IDEyMiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMzBEQiA9IDEzMiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjVEQiA9IDE0MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjBEQiA9IDE1MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQiA9IDE2MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTBEQiA9IDE3MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfN0RCICA9IDE3OCwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNkRCICA9IDE4MCwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNURCICA9IDE4MiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfNERCICA9IDE4NCwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfM0RCICA9IDE4NiwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMkRCICA9IDE4OCwKLSAgICBUX09VVFBVVF9WT0xfTUlOVVNfMURCICA9IDE5MCwKLSAgICBUX09VVFBVVF9WT0xfMERCICAgICAgICA9IDE5MgotfTsKIAotZW51bSB0X2lucHV0X3ZvbCB7Ci0gICAgVF9JTlBVVF9WT0xfTUlOVVNfOTZEQiA9IDAsCi0JVF9JTlBVVF9WT0xfTUlOVVNfOTVEQiA9IDIsCi0JVF9JTlBVVF9WT0xfTUlOVVNfOTBEQiA9IDEyLAotCVRfSU5QVVRfVk9MX01JTlVTXzg1REIgPSAyMiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU184MERCID0gMzIsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfNzVEQiA9IDQyLAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzcwREIgPSA1MiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU182NURCID0gNjIsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfNjBEQiA9IDcyLAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzU1REIgPSA4MiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU181MERCID0gOTIsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfNDVEQiA9IDEwMiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU180MERCID0gMTEyLAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzM1REIgPSAxMjIsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfMzBEQiA9IDEzMiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU18yNURCID0gMTQyLAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzIwREIgPSAxNTIsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfMTVEQiA9IDE2MiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU18xMERCID0gMTcyLAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzdEQiAgPSAxNzgsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfNkRCICA9IDE4MCwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU181REIgID0gMTgyLAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzREQiAgPSAxODQsCi0gICAgVF9JTlBVVF9WT0xfTUlOVVNfM0RCICA9IDE4NiwKLSAgICBUX0lOUFVUX1ZPTF9NSU5VU18yREIgID0gMTg4LAotICAgIFRfSU5QVVRfVk9MX01JTlVTXzFEQiAgPSAxOTAsCi0gICAgVF9JTlBVVF9WT0xfMERCICAgICAgICA9IDE5MgogfTsKIAogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy+/qrv6s/XKvLuvtffTwwotCXsiRE1JQyBNVVgiLCB7IjAifX0sCQotCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCi0JeyJBTEMgTVVYIiwgeyIwIn19LAkKLQl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCi0JeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQotCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTUifX0sCi0JeyJEQUMgTVVURSIsIHsiMCJ9fSwgIAkgIAotCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTIwIn19LAkKLQl7IkRBQyBTRFAgU1JDIE1VWCIsICB7IjAifX0sICAKLQl7IkRBQyBTUkMgTVVYIiwgIHsiMCJ9fSAKLX07CiAKLS8vI2lmZGVmICBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX0MzMUYKLSNpZiAoIGRlZmluZWQgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9DMzFGIHx8IGRlZmluZWQgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9XVFdEICkKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKLQl7IkRBQyBNVVRFIiwgeyIwIn19LCAgCSAgCi0JLy97IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fSwJCi0JeyJEQUMgU0RQIFNSQyBNVVgiLCAgeyIwIn19LCAgCi0JeyJEQUMgU1JDIE1VWCIsICB7IjAifX0gCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTprmrubKyv7fWCi0JeyJETUlDIE1VWCIsIHsiMCJ9fSwJCi0JeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKLQl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCQotCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKLSNpZiAwCQotCXsiQUxDIE1VWCIsIHsiMSJ9fSwJCi0JeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI1In19LAotCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTEifX0sCi0JeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyIyIn19LAotCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAotCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIwIn19LAotCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAotCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCi0jZW5kaWYKLQl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCi0JeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQotfTsKLQotI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACi0JeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCi0JeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0sIAkKLQl7IlNQRUFLRVIgTUlYRVIgR0FJTiIsIHsiNDEifX0sCQkvLzFkCQotCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyIwIn19LAkvLzFlCi0JeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTIifX0sIC8vMzgKLX07Ci0jZWxzZQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy+21NOm09pIcMrks/bNqLXACi0JeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCi0JeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAgICAgIAotCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAotCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsiaGFuZHNldCJ9fSwKLX07Ci0KLSNlbmRpZgotLyoKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCi0JeyJTUEVBS0VSIE1JWEVSIEdBSU4iLCB7IjQifX0sCQkJCi0JeyJTUEVBS0VSIE9VVFBVVCBWb2x1bWUiLCB7IjQifX0sCQkKLQl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMSJ9fSAJCi19OwotKi8KLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8vttTTptPaU3BryuSz9s2otcAKLQl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKLQl7Ik1PTk8gT1VUIEdBSU4iLCB7IjExIn19LCAgICAgIAotCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAotCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsic3BlYWsifX0sCi19OwotCi1zdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2kxpbjEtUmluMcrkyOvNqLXACi0JeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAotfTsKLQotc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8vttTTptPaTGluMi1SaW4yyuTI682otcAKLQl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjIifX0sCQotfTsKLQotI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRAotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACi0jaWZuZGVmIFVTRV9DQVBfU1VQUE9SVAotCi0JLy97InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhlYWRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LAkvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0jZW5kaWYJCi0JeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKLQl7IkRNSUMgTVVYIiwgeyIwIn19LAkKLQl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAotCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKLQl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCi0KLQl7IkFMQyBNVVgiLCB7IjAifX0sIAotCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKLQl7IkxJTiBQR0EgR0FJTiIsIHsiNiJ9fSwJCi0JeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCi0JCQkKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKLQl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMSJ9fSwgCQotCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyIzMiJ9fSwJLy9vbGQgNDEJCQotCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyIwIn19LAkvLzEKLQl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MiJ9fSwgLy8zOAotfTsKLQotI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCi0KLQl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0jZW5kaWYJCi0JeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKLQl7IkRNSUMgTVVYIiwgeyIwIn19LAkKLQl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAotCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKLQl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCi0KLQl7IkFMQyBNVVgiLCB7IjAifX0sCQotI2lmIDAKLQl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCi0JeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKLQl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCi0JeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAotCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCi0JeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAotCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKLSNlbmRpZgkKLQl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCi0JeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQotCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQotCXsiTU9OTyBPVVQgR0FJTiIsIHsiMTEifX0sIAotICAgIHsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkyIn19LCAKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKLX07Ci0jZW5kaWYKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAgTWljMXJwyuTI682otcAKLQl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQotCXsiRE1JQyBNVVgiLCB7IjAifX0sCQotCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCi0JeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAotCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKLQotCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCi0jaWYgMAotCXsiQUxDIENhcHR1cmUgVGFyZ2V0IFZvbHVtZSIsIHsiNyJ9fSwKLQl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAotCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKLQl7IkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCi0JeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKLQl7IkFMQyBXSU4gU0laRSIsIHsiNiJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAotCXsiQUxDIENhcHR1cmUgTkcgU3dpdGNoIiwgeyIwIn19LAotI2VuZGlmCQotCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKLQl7IkxJTiBQR0EgR0FJTiIsIHsiNyJ9fSwJCi0JeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCi0JeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCi0JeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LAotCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LAotCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAotI2lmbmRlZiBVU0VfQ0FQX1NVUFBPUlQgICAgICAgIAotCXsidm9pY2UgcHJvY2Vzc2luZyBzZWxlY3QiLCB7ImhlYWRzZXQifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKLSNlbmRpZgkKLX07Ci0jaWZkZWYgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9XVFdEIC8vY2xhc3MtZCAtLT5yZWNlaXZlcgotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACi0JeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKLQl7IkRNSUMgTVVYIiwgeyIwIn19LAkKLQl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAotCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKLQl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCi0KLQl7IkFMQyBNVVgiLCB7IjAifX0sCQotI2lmIDAJCi0JeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAotCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCi0JeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAotCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAotCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKLQl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAotCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAotCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCi0jZW5kaWYJCi0JeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAotCXsiTElOIFBHQSBHQUlOIiwgeyI2In19LAkKLQl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKLQl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCQotCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwgCi0JeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxODYifX0sCi0JeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCi0jaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgICAgCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAotI2VuZGlmCQotfTsKLSNlbHNlLy9tb21vIG91dCAtPiBzcGVha2VyCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKLQl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQotCXsiRE1JQyBNVVgiLCB7IjAifX0sCQotCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCi0JeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAotCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKLQotCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCi0jaWYgMAkKLQl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCi0JeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKLQl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCi0JeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAotCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCi0JeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAotCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKLSNlbmRpZgkKLQl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCi0JeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQotCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LAkJCi0JeyJNT05PIE9VVCBHQUlOIiwgeyIwIn19LCAKLQl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE4NiJ9fSwKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAgICAKLQl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0jZW5kaWYJCi19OwotCi0jZW5kaWYKLQotCi0KLSNlbHNlCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31gotCXsiREFDIE1VVEUiLCB7IjAifX0sICAJICAKLQkvL3siREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTIwIn19LAkKLQl7IkRBQyBTRFAgU1JDIE1VWCIsICB7IjAifX0sICAKLQl7IkRBQyBTUkMgTVVYIiwgIHsiMCJ9fSAKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKLQl7IkRNSUMgTVVYIiwgeyIwIn19LAkKLQl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAotCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwJCi0JeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAotI2lmIDEJCi0JeyJBTEMgTVVYIiwgeyIxIn19LAkKLQl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjUifX0sCi0JeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMSJ9fSwKLQl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjIifX0sCi0JeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIwIn19LAotCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjAifX0sCi0JeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAotCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKLSNlbmRpZgotCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKLQl7IkxJTiBQR0EgR0FJTiIsIHsiMyJ9fSwJCi0JeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE4MCJ9fSwJCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKLQl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKLQl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sICAgICAgCi0JeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0KLX07Ci0KLS8qCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2lNwa8rks/bNqLXACi0JeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCQotCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyI0In19LAkJCQotCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyI0In19LAkJCi0JeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0gCQotfTsKLSovCi0KLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2lNwa8rks/bNqLXACi0JeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCi0JeyJNT05PIE9VVCBHQUlOIiwgeyIzIn19LCAgICAgIAotCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19Ci19OwotCi1zdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL7bU06bT2kxpbjEtUmluMcrkyOvNqLXACi0JeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAotfTsKLQotc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8vttTTptPaTGluMi1SaW4yyuTI682otcAKLQl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjIifX0sCQotfTsKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAotCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwJCi0JeyJETUlDIE1VWCIsIHsiMCJ9fSwJCi0JeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKLQl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCi0JeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAotCi0JeyJBTEMgTVVYIiwgeyIwIn19LAkKLSNpZiAwCi0JeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAotCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCi0JeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAotCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAotCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKLQl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAotCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAotCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCi0jZW5kaWYJCi0JeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAotCXsiTElOIFBHQSBHQUlOIiwgeyI3In19LAkKLQl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKLQl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKLQl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sIAotICAgIHsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LCAKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAgICAKLQl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0jZW5kaWYJCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXAIE1pYzFycMrkyOvNqLXACi0JeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKLQl7IkRNSUMgTVVYIiwgeyIwIn19LAkKLQl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAotCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKLQl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCi0KLQl7IkFMQyBNVVgiLCB7IjAifX0sCQotI2lmIDAKLQl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCi0JeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKLQl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCi0JeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAotCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCi0JeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAotCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKLSNlbmRpZgkKLQl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCi0JeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQotCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQotCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwKLQl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MCJ9fSwKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAgICAKLQl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0jZW5kaWYJCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7IC8vttTTptPaU3BryuSz9s2otcBNaWMxbHBfTWljMWxtyuTI682otcAKLQl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQotCXsiRE1JQyBNVVgiLCB7IjAifX0sCQotCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCi0JeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAotCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKLQotCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCi0jaWYgMAkKLQl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCi0JeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKLQl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCi0JeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCi0JeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAotCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCi0JeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCi0JeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAotCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKLQl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKLSNlbmRpZgkKLQl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCi0JeyJMSU4gUEdBIEdBSU4iLCB7IjcifX0sCQotCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQotCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LAkJCi0JeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAKLQl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MCJ9fSwKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKLSNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAgICAKLQl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCi0jZW5kaWYJCi19OwotCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgb3V0cHV0X2RhY192b2wgPSB7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fTsKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgaW5wdXRfYWRjX3ZvbCA9IHsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGRhY19tdXRlID0geyJEQUMgTVVURSIsIHsiMSJ9fTsKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGFkY19tdXRlID0geyJBREMgTVVURSIsIHsiMSJ9fTsKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgc3BrX3BhdGhfb25vZmZbXSA9IHsKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHJjdl9wYXRoX29ub2ZmW10gPSB7Ci0JeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBlYXJwX3BhdGhfb25vZmZbXSA9IHsKLQl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwKLX07Ci0KLQotc3RhdGljIGludCBvdXRwdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKLXsKLQlzd2l0Y2godm9sKXsKLQljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8wOgotCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzk2REI7Ci0JY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMToKLQkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU180NURCOwotCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzI6Ci0JCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfNDBEQjsKLQljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8zOgotCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzM1REI7Ci0JY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNDoKLQkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zMERCOwotCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzU6Ci0JCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMjVEQjsKLQljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF82OgotCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzIwREI7Ci0JY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNzoKLQkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18xNURCOwotCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzg6Ci0JCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMTBEQjsKLQljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF85OgotCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzZEQjsKLQljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xMDoKLQkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18zREI7Ci0JY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMTE6Ci0JCXJldHVybiBUX09VVFBVVF9WT0xfMERCOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBUX09VVFBVVF9WT0xfMERCOwotCX0KLX0KLQotc3RhdGljIGludCBpbnB1dF92b2xfY29udmVyc2lvbihpbnQgdm9sKQotewotCXN3aXRjaCh2b2wpIHsKLQljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzA6Ci0JCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU185NkRCOwotCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfMToKLQkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzMwREI7Ci0JY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8yOgotCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfMjVEQjsKLQljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzM6Ci0JCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yMERCOwotCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfNDoKLQkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzE1REI7Ci0JY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF81OgotCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfMTBEQjsKLQljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzY6Ci0JCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU183REI7Ci0JY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF83OgotCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfNERCOwotCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfODoKLQkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzNEQjsKLQljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzk6Ci0JCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yREI7Ci0JY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8xMDoKLQkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzFEQjsKLQljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzExOgotCQlyZXR1cm4gVF9JTlBVVF9WT0xfMERCOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18zMERCOwotCX0KLX0KLQotI2VsaWYgZGVmaW5lZCBfVVNFX0NPREVDX0FLNDk0MAotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31gotICAgIHsiREFDIFNvZnQgTXV0ZSBDb250cm9sIiwgeyIwIn19LAotICAgIC8veyJCSUNLIEZyZXF1ZW5jeSIsIHsiMzJmcyJ9fSwgICAgCi0gICAgeyJCSUNLIEZyZXF1ZW5jeSIsIHsiMiJ9fSwvLzAgNjRmcywxIDQ4ZnMsMiAzMmZzCi0KLX07Ci0JCi0KLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKLQotCQl7Ik1pYyBHYWluIENvbnRyb2wiLCB7IjAifX0sCi0JCXsiQURDIERpZ2l0YWwgVm9sdW1lIChWT0xBRCkiLCB7IjE5NSJ9fSwKLQkJeyJBREMgU29mdCBNdXRlIENvbnRyb2wiLCB7IjAifX0sCi0JCQotCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKLQl7Ik9VVDIgTVVYIiwgeyJEQUMifX0sCi0JeyJMaW5lb3V0IFR5cGUiLCB7IlNpbmdsZS1lbmQifX0sCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKLQl7Ik9VVDEgTVVYIiwgeyJEQUMifX0sCi0JeyJMaW5lb3V0IFR5cGUiLCB7IkRpZmZlcmVudGlhbCJ9fSwKLQotfTsKLQotc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy+21NOm09pNaWMxbHBfTWljMWxtyuTI682otcAKLQotCQl7IkFEQyBJbnB1dCBUeXBlIiwgeyJTaW5nbGUtZW5kIn19LAotCQl7IkFJTiBNVVgiLCB7IkFJTjEifX0sCQotCi19OwotCi1zdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly+21NOm09pNaWMxcnDK5Mjrzai1wAotCi0JeyJBREMgSW5wdXQgVHlwZSIsIHsiU2luZ2xlLWVuZCJ9fSwJCi0JeyJBSU4gTVVYIiwgeyJBSU4yIn19LAotfTsKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAotICAgIC8vIGNvbW1vbiBpbgotCi0JeyJNaWMgR2FpbiBDb250cm9sIiwgeyIwIn19LAotCXsiQURDIERpZ2l0YWwgVm9sdW1lIChWT0xBRCkiLCB7IjE5NSJ9fSwKLQl7IkFEQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKLSAgICAvL2RpZmYgaW4JCi0JeyJBREMgSW5wdXQgVHlwZSIsIHsiU2luZ2xlLWVuZCJ9fSwKLQl7IkFJTiBNVVgiLCB7IkFJTjEifX0sCQotCi0gICAgLy8gY29tbW9uIG91dAotCi0gICAgeyJEQUMgU29mdCBNdXRlIENvbnRyb2wiLCB7IjAifX0sCi0gICAgLy97IkJJQ0sgRnJlcXVlbmN5IiwgeyIzMmZzIn19LCAgICAKLSAgICB7IkJJQ0sgRnJlcXVlbmN5IiwgeyIyIn19LC8vMCA2NGZzLDEgNDhmcywyIDMyZnMKLQkvL2RpZmYgb3V0Ci0KLQkvL3ZvaWNlCi0jaWZuZGVmIFVTRV9DQVBfU1VQUE9SVAotCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAotI2VuZGlmCQotfTsKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8vttTTptPaSHDK5LP2zai1wCBNaWMxcnDK5Mjrzai1wAotICAgIC8vIGNvbW1vbiBpbgotCi0JeyJNaWMgR2FpbiBDb250cm9sIiwgeyIwIn19LAotCXsiQURDIERpZ2l0YWwgVm9sdW1lIChWT0xBRCkiLCB7IjE5NSJ9fSwKLQl7IkFEQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKLQkvL2RpZmYgaW4KLQl7IkFEQyBJbnB1dCBUeXBlIiwgeyJTaW5nbGUtZW5kIn19LAkKLQl7IkFJTiBNVVgiLCB7IkFJTjIifX0sCQotCQkvLyBjb21tb24gb3V0Ci0KLSAgICB7IkRBQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKLSAgICAvL3siQklDSyBGcmVxdWVuY3kiLCB7IjMyZnMifX0sCQotICAgIHsiQklDSyBGcmVxdWVuY3kiLCB7IjIifX0sLy8wIDY0ZnMsMSA0OGZzLDIgMzJmcwotCS8vZGlmZiBvdXQKLQotCXsiT1VUMiBNVVgiLCB7IkRBQyJ9fSwKLQl7IkxpbmVvdXQgVHlwZSIsIHsiU2luZ2xlLWVuZCJ9fSwKLQkvL3ZvaWNlCi0jaWZuZGVmIFVTRV9DQVBfU1VQUE9SVAotCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHNlbGVjdCIsIHsiaGVhZHNldCJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAotI2VuZGlmCQotfTsKLQotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL7bU06bT2lNwa8rks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACi0KLSAgICAvLyBjb21tb24gaW4KLSAgICB7Ik1pYyBHYWluIENvbnRyb2wiLCB7IjAifX0sCi0JeyJBREMgRGlnaXRhbCBWb2x1bWUgKFZPTEFEKSIsIHsiMTk1In19LAotCXsiQURDIFNvZnQgTXV0ZSBDb250cm9sIiwgeyIwIn19LAotCS8vZGlmZiBpbgotCXsiQURDIElucHV0IFR5cGUiLCB7IlNpbmdsZS1lbmQifX0sCi0JeyJBSU4gTVVYIiwgeyJBSU4xIn19LAkKLSAgICAvLyBjb21tb24gb3V0CQkKLSAgICB7IkRBQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKLSAgICAvL3siQklDSyBGcmVxdWVuY3kiLCB7IjMyZnMifX0sICAgIAotICAgIHsiQklDSyBGcmVxdWVuY3kiLCB7IjIifX0sLy8wIDY0ZnMsMSA0OGZzLDIgMzJmcwotCS8vZGlmZiBvdXQgICAgCi0JeyJPVVQxIE1VWCIsIHsiREFDIn19LAotCXsiTGluZW91dCBUeXBlIiwgeyJEaWZmZXJlbnRpYWwifX0sCi0JLy92b2ljZQotI2lmbmRlZiBVU0VfQ0FQX1NVUFBPUlQKLQotCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsic3BlYWsifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKLSNlbmRpZgkKLX07Ci0KLSNlbGlmIGRlZmluZWQgX1VTRV9DT0RFQ19OQVU4ODEwCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy+/qrv6s/XKvLuvtffTwwotCi19Oworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy/lr7nlupTlhazlhbHpg6jliIYKIAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tdID0geyAgLy+21NOmuau5srK/t9YKICAgICAvL3siREFDIFNvZnQgTXV0ZSBDb250cm9sIiwgeyIwIn19LAogCiAKKworCisKIH07CiAKIAotc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06a5q7mysr+31gorCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOWFrOWFsemDqOWIhgorCisKIAogCS8veyJNaWMgR2FpbiBDb250cm9sIiwgeyIwIn19LAogCi19OwotCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL7bU06bT2khwyuSz9s2otcAKLQl7IlNwZWFrZXIgTXV0ZSBTd2l0Y2giLCB7IjEifX0sCi0JeyJNb25vIE11dGUgU3dpdGNoIiwgeyIwIn19LAotCXsiTW9ubyBNaXhlciBQQ00gUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAogCiAKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaU3BryuSz9s2otcAKLQl7Ik1vbm8gTXV0ZSBTd2l0Y2giLCB7IjEifX0sCi0JeyJTcGVha2VyIFZvbHVtZSIsIHsiNTcifX0sCi0JeyJTcGVha2VyIE11dGUgU3dpdGNoIiwgeyIwIn19LAotCXsiU3BlYWtlciBNaXhlciBQQ00gUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAogCiAKLX07CitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaHBfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOS6jkhw6L6T5Ye66YCa6YGTCiAKLXN0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8vttTTptPaTWljMWxwX01pYzFsbcrkyOvNqLXACisJeyJNSUMgUEdBIEdBSU4iLCB7IjEwIn19LAogCi0gICAgLy8jMHgyZCBiNiBwZ2EgbXV0ZQotCXsiSW5wdXQgQm9vc3QgU3RhZ2UgUEdBIE11dGUgU3dpdGNoIiwgeyIxIn19LAotCXsiQ2FwdHVyZSBWb2x1bWUiLCB7IjI1NSJ9fSwKLQl7IlBHQSBWb2x1bWUiLCB7IjMyIn19LAotCXsiSW5wdXQgUEdBIE1pY04gU3dpdGNoIiwgeyIxIn19LAotCXsiSW5wdXQgUEdBIE1pY1AgU3dpdGNoIiwgeyIxIn19LAorCXsiQURDIFNDQUxFIiwgeyIxIn19LAogCi0JLy8jMHgyZiBiNH5iNgotCXsiSW5wdXQgQm9vc3QgU3RhZ2UgUE1JQyBQR0EgU3dpdGNoIiwgeyIwIn19LAorCXsiRE1JQyBUWVBFIiwgeyJkbWljIGF0IGhpZ2ggbGV2ZWwifX0sCiAKLX07CisJeyJBREMgUkFNUCBSQVRFIiwgeyI0In19LAogCi1zdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly+21NOm09pNaWMxcnDK5Mjrzai1wAorCXsiQURDIFNEUCBNVVRFIiwgeyIwIn19LAogCi0gICAgLy8jMHgyZCBiNiBwZ2EgbXV0ZQotCXsiSW5wdXQgQm9vc3QgU3RhZ2UgUEdBIE11dGUgU3dpdGNoIiwgeyIxIn19LAotCXsiQ2FwdHVyZSBWb2x1bWUiLCB7IjI1NSJ9fSwKLQl7IlBHQSBWb2x1bWUiLCB7IjMyIn19LAotCXsiSW5wdXQgUEdBIE1pY04gU3dpdGNoIiwgeyIxIn19LAotCXsiSW5wdXQgUEdBIE1pY1AgU3dpdGNoIiwgeyIxIn19LAorCXsiQURDIElOVkVSVEVEIiwgeyIwIn19LAogCi0JLy8jMHgyZiBiNH5iNgotCXsiSW5wdXQgQm9vc3QgU3RhZ2UgUE1JQyBQR0EgU3dpdGNoIiwgeyIwIn19LAorCXsiQURDIFNZTkMiLCB7IjAifX0sCisKKwl7IkFEQyBSQU0gQ0xSIiwgeyIwIn19LAorCisJeyJBREMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkFMQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBUWVBFIiwgeyJhdXRvbXV0ZSBkaXNhYmxlZCJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyIwIn19LAorCisJeyJBTEMgTUFYIExFVkVMIiwgeyIwIn19LAorCisJeyJBTEMgTUlOIExFVkVMIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgV0lOU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIEdBVEUgVEhSRVNIT0xEIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVk9MVU1FIiwgeyIwIn19LAorCisJeyJBREMgRlMgTU9ERSIsIHsiMCJ9fSwKKworCXsiREFDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgREVNICBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgSU5WRVJUIiwgeyIwIn19LAorCisJeyJEQUMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiREFDIERTTSBNVVRFIiwgeyJtdXRlIHRvIDgifX0sCisKKwl7IkRBQyBPRkZTRVQiLCB7IjAifX0sCisKKwl7IkRBQyBWT0xVTUUiLCB7IjE5MSJ9fSwKKworCXsiRFJDIEVOQUJMRSIsIHsiMCJ9fSwKKworCXsiRFJDIFdJTiBTSVpFIiwgeyIwIn19LAorCisJeyJEUkMgTUFYIExFVkVMIiwgeyIwIn19LAorCisJeyJEUkMgTUlOIExFVkVMIiwgeyIwIn19LAorCisJeyJEQUMgUkFNUCBSQVRFIiwgeyI0In19LAorCisJeyJBRUMgTU9ERSIsIHsiYWRjIGxlZnQsIGFkYyByaWdodCJ9fSwKKworCXsiQURDIERBVEEgVE8gREFDIFRFU1QgTU9ERSIsIHsiZGlzYWJsZSJ9fSwKKworCXsiTUNMSyBJTlZFUlQiLCB7IjAifX0sCisKKwl7IkJDTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJNQ0xLIFNPVVJDRSIsIHsiZnJvbSBtY2xrIHBpbiJ9fSwKIAogCQorCisJeyJETUlDIE1VWCIsIHsiRE1JQyBESVNBQkxFIn19LAorCisJeyJTRFAgT1VUIE1VWCIsIHsiRlJPTSBBREMgT1VUIn19LAorCisJeyJEQUMgU0RQIFNSQyBNVVgiLCB7IlNFTEVDVCBTRFAgTEVGVCBEQVRBIn19LAorCisKKworCisKKworCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXATWljMWxwX01pYzFsbcrkyOvNqLXACi0gICAgLy9pbgotICAgIC8vIzB4MmQgYjYgcGdhIG11dGUKLQl7IklucHV0IEJvb3N0IFN0YWdlIFBHQSBNdXRlIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IkNhcHR1cmUgVm9sdW1lIiwgeyIyNTUifX0sCi0JeyJQR0EgVm9sdW1lIiwgeyIzMiJ9fSwKLQl7IklucHV0IFBHQSBNaWNOIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IklucHV0IFBHQSBNaWNQIFN3aXRjaCIsIHsiMSJ9fSwKIAotCS8vIzB4MmYgYjR+YjYKLQl7IklucHV0IEJvb3N0IFN0YWdlIFBNSUMgUEdBIFN3aXRjaCIsIHsiMCJ9fSwKIAotICAgIC8vb3V0Ci0gICAgeyJQbGF5YmFjayBWb2x1bWUiLCB7IjI1NSJ9fSwKLQl7IlNwZWFrZXIgTXV0ZSBTd2l0Y2giLCB7IjEifX0sCi0JeyJNb25vIE11dGUgU3dpdGNoIiwgeyIwIn19LAotCXsiTW9ubyBNaXhlciBQQ00gUGxheWJhY2sgU3dpdGNoIiwgeyIxIn19LAorc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZMKKworCXsiTUlDIFBHQSBHQUlOIiwgeyIxMCJ9fSwKKworCXsiQURDIFNDQUxFIiwgeyIxIn19LAorCisJeyJETUlDIFRZUEUiLCB7ImRtaWMgYXQgaGlnaCBsZXZlbCJ9fSwKKworCXsiQURDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQURDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJBREMgSU5WRVJURUQiLCB7IjAifX0sCisKKwl7IkFEQyBTWU5DIiwgeyIwIn19LAorCisJeyJBREMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiQURDIFZPTFVNRSIsIHsiMTkxIn19LAorCisJeyJBTEMgRU5BQkxFIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVFlQRSIsIHsiYXV0b211dGUgZGlzYWJsZWQifX0sCisKKwl7IkFMQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFdJTlNJWkUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBHQVRFIFRIUkVTSE9MRCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFZPTFVNRSIsIHsiMCJ9fSwKKworCXsiQURDIEZTIE1PREUiLCB7IjAifX0sCisKKwl7IkRBQyBTRFAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIERFTSAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTSBDTFIiLCB7IjAifX0sCisKKwl7IkRBQyBEU00gTVVURSIsIHsibXV0ZSB0byA4In19LAorCisJeyJEQUMgT0ZGU0VUIiwgeyIwIn19LAorCisJeyJEQUMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkRSQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkRSQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiRFJDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiRFJDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQUVDIE1PREUiLCB7ImFkYyBsZWZ0LCBhZGMgcmlnaHQifX0sCisKKwl7IkFEQyBEQVRBIFRPIERBQyBURVNUIE1PREUiLCB7ImRpc2FibGUifX0sCisKKwl7Ik1DTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJCQ0xLIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiTUNMSyBTT1VSQ0UiLCB7ImZyb20gbWNsayBwaW4ifX0sCisKKwkKKworCXsiRE1JQyBNVVgiLCB7IkRNSUMgRElTQUJMRSJ9fSwKKworCXsiU0RQIE9VVCBNVVgiLCB7IkZST00gQURDIE9VVCJ9fSwKKworCXsiREFDIFNEUCBTUkMgTVVYIiwgeyJTRUxFQ1QgU0RQIExFRlQgREFUQSJ9fSwKIAogCiAKLQkvL3ZvaWNlCi0jaWZuZGVmIFVTRV9DQVBfU1VQUE9SVAogCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAotI2VuZGlmCQorCiB9OwogCi1zdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy+21NOm09pIcMrks/bNqLXAIE1pYzFycMrkyOvNqLXACi0gICAgLy9pbgotICAgIC8vIzB4MmQgYjYgcGdhIG11dGUKLQl7IklucHV0IEJvb3N0IFN0YWdlIFBHQSBNdXRlIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IkNhcHR1cmUgVm9sdW1lIiwgeyIyNTUifX0sCi0JeyJQR0EgVm9sdW1lIiwgeyIzMiJ9fSwKLQl7IklucHV0IFBHQSBNaWNOIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IklucHV0IFBHQSBNaWNQIFN3aXRjaCIsIHsiMSJ9fSwKIAotCS8vIzB4MmYgYjR+YjYKLQl7IklucHV0IEJvb3N0IFN0YWdlIFBNSUMgUEdBIFN3aXRjaCIsIHsiMCJ9fSwKIAotICAgIC8vb3V0Ci0gICAgeyJQbGF5YmFjayBWb2x1bWUiLCB7IjI1NSJ9fSwgICAgCi0JeyJTcGVha2VyIE11dGUgU3dpdGNoIiwgeyIxIn19LAotCXsiTW9ubyBNdXRlIFN3aXRjaCIsIHsiMCJ9fSwKLQl7Ik1vbm8gTWl4ZXIgUENNIFBsYXliYWNrIFN3aXRjaCIsIHsiMSJ9fSwKK3N0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8v5a+55bqU5LqOTWljMWxwX01pYzFsbei+k+WFpemAmumBkwogCi0JLy92b2ljZQotI2lmbmRlZiBVU0VfQ0FQX1NVUFBPUlQKIAotCXsidm9pY2UgcHJvY2Vzc2luZyBzZWxlY3QiLCB7ImhlYWRzZXQifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKLSNlbmRpZgkKKworICAgIHsiTUlDIFBHQSBHQUlOIiwgeyIxMCJ9fSwKKworCXsiQURDIFNDQUxFIiwgeyIxIn19LAorCisJeyJETUlDIFRZUEUiLCB7ImRtaWMgYXQgaGlnaCBsZXZlbCJ9fSwKKworCXsiQURDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQURDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJBREMgSU5WRVJURUQiLCB7IjAifX0sCisKKwl7IkFEQyBTWU5DIiwgeyIwIn19LAorCisJeyJBREMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiQURDIFZPTFVNRSIsIHsiMTkxIn19LAorCisJeyJBTEMgRU5BQkxFIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVFlQRSIsIHsiYXV0b211dGUgZGlzYWJsZWQifX0sCisKKwl7IkFMQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFdJTlNJWkUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBHQVRFIFRIUkVTSE9MRCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFZPTFVNRSIsIHsiMCJ9fSwKKworCXsiQURDIEZTIE1PREUiLCB7IjAifX0sCisKKwl7IkRBQyBTRFAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIERFTSAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTSBDTFIiLCB7IjAifX0sCisKKwl7IkRBQyBEU00gTVVURSIsIHsibXV0ZSB0byA4In19LAorCisJeyJEQUMgT0ZGU0VUIiwgeyIwIn19LAorCisJeyJEQUMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkRSQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkRSQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiRFJDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiRFJDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQUVDIE1PREUiLCB7ImFkYyBsZWZ0LCBhZGMgcmlnaHQifX0sCisKKwl7IkFEQyBEQVRBIFRPIERBQyBURVNUIE1PREUiLCB7ImRpc2FibGUifX0sCisKKwl7Ik1DTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJCQ0xLIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiTUNMSyBTT1VSQ0UiLCB7ImZyb20gbWNsayBwaW4ifX0sCisKKwkKKworCXsiRE1JQyBNVVgiLCB7IkRNSUMgRElTQUJMRSJ9fSwKKworCXsiU0RQIE9VVCBNVVgiLCB7IkZST00gQURDIE9VVCJ9fSwKKworCXsiREFDIFNEUCBTUkMgTVVYIiwgeyJTRUxFQ1QgU0RQIExFRlQgREFUQSJ9fSwKKworCisKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgLy+21NOm09pTcGvK5LP2zai1wE1pYzFscF9NaWMxbG3K5Mjrzai1wAotCi0gICAgLy9pbgotICAgIC8vIzB4MmQgYjYgcGdhIG11dGUKLQl7IklucHV0IEJvb3N0IFN0YWdlIFBHQSBNdXRlIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IkNhcHR1cmUgVm9sdW1lIiwgeyIyNTUifX0sCi0JeyJQR0EgVm9sdW1lIiwgeyIzMiJ9fSwKLQl7IklucHV0IFBHQSBNaWNOIFN3aXRjaCIsIHsiMSJ9fSwKLQl7IklucHV0IFBHQSBNaWNQIFN3aXRjaCIsIHsiMSJ9fSwKLQotCS8vIzB4MmYgYjR+YjYKLQl7IklucHV0IEJvb3N0IFN0YWdlIFBNSUMgUEdBIFN3aXRjaCIsIHsiMCJ9fSwKLQotCS8vb3V0Ci0gICAgeyJQbGF5YmFjayBWb2x1bWUiLCB7IjI1NSJ9fSwJCi0JeyJNb25vIE11dGUgU3dpdGNoIiwgeyIxIn19LAotCXsiU3BlYWtlciBWb2x1bWUiLCB7IjU3In19LAotCXsiU3BlYWtlciBNdXRlIFN3aXRjaCIsIHsiMCJ9fSwKLQl7IlNwZWFrZXIgTWl4ZXIgUENNIFBsYXliYWNrIFN3aXRjaCIsIHsiMSJ9fSwKIAogCi0JLy92b2ljZQotI2lmbmRlZiBVU0VfQ0FQX1NVUFBPUlQKK3N0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsvL+WvueW6lOS6jk1pYzFycOi+k+WFpemAmumBkwogCi0JeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAotI2VuZGlmCQorCisKKyAgIHsiTUlDIFBHQSBHQUlOIiwgeyIxMCJ9fSwKKworCXsiQURDIFNDQUxFIiwgeyIxIn19LAorCisJeyJETUlDIFRZUEUiLCB7ImRtaWMgYXQgaGlnaCBsZXZlbCJ9fSwKKworCXsiQURDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQURDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJBREMgSU5WRVJURUQiLCB7IjAifX0sCisKKwl7IkFEQyBTWU5DIiwgeyIwIn19LAorCisJeyJBREMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiQURDIFZPTFVNRSIsIHsiMTkxIn19LAorCisJeyJBTEMgRU5BQkxFIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVFlQRSIsIHsiYXV0b211dGUgZGlzYWJsZWQifX0sCisKKwl7IkFMQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFdJTlNJWkUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBHQVRFIFRIUkVTSE9MRCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFZPTFVNRSIsIHsiMCJ9fSwKKworCXsiQURDIEZTIE1PREUiLCB7IjAifX0sCisKKwl7IkRBQyBTRFAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIERFTSAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTSBDTFIiLCB7IjAifX0sCisKKwl7IkRBQyBEU00gTVVURSIsIHsibXV0ZSB0byA4In19LAorCisJeyJEQUMgT0ZGU0VUIiwgeyIwIn19LAorCisJeyJEQUMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkRSQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkRSQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiRFJDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiRFJDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQUVDIE1PREUiLCB7ImFkYyBsZWZ0LCBhZGMgcmlnaHQifX0sCisKKwl7IkFEQyBEQVRBIFRPIERBQyBURVNUIE1PREUiLCB7ImRpc2FibGUifX0sCisKKwl7Ik1DTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJCQ0xLIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiTUNMSyBTT1VSQ0UiLCB7ImZyb20gbWNsayBwaW4ifX0sCisKKwkKKworCXsiRE1JQyBNVVgiLCB7IkRNSUMgRElTQUJMRSJ9fSwKKworCXsiU0RQIE9VVCBNVVgiLCB7IkZST00gQURDIE9VVCJ9fSwKKworCXsiREFDIFNEUCBTUkMgTVVYIiwgeyJTRUxFQ1QgU0RQIExFRlQgREFUQSJ9fSwKKworCisKKworCisJCisKIH07CiAKIAorCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBk01pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKworICAgIHsiTUlDIFBHQSBHQUlOIiwgeyIxMCJ9fSwKKworCXsiQURDIFNDQUxFIiwgeyIxIn19LAorCisJeyJETUlDIFRZUEUiLCB7ImRtaWMgYXQgaGlnaCBsZXZlbCJ9fSwKKworCXsiQURDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQURDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJBREMgSU5WRVJURUQiLCB7IjAifX0sCisKKwl7IkFEQyBTWU5DIiwgeyIwIn19LAorCisJeyJBREMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiQURDIFZPTFVNRSIsIHsiMTkxIn19LAorCisJeyJBTEMgRU5BQkxFIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVFlQRSIsIHsiYXV0b211dGUgZGlzYWJsZWQifX0sCisKKwl7IkFMQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFdJTlNJWkUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBHQVRFIFRIUkVTSE9MRCIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIFZPTFVNRSIsIHsiMCJ9fSwKKworCXsiQURDIEZTIE1PREUiLCB7IjAifX0sCisKKwl7IkRBQyBTRFAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIERFTSAgTVVURSIsIHsiMCJ9fSwKKworCXsiREFDIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTSBDTFIiLCB7IjAifX0sCisKKwl7IkRBQyBEU00gTVVURSIsIHsibXV0ZSB0byA4In19LAorCisJeyJEQUMgT0ZGU0VUIiwgeyIwIn19LAorCisJeyJEQUMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkRSQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkRSQyBXSU4gU0laRSIsIHsiMCJ9fSwKKworCXsiRFJDIE1BWCBMRVZFTCIsIHsiMCJ9fSwKKworCXsiRFJDIE1JTiBMRVZFTCIsIHsiMCJ9fSwKKworCXsiREFDIFJBTVAgUkFURSIsIHsiNCJ9fSwKKworCXsiQUVDIE1PREUiLCB7ImFkYyBsZWZ0LCBhZGMgcmlnaHQifX0sCisKKwl7IkFEQyBEQVRBIFRPIERBQyBURVNUIE1PREUiLCB7ImRpc2FibGUifX0sCisKKwl7Ik1DTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJCQ0xLIElOVkVSVCIsIHsiMCJ9fSwKKworCXsiTUNMSyBTT1VSQ0UiLCB7ImZyb20gbWNsayBwaW4ifX0sCisKKwkKKworCXsiRE1JQyBNVVgiLCB7IkRNSUMgRElTQUJMRSJ9fSwKKworCXsiU0RQIE9VVCBNVVgiLCB7IkZST00gQURDIE9VVCJ9fSwKKworCXsiREFDIFNEUCBTUkMgTVVYIiwgeyJTRUxFQ1QgU0RQIExFRlQgREFUQSJ9fSwKKworCisKKworCisJCisKK307CisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBkyBNaWMxcnDovpPlhaXpgJrpgZMKKworICAgICAgeyJNSUMgUEdBIEdBSU4iLCB7IjEwIn19LAorCisJeyJBREMgU0NBTEUiLCB7IjEifX0sCisKKwl7IkRNSUMgVFlQRSIsIHsiZG1pYyBhdCBoaWdoIGxldmVsIn19LAorCisJeyJBREMgUkFNUCBSQVRFIiwgeyI0In19LAorCisJeyJBREMgU0RQIE1VVEUiLCB7IjAifX0sCisKKwl7IkFEQyBJTlZFUlRFRCIsIHsiMCJ9fSwKKworCXsiQURDIFNZTkMiLCB7IjAifX0sCisKKwl7IkFEQyBSQU0gQ0xSIiwgeyIwIn19LAorCisJeyJBREMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkFMQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBUWVBFIiwgeyJhdXRvbXV0ZSBkaXNhYmxlZCJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyIwIn19LAorCisJeyJBTEMgTUFYIExFVkVMIiwgeyIwIn19LAorCisJeyJBTEMgTUlOIExFVkVMIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgV0lOU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIEdBVEUgVEhSRVNIT0xEIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVk9MVU1FIiwgeyIwIn19LAorCisJeyJBREMgRlMgTU9ERSIsIHsiMCJ9fSwKKworCXsiREFDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgREVNICBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgSU5WRVJUIiwgeyIwIn19LAorCisJeyJEQUMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiREFDIERTTSBNVVRFIiwgeyJtdXRlIHRvIDgifX0sCisKKwl7IkRBQyBPRkZTRVQiLCB7IjAifX0sCisKKwl7IkRBQyBWT0xVTUUiLCB7IjE5MSJ9fSwKKworCXsiRFJDIEVOQUJMRSIsIHsiMCJ9fSwKKworCXsiRFJDIFdJTiBTSVpFIiwgeyIwIn19LAorCisJeyJEUkMgTUFYIExFVkVMIiwgeyIwIn19LAorCisJeyJEUkMgTUlOIExFVkVMIiwgeyIwIn19LAorCisJeyJEQUMgUkFNUCBSQVRFIiwgeyI0In19LAorCisJeyJBRUMgTU9ERSIsIHsiYWRjIGxlZnQsIGFkYyByaWdodCJ9fSwKKworCXsiQURDIERBVEEgVE8gREFDIFRFU1QgTU9ERSIsIHsiZGlzYWJsZSJ9fSwKKworCXsiTUNMSyBJTlZFUlQiLCB7IjAifX0sCisKKwl7IkJDTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJNQ0xLIFNPVVJDRSIsIHsiZnJvbSBtY2xrIHBpbiJ9fSwKKworCQorCisJeyJETUlDIE1VWCIsIHsiRE1JQyBESVNBQkxFIn19LAorCisJeyJTRFAgT1VUIE1VWCIsIHsiRlJPTSBBREMgT1VUIn19LAorCisJeyJEQUMgU0RQIFNSQyBNVVgiLCB7IlNFTEVDVCBTRFAgTEVGVCBEQVRBIn19LAorCit9OworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL+WvueW6lOS6jlNwa+i+k+WHuumAmumBk01pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKworCisKKyAgICAgeyJNSUMgUEdBIEdBSU4iLCB7IjEwIn19LAorCisJeyJBREMgU0NBTEUiLCB7IjEifX0sCisKKwl7IkRNSUMgVFlQRSIsIHsiZG1pYyBhdCBoaWdoIGxldmVsIn19LAorCisJeyJBREMgUkFNUCBSQVRFIiwgeyI0In19LAorCisJeyJBREMgU0RQIE1VVEUiLCB7IjAifX0sCisKKwl7IkFEQyBJTlZFUlRFRCIsIHsiMCJ9fSwKKworCXsiQURDIFNZTkMiLCB7IjAifX0sCisKKwl7IkFEQyBSQU0gQ0xSIiwgeyIwIn19LAorCisJeyJBREMgVk9MVU1FIiwgeyIxOTEifX0sCisKKwl7IkFMQyBFTkFCTEUiLCB7IjAifX0sCisKKwl7IkFMQyBBVVRPTVVURSBUWVBFIiwgeyJhdXRvbXV0ZSBkaXNhYmxlZCJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyIwIn19LAorCisJeyJBTEMgTUFYIExFVkVMIiwgeyIwIn19LAorCisJeyJBTEMgTUlOIExFVkVMIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgV0lOU0laRSIsIHsiMCJ9fSwKKworCXsiQUxDIEFVVE9NVVRFIEdBVEUgVEhSRVNIT0xEIiwgeyIwIn19LAorCisJeyJBTEMgQVVUT01VVEUgVk9MVU1FIiwgeyIwIn19LAorCisJeyJBREMgRlMgTU9ERSIsIHsiMCJ9fSwKKworCXsiREFDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgREVNICBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgSU5WRVJUIiwgeyIwIn19LAorCisJeyJEQUMgUkFNIENMUiIsIHsiMCJ9fSwKKworCXsiREFDIERTTSBNVVRFIiwgeyJtdXRlIHRvIDgifX0sCisKKwl7IkRBQyBPRkZTRVQiLCB7IjAifX0sCisKKwl7IkRBQyBWT0xVTUUiLCB7IjE5MSJ9fSwKKworCXsiRFJDIEVOQUJMRSIsIHsiMCJ9fSwKKworCXsiRFJDIFdJTiBTSVpFIiwgeyIwIn19LAorCisJeyJEUkMgTUFYIExFVkVMIiwgeyIwIn19LAorCisJeyJEUkMgTUlOIExFVkVMIiwgeyIwIn19LAorCisJeyJEQUMgUkFNUCBSQVRFIiwgeyI0In19LAorCisJeyJBRUMgTU9ERSIsIHsiYWRjIGxlZnQsIGFkYyByaWdodCJ9fSwKKworCXsiQURDIERBVEEgVE8gREFDIFRFU1QgTU9ERSIsIHsiZGlzYWJsZSJ9fSwKKworCXsiTUNMSyBJTlZFUlQiLCB7IjAifX0sCisKKwl7IkJDTEsgSU5WRVJUIiwgeyIwIn19LAorCisJeyJNQ0xLIFNPVVJDRSIsIHsiZnJvbSBtY2xrIHBpbiJ9fSwKKworCQorCisJeyJETUlDIE1VWCIsIHsiRE1JQyBESVNBQkxFIn19LAorCisJeyJTRFAgT1VUIE1VWCIsIHsiRlJPTSBBREMgT1VUIn19LAorCisJeyJEQUMgU0RQIFNSQyBNVVgiLCB7IlNFTEVDVCBTRFAgTEVGVCBEQVRBIn19LAorCit9OworCisKKworCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIG91dHB1dF9kYWNfdm9sID0gewotCSJQbGF5YmFjayBWb2x1bWUiLCB7IjI1NSJ9CisKKwkvLyJQbGF5YmFjayBWb2x1bWUiLCB7IjI1NSJ9CisKKwl7IkRBQyBWT0xVTUUiLCB7IjE5MSJ9fSwKKworCisKIAkKKwogfTsKIAorCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGlucHV0X2FkY192b2wgPSB7Ci0JIkNhcHR1cmUgVm9sdW1lIiwgeyIyNTUifQorCisJLy8iQ2FwdHVyZSBWb2x1bWUiLCB7IjI1NSJ9CisKKwl7IkFEQyBWT0xVTUUiLCB7IjE5MSJ9fSwKKworCisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBkYWNfbXV0ZSA9IHsKLQkiREFDIE1VVEUiLCB7IjEifQorCisJLy8iREFDIE1VVEUiLCB7IjEifQorCisJeyJEQUMgU0RQIE1VVEUiLCB7IjAifX0sCisKKwl7IkRBQyBERU0gIE1VVEUiLCB7IjAifX0sCisKKworCisKKwogfTsKKwogc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgYWRjX211dGUgPSB7Ci0JIklucHV0IEJvb3N0IFN0YWdlIFBHQSBNdXRlIFN3aXRjaCIsIHsiMCJ9CisKKwkvLyJJbnB1dCBCb29zdCBTdGFnZSBQR0EgTXV0ZSBTd2l0Y2giLCB7IjAifQorCisJeyJBREMgU0RQIE1VVEUiLCB7IjAifX0sCisKKworCisJCisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBzcGtfcGF0aF9vbm9mZltdID0gewotCXsiTW9ubyBNaXhlciBQQ00gUGxheWJhY2sgU3dpdGNoIiwgeyIwIn19LAorCisJLy97Ik1vbm8gTWl4ZXIgUENNIFBsYXliYWNrIFN3aXRjaCIsIHsiMCJ9fSwKKworCXsiREFDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgREVNICBNVVRFIiwgeyIwIn19LAorCisKKworCisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiByY3ZfcGF0aF9vbm9mZltdID0gewotCXsiTW9ubyBNaXhlciBQQ00gUGxheWJhY2sgU3dpdGNoIiwgeyIwIn19LAorCisJLy97Ik1vbm8gTWl4ZXIgUENNIFBsYXliYWNrIFN3aXRjaCIsIHsiMCJ9fSwKKworCXsiQURDIFNEUCBNVVRFIiwgeyIwIn19LAorCisKKwogfTsKIAorCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGVhcnBfcGF0aF9vbm9mZltdID0gewotCXsiU3BlYWtlciBNaXhlciBQQ00gUGxheWJhY2sgU3dpdGNoIiwgeyIwIn19LAorCisJLy97IlNwZWFrZXIgTWl4ZXIgUENNIFBsYXliYWNrIFN3aXRjaCIsIHsiMCJ9fSwKKworCXsiREFDIFNEUCBNVVRFIiwgeyIwIn19LAorCisJeyJEQUMgREVNICBNVVRFIiwgeyIwIn19LAorCiB9OwogCiAKKworCisKIHN0YXRpYyBpbnQgb3V0cHV0X3ZvbF9jb252ZXJzaW9uKGludCB2b2wpCisKIHsKKwogCXJldHVybiAyNTU7CiAKKworCiB9CisKIHN0YXRpYyBpbnQgaW5wdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKKwogeworCiAJcmV0dXJuIDI1NTsKIAorCisKK30KKworIAorCisjZWxpZiBkZWZpbmVkIF9VU0VfQ09ERUNfRVM4Mzc0CisKKworCisKKworZW51bSB0X291dHB1dF92b2wgeworCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzk2REIgPSAwLAorCisJVF9PVVRQVVRfVk9MX01JTlVTXzk1REIgPSAyLAorCisJVF9PVVRQVVRfVk9MX01JTlVTXzkwREIgPSAxMiwKKworCVRfT1VUUFVUX1ZPTF9NSU5VU184NURCID0gMjIsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfODBEQiA9IDMyLAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzc1REIgPSA0MiwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU183MERCID0gNTIsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNjVEQiA9IDYyLAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzYwREIgPSA3MiwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU181NURCID0gODIsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNTBEQiA9IDkyLAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzQ1REIgPSAxMDIsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNDBEQiA9IDExMiwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18zNURCID0gMTIyLAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzMwREIgPSAxMzIsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMjVEQiA9IDE0MiwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18yMERCID0gMTUyLAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzE1REIgPSAxNjIsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMTBEQiA9IDE3MiwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU183REIgID0gMTc4LAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzZEQiAgPSAxODAsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfNURCICA9IDE4MiwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU180REIgID0gMTg0LAorCisgICAgVF9PVVRQVVRfVk9MX01JTlVTXzNEQiAgPSAxODYsCisKKyAgICBUX09VVFBVVF9WT0xfTUlOVVNfMkRCICA9IDE4OCwKKworICAgIFRfT1VUUFVUX1ZPTF9NSU5VU18xREIgID0gMTkwLAorCisgICAgVF9PVVRQVVRfVk9MXzBEQiAgICAgICAgPSAxOTIKKworfTsKKworCisKK2VudW0gdF9pbnB1dF92b2wgeworCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfOTZEQiA9IDAsCisKKwlUX0lOUFVUX1ZPTF9NSU5VU185NURCID0gMiwKKworCVRfSU5QVVRfVk9MX01JTlVTXzkwREIgPSAxMiwKKworCVRfSU5QVVRfVk9MX01JTlVTXzg1REIgPSAyMiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzgwREIgPSAzMiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzc1REIgPSA0MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzcwREIgPSA1MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzY1REIgPSA2MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzYwREIgPSA3MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzU1REIgPSA4MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzUwREIgPSA5MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzQ1REIgPSAxMDIsCisKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU180MERCID0gMTEyLAorCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfMzVEQiA9IDEyMiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzMwREIgPSAxMzIsCisKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18yNURCID0gMTQyLAorCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfMjBEQiA9IDE1MiwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzE1REIgPSAxNjIsCisKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18xMERCID0gMTcyLAorCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfN0RCICA9IDE3OCwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzZEQiAgPSAxODAsCisKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU181REIgID0gMTgyLAorCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfNERCICA9IDE4NCwKKworICAgIFRfSU5QVVRfVk9MX01JTlVTXzNEQiAgPSAxODYsCisKKyAgICBUX0lOUFVUX1ZPTF9NSU5VU18yREIgID0gMTg4LAorCisgICAgVF9JTlBVVF9WT0xfTUlOVVNfMURCICA9IDE5MCwKKworICAgIFRfSU5QVVRfVk9MXzBEQiAgICAgICAgPSAxOTIKKworfTsKKworCisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBpbml0X2RlZmF1bHRfcGFyYVtdID0geyAgLy/lvIDmnLrliJ3lp4vljJbosIPnlKgKKworCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCisJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisKKwl7IkxJTiBQR0EgR0FJTiIsIHsiNiJ9fSwJCisKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKKworCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTUifX0sCisKKwl7IkRBQyBNVVRFIiwgeyIwIn19LCAgCSAgCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fSwJCisKKwl7IkRBQyBTRFAgU1JDIE1VWCIsICB7IjAifX0sICAKKworCXsiREFDIFNSQyBNVVgiLCAgeyIwIn19IAorCit9OworCisKKworLy8jaWZkZWYgIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfQzMxRgorCisjaWYgKCBkZWZpbmVkIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfQzMxRiB8fCBkZWZpbmVkIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRCApCisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOWFrOWFsemDqOWIhgorCisJeyJEQUMgTVVURSIsIHsiMCJ9fSwgIAkgIAorCisJLy97IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fSwJCisKKwl7IkRBQyBTRFAgU1JDIE1VWCIsICB7IjAifX0sICAKKworCXsiREFDIFNSQyBNVVgiLCAgeyIwIn19IAorCit9OworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOWFrOWFsemDqOWIhgorCisJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCisKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAkKKworCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKworI2lmIDAJCisKKwl7IkFMQyBNVVgiLCB7IjEifX0sCQorCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI1In19LAorCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMSJ9fSwKKworCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiMiJ9fSwKKworCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMCJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisKKyNlbmRpZgorCisJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAorCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCisKK307CisKKworCisjaWZkZWYgX1VTRV83NTIwVjNfUEhPTkVfVFlQRV9XVFdECisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBocF9vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5LqOSHDovpPlh7rpgJrpgZMKKworCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIwIn19LAorCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0sIAkKKworCXsiU1BFQUtFUiBNSVhFUiBHQUlOIiwgeyI0MSJ9fSwJCS8vMWQJCisKKwl7IlNQRUFLRVIgT1VUUFVUIFZvbHVtZSIsIHsiMCJ9fSwJLy8xZQorCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTIifX0sIC8vMzgKKworfTsKKworI2Vsc2UKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBkworCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCisKKwl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sICAgICAgCisKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKworCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsiaGFuZHNldCJ9fSwKKworfTsKKworCisKKyNlbmRpZgorCisvKgorCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAvL+WvueW6lOS6jlNwa+i+k+WHuumAmumBkworCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCQorCisJeyJTUEVBS0VSIE1JWEVSIEdBSU4iLCB7IjQifX0sCQkJCisKKwl7IlNQRUFLRVIgT1VUUFVUIFZvbHVtZSIsIHsiNCJ9fSwJCQorCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjEifX0gCQorCit9OworCisqLworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5LqOU3Br6L6T5Ye66YCa6YGTCisKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKKworCXsiTU9OTyBPVVQgR0FJTiIsIHsiMTEifX0sICAgICAgCisKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKworCXsiYXVkaW8gcGF0aCBzZWxlY3QiLHsic3BlYWsifX0sCisKK307CisKKworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0geyAvL+WvueW6lOS6jkxpbjEtUmluMei+k+WFpemAmumBkworCisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAorCit9OworCisKKworc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tdID0gey8v5a+55bqU5LqOTGluMi1SaW4y6L6T5YWl6YCa6YGTCisKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjIifX0sCQorCit9OworCisKKworI2lmZGVmIF9VU0VfNzUyMFYzX1BIT05FX1RZUEVfV1RXRAorCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8v5a+55bqU5LqOSHDovpPlh7rpgJrpgZNNaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKKyNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCisKKworCisJLy97InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhlYWRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sCS8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKKworI2VuZGlmCQorCisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKKworCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCisJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKKworCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKKworCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKworCisKKwl7IkFMQyBNVVgiLCB7IjAifX0sIAorCisJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAorCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCisKKwkJCQorCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCisKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMSJ9fSwgCQorCisJeyJTUEVBS0VSIE1JWEVSIEdBSU4iLCB7IjMyIn19LAkvL29sZCA0MQkJCisKKwl7IlNQRUFLRVIgT1VUUFVUIFZvbHVtZSIsIHsiMCJ9fSwJLy8xCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MiJ9fSwgLy8zOAorCit9OworCisKKworI2Vsc2UKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8v5a+55bqU5LqOSHDovpPlh7rpgJrpgZNNaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKKyNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCisKKworCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJoYW5kc2V0In19LCAgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorCisjZW5kaWYJCisKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQorCisJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCisKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAorCisJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAorCisKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisKKyNpZiAwCisKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCisKKwl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAorCisJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAorCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCisKKwl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAorCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKworI2VuZGlmCQorCisJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAorCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCisKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwgCQkKKworCXsiTU9OTyBPVVQgR0FJTiIsIHsiMTEifX0sIAorCisgICAgeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTIifX0sIAorCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCisKK307CisKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBkyBNaWMxcnDovpPlhaXpgJrpgZMKKworCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwJCisKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKworCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisKKwl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCisKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKworCisJeyJBTEMgTVVYIiwgeyIwIn19LAkKKworI2lmIDAKKworCXsiQUxDIENhcHR1cmUgVGFyZ2V0IFZvbHVtZSIsIHsiNyJ9fSwKKworCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCisKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCisKKwl7IkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIHsiMCJ9fSwKKworCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKKworCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCisKKwl7IkFMQyBXSU4gU0laRSIsIHsiNiJ9fSwKKworCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKKworCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKworCXsiQUxDIENhcHR1cmUgTkcgU3dpdGNoIiwgeyIwIn19LAorCisjZW5kaWYJCisKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisKKwl7IkxJTiBQR0EgR0FJTiIsIHsiNyJ9fSwJCisKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKKworCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQorCisJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LAorCisJeyJEQUMgUGxheWJhY2sgVm9sdW1lIiwgeyIxOTAifX0sCisKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMSJ9fSwKKworI2lmbmRlZiBVU0VfQ0FQX1NVUFBPUlQgICAgICAgIAorCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHNlbGVjdCIsIHsiaGVhZHNldCJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorCisjZW5kaWYJCisKK307CisKKyNpZmRlZiBfVVNFXzc1MjBWM19QSE9ORV9UWVBFX1dUV0QgLy9jbGFzcy1kIC0tPnJlY2VpdmVyCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZNNaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQorCisJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCisKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAorCisJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAorCisKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisKKyNpZiAwCQorCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAorCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKworCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKKworCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCisJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisKKyNlbmRpZgkKKworCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKKworCXsiTElOIFBHQSBHQUlOIiwgeyI2In19LAkKKworCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sCQkKKworCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwgCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE4NiJ9fSwKKworCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCisjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgICAgCisKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNlbmRpZgkKKworfTsKKworI2Vsc2UvL21vbW8gb3V0IC0+IHNwZWFrZXIKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAvL+WvueW6lOS6jlNwa+i+k+WHuumAmumBk01pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKworCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwJCisKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKworCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisKKwl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCisKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKworCisJeyJBTEMgTVVYIiwgeyIwIn19LAkKKworI2lmIDAJCisKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjcifX0sCisKKwl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjEzIn19LAorCisJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyI4In19LAorCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjEifX0sCisKKwl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIyIn19LAorCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKworI2VuZGlmCQorCisJeyJEMlNFIE1JQyBCT09TVCBHQUlOIiwgeyIxIn19LAorCisJeyJMSU4gUEdBIEdBSU4iLCB7IjYifX0sCQorCisJeyJBREMgQ2FwdHVyZSBWb2x1bWUiLCB7IjE5MiJ9fSwJCisKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCQorCisJeyJNT05PIE9VVCBHQUlOIiwgeyIwIn19LCAKKworCXsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTg2In19LAorCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0sCisKKyNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUICAgICAgICAKKworCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsic3BlYWsifX0sIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKKworI2VuZGlmCQorCit9OworCisKKworI2VuZGlmCisKKworCisKKworCisKKyNlbHNlCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25fb3V0X3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5YWs5YWx6YOo5YiGCisKKwl7IkRBQyBNVVRFIiwgeyIwIn19LCAgCSAgCisKKwkvL3siREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTIwIn19LAkKKworCXsiREFDIFNEUCBTUkMgTVVYIiwgIHsiMCJ9fSwgIAorCisJeyJEQUMgU1JDIE1VWCIsICB7IjAifX0gCisKK307CisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5YWs5YWx6YOo5YiGCisKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKworCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisKKwl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCQorCisJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAorCisjaWYgMQkKKworCXsiQUxDIE1VWCIsIHsiMSJ9fSwJCisKKwl7IkFMQyBDYXB0dXJlIFRhcmdldCBWb2x1bWUiLCB7IjUifX0sCisKKwl7IkFMQyBDYXB0dXJlIE1heCBQR0EiLCB7IjExIn19LAorCisJeyJBTEMgQ2FwdHVyZSBNaW4gUEdBIiwgeyIyIn19LAorCisJeyJBTEMgQ2FwdHVyZSBIb2xkIFRpbWUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIERlY2F5IFRpbWUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIEF0dGFjayBUaW1lIiwgeyIwIn19LAorCisJeyJBTEMgV0lOIFNJWkUiLCB7IjYifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFRocmVzaG9sZCIsIHsiMTQifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFR5cGUiLCB7IjAifX0sCisKKwl7IkFMQyBDYXB0dXJlIE5HIFN3aXRjaCIsIHsiMCJ9fSwKKworI2VuZGlmCisKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisKKwl7IkxJTiBQR0EgR0FJTiIsIHsiMyJ9fSwJCisKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTgwIn19LAkKKworfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBocF9vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5LqOSHDovpPlh7rpgJrpgZMKKworCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQorCisJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAgICAgIAorCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0KKworfTsKKworCisKKy8qCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfb3V0cGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8v5a+55bqU5LqOU3Br6L6T5Ye66YCa6YGTCisKKwl7Ik1PTk8gTUlYRVIgREFDIFRPIE1PTk8gT1VUIFN3aXRjaCIsIHsiMCJ9fSwJCisKKwl7IlNQRUFLRVIgTUlYRVIgR0FJTiIsIHsiNCJ9fSwJCQkKKworCXsiU1BFQUtFUiBPVVRQVVQgVm9sdW1lIiwgeyI0In19LAkJCisKKwl7IlNQRUFLRVIgTUlYRVIgREFDIFRPIFNQRUFLRVIgT1VUIFN3aXRjaCIsIHsiMSJ9fSAJCisKK307CisKKyovCisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZMKKworCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQorCisJeyJNT05PIE9VVCBHQUlOIiwgeyIzIn19LCAgICAgIAorCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjEifX0KKworfTsKKworCisKK3N0YXRpYyAgc3RydWN0ICBhdWRpb19wYXJhX2NvbmYgIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7IC8v5a+55bqU5LqOTGluMS1SaW4x6L6T5YWl6YCa6YGTCisKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCisKK307CisKKworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly/lr7nlupTkuo5MaW4yLVJpbjLovpPlhaXpgJrpgZMKKworCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMiJ9fSwJCisKK307CisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBk01pYzFscF9NaWMxbG3ovpPlhaXpgJrpgZMKKworCXsiRElGRkVSRU5USUFMIE1VWCIsIHsiMSJ9fSwJCisKKwl7IkRNSUMgTVVYIiwgeyIwIn19LAkKKworCXsiU0RQIE9VVCBNVVgiLCB7IjAifX0sCisKKwl7IkFEQyBTb2Z0IFJhbXAiLCB7IjAifX0sCisKKwl7IkFEQyBIUEYgQ09FRkZJQ0lFTlQiLCB7IjUifX0sCisKKworCisJeyJBTEMgTVVYIiwgeyIwIn19LAkKKworI2lmIDAKKworCXsiQUxDIENhcHR1cmUgVGFyZ2V0IFZvbHVtZSIsIHsiNyJ9fSwKKworCXsiQUxDIENhcHR1cmUgTWF4IFBHQSIsIHsiMTMifX0sCisKKwl7IkFMQyBDYXB0dXJlIE1pbiBQR0EiLCB7IjgifX0sCisKKwl7IkFMQyBDYXB0dXJlIEhvbGQgVGltZSIsIHsiMCJ9fSwKKworCXsiQUxDIENhcHR1cmUgRGVjYXkgVGltZSIsIHsiMSJ9fSwKKworCXsiQUxDIENhcHR1cmUgQXR0YWNrIFRpbWUiLCB7IjIifX0sCisKKwl7IkFMQyBXSU4gU0laRSIsIHsiNiJ9fSwKKworCXsiQUxDIENhcHR1cmUgTkcgVGhyZXNob2xkIiwgeyIxNCJ9fSwKKworCXsiQUxDIENhcHR1cmUgTkcgVHlwZSIsIHsiMCJ9fSwKKworCXsiQUxDIENhcHR1cmUgTkcgU3dpdGNoIiwgeyIwIn19LAorCisjZW5kaWYJCisKKwl7IkQyU0UgTUlDIEJPT1NUIEdBSU4iLCB7IjEifX0sCisKKwl7IkxJTiBQR0EgR0FJTiIsIHsiNyJ9fSwJCisKKwl7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19LAkKKworCXsiU1BFQUtFUiBNSVhFUiBEQUMgVE8gU1BFQUtFUiBPVVQgU3dpdGNoIiwgeyIwIn19LCAJCQorCisJeyJNT05PIE9VVCBHQUlOIiwgeyI0In19LCAKKworICAgIHsiREFDIFBsYXliYWNrIFZvbHVtZSIsIHsiMTkwIn19LCAKKworCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCisjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgICAgCisKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7ImhhbmRzZXQifX0sICAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNlbmRpZgkKKworfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL+WvueW6lOS6jkhw6L6T5Ye66YCa6YGTIE1pYzFycOi+k+WFpemAmumBkworCisJeyJESUZGRVJFTlRJQUwgTVVYIiwgeyIxIn19LAkKKworCXsiRE1JQyBNVVgiLCB7IjAifX0sCQorCisJeyJTRFAgT1VUIE1VWCIsIHsiMCJ9fSwKKworCXsiQURDIFNvZnQgUmFtcCIsIHsiMCJ9fSwKKworCXsiQURDIEhQRiBDT0VGRklDSUVOVCIsIHsiNSJ9fSwKKworCisKKwl7IkFMQyBNVVgiLCB7IjAifX0sCQorCisjaWYgMAorCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAorCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKworCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKKworCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCisJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisKKyNlbmRpZgkKKworCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKKworCXsiTElOIFBHQSBHQUlOIiwgeyI3In19LAkKKworCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sIAkJCisKKwl7Ik1PTk8gT1VUIEdBSU4iLCB7IjQifX0sCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MCJ9fSwKKworCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCisjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgICAgCisKKwl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNlbmRpZgkKKworfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZNNaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKKwl7IkRJRkZFUkVOVElBTCBNVVgiLCB7IjEifX0sCQorCisJeyJETUlDIE1VWCIsIHsiMCJ9fSwJCisKKwl7IlNEUCBPVVQgTVVYIiwgeyIwIn19LAorCisJeyJBREMgU29mdCBSYW1wIiwgeyIwIn19LAorCisJeyJBREMgSFBGIENPRUZGSUNJRU5UIiwgeyI1In19LAorCisKKworCXsiQUxDIE1VWCIsIHsiMCJ9fSwJCisKKyNpZiAwCQorCisJeyJBTEMgQ2FwdHVyZSBUYXJnZXQgVm9sdW1lIiwgeyI3In19LAorCisJeyJBTEMgQ2FwdHVyZSBNYXggUEdBIiwgeyIxMyJ9fSwKKworCXsiQUxDIENhcHR1cmUgTWluIFBHQSIsIHsiOCJ9fSwKKworCXsiQUxDIENhcHR1cmUgSG9sZCBUaW1lIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBEZWNheSBUaW1lIiwgeyIxIn19LAorCisJeyJBTEMgQ2FwdHVyZSBBdHRhY2sgVGltZSIsIHsiMiJ9fSwKKworCXsiQUxDIFdJTiBTSVpFIiwgeyI2In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUaHJlc2hvbGQiLCB7IjE0In19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBUeXBlIiwgeyIwIn19LAorCisJeyJBTEMgQ2FwdHVyZSBORyBTd2l0Y2giLCB7IjAifX0sCisKKyNlbmRpZgkKKworCXsiRDJTRSBNSUMgQk9PU1QgR0FJTiIsIHsiMSJ9fSwKKworCXsiTElOIFBHQSBHQUlOIiwgeyI3In19LAkKKworCXsiQURDIENhcHR1cmUgVm9sdW1lIiwgeyIxOTIifX0sCQorCisJeyJTUEVBS0VSIE1JWEVSIERBQyBUTyBTUEVBS0VSIE9VVCBTd2l0Y2giLCB7IjAifX0sCQkKKworCXsiTU9OTyBPVVQgR0FJTiIsIHsiNCJ9fSwgCisKKwl7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjE5MCJ9fSwKKworCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIxIn19LAorCisjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVCAgICAgICAgCisKKwl7InZvaWNlIHByb2Nlc3NpbmcgcGF0aCBzZWxlY3QiLCB7InNwZWFrIn19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNlbmRpZgkKKworfTsKKworCisKKyNlbmRpZgorCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgb3V0cHV0X2RhY192b2wgPSB7IkRBQyBQbGF5YmFjayBWb2x1bWUiLCB7IjEyMCJ9fTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGlucHV0X2FkY192b2wgPSB7IkFEQyBDYXB0dXJlIFZvbHVtZSIsIHsiMTkyIn19OworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgZGFjX211dGUgPSB7IkRBQyBNVVRFIiwgeyIxIn19OworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBhZGNfbXV0ZSA9IHsiQURDIE1VVEUiLCB7IjEifX07CisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBzcGtfcGF0aF9vbm9mZltdID0geworCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCisKK307CisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiByY3ZfcGF0aF9vbm9mZltdID0geworCisJeyJNT05PIE1JWEVSIERBQyBUTyBNT05PIE9VVCBTd2l0Y2giLCB7IjAifX0sCisKK307CisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBlYXJwX3BhdGhfb25vZmZbXSA9IHsKKworCXsiTU9OTyBNSVhFUiBEQUMgVE8gTU9OTyBPVVQgU3dpdGNoIiwgeyIwIn19LAorCit9OworCisKKworCisKK3N0YXRpYyBpbnQgb3V0cHV0X3ZvbF9jb252ZXJzaW9uKGludCB2b2wpCisKK3sKKworCXN3aXRjaCh2b2wpeworCisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMDoKKworCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzk2REI7CisKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF8xOgorCisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfNDVEQjsKKworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzI6CisKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU180MERCOworCisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMzoKKworCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzM1REI7CisKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF80OgorCisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMzBEQjsKKworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzU6CisKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18yNURCOworCisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfNjoKKworCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzIwREI7CisKKwljYXNlIFRfQVVESU9fT1VUUFVUX1ZPTF9MRVZFTF83OgorCisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfMTVEQjsKKworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzg6CisKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF9NSU5VU18xMERCOworCisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfOToKKworCQlyZXR1cm4gVF9PVVRQVVRfVk9MX01JTlVTXzZEQjsKKworCWNhc2UgVF9BVURJT19PVVRQVVRfVk9MX0xFVkVMXzEwOgorCisJCXJldHVybiBUX09VVFBVVF9WT0xfTUlOVVNfM0RCOworCisJY2FzZSBUX0FVRElPX09VVFBVVF9WT0xfTEVWRUxfMTE6CisKKwkJcmV0dXJuIFRfT1VUUFVUX1ZPTF8wREI7CisKKwlkZWZhdWx0OgorCisJCXJldHVybiBUX09VVFBVVF9WT0xfMERCOworCisJfQorCiB9CiAKIAogCitzdGF0aWMgaW50IGlucHV0X3ZvbF9jb252ZXJzaW9uKGludCB2b2wpCiAKLSNlbHNlIC8vZGVmYXVsdAoreworCisJc3dpdGNoKHZvbCkgeworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8wOgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU185NkRCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8xOgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18zMERCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8yOgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yNURCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF8zOgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yMERCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF80OgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18xNURCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF81OgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18xMERCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF82OgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU183REI7CisKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzc6CisKKwkJcmV0dXJuIFRfSU5QVVRfVk9MX01JTlVTXzREQjsKKworCWNhc2UgVF9BVURJT19JTlBVVF9WT0xfTEVWRUxfODoKKworCQlyZXR1cm4gVF9JTlBVVF9WT0xfTUlOVVNfM0RCOworCisJY2FzZSBUX0FVRElPX0lOUFVUX1ZPTF9MRVZFTF85OgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18yREI7CisKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzEwOgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18xREI7CisKKwljYXNlIFRfQVVESU9fSU5QVVRfVk9MX0xFVkVMXzExOgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF8wREI7CisKKwlkZWZhdWx0OgorCisJCXJldHVybiBUX0lOUFVUX1ZPTF9NSU5VU18zMERCOworCisJfQorCit9CisKKworCisjZWxpZiBkZWZpbmVkIF9VU0VfQ09ERUNfQUs0OTQwCisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAvL+WvueW6lOWFrOWFsemDqOWIhgorCisgICAgeyJEQUMgU29mdCBNdXRlIENvbnRyb2wiLCB7IjAifX0sCisKKyAgICAvL3siQklDSyBGcmVxdWVuY3kiLCB7IjMyZnMifX0sICAgIAorCisgICAgeyJCSUNLIEZyZXF1ZW5jeSIsIHsiMiJ9fSwvLzAgNjRmcywxIDQ4ZnMsMiAzMmZzCisKKworCit9OworCisJCisKKworCitzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX2luX3BhcmFfYXVkaW9bXSA9IHsgIC8v5a+55bqU5YWs5YWx6YOo5YiGCisKKworCisJCXsiTWljIEdhaW4gQ29udHJvbCIsIHsiMCJ9fSwKKworCQl7IkFEQyBEaWdpdGFsIFZvbHVtZSAoVk9MQUQpIiwgeyIxOTUifX0sCisKKwkJeyJBREMgU29mdCBNdXRlIENvbnRyb2wiLCB7IjAifX0sCisKKwkJCisKKworCit9OworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhwX291dHBhdGhfcGFyYV9hdWRpb1tdID0geyAgLy/lr7nlupTkuo5IcOi+k+WHuumAmumBkworCisJeyJPVVQyIE1VWCIsIHsiREFDIn19LAorCisJeyJMaW5lb3V0IFR5cGUiLCB7IlNpbmdsZS1lbmQifX0sCisKKworCit9OworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZMKKworCXsiT1VUMSBNVVgiLCB7IkRBQyJ9fSwKKworCXsiTGluZW91dCBUeXBlIiwgeyJEaWZmZXJlbnRpYWwifX0sCisKKworCit9OworCisKKworc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsgLy/lr7nlupTkuo5NaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKKworCisJCXsiQURDIElucHV0IFR5cGUiLCB7IlNpbmdsZS1lbmQifX0sCisKKwkJeyJBSU4gTVVYIiwgeyJBSU4xIn19LAkKKworCisKK307CisKKworCitzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7Ly/lr7nlupTkuo5NaWMxcnDovpPlhaXpgJrpgZMKKworCisKKwl7IkFEQyBJbnB1dCBUeXBlIiwgeyJTaW5nbGUtZW5kIn19LAkKKworCXsiQUlOIE1VWCIsIHsiQUlOMiJ9fSwKKworfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7ICAvL+WvueW6lOS6jkhw6L6T5Ye66YCa6YGTTWljMWxwX01pYzFsbei+k+WFpemAmumBkworCisgICAgLy8gY29tbW9uIGluCisKKworCisJeyJNaWMgR2FpbiBDb250cm9sIiwgeyIwIn19LAorCisJeyJBREMgRGlnaXRhbCBWb2x1bWUgKFZPTEFEKSIsIHsiMTk1In19LAorCisJeyJBREMgU29mdCBNdXRlIENvbnRyb2wiLCB7IjAifX0sCisKKyAgICAvL2RpZmYgaW4JCisKKwl7IkFEQyBJbnB1dCBUeXBlIiwgeyJTaW5nbGUtZW5kIn19LAorCisJeyJBSU4gTVVYIiwgeyJBSU4xIn19LAkKKworCisKKyAgICAvLyBjb21tb24gb3V0CisKKworCisgICAgeyJEQUMgU29mdCBNdXRlIENvbnRyb2wiLCB7IjAifX0sCisKKyAgICAvL3siQklDSyBGcmVxdWVuY3kiLCB7IjMyZnMifX0sICAgIAorCisgICAgeyJCSUNLIEZyZXF1ZW5jeSIsIHsiMiJ9fSwvLzAgNjRmcywxIDQ4ZnMsMiAzMmZzCisKKwkvL2RpZmYgb3V0CisKKworCisJLy92b2ljZQorCisjaWZuZGVmIFVTRV9DQVBfU1VQUE9SVAorCisKKworCXsidm9pY2UgcHJvY2Vzc2luZyBwYXRoIHNlbGVjdCIsIHsiaGFuZHNldCJ9fSwgIC8vIGhhbmRzZXQgc3BlYWsgaGVhZHNldCBibHVldG9vdGgKKworI2VuZGlmCQorCit9OworCisKKworc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgIC8v5a+55bqU5LqOSHDovpPlh7rpgJrpgZMgTWljMXJw6L6T5YWl6YCa6YGTCisKKyAgICAvLyBjb21tb24gaW4KKworCisKKwl7Ik1pYyBHYWluIENvbnRyb2wiLCB7IjAifX0sCisKKwl7IkFEQyBEaWdpdGFsIFZvbHVtZSAoVk9MQUQpIiwgeyIxOTUifX0sCisKKwl7IkFEQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKKworCS8vZGlmZiBpbgorCisJeyJBREMgSW5wdXQgVHlwZSIsIHsiU2luZ2xlLWVuZCJ9fSwJCisKKwl7IkFJTiBNVVgiLCB7IkFJTjIifX0sCQorCisJCS8vIGNvbW1vbiBvdXQKKworCisKKyAgICB7IkRBQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKKworICAgIC8veyJCSUNLIEZyZXF1ZW5jeSIsIHsiMzJmcyJ9fSwJCisKKyAgICB7IkJJQ0sgRnJlcXVlbmN5IiwgeyIyIn19LC8vMCA2NGZzLDEgNDhmcywyIDMyZnMKKworCS8vZGlmZiBvdXQKKworCisKKwl7Ik9VVDIgTVVYIiwgeyJEQUMifX0sCisKKwl7IkxpbmVvdXQgVHlwZSIsIHsiU2luZ2xlLWVuZCJ9fSwKKworCS8vdm9pY2UKKworI2lmbmRlZiBVU0VfQ0FQX1NVUFBPUlQKKworCisKKwl7InZvaWNlIHByb2Nlc3Npbmcgc2VsZWN0IiwgeyJoZWFkc2V0In19LCAvLyBoYW5kc2V0IHNwZWFrIGhlYWRzZXQgYmx1ZXRvb3RoCisKKyNlbmRpZgkKKworfTsKKworCisKK3N0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgLy/lr7nlupTkuo5TcGvovpPlh7rpgJrpgZNNaWMxbHBfTWljMWxt6L6T5YWl6YCa6YGTCisKKworCisgICAgLy8gY29tbW9uIGluCisKKyAgICB7Ik1pYyBHYWluIENvbnRyb2wiLCB7IjAifX0sCisKKwl7IkFEQyBEaWdpdGFsIFZvbHVtZSAoVk9MQUQpIiwgeyIxOTUifX0sCisKKwl7IkFEQyBTb2Z0IE11dGUgQ29udHJvbCIsIHsiMCJ9fSwKKworCS8vZGlmZiBpbgorCisJeyJBREMgSW5wdXQgVHlwZSIsIHsiU2luZ2xlLWVuZCJ9fSwKKworCXsiQUlOIE1VWCIsIHsiQUlOMSJ9fSwJCisKKyAgICAvLyBjb21tb24gb3V0CQkKKworICAgIHsiREFDIFNvZnQgTXV0ZSBDb250cm9sIiwgeyIwIn19LAorCisgICAgLy97IkJJQ0sgRnJlcXVlbmN5IiwgeyIzMmZzIn19LCAgICAKKworICAgIHsiQklDSyBGcmVxdWVuY3kiLCB7IjIifX0sLy8wIDY0ZnMsMSA0OGZzLDIgMzJmcworCisJLy9kaWZmIG91dCAgICAKKworCXsiT1VUMSBNVVgiLCB7IkRBQyJ9fSwKKworCXsiTGluZW91dCBUeXBlIiwgeyJEaWZmZXJlbnRpYWwifX0sCisKKwkvL3ZvaWNlCisKKyNpZm5kZWYgVVNFX0NBUF9TVVBQT1JUCisKKworCisJeyJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggc2VsZWN0IiwgeyJzcGVhayJ9fSwgLy8gaGFuZHNldCBzcGVhayBoZWFkc2V0IGJsdWV0b290aAorCisjZW5kaWYJCisKK307CisKKyNlbHNlIAorCisKIAogc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgaW5pdF9kZWZhdWx0X3BhcmFbXSA9IHsgCisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgY29tbW9uX291dF9wYXJhX2F1ZGlvW10gPSB7ICAKIAorCisKIH07CiAKIAogCisKKworCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBjb21tb25faW5fcGFyYV9hdWRpb1tdID0geyAKKwogfTsKIAorCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICBocF9vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgCisKIH07CiAKIAorCisKKwogc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9bXSA9IHsgIAorCiB9OwogCisKKwogc3RhdGljICBzdHJ1Y3QgIGF1ZGlvX3BhcmFfY29uZiAgbWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW9bXSA9IHsgCisKIH07CiAKKworCiBzdGF0aWMgIHN0cnVjdCAgYXVkaW9fcGFyYV9jb25mICBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW10gPSB7CisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtdID0geyAKKwogCQorCiB9OwogCisKKwogc3RhdGljIHN0cnVjdCBhdWRpb19wYXJhX2NvbmYgIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbXSA9IHsgCisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW10gPSB7CisKIH07CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBvdXRwdXRfZGFjX3ZvbCA9IAl7fTsKIAorCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGlucHV0X2FkY192b2wgPSB7fTsKIAorCisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGRhY19tdXRlID0ge307CisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIGFkY19tdXRlID0ge307CiAKKworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBzcGtfcGF0aF9vbm9mZltdID0geworCiAJCisKIH07CisKIHN0YXRpYyBzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mIHJjdl9wYXRoX29ub2ZmW10gPSB7CiAKKworCiB9OworCiBzdGF0aWMgc3RydWN0IGF1ZGlvX3BhcmFfY29uZiBlYXJwX3BhdGhfb25vZmZbXSA9IHsKIAorCisKIH07CisKIHN0YXRpYyBpbnQgb3V0cHV0X3ZvbF9jb252ZXJzaW9uKGludCB2b2wpCisKIHsKIAorCisKIAlyZXR1cm4gMjQ7CisKIH0KIAorCisKIHN0YXRpYyBpbnQgaW5wdXRfdm9sX2NvbnZlcnNpb24oaW50IHZvbCkKKwogeworCiAJCisKIAlyZXR1cm4gMjQ7CiAKKworCiB9CiAKIAorCisKKwogI2VuZGlmCiAKKworCiBzdGF0aWMgdm9pZCBtaXhfc2V0X3ZhbHVlX3dyYXAoc3RydWN0IG1peGVyICptaXhlciwgY29uc3QgY2hhciAqY29udHJvbCwgY2hhciAqKnZhbHVlcykKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJZW51bSBtaXhlcl9jdGxfdHlwZSB0eXBlOworCiAJdW5zaWduZWQgaW50IG51bV9jdGxfdmFsdWVzOworCiAJdW5zaWduZWQgaW50IGk7CiAKKworCiAJaWYgKGlzZGlnaXQoY29udHJvbFswXSkpCisKIAkJY3RsID0gbWl4ZXJfZ2V0X2N0bChtaXhlciwgYXRvaShjb250cm9sKSk7CisKIAllbHNlCisKIAkJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBjb250cm9sKTsKIAorCisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sKCVzKVxuIixjb250cm9sKTsKKwogCQlyZXR1cm47CisKIAl9CiAKKworCiAJdHlwZSA9IG1peGVyX2N0bF9nZXRfdHlwZShjdGwpOworCiAJbnVtX2N0bF92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKIAorCisKIAlpZiAoaXNkaWdpdCh2YWx1ZXNbMF1bMF0pKSB7CiAKKworCiAJCWZvciAoaSA9IDA7IGkgPCBudW1fY3RsX3ZhbHVlczsgaSsrKSB7CisKIAkJCWlmIChtaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaSwgYXRvaSh2YWx1ZXNbaV0pKSkgeworCiAJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogaW52YWxpZCB2YWx1ZSBmb3IgaW5kZXggJWRcbiIsIGkpOworCiAJCQkJcmV0dXJuOworCiAJCQl9CisKIAkJfQogCisKKwogCX0gZWxzZSB7CisKIAkJaWYgKHR5cGUgPT0gTUlYRVJfQ1RMX1RZUEVfRU5VTSkgeworCiAJCQkvKmlmIChudW1fdmFsdWVzICE9IDEpIHsKKwogCQkJICAgIGZwcmludGYoc3RkZXJyLCAiRW5jbG9zZSBzdHJpbmdzIGluIHF1b3RlcyBhbmQgdHJ5IGFnYWluXG4iKTsKKwogCQkJICAgIHJldHVybjsKKwogCQkJfSovCisKIAkJCWlmIChtaXhlcl9jdGxfc2V0X2VudW1fYnlfc3RyaW5nKGN0bCwgdmFsdWVzWzBdKSkKKwogCQkJCWZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGludmFsaWQgZW51bSB2YWx1ZVxuIik7CisKIAkJfSBlbHNlIHsKKwogCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogb25seSBlbnVtIHR5cGVzIGNhbiBiZSBzZXQgd2l0aCBzdHJpbmdzXG4iKTsKKwogCQl9CisKIAl9CisKIH0KIAorCisKIHN0YXRpYyB2b2lkIG1peF9nZXRfdmFsdWVfd3JhcChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBjb25zdCBjaGFyICpjb250cm9sLCBpbnQgKnZhbHVlcykKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJZW51bSBtaXhlcl9jdGxfdHlwZSB0eXBlOworCiAJdW5zaWduZWQgaW50IG51bV9jdGxfdmFsdWVzOworCiAJdW5zaWduZWQgaW50IGk7CisKIAlpbnQgdmFsOwogCisKKwogCWlmIChpc2RpZ2l0KGNvbnRyb2xbMF0pKQorCiAJCWN0bCA9IG1peGVyX2dldF9jdGwobWl4ZXIsIGF0b2koY29udHJvbCkpOworCiAJZWxzZQorCiAJCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgY29udHJvbCk7CiAKKworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbCglcylcbiIsY29udHJvbCk7CisKIAkJcmV0dXJuOworCiAJfQogCisKKwogCXR5cGUgPSBtaXhlcl9jdGxfZ2V0X3R5cGUoY3RsKTsKKwogCW51bV9jdGxfdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CiAKIAorCisKKwogCWZvciAoaSA9IDA7IGkgPCBudW1fY3RsX3ZhbHVlczsgaSsrKSB7CisKIAkJdmFsID0gbWl4ZXJfY3RsX2dldF92YWx1ZShjdGwsIGkpOworCiAJCWlmICh2YWwgPT0gLUVJTlZBTCkgeworCiAJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBpbnZhbGlkIHZhbHVlIGZvciBpbmRleCAlZFxuIiwgaSk7CisKIAkJCXJldHVybjsKKwogCQl9CisKIAkJKih2YWx1ZXMraSkgPSB2YWw7CisKIAl9CiAKKworCiB9CiAKIAotI2lmIChkZWZpbmVkIF9VU0VfQ09ERUNfVEkzMTAwKXx8KGRlZmluZWQgX1VTRV9DT0RFQ19BSzQ5NDApfHwoZGVmaW5lZCBfVVNFX0NPREVDX05BVTg4MTApCisKKworCisjaWYgKGRlZmluZWQgX1VTRV9DT0RFQ19USTMxMDApfHwoZGVmaW5lZCBfVVNFX0NPREVDX0FLNDk0MCl8fChkZWZpbmVkIF9VU0VfQ09ERUNfRVM4MzExKQorCiAvKgorCiBpbnQgbWl4X3NldF9pbnB1dF92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50IHZvbHVtZSkKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJY2hhciAqbmFtZSA9IGlucHV0X2FkY192b2wuY29udHJvbDsKKwogCWludCBudW1fdmFsdWVzLCBpOworCiAJaW50IHZvbCA9IGlucHV0X3ZvbF9jb252ZXJzaW9uKHZvbHVtZSk7CiAKKworCiAJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKKwogCWlmICghY3RsKSB7CisKIAkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKICAgICBudW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CiAKKworCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgeworCiAJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBpLCB2b2wpOworCiAgICAgfQogCisKKwogCXJldHVybiAwOworCiB9CiAKKworCiBpbnQgbWl4X3NldF9vdXRwdXRfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpCisKIHsKKwogCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwogCWNoYXIgKm5hbWUgPSBvdXRwdXRfZGFjX3ZvbC5jb250cm9sOworCiAJaW50IG51bV92YWx1ZXMsIGk7CiAKKworCiAJaW50IHZvbCA9IG91dHB1dF92b2xfY29udmVyc2lvbih2b2x1bWUpOwogCisKKwogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwogCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaSwgdm9sKTsKKwogICAgIH0KIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfb3V0cHV0X211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKKwogCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwogCWNoYXIgKm5hbWUgPSBkYWNfbXV0ZS5jb250cm9sOyAKKwogCWludCBudW1fdmFsdWVzLCBpOwogCisKKwogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwogCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaSwgZW5hYmxlKTsKKwogICAgIH0KIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfaW5wdXRfbXV0ZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBib29sIGVuYWJsZSkKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJY2hhciAqbmFtZSA9IGFkY19tdXRlLmNvbnRyb2w7CisKIAljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCiAJaW50IG51bV92YWx1ZXMsIGk7CiAKKworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisKIAkJcmV0dXJuIC0xOworCiAJfQogCisKKwogCW51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKIAorCisKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZhbHVlczsgaSsrKSB7CisKIAkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIGVuYWJsZSk7CisKICAgICB9CisKIAkJCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfb3V0cHV0cGF0aF9vbm9mZihzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCAsYm9vbCBvbm9mZikKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJc3RydWN0IGF1ZGlvX3BhcmFfY29uZiAqcGF0aF9wYXJhOworCiAJaW50IGksIGosIG51bV92YWx1ZXMsIHNpemU7CisKIAlzd2l0Y2gocGF0aCkgeworCiAJY2FzZSBUX09VVFBVVF9SRUNFSVZFUjoKKwogCQlzaXplID0gQVJSQVlfU0laRShyY3ZfcGF0aF9vbm9mZik7CisKIAkJcGF0aF9wYXJhID0gcmN2X3BhdGhfb25vZmY7CisKIAkJYnJlYWs7CisKIAljYXNlIFRfT1VUUFVUX1NQRUFLRVI6CisKIAkJc2l6ZSA9IEFSUkFZX1NJWkUoc3BrX3BhdGhfb25vZmYpOworCiAJCXBhdGhfcGFyYSA9IHNwa19wYXRoX29ub2ZmOworCiAJCWJyZWFrOworCiAJY2FzZSBUX09VVFBVVF9IRUFEU0VUOgorCiAJCXNpemUgPSBBUlJBWV9TSVpFKGVhcnBfcGF0aF9vbm9mZik7CisKIAkJcGF0aF9wYXJhID0gZWFycF9wYXRoX29ub2ZmOworCiAJCWJyZWFrOworCiAJZGVmYXVsdDoKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCiAJCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgcGF0aF9wYXJhW2ldLmNvbnRyb2wpOworCiAJCW51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKIAorCisKIAkgICAgZm9yIChqID0gMDsgaiA8IG51bV92YWx1ZXM7IGorKykgeworCiAJCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaiwgb25vZmYpOworCiAJICAgIH0KIAorCisKIC8vCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIHNwa19wYXRoX29ub2ZmW2ldLmNvbnRyb2wsIHNwa19wYXRoX29ub2ZmW2ldLnZhbHVlcyk7CisKICAgICB9CiAKKworCiAJcmV0dXJuIDA7CisKIH0KKwogKi8KIAorCisKIC8qCiAKKworCiBpbnQgbWl4X3NldF9pbl9jYWxsX3RvbmUoc3RydWN0IG1peGVyICptaXhlciwgaW50IHRvbnR5cGUpCisKIHsKKwogCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwogCWNoYXIgbmFtZVtdID0gInZvaWNlIHRvbmUgc2VsIjsKKwogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIHRvbnR5cGUpOwogCisKKwogCXJldHVybiAwOworCiB9CiAKKworCiBpbnQgbWl4X3NldF9kZWZhdWx0X3BhcmFtKHN0cnVjdCBtaXhlciAqbWl4ZXIpIAorCiB7CisKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXRfZGVmYXVsdF9wYXJhKTsgaSsrKSB7CisKIAkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBpbml0X2RlZmF1bHRfcGFyYVtpXS5jb250cm9sLCBpbml0X2RlZmF1bHRfcGFyYVtpXS52YWx1ZXMpOworCiAJfQorCiAJCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogKi8KIAorCisKICNkZWZpbmUgVk9DSUVfU05EX0NBUkRfTlVNIDAKIAorCisKIGludCBtaXhfc2V0X2lucHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyICpuYW1lID0gaW5wdXRfYWRjX3ZvbC5jb250cm9sOworCiAJaW50IG51bV92YWx1ZXMsIGk7CisKIAlpbnQgdm9sID0gaW5wdXRfdm9sX2NvbnZlcnNpb24odm9sdW1lKTsKLSAgICBpZihuYW1lID09IE5VTEwpewotCQlwcmludGYoIiVzOiBuYW1lIGlzIG51bGwscmV0dXJuIVxuIixfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOworCisKKworCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKKwlpZiAoIWN0bCkgeworCisJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKworCQlyZXR1cm4gLTE7CiAKIAl9Ci0JY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKLQlpZiAoIWN0bCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9CisKKwogCiAgICAgbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwogCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaSwgdm9sKTsKKwogICAgIH0KIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfb3V0cHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyICpuYW1lID0gb3V0cHV0X2RhY192b2wuY29udHJvbDsKKwogCWludCBudW1fdmFsdWVzLCBpOwogCisKKwogCWludCB2b2wgPSBvdXRwdXRfdm9sX2NvbnZlcnNpb24odm9sdW1lKTsKLSAgICBpZihuYW1lID09IE5VTEwpewotCQlwcmludGYoIiVzOiBuYW1lIGlzIG51bGwscmV0dXJuIVxuIixfX2Z1bmNfXyk7Ci0JCXJldHVybiAwOwogCi0JfQorCiAKIAljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisKIAkJcmV0dXJuIC0xOworCiAJfQogCisKKwogCW51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKIAorCisKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZhbHVlczsgaSsrKSB7CisKIAkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIHZvbCk7CisKICAgICB9CiAKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X291dHB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKLQljaGFyICpuYW1lID0gZGFjX211dGUuY29udHJvbDsgCi0JaW50IG51bV92YWx1ZXMsIGk7Ci0gICAgaWYobmFtZSA9PSBOVUxMKXsKLQkJcHJpbnRmKCIlczogbmFtZSBpcyBudWxsLHJldHVybiFcbiIsX19mdW5jX18pOwotCQlyZXR1cm4gMDsKIAotCX0KK3sKKworCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKworCWNoYXIgKm5hbWUgPSBkYWNfbXV0ZS5jb250cm9sOyAKKworCWludCBudW1fdmFsdWVzLCBpOworCisKIAogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwogCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgaSwgZW5hYmxlKTsKKwogICAgIH0KIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfaW5wdXRfbXV0ZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7Ci0JY2hhciAqbmFtZSA9IGFkY19tdXRlLmNvbnRyb2w7Ci0JaW50IG51bV92YWx1ZXMsIGk7Ci0gICAgaWYobmFtZSA9PSBOVUxMKXsKLQkJcHJpbnRmKCIlczogbmFtZSBpcyBudWxsLHJldHVybiFcbiIsX19mdW5jX18pOwotCQlyZXR1cm4gMDsKIAotCX0KK3sKKworCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKworCWNoYXIgKm5hbWUgPSBhZGNfbXV0ZS5jb250cm9sOworCiAJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKIAorCWludCBudW1fdmFsdWVzLCBpOworCisKKwogCWlmICghY3RsKSB7CisKIAkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CiAKKworCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgeworCiAJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCBlbmFibGUpOworCiAgICAgfQorCiAJCQorCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X291dHB1dHBhdGhfb25vZmYoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGggLGJvb2wgb25vZmYpCisKIHsKKwogCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwogCXN0cnVjdCBhdWRpb19wYXJhX2NvbmYgKnBhdGhfcGFyYTsKKwogCWludCBpLCBqLCBudW1fdmFsdWVzLCBzaXplOworCiAJc3dpdGNoKHBhdGgpIHsKKwogCWNhc2UgVF9PVVRQVVRfUkVDRUlWRVI6CisKIAkJc2l6ZSA9IEFSUkFZX1NJWkUocmN2X3BhdGhfb25vZmYpOworCiAJCXBhdGhfcGFyYSA9IHJjdl9wYXRoX29ub2ZmOworCiAJCWJyZWFrOworCiAJY2FzZSBUX09VVFBVVF9TUEVBS0VSOgorCiAJCXNpemUgPSBBUlJBWV9TSVpFKHNwa19wYXRoX29ub2ZmKTsKKwogCQlwYXRoX3BhcmEgPSBzcGtfcGF0aF9vbm9mZjsKKwogCQlicmVhazsKKwogCWNhc2UgVF9PVVRQVVRfSEVBRFNFVDoKKwogCQlzaXplID0gQVJSQVlfU0laRShlYXJwX3BhdGhfb25vZmYpOworCiAJCXBhdGhfcGFyYSA9IGVhcnBfcGF0aF9vbm9mZjsKKwogCQlicmVhazsKKwogCWRlZmF1bHQ6CisKIAkJcmV0dXJuIC0xOworCiAJfQotICAgIGlmKHNpemUgPT0gMCl7Ci0JCXByaW50ZigiJXM6IGFycmF5IHNpemUgaXMgMCxyZXR1cm4hXG4iLF9fZnVuY19fKTsKLQkJcmV0dXJuIDA7CQkKLSAgICB9CQkKKworCisKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKIAkJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBwYXRoX3BhcmFbaV0uY29udHJvbCk7CisKIAkJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogCSAgICBmb3IgKGogPSAwOyBqIDwgbnVtX3ZhbHVlczsgaisrKSB7CisKIAkJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBqLCBvbm9mZik7CisKIAkgICAgfQogCisKKwogLy8JCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgc3BrX3BhdGhfb25vZmZbaV0uY29udHJvbCwgc3BrX3BhdGhfb25vZmZbaV0udmFsdWVzKTsKKwogICAgIH0KIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfaW5fY2FsbF90b25lKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB0b250eXBlKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyIG5hbWVbXSA9ICJ2b2ljZSB0b25lIHNlbCI7CisKIAljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisKIAkJcmV0dXJuIC0xOworCiAJfQogCisKKwogCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCB0b250eXBlKTsKIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfZGVmYXVsdF9wYXJhbShzdHJ1Y3QgbWl4ZXIgKm1peGVyKSAKKwogeworCiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X2RlZmF1bHRfcGFyYSk7IGkrKykgeworCiAJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgaW5pdF9kZWZhdWx0X3BhcmFbaV0uY29udHJvbCwgaW5pdF9kZWZhdWx0X3BhcmFbaV0udmFsdWVzKTsKKwogCX0KKwogCQorCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyIG5hbWVbXSA9ICJ2b2ljZSBwcm9jZXNzaW5nIHBhdGggVm9sdW1lIjsKKwogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIHZvbHVtZSk7CiAKKworCiAJcmV0dXJuIDA7CisKIH0KKwogaW50IG1peF9nZXRfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqdm9sdW1lKQorCiB7CiAKKworCiAJbWl4X2dldF92YWx1ZV93cmFwKG1peGVyLCAidm9pY2UgcHJvY2Vzc2luZyBwYXRoIFZvbHVtZSIsIHZvbHVtZSk7CiAKKworCiAJcmV0dXJuIDA7CiAKKworCiB9CiAKKworCiBpbnQgbWl4X3NldF90eF92b2ljZV92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50IHZvbHVtZSkKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJY2hhciBuYW1lW10gPSAidm9pY2UgcHJvY2Vzc2luZyB0eCBwYXRoIFZvbHVtZSI7CisKIAljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisKIAkJcmV0dXJuIC0xOworCiAJfQogCisKKwogCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCB2b2x1bWUpOwogCisKKwogCXJldHVybiAwOworCiB9CisKIGludCBtaXhfZ2V0X3R4X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgKnZvbHVtZSkKKwogewogCisKKwogCW1peF9nZXRfdmFsdWVfd3JhcChtaXhlciwgInZvaWNlIHByb2Nlc3NpbmcgdHggcGF0aCBWb2x1bWUiLCB2b2x1bWUpOwogCisKKwogCXJldHVybiAwOwogCisKKwogfQogCiAKKworCisKIGludCBtaXhfc2V0X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKKwogCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwogCWNoYXIgbmFtZVtdID0gInZvaWNlIHVwbGluayBtdXRlIjsKKwogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIDAsIGVuYWJsZSk7CisKIAkKKwogCXJldHVybiAwOworCiB9CisKIGludCBtaXhfZ2V0X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgaW50ICplbmFibGUpCisKIHsKIAorCisKIAltaXhfZ2V0X3ZhbHVlX3dyYXAobWl4ZXIsICJ2b2ljZSB1cGxpbmsgbXV0ZSIsIGVuYWJsZSk7CiAKKworCiAJcmV0dXJuIDA7CiAKKworCiB9CiAKKworCiAvL3ZvaWNlIGRvd25saW5rIG11dGUKIAorCisKIGludCBtaXhfc2V0X3J4X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKKwogCXN0cnVjdCBtaXhlcl9jdGwgKmN0bDsKKwogCWNoYXIgbmFtZVtdID0gInZvaWNlIGRvd25saW5rIG11dGUiOworCiAJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKKwogCWlmICghY3RsKSB7CisKIAkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgMCwgZW5hYmxlKTsKKwogCQorCiAJcmV0dXJuIDA7CisKIH0KKwogaW50IG1peF9nZXRfcnhfdm9pY2VfbXV0ZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgKmVuYWJsZSkKKwogewogCisKKwogCW1peF9nZXRfdmFsdWVfd3JhcChtaXhlciwgInZvaWNlIGRvd25saW5rIG11dGUiLCBlbmFibGUpOwogCisKKwogCXJldHVybiAwOwogCisKKwogfQogCiAKQEAgLTE4NDMsMTk3ICs0MDI5LDM5NyBAQAogCiAKIAorCisKKworCisKKworCiBpbnQgbWl4X3NldF9vdXRwdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKKwogeworCiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fb3V0X3BhcmFfYXVkaW8pOyBpKyspIHsKKwogCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGNvbW1vbl9vdXRfcGFyYV9hdWRpb1tpXS5jb250cm9sLCBjb21tb25fb3V0X3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKwogCX0KKworCXByaW50ZigieWFubWluZyBtaXhfc2V0X291dHB1dF9wYXRoOiVkXG4iLHBhdGgpOworCiAJc3dpdGNoIChwYXRoKSB7CisKIAljYXNlIFRfT1VUUFVUX1JFQ0VJVkVSOgorCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhwX291dHBhdGhfcGFyYV9hdWRpbyk7IGkrKykgeworCiAJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGhwX291dHBhdGhfcGFyYV9hdWRpb1tpXS5jb250cm9sLCBocF9vdXRwYXRoX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKwogCQl9CisKIAkJYnJlYWs7CisKIAljYXNlIFRfT1VUUFVUX1NQRUFLRVI6CisKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BrX291dHBhdGhfcGFyYV9hdWRpbyk7IGkrKykgeworCiAJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIHNwa19vdXRwYXRoX3BhcmFfYXVkaW9baV0uY29udHJvbCwgc3BrX291dHBhdGhfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOworCiAJCX0KKwogCQlicmVhazsKKwogCWRlZmF1bHQ6CisKIAkJYnJlYWs7CisKIAl9CiAKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X2lucHV0X3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgaW50IHBhdGgpCisKIHsKKwogCWludCBpOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbW9uX2luX3BhcmFfYXVkaW8pOyBpKyspIHsKKwogCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW2ldLmNvbnRyb2wsIGNvbW1vbl9pbl9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7CisKIAl9CiAKLQkjaWYgKGRlZmluZWQgX1VTRV9DT0RFQ19USTMxMDApCisKKworCSNpZiAoZGVmaW5lZCBfVVNFX0NPREVDX1RJMzEwMCl8fChkZWZpbmVkIF9VU0VfQ09ERUNfRVM4MzExKQorCiAJc3dpdGNoIChwYXRoKSB7CisKIAljYXNlIFRfSU5QVVRfTUlDTFA6CisKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWFpbl9taWNfaW5wYXRoX3BhcmFfYXVkaW8pOyBpKyspIHsKKwogCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tpXS5jb250cm9sLCBtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpb1tpXS52YWx1ZXMpOworCiAJCX0KKwogCQlicmVhazsKKwogCWNhc2UgVF9JTlBVVF9NSUNSUDoKKwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvKTsgaSsrKSB7CisKIAkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgYXV4X21pY19pbnBhdGhfcGFyYV9hdWRpb1tpXS5jb250cm9sLCBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7CisKIAkJfQorCiAJCWJyZWFrOworCiAJZGVmYXVsdDoKKwogCQlicmVhazsKKwogCX0KIAogCisKIAkjZWxzZQorCiAJc3dpdGNoIChwYXRoKSB7Ci0JY2FzZSBUX0lOUFVUX0hBTkRTRVQ6Ci0JY2FzZSBUX0lOUFVUX1NQRUFLRVI6CisKKwljYXNlIENPREVDX0lOUFVUX01JQ1BIT05FOgorCisJY2FzZSBDT0RFQ19JTlBVVF9CTFVFVE9PVEg6CisKKwljYXNlIENPREVDX0lOUFVUX0hBTkRTRlJFRToKKwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYWluX21pY19pbnBhdGhfcGFyYV9hdWRpbyk7IGkrKykgeworCiAJCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW2ldLmNvbnRyb2wsIG1haW5fbWljX2lucGF0aF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7CisKIAkJfQorCiAJCWJyZWFrOwotCWNhc2UgVF9JTlBVVF9IRUFEU0VUOgorCisJY2FzZSBDT0RFQ19JTlBVVF9IRUFEU0VUOgorCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW8pOyBpKyspIHsKKwogCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBhdXhfbWljX2lucGF0aF9wYXJhX2F1ZGlvW2ldLmNvbnRyb2wsIGF1eF9taWNfaW5wYXRoX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKwogCQl9CisKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgorCiAJCWJyZWFrOworCiAJfQkKKwogCSNlbmRpZgogCisKKwogCXJldHVybiAwOworCiB9CisKIC8qCisKIGludCBtaXhfc2V0X2lucHV0X3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyICpuYW1lID0gaW5wdXRfYWRjX3ZvbC5jb250cm9sOworCiAJaW50IG51bV92YWx1ZXMsIGk7CisKIAlpbnQgdm9sID0gaW5wdXRfdm9sX2NvbnZlcnNpb24odm9sdW1lKTsKIAorCisKIAljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisKIAkJcmV0dXJuIC0xOworCiAJfQogCisKKwogICAgIG51bV92YWx1ZXMgPSBtaXhlcl9jdGxfZ2V0X251bV92YWx1ZXMoY3RsKTsKIAorCisKICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3ZhbHVlczsgaSsrKSB7CisKIAkJbWl4ZXJfY3RsX3NldF92YWx1ZShjdGwsIGksIHZvbCk7CisKICAgICB9CiAKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X291dHB1dF92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50IHZvbHVtZSkKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJY2hhciAqbmFtZSA9IG91dHB1dF9kYWNfdm9sLmNvbnRyb2w7CisKIAlpbnQgbnVtX3ZhbHVlcywgaTsKIAorCisKIAlpbnQgdm9sID0gb3V0cHV0X3ZvbF9jb252ZXJzaW9uKHZvbHVtZSk7CiAKKworCiAJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKKwogCWlmICghY3RsKSB7CisKIAkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CiAKKworCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgeworCiAJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBpLCB2b2wpOworCiAgICAgfQogCisKKwogCXJldHVybiAwOworCiB9CiAKKworCiBpbnQgbWl4X3NldF9vdXRwdXRfbXV0ZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBib29sIGVuYWJsZSkKKwogeworCiAJc3RydWN0IG1peGVyX2N0bCAqY3RsOworCiAJY2hhciAqbmFtZSA9IGRhY19tdXRlLmNvbnRyb2w7IAorCiAJaW50IG51bV92YWx1ZXMsIGk7CiAKKworCiAJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBuYW1lKTsKKwogCWlmICghY3RsKSB7CisKIAkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIG1peGVyIGNvbnRyb2xcbiIpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAludW1fdmFsdWVzID0gbWl4ZXJfY3RsX2dldF9udW1fdmFsdWVzKGN0bCk7CiAKKworCiAgICAgZm9yIChpID0gMDsgaSA8IG51bV92YWx1ZXM7IGkrKykgeworCiAJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBpLCBlbmFibGUpOworCiAgICAgfQogCisKKwogCXJldHVybiAwOworCiB9CiAKKworCiBpbnQgbWl4X3NldF9pbnB1dF9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyICpuYW1lID0gYWRjX211dGUuY29udHJvbDsKKwogCWN0bCA9IG1peGVyX2dldF9jdGxfYnlfbmFtZShtaXhlciwgbmFtZSk7CisKIAlpbnQgbnVtX3ZhbHVlcywgaTsKIAorCisKIAlpZiAoIWN0bCkgeworCiAJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBtaXhlciBjb250cm9sXG4iKTsKKwogCQlyZXR1cm4gLTE7CisKIAl9CiAKKworCiAJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fdmFsdWVzOyBpKyspIHsKKwogCQltaXhlcl9jdGxfc2V0X3ZhbHVlKGN0bCwgMCwgZW5hYmxlKTsKKwogICAgIH0KKwogCQkKKwogCXJldHVybiAwOworCiB9CiAKKworCiBpbnQgbWl4X3NldF9vdXRwdXRwYXRoX29ub2ZmKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoICxib29sIG9ub2ZmKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAlzdHJ1Y3QgYXVkaW9fcGFyYV9jb25mICpwYXRoX3BhcmE7CisKIAlpbnQgaSwgaiwgbnVtX3ZhbHVlcywgc2l6ZTsKKwogCXN3aXRjaChwYXRoKSB7CisKIAljYXNlIFRfT1VUUFVUX1JFQ0VJVkVSOgorCiAJCXNpemUgPSBBUlJBWV9TSVpFKHJjdl9wYXRoX29ub2ZmKTsKKwogCQlwYXRoX3BhcmEgPSByY3ZfcGF0aF9vbm9mZjsKKwogCQlicmVhazsKKwogCWNhc2UgVF9PVVRQVVRfU1BFQUtFUjoKKwogCQlzaXplID0gQVJSQVlfU0laRShzcGtfcGF0aF9vbm9mZik7CisKIAkJcGF0aF9wYXJhID0gc3BrX3BhdGhfb25vZmY7CisKIAkJYnJlYWs7CisKIAljYXNlIFRfT1VUUFVUX0hFQURTRVQ6CisKIAkJc2l6ZSA9IEFSUkFZX1NJWkUoZWFycF9wYXRoX29ub2ZmKTsKKwogCQlwYXRoX3BhcmEgPSBlYXJwX3BhdGhfb25vZmY7CisKIAkJYnJlYWs7CisKIAlkZWZhdWx0OgorCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisKIAkJY3RsID0gbWl4ZXJfZ2V0X2N0bF9ieV9uYW1lKG1peGVyLCBwYXRoX3BhcmFbaV0uY29udHJvbCk7CisKIAkJbnVtX3ZhbHVlcyA9IG1peGVyX2N0bF9nZXRfbnVtX3ZhbHVlcyhjdGwpOwogCisKKwogCSAgICBmb3IgKGogPSAwOyBqIDwgbnVtX3ZhbHVlczsgaisrKSB7CisKIAkJCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCBqLCBvbm9mZik7CisKIAkgICAgfQogCisKKwogLy8JCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgc3BrX3BhdGhfb25vZmZbaV0uY29udHJvbCwgc3BrX3BhdGhfb25vZmZbaV0udmFsdWVzKTsKKwogICAgIH0KIAorCisKIAlyZXR1cm4gMDsKKwogfQorCiAqLwogCiAKQEAgLTIwNDEsMjQ4ICs0NDI3LDUwNSBAQAogCiAKIAorCisKKworCisKKworCiBpbnQgbWl4X3NldF92b2ljZV9wYXRoKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoKQorCiB7CisKIAlpbnQgaTsKKwogLyoKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9pbl9wYXJhX2F1ZGlvKTsgaSsrKSB7CisKIAkJdGlueW1peF9zZXRfdmFsdWVfdGVzdChtaXhlciwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0uY29udHJvbCwgY29tbW9uX2luX3BhcmFfYXVkaW9baV0udmFsdWVzKTsKLQl9Ci0JCi0JZm9yKGkgPSAwO2k8QVJSQVlfU0laRShjb21tb25fb3V0X3BhcmFfYXVkaW8pO2krKykKLQl7Ci0gCSAgCXRpbnltaXhfc2V0X3ZhbHVlX3Rlc3QobWl4ZXIsY29tbW9uX291dF9wYXJhX2F1ZGlvW2ldLmNvbnRyb2wsY29tbW9uX291dF9wYXJhX2F1ZGlvW2ldLnZhbHVlcyk7Ci0JfQotKi8JCi0Jc3dpdGNoIChwYXRoKSB7Ci0JY2FzZSBUX09VVFBVVF9SRUNFSVZFUjoKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGFuZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZSk7IGkrKykJewotCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLmNvbnRyb2wsIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0udmFsdWVzKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFRfT1VUUFVUX1NQRUFLRVI6Ci0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNwa19pbm91dHBhdGhfcGFyYV92b2ljZSk7IGkrKykgewotCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBzcGtfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0uY29udHJvbCwgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLnZhbHVlcyk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBUX09VVFBVVF9IRUFEU0VUOgotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlKTsgaSsrKSB7Ci0JCQltaXhfc2V0X3ZhbHVlX3dyYXAobWl4ZXIsIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0uY29udHJvbCwgaGVhZHNldF9pbm91dHBhdGhfcGFyYV92b2ljZVtpXS52YWx1ZXMpOwotCQl9Ci0JZGVmYXVsdDoKLQkJYnJlYWs7CisKIAl9CiAKKwkKKworCWZvcihpID0gMDtpPEFSUkFZX1NJWkUoY29tbW9uX291dF9wYXJhX2F1ZGlvKTtpKyspCisKKwl7CisKKyAJICAJdGlueW1peF9zZXRfdmFsdWVfdGVzdChtaXhlcixjb21tb25fb3V0X3BhcmFfYXVkaW9baV0uY29udHJvbCxjb21tb25fb3V0X3BhcmFfYXVkaW9baV0udmFsdWVzKTsKKworCX0KKworKi8JCisKKwlzd2l0Y2ggKHBhdGgpIHsKKworCWNhc2UgVF9PVVRQVVRfUkVDRUlWRVI6CisKKwkJcHJpbnRmKCJ5YW5taW5nIG1peF9zZXRfdm9pY2VfcGF0aCByZWNlaXZlclxuIik7CisKKworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2UpOyBpKyspCXsKKworCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBoYW5kc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLmNvbnRyb2wsIGhhbmRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0udmFsdWVzKTsKKworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIFRfT1VUUFVUX1NQRUFLRVI6CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlKTsgaSsrKSB7CisKKwkJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgc3BrX2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLmNvbnRyb2wsIHNwa19pbm91dHBhdGhfcGFyYV92b2ljZVtpXS52YWx1ZXMpOworCisJCX0KKworCQlicmVhazsKKworCWNhc2UgVF9PVVRQVVRfSEVBRFNFVDoKKworCQlwcmludGYoInlhbm1pbmcgbWl4X3NldF92b2ljZV9wYXRoIGhlYWRzZXRcbiIpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2UpOyBpKyspIHsKKworCQkJbWl4X3NldF92YWx1ZV93cmFwKG1peGVyLCBoZWFkc2V0X2lub3V0cGF0aF9wYXJhX3ZvaWNlW2ldLmNvbnRyb2wsIGhlYWRzZXRfaW5vdXRwYXRoX3BhcmFfdm9pY2VbaV0udmFsdWVzKTsKKworCQl9CisKKwlkZWZhdWx0OgorCisJCWJyZWFrOworCisJfQorCisKKwogCXJldHVybiAwOworCiB9CiAKIAorCisKKwogaW50IG1peF9nZXRfdm9pY2VfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgKnBhdGgpCisKIHsKIAorCisKIAltaXhfZ2V0X3ZhbHVlX3dyYXAobWl4ZXIsICJhdWRpbyBwYXRoIHNlbGVjdCIsIHBhdGgpOwogCisKKwogCXJldHVybiAwOwogCisKKwogfQorCiAvKgogCisKKwogaW50IG1peF9zZXRfaW5fY2FsbF90b25lKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB0b250eXBlKQorCiB7CisKIAlzdHJ1Y3QgbWl4ZXJfY3RsICpjdGw7CisKIAljaGFyIG5hbWVbXSA9ICJ2b2ljZSB0b25lIHNlbCI7CisKIAljdGwgPSBtaXhlcl9nZXRfY3RsX2J5X25hbWUobWl4ZXIsIG5hbWUpOworCiAJaWYgKCFjdGwpIHsKKwogCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgbWl4ZXIgY29udHJvbFxuIik7CisKIAkJcmV0dXJuIC0xOworCiAJfQogCisKKwogCW1peGVyX2N0bF9zZXRfdmFsdWUoY3RsLCAwLCB0b250eXBlKTsKIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfZGVmYXVsdF9wYXJhbShzdHJ1Y3QgbWl4ZXIgKm1peGVyKSAKKwogeworCiAJaW50IGk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X2RlZmF1bHRfcGFyYSk7IGkrKykgeworCiAJCW1peF9zZXRfdmFsdWVfd3JhcChtaXhlciwgaW5pdF9kZWZhdWx0X3BhcmFbaV0uY29udHJvbCwgaW5pdF9kZWZhdWx0X3BhcmFbaV0udmFsdWVzKTsKKwogCX0KKwogCQorCiAJcmV0dXJuIDA7CisKIH0KIAorCisKICovCiAKKworCiAJCisKIAkKKwogCQotLy/vv73vv73vv73vv712b2ljZe+/ve+/vca177+96LG4xKPKvSBkZXZfbW9kZe+/ve+/vWhhbmRzZXQsc3BlYWtlcixoZWFkc2V0CTAg77+977+9yr7vv73Jue+/ve+/ve+/vSDvv73vv73vv73vv73vv73vv73Kvu+/vdC077+977+977+9CisKKy8v6ZSf5pak5ou36ZSf5pak5ou3dm9pY2XplJ/mlqTmi7fpopHplJ/lgJ/lpIfmqKHlvI8gZGV2X21vZGXplJ/mlqTmi7doYW5kc2V0LHNwZWFrZXIsaGVhZHNldAkwIOmUn+aWpOaLt+ekuumUn+e8tOeZuOaLt+mUn+aWpOaLtyDplJ/mlqTmi7fplJ/mlqTmi7fplJ/mlqTmi7fnpLrplJ/lj6vovr7mi7fplJ/mlqTmi7cKKwogaW50IHNldF92b2ljZV9kZXZpY2VfbW9kZShpbnQgZGV2X21vZGUpCisKIHsKIAorCisKIAlzdHJ1Y3QgbWl4ZXIgKnZvaWNlX21peGVyID0gTlVMTDsKKwogCXByaW50ZigiJXM6IHN0YXJ0IGRldl9tb2RlPSVkIVxuIixfX2Z1bmNfXywgZGV2X21vZGUpOwogCisKKwogCWlmICgoZGV2X21vZGUgPCBUX09VVFBVVF9IQU5EU0VUICkgfHwoZGV2X21vZGUgPj0gVF9PVVRQVVRfTUFYKSl7CisKIAkJcHJpbnRmKCIlczogZGV2X21vZGUgbm90IHN1cHBvcnQsIGRldl9tb2RlPSVkIVxuIixfX2Z1bmNfXywgZGV2X21vZGUpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAkvL29wZW4gbWl4ZXIgZGV2IGZvciAgY29udHJvbAorCiAJdm9pY2VfbWl4ZXIgPSBtaXhlcl9vcGVuKFZPQ0lFX1NORF9DQVJEX05VTSk7CisKIAlpZiAoIXZvaWNlX21peGVyKSB7CisKIAkJcHJpbnRmKCJ2b2ljZV9taXhlciBvcGVuIGZhaWxlZCFcbiIpOworCiAJCXJldHVybiAtMTsKKwogCX0KIAorCisKIAkvL2NvbmZpZyBtaXhlciBkZXYKKwogCW1peF9zZXRfdm9pY2VfcGF0aCh2b2ljZV9taXhlciwgZGV2X21vZGUpOwogCisKKwogCS8vY2xvc2UgbWl4ZXIKKwogCW1peGVyX2Nsb3NlKHZvaWNlX21peGVyKTsKKwogCXZvaWNlX21peGVyID0gTlVMTDsKIAogCisKKworCiAJcmV0dXJuIDA7CisKIAkKKwogCQorCiB9CiAKKworCiAvLyNpZmRlZiBfQ1BFX0FVRElPX1BSSgorCiAjZWxzZQorCiBpbnQgbWl4X3NldF9vdXRwdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKKwogeworCiAJCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfaW5wdXRfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCkKKwogewogCiAKKworCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfaW5wdXRfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpCisKIHsKIAogCisKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X291dHB1dF92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50IHZvbHVtZSkKKwogewogCiAKKworCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfb3V0cHV0X211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKIAogCisKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X2lucHV0X211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKIAorCisKIAkJCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9zZXRfb3V0cHV0cGF0aF9vbm9mZihzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCAsYm9vbCBvbm9mZikKKwogewogCisKKwogCXJldHVybiAwOworCiB9CiAKIAorCisKKwogaW50IG1peF9zZXRfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpCisKIHsKIAogCisKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKIAorCisKIAkKKwogCXJldHVybiAwOworCiB9CiAKKworCiBpbnQgbWl4X3NldF92b2ljZV9wYXRoKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCBwYXRoKQorCiB7CisKIAlpbnQgaTsKIAogCisKKworCiAJcmV0dXJuIDA7CisKIH0KIAogCisKKworCiBpbnQgbWl4X3NldF9pbl9jYWxsX3RvbmUoc3RydWN0IG1peGVyICptaXhlciwgaW50IHRvbnR5cGUpCisKIHsKIAogCisKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X2RlZmF1bHRfcGFyYW0oc3RydWN0IG1peGVyICptaXhlcikgCisKIHsKIAorCisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9nZXRfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqdm9sdW1lKQorCiB7CiAKKworCiAJcmV0dXJuIDA7CisKIH0KIAorCisKIGludCBtaXhfc2V0X3R4X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKQorCiB7CisKIAlyZXR1cm4gMDsKKwogfQogCisKKwogaW50IG1peF9nZXRfdHhfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqdm9sdW1lKQorCiB7CiAKKworCiAJcmV0dXJuIDA7CiAKKworCiB9CiAKKworCiBpbnQgbWl4X2dldF92b2ljZV9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqZW5hYmxlKQorCiB7CiAKKworCiAJcmV0dXJuIDA7CiAKKworCiB9CiAKKworCiAvL3ZvaWNlIGRvd25saW5rIG11dGUKIAorCisKIGludCBtaXhfc2V0X3J4X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpCisKIHsKKwogCXJldHVybiAwOworCiB9CisKIGludCBtaXhfZ2V0X3J4X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgaW50ICplbmFibGUpCisKIHsKIAorCisKIAlyZXR1cm4gMDsKIAorCisKIH0KIAorCisKIGludCBtaXhfZ2V0X3ZvaWNlX3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgaW50ICpwYXRoKQorCiB7CiAKKworCiAJcmV0dXJuIDA7CiAKKworCiB9CiAKKworCiBpbnQgc2V0X3ZvaWNlX2RldmljZV9tb2RlKGludCBkZXZfbW9kZSkKKwogeworCiAgICAgcmV0dXJuIDA7CisKIH0KIAorCisKICNlbmRpZgo=