ZGlmZiAtLWdpdCBhL2FwL2xpYi9saWJ2b2ljZS92b2ljZV9hcGkuYyBiL2FwL2xpYi9saWJ2b2ljZS92b2ljZV9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjI2MmZiCi0tLSAvZGV2L251bGwKKysrIGIvYXAvbGliL2xpYnZvaWNlL3ZvaWNlX2FwaS5jCkBAIC0wLDAgKzEsNDIzIEBACisvKioNCisgKiBAZmlsZSB2b2ljZV9hcGkuYw0KKyAqIEBicmllZiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHVibGljIEFQSXMgb2YgbGlidm9pY2UuDQorICoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgU2FuZWNoaXBzIFRlY2hub2xvZ3kgQ28uLCBMdGQuDQorICogQGF1dGhvciANCisgKiANCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzDQorICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIKOosdjRoaO6R1BMdjIgTGljZW5jZaOpDQorICoNCisgKi8NCisNCisNCisNCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPHN0cmluZy5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisNCisjaW5jbHVkZSA8c3RkaW50Lmg+DQorLy8jaW5jbHVkZSAidm9sdGVfZHJ2LmgiDQorI2luY2x1ZGUgPGxpbnV4L3ZvbHRlX2Rydi5oPg0KKw0KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCisjaW5jbHVkZSA8ZmNudGwuaD4NCisjaW5jbHVkZSA8dGlueWFsc2EvYXVkaW9fbWl4ZXJfY3RybC5oPg0KKyNpbmNsdWRlICJ2b2ljZV9saWIuaCINCisNCisjZGVmaW5lIFZPQ0lFX1NORF9DQVJEX05VTSAwDQorDQorDQorZXh0ZXJuIGludCBtaXhfc2V0X3ZvaWNlX3ZvbChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgdm9sdW1lKTsNCitleHRlcm4gaW50IG1peF9nZXRfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqdm9sdW1lKTsNCitleHRlcm4gaW50IG1peF9zZXRfdHhfdm9pY2Vfdm9sKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCB2b2x1bWUpOw0KK2V4dGVybiBpbnQgbWl4X2dldF90eF92b2ljZV92b2woc3RydWN0IG1peGVyICptaXhlciwgaW50ICp2b2x1bWUpOw0KK2V4dGVybiBpbnQgbWl4X3NldF92b2ljZV9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGJvb2wgZW5hYmxlKTsNCitleHRlcm4gaW50IG1peF9nZXRfdm9pY2VfbXV0ZShzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgKmVuYWJsZSk7DQorZXh0ZXJuIGludCBtaXhfc2V0X3J4X3ZvaWNlX211dGUoc3RydWN0IG1peGVyICptaXhlciwgYm9vbCBlbmFibGUpOw0KK2V4dGVybiBpbnQgbWl4X2dldF9yeF92b2ljZV9tdXRlKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqZW5hYmxlKTsNCitleHRlcm4gaW50IG1peF9zZXRfdm9pY2VfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgcGF0aCk7DQorZXh0ZXJuIGludCBtaXhfc2V0X3ZwX3BhdGgoc3RydWN0IG1peGVyICptaXhlciwgY2hhciBwYXRoKTsNCitleHRlcm4gaW50IG1peF9nZXRfdnBfcGF0aChzdHJ1Y3QgbWl4ZXIgKm1peGVyLCBpbnQgKnBhdGgpOw0KK2V4dGVybiBpbnQgbWl4X2dldF92b2ljZV9wYXRoKHN0cnVjdCBtaXhlciAqbWl4ZXIsIGludCAqcGF0aCk7DQorDQorDQorCQ0KKyNkZWZpbmUgVk9DSUVfU05EX0NBUkRfTlVNIDANCisJDQorCQ0KKwkNCisvL+iuvue9rnZvaWNl6Z+z6aKR6K6+5aSH5qih5byPIGRldl9tb2Rl77yaaGFuZHNldCxzcGVha2VyLGhlYWRzZXQJMCDooajnpLrmiJDlip/vvD/lhbblroPooajnpLrmnInplJnorz8NCitpbnQgc2V0X3ZvaWNlX2RldmljZV9tb2RlKGludCBkZXZfbW9kZSkNCit7DQorDQorCXN0cnVjdCBtaXhlciAqdm9pY2VfbWl4ZXIgPSBOVUxMOw0KKwlwcmludGYoIiVzOiBzdGFydCBkZXZfbW9kZT0lZCFcbiIsX19mdW5jX18sIGRldl9tb2RlKTsNCisNCisJaWYgKChkZXZfbW9kZSA8IFRfT1VUUFVUX0hBTkRTRVQgKSB8fChkZXZfbW9kZSA+PSBUX09VVFBVVF9NQVgpKXsNCisJCXByaW50ZigiJXM6IGRldl9tb2RlIG5vdCBzdXBwb3J0LCBkZXZfbW9kZT0lZCFcbiIsX19mdW5jX18sIGRldl9tb2RlKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwkvL29wZW4gbWl4ZXIgZGV2IGZvciAgY29udHJvbA0KKwl2b2ljZV9taXhlciA9IG1peGVyX29wZW4oVk9DSUVfU05EX0NBUkRfTlVNKTsNCisJaWYgKCF2b2ljZV9taXhlcikgew0KKwkJcHJpbnRmKCJ2b2ljZV9taXhlciBvcGVuIGZhaWxlZCFcbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8vY29uZmlnIG1peGVyIGRldg0KKwltaXhfc2V0X3ZvaWNlX3BhdGgodm9pY2VfbWl4ZXIsIGRldl9tb2RlKTsNCisNCisJLy9jbG9zZSBtaXhlcg0KKwltaXhlcl9jbG9zZSh2b2ljZV9taXhlcik7DQorCXZvaWNlX21peGVyID0gTlVMTDsNCisNCisNCisJcmV0dXJuIDA7DQorCQ0KKwkNCit9DQorDQorDQorDQoraW50IHNjX2F1ZGlvX3NldF92b2ljZV9kZXZpY2VfbW9kZShpbnQgZGV2X21vZGUpDQorew0KKw0KKwlzdHJ1Y3QgbWl4ZXIgKnZvaWNlX21peGVyID0gTlVMTDsNCisJcHJpbnRmKCIlczogc3RhcnQgZGV2X21vZGU9JWQhXG4iLF9fZnVuY19fLCBkZXZfbW9kZSk7DQorDQorCWlmICgoZGV2X21vZGUgPCBUX09VVFBVVF9IQU5EU0VUICkgfHwoZGV2X21vZGUgPj0gVF9PVVRQVVRfTUFYKSl7DQorCQlwcmludGYoIiVzOiBkZXZfbW9kZSBub3Qgc3VwcG9ydCwgZGV2X21vZGU9JWQhXG4iLF9fZnVuY19fLCBkZXZfbW9kZSk7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9vcGVuIG1peGVyIGRldiBmb3IgIGNvbnRyb2wNCisJdm9pY2VfbWl4ZXIgPSBtaXhlcl9vcGVuKFZPQ0lFX1NORF9DQVJEX05VTSk7DQorCWlmICghdm9pY2VfbWl4ZXIpIHsNCisJCXByaW50Zigidm9pY2VfbWl4ZXIgb3BlbiBmYWlsZWQhXG4iKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKyNpZmRlZiBfQUxTQV9DT0RFQ19JTl9DQVANCisJbWl4X3NldF92cF9wYXRoKHZvaWNlX21peGVyLGRldl9tb2RlKTsNCisNCisjZWxzZQ0KKwkvL2NvbmZpZyBtaXhlciBkZXYNCisJbWl4X3NldF92b2ljZV9wYXRoKHZvaWNlX21peGVyLCBkZXZfbW9kZSk7DQorI2VuZGlmDQorDQorDQorCS8vY2xvc2UgbWl4ZXINCisJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwl2b2ljZV9taXhlciA9IE5VTEw7DQorDQorDQorCXJldHVybiAwOw0KKwkNCisJDQorfQ0KKw0KKw0KK2ludCBzY19hdWRpb19nZXRfdm9pY2VfZGV2aWNlX21vZGUoaW50ICpwX2Rldl9tb2RlKQ0KK3sNCisJc3RydWN0IG1peGVyICp2b2ljZV9taXhlciA9IE5VTEw7DQorCXByaW50ZigiJXM6IHN0YXJ0IVxuIixfX2Z1bmNfXyk7DQorDQorCS8vb3BlbiBtaXhlciBkZXYgZm9yICBjb250cm9sDQorCXZvaWNlX21peGVyID0gbWl4ZXJfb3BlbihWT0NJRV9TTkRfQ0FSRF9OVU0pOw0KKwlpZiAoIXZvaWNlX21peGVyKSB7DQorCQlwcmludGYoInZvaWNlX21peGVyIG9wZW4gZmFpbGVkIVxuIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9jb25maWcgbWl4ZXIgZGV2DQorCW1peF9nZXRfdnBfcGF0aCh2b2ljZV9taXhlciwgcF9kZXZfbW9kZSk7DQorDQorCQ0KKwlpZigoKnBfZGV2X21vZGUgPCBUX09VVFBVVF9IQU5EU0VUICkgfHwoKnBfZGV2X21vZGUgPj0gVF9PVVRQVVRfTUFYKSl7DQorCQlwcmludGYoIiVzOiBkZXZfbW9kZSBub3Qgc3VwcG9ydCwgKnBfZGV2X21vZGU9JWQhXG4iLF9fZnVuY19fLCAqcF9kZXZfbW9kZSk7DQorCQkvL3JldHVybiAtMTsNCisJfQ0KKwlwcmludGYoIiVzOiBzdGFydCAqcF9kZXZfbW9kZT0lZCFcbiIsX19mdW5jX18sICpwX2Rldl9tb2RlKTsNCisNCisJLy9jbG9zZSBtaXhlcg0KKwltaXhlcl9jbG9zZSh2b2ljZV9taXhlcik7DQorCXZvaWNlX21peGVyID0gTlVMTDsNCisNCisJcmV0dXJuIDA7DQorCQ0KK30NCisNCisNCitpbnQgc2NfYXVkaW9fc2V0X3J4X3ZvaWNlX3ZvbChpbnQgdm9sKQ0KK3sNCisJc3RydWN0IG1peGVyICp2b2ljZV9taXhlciA9IE5VTEw7DQorCXByaW50ZigiJXM6IHN0YXJ0IHZvbD0lZCFcbiIsX19mdW5jX18sIHZvbCk7DQorDQorCWlmICgodm9sIDwgMCApIHx8KHZvbCA+IDExKSl7DQorCQlwcmludGYoIiVzOiB2b2wgbm90IHN1cHBvcnQsIHZvbD0lZCFcbiIsX19mdW5jX18sIHZvbCk7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9vcGVuIG1peGVyIGRldiBmb3IgIGNvbnRyb2wNCisJdm9pY2VfbWl4ZXIgPSBtaXhlcl9vcGVuKFZPQ0lFX1NORF9DQVJEX05VTSk7DQorCWlmICghdm9pY2VfbWl4ZXIpIHsNCisJCXByaW50Zigidm9pY2VfbWl4ZXIgb3BlbiBmYWlsZWQhXG4iKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwkvL2NvbmZpZyBtaXhlciBkZXYNCisJbWl4X3NldF92b2ljZV92b2wodm9pY2VfbWl4ZXIsIHZvbCk7DQorDQorCS8vY2xvc2UgbWl4ZXINCisJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwl2b2ljZV9taXhlciA9IE5VTEw7DQorDQorDQorCXJldHVybiAwOw0KKw0KKw0KKwkNCisJDQorfQ0KKw0KKw0KKw0KK2ludCBzY19hdWRpb19nZXRfcnhfdm9pY2Vfdm9sKGludCAgICAgKiBwX3ZvbCkNCit7DQorCXN0cnVjdCBtaXhlciAqdm9pY2VfbWl4ZXIgPSBOVUxMOw0KKw0KKwlwcmludGYoIiVzOiBzdGFydCFcbiIsX19mdW5jX18pOw0KKw0KKwkvL29wZW4gbWl4ZXIgZGV2IGZvciAgY29udHJvbA0KKwl2b2ljZV9taXhlciA9IG1peGVyX29wZW4oVk9DSUVfU05EX0NBUkRfTlVNKTsNCisJaWYgKCF2b2ljZV9taXhlcikgew0KKwkJcHJpbnRmKCJ2b2ljZV9taXhlciBvcGVuIGZhaWxlZCFcbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8vY29uZmlnIG1peGVyIGRldg0KKwltaXhfZ2V0X3ZvaWNlX3ZvbCh2b2ljZV9taXhlciwgcF92b2wpOw0KKwkNCisNCisJaWYgKCgqcF92b2wgPCAwICkgfHwoKnBfdm9sID4gMTEpKXsNCisJCXByaW50ZigiJXM6IHZvbCBub3Qgc3VwcG9ydCwgKnBfdm9sPSVkIVxuIixfX2Z1bmNfXywgKnBfdm9sKTsNCisJCS8vcmV0dXJuIC0xOw0KKwl9DQorCXByaW50ZigiJXM6ICAqcF92b2w9JWQhXG4iLF9fZnVuY19fLCAqcF92b2wpOw0KKw0KKwkvL2Nsb3NlIG1peGVyDQorCW1peGVyX2Nsb3NlKHZvaWNlX21peGVyKTsNCisJdm9pY2VfbWl4ZXIgPSBOVUxMOw0KKw0KKw0KKwlyZXR1cm4gMDsNCisNCisJDQorCQ0KK30NCisNCisNCisNCitpbnQgc2NfYXVkaW9fc2V0X3R4X3ZvaWNlX3ZvbChpbnQgdm9sKQ0KK3sNCisJc3RydWN0IG1peGVyICp2b2ljZV9taXhlciA9IE5VTEw7DQorCXByaW50ZigiJXM6IHN0YXJ0IHZvbD0lZCFcbiIsX19mdW5jX18sIHZvbCk7DQorDQorCWlmICgodm9sIDwgMCApIHx8KHZvbCA+IDExKSl7DQorCQlwcmludGYoIiVzOiB2b2wgbm90IHN1cHBvcnQsIHZvbD0lZCFcbiIsX19mdW5jX18sIHZvbCk7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9vcGVuIG1peGVyIGRldiBmb3IgIGNvbnRyb2wNCisJdm9pY2VfbWl4ZXIgPSBtaXhlcl9vcGVuKFZPQ0lFX1NORF9DQVJEX05VTSk7DQorCWlmICghdm9pY2VfbWl4ZXIpIHsNCisJCXByaW50Zigidm9pY2VfbWl4ZXIgb3BlbiBmYWlsZWQhXG4iKTsNCisJCXJldHVybiAtMTsNCisJfQ0KKw0KKwkvL2NvbmZpZyBtaXhlciBkZXYNCisJbWl4X3NldF90eF92b2ljZV92b2wodm9pY2VfbWl4ZXIsIHZvbCk7DQorDQorCS8vY2xvc2UgbWl4ZXINCisJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwl2b2ljZV9taXhlciA9IE5VTEw7DQorDQorDQorCXJldHVybiAwOw0KKwkNCisJDQorfQ0KKw0KKw0KKw0KK2ludCBzY19hdWRpb19nZXRfdHhfdm9pY2Vfdm9sKGludCAgKnBfdm9sKQ0KK3sNCisJc3RydWN0IG1peGVyICp2b2ljZV9taXhlciA9IE5VTEw7DQorCXByaW50ZigiJXM6IHN0YXJ0IVxuIixfX2Z1bmNfXyk7DQorDQorDQorCS8vb3BlbiBtaXhlciBkZXYgZm9yICBjb250cm9sDQorCXZvaWNlX21peGVyID0gbWl4ZXJfb3BlbihWT0NJRV9TTkRfQ0FSRF9OVU0pOw0KKwlpZiAoIXZvaWNlX21peGVyKSB7DQorCQlwcmludGYoInZvaWNlX21peGVyIG9wZW4gZmFpbGVkIVxuIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9jb25maWcgbWl4ZXIgZGV2DQorCW1peF9nZXRfdHhfdm9pY2Vfdm9sKHZvaWNlX21peGVyLCBwX3ZvbCk7DQorCQ0KKw0KKwlpZigoKnBfdm9sIDwgMCApIHx8KCpwX3ZvbCA+IDUpKXsNCisJCXByaW50ZigiJXM6IHZvbCBub3Qgc3VwcG9ydCwgKnBfdm9sPSVkIVxuIixfX2Z1bmNfXywgKnBfdm9sKTsNCisJCS8vcmV0dXJuIC0xOw0KKwl9DQorCXByaW50ZigiJXM6ICAqcF92b2w9JWQhXG4iLF9fZnVuY19fLCAqcF92b2wpOw0KKw0KKwkvL2Nsb3NlIG1peGVyDQorCW1peGVyX2Nsb3NlKHZvaWNlX21peGVyKTsNCisJdm9pY2VfbWl4ZXIgPSBOVUxMOwkNCisgICAgcmV0dXJuIDA7CQ0KK30NCisNCisNCisNCitpbnQgc2NfYXVkaW9fc2V0X3R4X3ZvaWNlX211dGVfc3RhdGUoaW50IG11dGUgICAgICAgICApDQorew0KKwlzdHJ1Y3QgbWl4ZXIgKnZvaWNlX21peGVyID0gTlVMTDsNCisJcHJpbnRmKCIlczogc3RhcnQgbXV0ZT0lZCFcbiIsX19mdW5jX18sIG11dGUpOw0KKw0KKwlpZigobXV0ZSAhPSAwICkgJiYobXV0ZSAhPSAxKSkgew0KKwkJcHJpbnRmKCIlczogbXV0ZSBub3Qgc3VwcG9ydCwgbXV0ZT0lZCFcbiIsX19mdW5jX18sIG11dGUpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8vb3BlbiBtaXhlciBkZXYgZm9yICBjb250cm9sDQorCXZvaWNlX21peGVyID0gbWl4ZXJfb3BlbihWT0NJRV9TTkRfQ0FSRF9OVU0pOw0KKwlpZiAoIXZvaWNlX21peGVyKSB7DQorCQlwcmludGYoInZvaWNlX21peGVyIG9wZW4gZmFpbGVkIVxuIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9jb25maWcgbWl4ZXIgZGV2DQorCW1peF9zZXRfdm9pY2VfbXV0ZSh2b2ljZV9taXhlciwgbXV0ZSk7DQorDQorCS8vY2xvc2UgbWl4ZXINCisJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwl2b2ljZV9taXhlciA9IE5VTEw7DQorICAgIHJldHVybiAwOwkNCisJDQorfQ0KKw0KK2ludCBzY19hdWRpb19nZXRfdHhfdm9pY2VfbXV0ZV9zdGF0ZShpbnQgKnBfbXV0ZSkNCit7DQorCXN0cnVjdCBtaXhlciAqdm9pY2VfbWl4ZXIgPSBOVUxMOw0KKw0KKwlwcmludGYoIiVzOiBzdGFydCFcbiIsX19mdW5jX18pOw0KKw0KKwkvL29wZW4gbWl4ZXIgZGV2IGZvciAgY29udHJvbA0KKwl2b2ljZV9taXhlciA9IG1peGVyX29wZW4oVk9DSUVfU05EX0NBUkRfTlVNKTsNCisJaWYgKCF2b2ljZV9taXhlcikgew0KKwkJcHJpbnRmKCJ2b2ljZV9taXhlciBvcGVuIGZhaWxlZCFcbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8vY29uZmlnIG1peGVyIGRldg0KKwltaXhfZ2V0X3ZvaWNlX211dGUodm9pY2VfbWl4ZXIsIHBfbXV0ZSk7DQorCQ0KKw0KKwlpZigoKnBfbXV0ZSAhPSAwICkgJiYoKnBfbXV0ZSAhPSAxKSkgew0KKwkJcHJpbnRmKCIlczogKnBfbXV0ZSBub3Qgc3VwcG9ydCwgKnBfbXV0ZT0lZCFcbiIsX19mdW5jX18sICpwX211dGUpOw0KKwkJLy9jbG9zZSBtaXhlcg0KKwkgICAgbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwkgICAgdm9pY2VfbWl4ZXIgPSBOVUxMOwkNCisJCXJldHVybiAtMTsNCisJfQ0KKwlwcmludGYoIiVzOiAgKnBfbXV0ZT0lZCFcbiIsX19mdW5jX18sICpwX211dGUpOw0KKw0KKwkvL2Nsb3NlIG1peGVyDQorCW1peGVyX2Nsb3NlKHZvaWNlX21peGVyKTsNCisJdm9pY2VfbWl4ZXIgPSBOVUxMOwkNCisNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKw0KKw0KKw0KKw0KKw0KKw0KK2ludCBzY19hdWRpb19zZXRfcnhfdm9pY2VfbXV0ZV9zdGF0ZShpbnQgbXV0ZSkgDQorew0KKwlzdHJ1Y3QgbWl4ZXIgKnZvaWNlX21peGVyID0gTlVMTDsNCisJcHJpbnRmKCIlczogc3RhcnQgbXV0ZT0lZCFcbiIsX19mdW5jX18sIG11dGUpOw0KKw0KKwlpZigobXV0ZSAhPSAwICkgJiYobXV0ZSAhPSAxKSkgew0KKwkJcHJpbnRmKCIlczogbXV0ZSBub3Qgc3VwcG9ydCwgbXV0ZT0lZCFcbiIsX19mdW5jX18sIG11dGUpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8vb3BlbiBtaXhlciBkZXYgZm9yICBjb250cm9sDQorCXZvaWNlX21peGVyID0gbWl4ZXJfb3BlbihWT0NJRV9TTkRfQ0FSRF9OVU0pOw0KKwlpZiAoIXZvaWNlX21peGVyKSB7DQorCQlwcmludGYoInZvaWNlX21peGVyIG9wZW4gZmFpbGVkIVxuIik7DQorCQlyZXR1cm4gLTE7DQorCX0NCisNCisJLy9jb25maWcgbWl4ZXIgZGV2DQorCW1peF9zZXRfcnhfdm9pY2VfbXV0ZSh2b2ljZV9taXhlciwgbXV0ZSk7DQorDQorCS8vY2xvc2UgbWl4ZXINCisJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwl2b2ljZV9taXhlciA9IE5VTEw7DQorICAgIHJldHVybiAwOwkNCisJDQorfQ0KKw0KKw0KK2ludCBzY19hdWRpb19nZXRfcnhfdm9pY2VfbXV0ZV9zdGF0ZShpbnQgKnBfbXV0ZSl7DQorCXN0cnVjdCBtaXhlciAqdm9pY2VfbWl4ZXIgPSBOVUxMOw0KKw0KKwlwcmludGYoIiVzOiBzdGFydCFcbiIsX19mdW5jX18pOw0KKw0KKwkvL29wZW4gbWl4ZXIgZGV2IGZvciAgY29udHJvbA0KKwl2b2ljZV9taXhlciA9IG1peGVyX29wZW4oVk9DSUVfU05EX0NBUkRfTlVNKTsNCisJaWYgKCF2b2ljZV9taXhlcikgew0KKwkJcHJpbnRmKCJ2b2ljZV9taXhlciBvcGVuIGZhaWxlZCFcbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCS8vY29uZmlnIG1peGVyIGRldg0KKwltaXhfZ2V0X3J4X3ZvaWNlX211dGUodm9pY2VfbWl4ZXIsIHBfbXV0ZSk7DQorCQ0KKwlpZigoKnBfbXV0ZSAhPSAwICkgJiYoKnBfbXV0ZSAhPSAxKSkgew0KKw0KKwkJcHJpbnRmKCIlczogKnBfbXV0ZSBub3Qgc3VwcG9ydCwgKnBfbXV0ZT0lZCFcbiIsX19mdW5jX18sICpwX211dGUpOw0KKwkJLy9jbG9zZSBtaXhlcg0KKwkgICAgbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwkgICAgdm9pY2VfbWl4ZXIgPSBOVUxMOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorCXByaW50ZigiJXM6ICAqcF9tdXRlPSVkIVxuIixfX2Z1bmNfXywgKnBfbXV0ZSk7DQorDQorCS8vY2xvc2UgbWl4ZXINCisJbWl4ZXJfY2xvc2Uodm9pY2VfbWl4ZXIpOw0KKwl2b2ljZV9taXhlciA9IE5VTEw7CQ0KKw0KKyAgICByZXR1cm4gMDsNCisNCit9DQorDQoraW50IHNjX2F1ZGlvX3NldF9sb29wYmFja19lbmFibGVfc3RhdGUoaW50IGVuYWJsZSkNCit7DQorICAgIHJldHVybiAwOw0KK30NCisNCitpbnQgc2NfYXVkaW9fZ2V0X2xvb3BiYWNrX2VuYWJsZV9zdGF0ZShpbnQgKnBfZW5hYmxlKQ0KK3sNCisgICAgcmV0dXJuIDA7DQorfQ0KKw0K